diff --git a/.hgtags b/.hgtags index 9911452cff8e339fdf9e79562234de7a32798c28..bff8f1ebeb75ef6e74408e3a31dc2a9d9dc0f2f8 100644 --- a/.hgtags +++ b/.hgtags @@ -130,3 +130,5 @@ dac76a711da5f1489a01c1fa62ec97d99c25736d 2.6.6-release 0c4d0c24278074f219e5a32e72b449e78301d11b DRTVWR-61_2.7.1-beta1 0c4d0c24278074f219e5a32e72b449e78301d11b 2.7.1-beta1 9f79a6ed8fdcd2f3dac33ea6b3236eeb278dccfe 2.7.2-start +6a3e7e403bd19e45fdfc2fcc716867af3ab80861 2.7.3-start +6af10678de4736222b2c3f7e010e984fb5b327de 2.7.4-start diff --git a/BuildParams b/BuildParams index a064faf870005a9ed4921b279d8ad417c5eefdda..f34b262913ef32bae9cca22f817cad3f2b24c973 100644 --- a/BuildParams +++ b/BuildParams @@ -102,6 +102,16 @@ mesh-development.build_debug_release_separately = true mesh-development.build_CYGWIN_Debug = false mesh-development.build_viewer_update_version_manager = false +# ======================================== +# mesh-asset-deprecation +# ======================================== +mesh-asset-deprecation.viewer_channel = "Project Viewer - Mesh Asset Deprecation" +mesh-asset-deprecation.login_channel = "Project Viewer - Mesh Asset Deprecation" +mesh-asset-deprecation.viewer_grid = aditi +mesh-asset-deprecation.build_debug_release_separately = true +mesh-asset-deprecation.build_CYGWIN_Debug = false +mesh-asset-deprecation.build_viewer_update_version_manager = false + # ======================================== # viewer-mesh # ======================================== @@ -178,9 +188,10 @@ oz_viewer-devreview.build_debug_release_separately = true oz_project-1.build_debug_release_separately = true oz_project-2.build_debug_release_separately = true oz-project-3.build_debug_release_separately = true - - oz_viewer-beta-review.build_debug_release_separately = true +oz_viewer-poreview.build_debug_release_separately = true +oz_viewer-poreview.codeticket_add_context = false + # ======================================== # enus # ======================================== diff --git a/autobuild.xml b/autobuild.xml index ec52d6e33156d7670b496f52df4aa0884e064937..63701dae790b44836b7ff56166d2db069affd987 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -18,9 +18,9 @@ <key>archive</key> <map> <key>hash</key> - <string>930bdd987a321eda1838caba8cd6098f</string> + <string>b2fe1c860613a68e74d4384be418ffee</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> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/232684/arch/Darwin/installer/glod-1.0pre4-darwin-20110610.tar.bz2</string> </map> <key>name</key> <string>darwin</string> @@ -30,9 +30,9 @@ <key>archive</key> <map> <key>hash</key> - <string>fb33b6cac2e6b98f93c5efa2af2e5a00</string> + <string>c0c64dae149d0892343e2ff300fd06b9</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> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/232684/arch/Linux/installer/glod-1.0pre4-linux-20110611.tar.bz2</string> </map> <key>name</key> <string>linux</string> @@ -42,9 +42,9 @@ <key>archive</key> <map> <key>hash</key> - <string>388cf0e292f756b4bb37696622f0bbc5</string> + <string>842208365f5b108dac4c7c733b99da9c</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> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/232684/arch/CYGWIN/installer/glod-1.0pre4-windows-20110610.tar.bz2</string> </map> <key>name</key> <string>windows</string> @@ -1290,9 +1290,9 @@ <key>archive</key> <map> <key>hash</key> - <string>c81bacf922bb3b540d92b660364c48ce</string> + <string>9bf7a96c1d2fadb180fda91740c945c6</string> <key>url</key> - <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ndofdev-linux-0.2-20101013.tar.bz2</string> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-libndofdev-linux/rev/233137/arch/Linux/installer/libndofdev-0.3-linux-20110617.tar.bz2</string> </map> <key>name</key> <string>linux</string> @@ -1524,7 +1524,7 @@ <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> + <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> diff --git a/doc/contributions.txt b/doc/contributions.txt index dfbccb5a6c9147218f9650bf8257610f08e7cba6..b744f4db3e1444cfa2be53df3076077e12981d1e 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -76,6 +76,7 @@ Aleric Inglewood VWR-13996 VWR-14426 VWR-24247 + VWR-25654 VWR-24251 VWR-24252 VWR-24254 @@ -209,6 +210,7 @@ Boroondas Gupte STORM-1182 VWR-233 VWR-20583 + VWR-25654 VWR-20891 VWR-23455 VWR-24487 @@ -440,6 +442,10 @@ Jonathan Yap STORM-1095 STORM-1236 STORM-1259 + STORM-787 + STORM-1313 + STORM-899 + STORM-1273 Kage Pixel VWR-11 Ken March @@ -849,6 +855,7 @@ Twisted Laws STORM-844 STORM-643 STORM-954 + STORM-1103 Vadim Bigbear VWR-2681 Vector Hastings diff --git a/indra/llcommon/llaccountingquota.h b/indra/llcommon/llaccountingquota.h index 3401cb57b636d3cef36e3c04e4dbe8bb11c5282a..140333de07535a12d5fbe667ed1833b6cb055dd4 100644 --- a/indra/llcommon/llaccountingquota.h +++ b/indra/llcommon/llaccountingquota.h @@ -29,30 +29,38 @@ 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) + 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 tempRenderCost, F32 tempPhysicsCost, F32 tempNetworkCost, F32 tempSimulationCost, + F32 selectedRenderCost, F32 selectedPhysicsCost, F32 selectedNetworkCost, F32 selectedSimulationCost, + F32 parcelCapacity ) : 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 ) + , mTempRenderCost( tempRenderCost ), mTempPhysicsCost( tempPhysicsCost ) + , mTempNetworkCost( tempNetworkCost ), mTempSimulationCost( tempSimulationCost ) + , mSelectedRenderCost( tempRenderCost ), mSelectedPhysicsCost( tempPhysicsCost ) + , mSelectedNetworkCost( tempNetworkCost ), mSelectedSimulationCost( selectedSimulationCost ) + , mParcelCapacity( parcelCapacity ) { } + ParcelQuota(){} F32 mOwnerRenderCost, mOwnerPhysicsCost, mOwnerNetworkCost, mOwnerSimulationCost; F32 mGroupRenderCost, mGroupPhysicsCost, mGroupNetworkCost, mGroupSimulationCost; F32 mOtherRenderCost, mOtherPhysicsCost, mOtherNetworkCost, mOtherSimulationCost; - F32 mTotalRenderCost, mTotalPhysicsCost, mTotalNetworkCost, mTotalSimulationCost; + F32 mTempRenderCost, mTempPhysicsCost, mTempNetworkCost, mTempSimulationCost; + F32 mSelectedRenderCost, mSelectedPhysicsCost, mSelectedNetworkCost, mSelectedSimulationCost; + F32 mParcelCapacity; }; struct SelectionQuota { - SelectionQuota( S32 localId, F32 renderCost, F32 physicsCost, F32 networkCost, F32 simulationCost ) + SelectionQuota( LLUUID localId, F32 renderCost, F32 physicsCost, F32 networkCost, F32 simulationCost ) : mLocalId( localId) , mRenderCost( renderCost ) , mPhysicsCost( physicsCost ) @@ -63,7 +71,7 @@ struct SelectionQuota SelectionQuota() {} F32 mRenderCost, mPhysicsCost, mNetworkCost, mSimulationCost; - S32 mLocalId; + LLUUID mLocalId; }; #endif diff --git a/indra/llcommon/llsdserialize.cpp b/indra/llcommon/llsdserialize.cpp index 5be5ecc492f6795e91e13660f49f677232e0110e..bf626005143565b67d42fdf45ddec516cc743067 100644 --- a/indra/llcommon/llsdserialize.cpp +++ b/indra/llcommon/llsdserialize.cpp @@ -2036,7 +2036,9 @@ std::string zip_llsd(LLSD& data) { //copy result into output if (strm.avail_out >= CHUNK) { - llerrs << "WTF?" << llendl; + free(output); + llwarns << "Failed to compress LLSD block." << llendl; + return std::string(); } have = CHUNK-strm.avail_out; diff --git a/indra/llcommon/llstat.cpp b/indra/llcommon/llstat.cpp index 8ba97d7730e9ed29856a94d74788ee5255125dc3..b2c495d093ebdbcb3fab98262f91ad0fd4114761 100644 --- a/indra/llcommon/llstat.cpp +++ b/indra/llcommon/llstat.cpp @@ -737,7 +737,7 @@ void LLPerfBlock::addStatsToLLSDandReset( LLSD & stats, } } else - { // WTF? Shouldn't have a NULL pointer in the map. + { // Shouldn't have a NULL pointer in the map. llwarns << "Unexpected NULL dynamic stat at '" << stats_full_path << "'" << llendl; } } diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp index ca2d3f918156a7f59e2905baa1f29c394c3856a1..e8616a9be6bd8f0455bb0b9229448ef6646e8f25 100644 --- a/indra/llcommon/llsys.cpp +++ b/indra/llcommon/llsys.cpp @@ -188,22 +188,30 @@ LLOSInfo::LLOSInfo() : if(osvi.wProductType == VER_NT_WORKSTATION) mOSStringSimple = "Microsoft Windows XP x64 Edition "; else - mOSStringSimple = "Microsoft Windows Server 2003 "; + mOSStringSimple = "Microsoft Windows Server 2003 "; } - else if(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion <= 1) + else if(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion <= 2) { if(osvi.dwMinorVersion == 0) { - mOSStringSimple = "Microsoft Windows Vista "; + if(osvi.wProductType == VER_NT_WORKSTATION) + mOSStringSimple = "Microsoft Windows Vista "; + else + mOSStringSimple = "Windows Server 2008 "; } else if(osvi.dwMinorVersion == 1) { - mOSStringSimple = "Microsoft Windows 7 "; + if(osvi.wProductType == VER_NT_WORKSTATION) + mOSStringSimple = "Microsoft Windows 7 "; + else + mOSStringSimple = "Windows Server 2008 R2 "; } - - if(osvi.wProductType != VER_NT_WORKSTATION) + else if(osvi.dwMinorVersion == 2) { - mOSStringSimple += "Server "; + if(osvi.wProductType == VER_NT_WORKSTATION) + mOSStringSimple = "Microsoft Windows 8 "; + else + mOSStringSimple = "Windows Server 2012 "; } ///get native system info if available.. @@ -308,8 +316,7 @@ LLOSInfo::LLOSInfo() : std::string compatibility_mode; if(got_shell32_version) { - if(osvi.dwMajorVersion != shell32_major - || osvi.dwMinorVersion != shell32_minor) + if(osvi.dwMajorVersion != shell32_major || osvi.dwMinorVersion != shell32_minor) { compatibility_mode = llformat(" compatibility mode. real ver: %d.%d (Build %d)", shell32_major, diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index fa92a3a75b78d18af3a0d828805ed1594a5179a9..92cd9bd46a7916d51c86394ea9c0df3bed517b4e 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 = 3; +const S32 LL_VERSION_PATCH = 5; const S32 LL_VERSION_BUILD = 0; const char * const LL_CHANNEL = "Second Life Developer"; diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index fdfc24f8b7fbe14c676904d914652f4acb03d213..e5ca47da698efca948d96cc28998790c0b6e9185 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -35,12 +35,14 @@ #define OCT_ERRS LL_WARNS("OctreeErrors") -#define LL_OCTREE_PARANOIA_CHECK 0 + +extern U32 gOctreeMaxCapacity; +/*#define LL_OCTREE_PARANOIA_CHECK 0 #if LL_DARWIN #define LL_OCTREE_MAX_CAPACITY 32 #else #define LL_OCTREE_MAX_CAPACITY 128 -#endif +#endif*/ template <class T> class LLOctreeNode; @@ -74,6 +76,7 @@ template <class T> class LLOctreeNode : public LLTreeNode<T> { public: + typedef LLOctreeTraveler<T> oct_traveler; typedef LLTreeTraveler<T> tree_traveler; typedef typename std::set<LLPointer<T> > element_list; @@ -294,8 +297,8 @@ class LLOctreeNode : public LLTreeNode<T> //is it here? if (isInside(data->getPositionGroup())) { - if ((getElementCount() < LL_OCTREE_MAX_CAPACITY && contains(data->getBinRadius()) || - (data->getBinRadius() > getSize()[0] && parent && parent->getElementCount() >= LL_OCTREE_MAX_CAPACITY))) + if ((getElementCount() < gOctreeMaxCapacity && contains(data->getBinRadius()) || + (data->getBinRadius() > getSize()[0] && parent && parent->getElementCount() >= gOctreeMaxCapacity))) { //it belongs here #if LL_OCTREE_PARANOIA_CHECK //if this is a redundant insertion, error out (should never happen) diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index c504215ee5252f9c7ccf315395e4b721ef5b1bbe..8c81f2778495e12a2a6fd3e7e7a329a407c981a1 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -100,7 +100,7 @@ void assert_aligned(void* ptr, uintptr_t alignment) uintptr_t t = (uintptr_t) ptr; if (t%alignment != 0) { - llerrs << "WTF?" << llendl; + llerrs << "Alignment check failed." << llendl; } #endif } @@ -361,7 +361,7 @@ class LLVolumeOctreeRebound : public LLOctreeTravelerDepthFirst<LLVolumeTriangle } else { - llerrs << "WTF? Empty leaf" << llendl; + llerrs << "Empty leaf" << llendl; } for (S32 i = 0; i < branch->getChildCount(); ++i) @@ -416,6 +416,70 @@ LLProfile::Face* LLProfile::addFace(S32 i, S32 count, F32 scaleU, S16 faceID, BO return face; } +//static +S32 LLProfile::getNumNGonPoints(const LLProfileParams& params, S32 sides, F32 offset, F32 bevel, F32 ang_scale, S32 split) +{ // this is basically LLProfile::genNGon stripped down to only the operations that influence the number of points + LLMemType m1(LLMemType::MTYPE_VOLUME); + S32 np = 0; + + // Generate an n-sided "circular" path. + // 0 is (1,0), and we go counter-clockwise along a circular path from there. + F32 t, t_step, t_first, t_fraction; + + F32 begin = params.getBegin(); + F32 end = params.getEnd(); + + t_step = 1.0f / sides; + + t_first = floor(begin * sides) / (F32)sides; + + // pt1 is the first point on the fractional face. + // Starting t and ang values for the first face + t = t_first; + + // Increment to the next point. + // pt2 is the end point on the fractional face + t += t_step; + + t_fraction = (begin - t_first)*sides; + + // Only use if it's not almost exactly on an edge. + if (t_fraction < 0.9999f) + { + np++; + } + + // There's lots of potential here for floating point error to generate unneeded extra points - DJS 04/05/02 + while (t < end) + { + // Iterate through all the integer steps of t. + np++; + + t += t_step; + } + + t_fraction = (end - (t - t_step))*sides; + + // Find the fraction that we need to add to the end point. + t_fraction = (end - (t - t_step))*sides; + if (t_fraction > 0.0001f) + { + np++; + } + + // If we're sliced, the profile is open. + if ((end - begin)*ang_scale < 0.99f) + { + if (params.getHollow() <= 0) + { + // put center point if not hollow. + np++; + } + } + + return np; +} + // What is the bevel parameter used for? - DJS 04/05/02 // Bevel parameter is currently unused but presumedly would support // filleted and chamfered corners @@ -672,6 +736,117 @@ LLProfile::Face* LLProfile::addHole(const LLProfileParams& params, BOOL flat, F3 return face; } +//static +S32 LLProfile::getNumPoints(const LLProfileParams& params, BOOL path_open,F32 detail, S32 split, + BOOL is_sculpted, S32 sculpt_size) +{ // this is basically LLProfile::generate stripped down to only operations that influence the number of points + LLMemType m1(LLMemType::MTYPE_VOLUME); + + if (detail < MIN_LOD) + { + detail = MIN_LOD; + } + + // Generate the face data + F32 hollow = params.getHollow(); + + S32 np = 0; + + switch (params.getCurveType() & LL_PCODE_PROFILE_MASK) + { + case LL_PCODE_PROFILE_SQUARE: + { + np = getNumNGonPoints(params, 4,-0.375, 0, 1, split); + + if (hollow) + { + np *= 2; + } + } + break; + case LL_PCODE_PROFILE_ISOTRI: + case LL_PCODE_PROFILE_RIGHTTRI: + case LL_PCODE_PROFILE_EQUALTRI: + { + np = getNumNGonPoints(params, 3,0, 0, 1, split); + + if (hollow) + { + np *= 2; + } + } + break; + case LL_PCODE_PROFILE_CIRCLE: + { + // If this has a square hollow, we should adjust the + // number of faces a bit so that the geometry lines up. + U8 hole_type=0; + F32 circle_detail = MIN_DETAIL_FACES * detail; + if (hollow) + { + hole_type = params.getCurveType() & LL_PCODE_HOLE_MASK; + if (hole_type == LL_PCODE_HOLE_SQUARE) + { + // Snap to the next multiple of four sides, + // so that corners line up. + circle_detail = llceil(circle_detail / 4.0f) * 4.0f; + } + } + + S32 sides = (S32)circle_detail; + + if (is_sculpted) + sides = sculpt_size; + + np = getNumNGonPoints(params, sides); + + if (hollow) + { + np *= 2; + } + } + break; + case LL_PCODE_PROFILE_CIRCLE_HALF: + { + // If this has a square hollow, we should adjust the + // number of faces a bit so that the geometry lines up. + U8 hole_type=0; + // Number of faces is cut in half because it's only a half-circle. + F32 circle_detail = MIN_DETAIL_FACES * detail * 0.5f; + if (hollow) + { + hole_type = params.getCurveType() & LL_PCODE_HOLE_MASK; + if (hole_type == LL_PCODE_HOLE_SQUARE) + { + // Snap to the next multiple of four sides (div 2), + // so that corners line up. + circle_detail = llceil(circle_detail / 2.0f) * 2.0f; + } + } + np = getNumNGonPoints(params, llfloor(circle_detail), 0.5f, 0.f, 0.5f); + + if (hollow) + { + np *= 2; + } + + // Special case for openness of sphere + if ((params.getEnd() - params.getBegin()) < 1.f) + { + } + else if (!hollow) + { + np++; + } + } + break; + default: + break; + }; + + + return np; +} BOOL LLProfile::generate(const LLProfileParams& params, BOOL path_open,F32 detail, S32 split, @@ -1133,6 +1308,32 @@ LLPath::~LLPath() { } +S32 LLPath::getNumNGonPoints(const LLPathParams& params, S32 sides, F32 startOff, F32 end_scale, F32 twist_scale) +{ //this is basically LLPath::genNGon stripped down to only operations that influence the number of points added + S32 ret = 0; + + F32 step= 1.0f / sides; + F32 t = params.getBegin(); + ret = 1; + + t+=step; + + // Snap to a quantized parameter, so that cut does not + // affect most sample points. + t = ((S32)(t * sides)) / (F32)sides; + + // Run through the non-cut dependent points. + while (t < params.getEnd()) + { + ret++; + t+=step; + } + + ret++; + + return ret; +} + void LLPath::genNGon(const LLPathParams& params, S32 sides, F32 startOff, F32 end_scale, F32 twist_scale) { // Generates a circular path, starting at (1, 0, 0), counterclockwise along the xz plane. @@ -1310,6 +1511,56 @@ const LLVector2 LLPathParams::getEndScale() const return end_scale; } +S32 LLPath::getNumPoints(const LLPathParams& params, F32 detail) +{ // this is basically LLPath::generate stripped down to only the operations that influence the number of points + LLMemType m1(LLMemType::MTYPE_VOLUME); + + if (detail < MIN_LOD) + { + detail = MIN_LOD; + } + + S32 np = 2; // hardcode for line + + // Is this 0xf0 mask really necessary? DK 03/02/05 + + switch (params.getCurveType() & 0xf0) + { + default: + case LL_PCODE_PATH_LINE: + { + // Take the begin/end twist into account for detail. + np = llfloor(fabs(params.getTwistBegin() - params.getTwist()) * 3.5f * (detail-0.5f)) + 2; + } + break; + + case LL_PCODE_PATH_CIRCLE: + { + // Increase the detail as the revolutions and twist increase. + F32 twist_mag = fabs(params.getTwistBegin() - params.getTwist()); + + S32 sides = (S32)llfloor(llfloor((MIN_DETAIL_FACES * detail + twist_mag * 3.5f * (detail-0.5f))) * params.getRevolutions()); + + np = sides; + } + break; + + case LL_PCODE_PATH_CIRCLE2: + { + //genNGon(params, llfloor(MIN_DETAIL_FACES * detail), 4.f, 0.f); + np = getNumNGonPoints(params, llfloor(MIN_DETAIL_FACES * detail)); + } + break; + + case LL_PCODE_PATH_TEST: + + np = 5; + break; + }; + + return np; +} + BOOL LLPath::generate(const LLPathParams& params, F32 detail, S32 split, BOOL is_sculpted, S32 sculpt_size) { @@ -2159,27 +2410,41 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) U32 face_count = mdl.size(); if (face_count == 0) - { - llerrs << "WTF?" << llendl; + { //no faces unpacked, treat as failed decode + llwarns << "found no faces!" << llendl; + return false; } mVolumeFaces.resize(face_count); for (U32 i = 0; i < face_count; ++i) { + LLVolumeFace& face = mVolumeFaces[i]; + + if (mdl[i].has("NoGeometry")) + { //face has no geometry, continue + face.resizeIndices(3); + face.resizeVertices(1); + memset(face.mPositions, 0, sizeof(LLVector4a)); + memset(face.mNormals, 0, sizeof(LLVector4a)); + memset(face.mTexCoords, 0, sizeof(LLVector2)); + memset(face.mIndices, 0, sizeof(U16)*3); + continue; + } + LLSD::Binary pos = mdl[i]["Position"]; LLSD::Binary norm = mdl[i]["Normal"]; LLSD::Binary tc = mdl[i]["TexCoord0"]; LLSD::Binary idx = mdl[i]["TriangleList"]; - LLVolumeFace& face = mVolumeFaces[i]; + //copy out indices face.resizeIndices(idx.size()/2); if (idx.empty() || face.mNumIndices < 3) { //why is there an empty index list? - llerrs <<"WTF?" << llendl; + llwarns <<"Empty face present!" << llendl; continue; } @@ -2377,14 +2642,20 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) LLVector4a& min = face.mExtents[0]; LLVector4a& max = face.mExtents[1]; - min.clear(); - max.clear(); - min = max = face.mPositions[0]; - - for (S32 i = 1; i < face.mNumVertices; ++i) + if (face.mNumVertices < 3) + { //empty face, use a dummy 1cm (at 1m scale) bounding box + min.splat(-0.005f); + max.splat(0.005f); + } + else { - min.setMin(min, face.mPositions[i]); - max.setMax(max, face.mPositions[i]); + min = max = face.mPositions[0]; + + for (S32 i = 1; i < face.mNumVertices; ++i) + { + min.setMin(min, face.mPositions[i]); + max.setMax(max, face.mPositions[i]); + } } } } @@ -2980,7 +3251,11 @@ void LLVolume::sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, // don't test lowest LOD to support legacy content DEV-33670 if (mDetail > SCULPT_MIN_AREA_DETAIL) { - if (sculptGetSurfaceArea() < SCULPT_MIN_AREA) + F32 area = sculptGetSurfaceArea(); + + const F32 SCULPT_MAX_AREA = 32.f; + + if (area < SCULPT_MIN_AREA || area > SCULPT_MAX_AREA) { data_is_empty = TRUE; } @@ -4064,6 +4339,23 @@ S32 *LLVolume::getTriangleIndices(U32 &num_indices) const return index; } +void LLVolume::getLoDTriangleCounts(const LLVolumeParams& params, S32* counts) +{ //attempt to approximate the number of triangles that will result from generating a volume LoD set for the + //supplied LLVolumeParams -- inaccurate, but a close enough approximation for determining streaming cost + F32 detail[] = {1.f, 1.5f, 2.5f, 4.f}; + for (S32 i = 0; i < 4; i++) + { + S32 count = 0; + S32 path_points = LLPath::getNumPoints(params.getPathParams(), detail[i]); + S32 profile_points = LLProfile::getNumPoints(params.getProfileParams(), false, detail[i]); + + count = (profile_points-1)*2*(path_points-1); + count += profile_points*2; + + counts[i] = count; + } +} + S32 LLVolume::getNumTriangleIndices() const { BOOL profile_open = getProfile().isOpen(); @@ -5220,6 +5512,8 @@ LLVolumeFace::LLVolumeFace() : mOctree(NULL) { mExtents = (LLVector4a*) ll_aligned_malloc_16(sizeof(LLVector4a)*3); + mExtents[0].splat(-0.5f); + mExtents[1].splat(0.5f); mCenter = mExtents+2; } @@ -5741,6 +6035,11 @@ void LLVolumeFace::cacheOptimize() LLVCacheLRU cache; + if (mNumVertices < 3) + { //nothing to do + return; + } + //mapping of vertices to triangles and indices std::vector<LLVCacheVertexData> vertex_data; diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 01bfbd858be72fd6badd82b8e0e335f68b682eba..f67f8f644dfa44185df04ee40361e681f3b15e37 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -690,6 +690,9 @@ class LLProfile BOOL isFlat(S32 face) const { return (mFaces[face].mCount == 2); } BOOL isOpen() const { return mOpen; } void setDirty() { mDirty = TRUE; } + + static S32 getNumPoints(const LLProfileParams& params, BOOL path_open, F32 detail = 1.0f, S32 split = 0, + BOOL is_sculpted = FALSE, S32 sculpt_size = 0); BOOL generate(const LLProfileParams& params, BOOL path_open, F32 detail = 1.0f, S32 split = 0, BOOL is_sculpted = FALSE, S32 sculpt_size = 0); BOOL isConcave() const { return mConcave; } @@ -714,6 +717,7 @@ class LLProfile protected: void genNormals(const LLProfileParams& params); + static S32 getNumNGonPoints(const LLProfileParams& params, S32 sides, F32 offset=0.0f, F32 bevel = 0.0f, F32 ang_scale = 1.f, S32 split = 0); void genNGon(const LLProfileParams& params, S32 sides, F32 offset=0.0f, F32 bevel = 0.0f, F32 ang_scale = 1.f, S32 split = 0); Face* addHole(const LLProfileParams& params, BOOL flat, F32 sides, F32 offset, F32 box_hollow, F32 ang_scale, S32 split = 0); @@ -756,6 +760,9 @@ class LLPath virtual ~LLPath(); + static S32 getNumPoints(const LLPathParams& params, F32 detail); + static S32 getNumNGonPoints(const LLPathParams& params, S32 sides, F32 offset=0.0f, F32 end_scale = 1.f, F32 twist_scale = 1.f); + void genNGon(const LLPathParams& params, S32 sides, F32 offset=0.0f, F32 end_scale = 1.f, F32 twist_scale = 1.f); virtual BOOL generate(const LLPathParams& params, F32 detail=1.0f, S32 split = 0, BOOL is_sculpted = FALSE, S32 sculpt_size = 0); @@ -981,6 +988,7 @@ class LLVolume : public LLRefCount // returns number of triangle indeces required for path/profile mesh S32 getNumTriangleIndices() const; + static void getLoDTriangleCounts(const LLVolumeParams& params, S32* counts); S32 getNumTriangles() const; diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp index 5d03615e5333bdef27d8873ea92b6e48c872e0ec..6133f506376224648965b7e404139a74195aa118 100644 --- a/indra/llmessage/message_prehash.cpp +++ b/indra/llmessage/message_prehash.cpp @@ -742,6 +742,7 @@ char const* const _PREHASH_MoneyData = LLMessageStringTable::getInstance()->getS char const* const _PREHASH_ObjectDeselect = LLMessageStringTable::getInstance()->getString("ObjectDeselect"); char const* const _PREHASH_NewAssetID = LLMessageStringTable::getInstance()->getString("NewAssetID"); char const* const _PREHASH_ObjectAdd = LLMessageStringTable::getInstance()->getString("ObjectAdd"); +char const* const _PREHASH_SimulatorFeatures = LLMessageStringTable::getInstance()->getString("SimulatorFeatures"); char const* const _PREHASH_RayEndIsIntersection = LLMessageStringTable::getInstance()->getString("RayEndIsIntersection"); char const* const _PREHASH_CompleteAuction = LLMessageStringTable::getInstance()->getString("CompleteAuction"); char const* const _PREHASH_CircuitCode = LLMessageStringTable::getInstance()->getString("CircuitCode"); diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h index 8dc86601e6815093a99ea0ffb008f134187ebf42..f94ee1ed22bc7dadb42dc537ed63d2a4fb28950c 100644 --- a/indra/llmessage/message_prehash.h +++ b/indra/llmessage/message_prehash.h @@ -742,6 +742,7 @@ extern char const* const _PREHASH_MoneyData; extern char const* const _PREHASH_ObjectDeselect; extern char const* const _PREHASH_NewAssetID; extern char const* const _PREHASH_ObjectAdd; +extern char const* const _PREHASH_SimulatorFeatures; extern char const* const _PREHASH_RayEndIsIntersection; extern char const* const _PREHASH_CompleteAuction; extern char const* const _PREHASH_CircuitCode; diff --git a/indra/llmessage/tests/commtest.h b/indra/llmessage/tests/commtest.h index 0fef596df26a4930dd634dd4230a2f6b61c97d6a..0d149b5258deae37fe033a325f6b161f3112319f 100644 --- a/indra/llmessage/tests/commtest.h +++ b/indra/llmessage/tests/commtest.h @@ -34,6 +34,7 @@ #include "llsd.h" #include "llhost.h" #include "stringize.h" +#include <map> #include <string> #include <stdexcept> #include <boost/lexical_cast.hpp> @@ -43,6 +44,58 @@ struct CommtestError: public std::runtime_error CommtestError(const std::string& what): std::runtime_error(what) {} }; +static bool query_verbose() +{ + const char* cbose = getenv("INTEGRATION_TEST_VERBOSE"); + if (! cbose) + { + cbose = "1"; + } + std::string strbose(cbose); + return (! (strbose == "0" || strbose == "off" || + strbose == "false" || strbose == "quiet")); +} + +bool verbose() +{ + // This should only be initialized once. + static bool vflag = query_verbose(); + return vflag; +} + +static int query_port(const std::string& var) +{ + const char* cport = getenv(var.c_str()); + if (! cport) + { + throw CommtestError(STRINGIZE("missing environment variable" << var)); + } + // This will throw, too, if the value of PORT isn't numeric. + int port(boost::lexical_cast<int>(cport)); + if (verbose()) + { + std::cout << "getport('" << var << "') = " << port << std::endl; + } + return port; +} + +static int getport(const std::string& var) +{ + typedef std::map<std::string, int> portsmap; + static portsmap ports; + // We can do this with a single map lookup with map::insert(). Either it + // returns an existing entry and 'false' (not newly inserted), or it + // inserts the specified value and 'true'. + std::pair<portsmap::iterator, bool> inserted(ports.insert(portsmap::value_type(var, 0))); + if (inserted.second) + { + // We haven't yet seen this var. Remember its value. + inserted.first->second = query_port(var); + } + // Return the (existing or new) iterator's value. + return inserted.first->second; +} + /** * This struct is shared by a couple of standalone comm tests (ADD_COMM_BUILD_TEST). */ @@ -71,13 +124,10 @@ struct commtest_data static int getport(const std::string& var) { - const char* port = getenv(var.c_str()); - if (! port) - { - throw CommtestError("missing $PORT environment variable"); - } - // This will throw, too, if the value of PORT isn't numeric. - return boost::lexical_cast<int>(port); + // We have a couple consumers of commtest_data::getport(). But we've + // since moved it out to the global namespace. So this is just a + // facade. + return ::getport(var); } bool outcome(const LLSD& _result, bool _success) diff --git a/indra/llmessage/tests/test_llsdmessage_peer.py b/indra/llmessage/tests/test_llsdmessage_peer.py index cea503211107d300538153a87b50515fe1e6088b..9886d49ccce49936734c50d89d8ab9b326f359fd 100644 --- a/indra/llmessage/tests/test_llsdmessage_peer.py +++ b/indra/llmessage/tests/test_llsdmessage_peer.py @@ -38,7 +38,7 @@ sys.path.insert(0, os.path.join(mydir, os.pardir, os.pardir, "lib", "python")) from indra.util.fastest_elementtree import parse as xml_parse from indra.base import llsd -from testrunner import freeport, run, debug +from testrunner import freeport, run, debug, VERBOSE class TestHTTPRequestHandler(BaseHTTPRequestHandler): """This subclass of BaseHTTPRequestHandler is to receive and echo @@ -72,10 +72,10 @@ def read_xml(self): ## # assuming that the underlying XML parser reads its input file ## # incrementally. Unfortunately I haven't been able to make it work. ## tree = xml_parse(self.rfile) -## debug("Finished raw parse\n") -## debug("parsed XML tree %s\n" % tree) -## debug("parsed root node %s\n" % tree.getroot()) -## debug("root node tag %s\n" % tree.getroot().tag) +## debug("Finished raw parse") +## debug("parsed XML tree %s", tree) +## debug("parsed root node %s", tree.getroot()) +## debug("root node tag %s", tree.getroot().tag) ## return llsd.to_python(tree.getroot()) def do_GET(self): @@ -88,8 +88,10 @@ def do_POST(self): self.answer(self.read_xml()) def answer(self, data): + debug("%s.answer(%s): self.path = %r", self.__class__.__name__, data, self.path) if "fail" not in self.path: response = llsd.format_xml(data.get("reply", llsd.LLSD("success"))) + debug("success: %s", response) self.send_response(200) self.send_header("Content-type", "application/llsd+xml") self.send_header("Content-Length", str(len(response))) @@ -106,16 +108,21 @@ def answer(self, data): ("fail requested", "Your request specified failure status %s " "without providing a reason" % status))[1]) + debug("fail requested: %s: %r", status, reason) self.send_error(status, reason) - def log_request(self, code, size=None): - # For present purposes, we don't want the request splattered onto - # stderr, as it would upset devs watching the test run - pass + if not VERBOSE: + # When VERBOSE is set, skip both these overrides because they exist to + # suppress output. - def log_error(self, format, *args): - # Suppress error output as well - pass + def log_request(self, code, size=None): + # For present purposes, we don't want the request splattered onto + # stderr, as it would upset devs watching the test run + pass + + def log_error(self, format, *args): + # Suppress error output as well + pass if __name__ == "__main__": # Instantiate an HTTPServer(TestHTTPRequestHandler) on the first free port @@ -130,4 +137,5 @@ def log_error(self, format, *args): # command-line parsing -- and anyway, for C++ integration tests, that's # performed in TUT code rather than our own. os.environ["PORT"] = str(port) + debug("$PORT = %s", port) sys.exit(run(server=Thread(name="httpd", target=httpd.serve_forever), *sys.argv[1:])) diff --git a/indra/llmessage/tests/testrunner.py b/indra/llmessage/tests/testrunner.py index 8ff13e04262f6688d809374f0eb020d25a399e9e..f329ec2a0e660363ff2637ed585d34cd9ceb0927 100644 --- a/indra/llmessage/tests/testrunner.py +++ b/indra/llmessage/tests/testrunner.py @@ -29,14 +29,21 @@ import os import sys +import re import errno import socket -def debug(*args): - sys.stdout.writelines(args) - sys.stdout.flush() -# comment out the line below to enable debug output -debug = lambda *args: None +VERBOSE = os.environ.get("INTEGRATION_TEST_VERBOSE", "1") # default to verbose +# Support usage such as INTEGRATION_TEST_VERBOSE=off -- distressing to user if +# that construct actually turns on verbosity... +VERBOSE = not re.match(r"(0|off|false|quiet)$", VERBOSE, re.IGNORECASE) + +if VERBOSE: + def debug(fmt, *args): + print fmt % args + sys.stdout.flush() +else: + debug = lambda *args: None def freeport(portlist, expr): """ @@ -78,44 +85,53 @@ def freeport(portlist, expr): # pass 'port' to client code # call server.serve_forever() """ - # If portlist is completely empty, let StopIteration propagate: that's an - # error because we can't return meaningful values. We have no 'port', - # therefore no 'expr(port)'. - portiter = iter(portlist) - port = portiter.next() - - while True: - try: - # If this value of port works, return as promised. - return expr(port), port - - except socket.error, err: - # Anything other than 'Address already in use', propagate - if err.args[0] != errno.EADDRINUSE: - raise - - # Here we want the next port from portiter. But on StopIteration, - # we want to raise the original exception rather than - # StopIteration. So save the original exc_info(). - type, value, tb = sys.exc_info() + try: + # If portlist is completely empty, let StopIteration propagate: that's an + # error because we can't return meaningful values. We have no 'port', + # therefore no 'expr(port)'. + portiter = iter(portlist) + port = portiter.next() + + while True: try: + # If this value of port works, return as promised. + value = expr(port) + + except socket.error, err: + # Anything other than 'Address already in use', propagate + if err.args[0] != errno.EADDRINUSE: + raise + + # Here we want the next port from portiter. But on StopIteration, + # we want to raise the original exception rather than + # StopIteration. So save the original exc_info(). + type, value, tb = sys.exc_info() try: - port = portiter.next() - except StopIteration: - raise type, value, tb - finally: - # Clean up local traceback, see docs for sys.exc_info() - del tb - - # Recap of the control flow above: - # If expr(port) doesn't raise, return as promised. - # If expr(port) raises anything but EADDRINUSE, propagate that - # exception. - # If portiter.next() raises StopIteration -- that is, if the port - # value we just passed to expr(port) was the last available -- reraise - # the EADDRINUSE exception. - # If we've actually arrived at this point, portiter.next() delivered a - # new port value. Loop back to pass that to expr(port). + try: + port = portiter.next() + except StopIteration: + raise type, value, tb + finally: + # Clean up local traceback, see docs for sys.exc_info() + del tb + + else: + debug("freeport() returning %s on port %s", value, port) + return value, port + + # Recap of the control flow above: + # If expr(port) doesn't raise, return as promised. + # If expr(port) raises anything but EADDRINUSE, propagate that + # exception. + # If portiter.next() raises StopIteration -- that is, if the port + # value we just passed to expr(port) was the last available -- reraise + # the EADDRINUSE exception. + # If we've actually arrived at this point, portiter.next() delivered a + # new port value. Loop back to pass that to expr(port). + + except Exception, err: + debug("*** freeport() raising %s: %s", err.__class__.__name__, err) + raise def run(*args, **kwds): """All positional arguments collectively form a command line, executed as @@ -144,8 +160,7 @@ def run(*args, **kwds): # - [no p] don't use the PATH because we specifically want to invoke the # executable passed as our first arg, # - [no e] child should inherit this process's environment. - debug("Running %s...\n" % (" ".join(args))) - sys.stdout.flush() + debug("Running %s...", " ".join(args)) rc = os.spawnv(os.P_WAIT, args[0], args) - debug("%s returned %s\n" % (args[0], rc)) + debug("%s returned %s", args[0], rc) return rc diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index 57ac7a143f3f6206e192f264378b580d4cc0aaad..0463d5364bd6af6490e4751bb1995315a75b35dc 100644 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -50,7 +50,7 @@ std::string model_names[] = "low_lod", "medium_lod", "high_lod", - "physics_shape" + "physics_mesh" }; const int MODEL_NAMES_LENGTH = sizeof(model_names) / sizeof(std::string); @@ -84,7 +84,7 @@ void load_face_from_dom_inputs(LLVolumeFace& face, const domInputLocalOffset_Arr domInputLocal_Array& v_inp = vertices->getInput_array(); if (inputs[j]->getOffset() != 0) { - llerrs << "WTF?" << llendl; + llerrs << "Vertex array offset MUST be zero." << llendl; } for (U32 k = 0; k < v_inp.getCount(); ++k) @@ -98,7 +98,7 @@ void load_face_from_dom_inputs(LLVolumeFace& face, const domInputLocalOffset_Arr if (src->getTechnique_common()->getAccessor()->getStride() != 3) { - llerrs << "WTF?" << llendl; + llerrs << "Vertex array stride MUST be three." << llendl; } domListOfFloats& v = src->getFloat_array()->getValue(); @@ -149,9 +149,10 @@ void load_face_from_dom_inputs(LLVolumeFace& face, const domInputLocalOffset_Arr } } -void get_dom_sources(const domInputLocalOffset_Array& inputs, S32& pos_offset, S32& tc_offset, S32& norm_offset, S32 &idx_stride, +bool get_dom_sources(const domInputLocalOffset_Array& inputs, S32& pos_offset, S32& tc_offset, S32& norm_offset, S32 &idx_stride, domSource* &pos_source, domSource* &tc_source, domSource* &norm_source) { + idx_stride = 0; for (U32 j = 0; j < inputs.getCount(); ++j) @@ -163,7 +164,11 @@ void get_dom_sources(const domInputLocalOffset_Array& inputs, S32& pos_offset, S const domURIFragmentType& uri = inputs[j]->getSource(); daeElementRef elem = uri.getElement(); domVertices* vertices = (domVertices*) elem.cast(); - + if ( !vertices ) + { + return false; + } + domInputLocal_Array& v_inp = vertices->getInput_array(); @@ -207,6 +212,8 @@ void get_dom_sources(const domInputLocalOffset_Array& inputs, S32& pos_offset, S } idx_stride += 1; + + return true; } LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& face_list, std::vector<std::string>& materials, domTrianglesRef& tri) @@ -227,8 +234,12 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa S32 idx_stride = 0; - get_dom_sources(inputs, pos_offset, tc_offset, norm_offset, idx_stride, pos_source, tc_source, norm_source); + if ( !get_dom_sources(inputs, pos_offset, tc_offset, norm_offset, idx_stride, pos_source, tc_source, norm_source) || !pos_source ) + { + return LLModel::BAD_ELEMENT; + } + domPRef p = tri->getP(); domListOfUInts& idx = p->getValue(); @@ -367,7 +378,10 @@ LLModel::EModelStatus load_face_from_dom_polylist(std::vector<LLVolumeFace>& fac S32 idx_stride = 0; - get_dom_sources(inputs, pos_offset, tc_offset, norm_offset, idx_stride, pos_source, tc_source, norm_source); + if (!get_dom_sources(inputs, pos_offset, tc_offset, norm_offset, idx_stride, pos_source, tc_source, norm_source)) + { + return LLModel::BAD_ELEMENT; + } LLVolumeFace face; @@ -564,7 +578,10 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector<LLVolumeFace>& fac const domURIFragmentType& uri = inputs[i]->getSource(); daeElementRef elem = uri.getElement(); domVertices* vertices = (domVertices*) elem.cast(); - + if (!vertices) + { + return LLModel::BAD_ELEMENT; + } domInputLocal_Array& v_inp = vertices->getInput_array(); for (U32 k = 0; k < v_inp.getCount(); ++k) @@ -574,6 +591,10 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector<LLVolumeFace>& fac const domURIFragmentType& uri = v_inp[k]->getSource(); daeElementRef elem = uri.getElement(); domSource* src = (domSource*) elem.cast(); + if (!src) + { + return LLModel::BAD_ELEMENT; + } v = &(src->getFloat_array()->getValue()); } } @@ -585,6 +606,10 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector<LLVolumeFace>& fac const domURIFragmentType& uri = inputs[i]->getSource(); daeElementRef elem = uri.getElement(); domSource* src = (domSource*) elem.cast(); + if (!src) + { + return LLModel::BAD_ELEMENT; + } n = &(src->getFloat_array()->getValue()); } else if (strcmp(COMMON_PROFILE_INPUT_TEXCOORD, inputs[i]->getSemantic()) == 0 && inputs[i]->getSet() == 0) @@ -593,6 +618,10 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector<LLVolumeFace>& fac const domURIFragmentType& uri = inputs[i]->getSource(); daeElementRef elem = uri.getElement(); domSource* src = (domSource*) elem.cast(); + if (!src) + { + return LLModel::BAD_ELEMENT; + } t = &(src->getFloat_array()->getValue()); } } @@ -667,11 +696,6 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector<LLVolumeFace>& fac } } - if (cur_idx != vert_idx.size()) - { - llerrs << "WTF?" << llendl; - } - //build vertex array from map std::vector<LLVolumeFace::VertexData> new_verts; new_verts.resize(vert_idx.size()); @@ -717,7 +741,7 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector<LLVolumeFace>& fac //static std::string LLModel::getStatusString(U32 status) { - const static std::string status_strings[(S32)INVALID_STATUS] = {"status_no_error", "status_vertex_number_overflow"}; + const static std::string status_strings[(S32)INVALID_STATUS] = {"status_no_error", "status_vertex_number_overflow","bad_element"}; if(status < INVALID_STATUS) { @@ -755,7 +779,6 @@ void LLModel::addVolumeFacesFromDomMesh(domMesh* mesh) for (U32 i = 0; i < polys.getCount(); ++i) { domPolylistRef& poly = polys.get(i); - mStatus = load_face_from_dom_polylist(mVolumeFaces, mMaterialList, poly); if(mStatus != NO_ERRORS) @@ -765,12 +788,12 @@ void LLModel::addVolumeFacesFromDomMesh(domMesh* mesh) return ; //abort } } - + domPolygons_Array& polygons = mesh->getPolygons_array(); + for (U32 i = 0; i < polygons.getCount(); ++i) { domPolygonsRef& poly = polygons.get(i); - mStatus = load_face_from_dom_polygons(mVolumeFaces, mMaterialList, poly); if(mStatus != NO_ERRORS) @@ -780,7 +803,7 @@ void LLModel::addVolumeFacesFromDomMesh(domMesh* mesh) return ; //abort } } - + } BOOL LLModel::createVolumeFacesFromDomMesh(domMesh* mesh) @@ -926,11 +949,6 @@ void LLModel::normalizeVolumeFaces() { LLVector4a min, max; - if (mVolumeFaces[0].mNumVertices <= 0) - { - llerrs << "WTF?" << llendl; - } - // For all of the volume faces // in the model, loop over // them and see what the extents @@ -942,11 +960,6 @@ void LLModel::normalizeVolumeFaces() { LLVolumeFace& face = mVolumeFaces[i]; - if (face.mNumVertices <= 0) - { - llerrs << "WTF?" << llendl; - } - update_min_max(min, max, face.mExtents[0]); update_min_max(min, max, face.mExtents[1]); } @@ -1289,11 +1302,6 @@ void LLModel::generateNormals(F32 angle_cutoff) { LLVector4a& n = iter->second[k].getNormal(); - if (!iter->second[k].getPosition().equals3(new_face.mPositions[i])) - { - llerrs << "WTF?" << llendl; - } - F32 cur = n.dot3(ref_norm).getF32(); if (cur > best) @@ -1410,7 +1418,11 @@ LLSD LLModel::writeModel( if (!decomp.mBaseHull.empty() || !decomp.mHull.empty()) { - mdl["decomposition"] = decomp.asLLSD(); + mdl["physics_convex"] = decomp.asLLSD(); + if (!decomp.mHull.empty()) + { //convex decomposition exists, physics mesh will not be used + model[LLModel::LOD_PHYSICS] = NULL; + } } for (U32 idx = 0; idx < MODEL_NAMES_LENGTH; ++idx) @@ -1435,8 +1447,9 @@ LLSD LLModel::writeModel( for (S32 i = 0; i < model[idx]->getNumVolumeFaces(); ++i) { //for each face const LLVolumeFace& face = model[idx]->getVolumeFace(i); - if (!face.mNumVertices) + if (face.mNumVertices < 3) { //don't export an empty face + mdl[model_names[idx]][i]["NoGeometry"] = true; continue; } LLSD::Binary verts(face.mNumVertices*3*2); @@ -1469,7 +1482,6 @@ LLSD LLModel::writeModel( //position + normal for (U32 k = 0; k < 3; ++k) { //for each component - //convert to 16-bit normalized across domain U16 val = (U16) (((pos[k]-min_pos.mV[k])/pos_range.mV[k])*65535); @@ -1513,7 +1525,6 @@ LLSD LLModel::writeModel( //write out face data mdl[model_names[idx]][i]["PositionDomain"]["Min"] = min_pos.getValue(); mdl[model_names[idx]][i]["PositionDomain"]["Max"] = max_pos.getValue(); - mdl[model_names[idx]][i]["TexCoord0Domain"]["Min"] = min_tc.getValue(); mdl[model_names[idx]][i]["TexCoord0Domain"]["Max"] = max_tc.getValue(); @@ -1539,11 +1550,6 @@ LLSD LLModel::writeModel( weight_list& weights = high->getJointInfluences(pos); - if (weights.size() > 4) - { - llerrs << "WTF?" << llendl; - } - S32 count = 0; for (weight_list::iterator iter = weights.begin(); iter != weights.end(); ++iter) { @@ -1607,23 +1613,19 @@ LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite) cur_offset += size; bytes += size; } - else - { - llerrs << "WTF?" << llendl; - } } std::string decomposition; - if (mdl.has("decomposition")) + if (mdl.has("physics_convex")) { //write out convex decomposition - decomposition = zip_llsd(mdl["decomposition"]); + decomposition = zip_llsd(mdl["physics_convex"]); U32 size = decomposition.size(); if (size > 0) { - header["decomposition"]["offset"] = (LLSD::Integer) cur_offset; - header["decomposition"]["size"] = (LLSD::Integer) size; + header["physics_convex"]["offset"] = (LLSD::Integer) cur_offset; + header["physics_convex"]["size"] = (LLSD::Integer) size; cur_offset += size; bytes += size; } @@ -1644,11 +1646,6 @@ LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite) cur_offset += size; bytes += size; } - else - { - header[model_names[i]]["offset"] = -1; - header[model_names[i]]["size"] = 0; - } } if (!nowrite) @@ -1662,7 +1659,7 @@ LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite) if (!decomposition.empty()) { //write decomposition block - ostr.write((const char*) decomposition.data(), header["decomposition"]["size"].asInteger()); + ostr.write((const char*) decomposition.data(), header["physics_convex"]["size"].asInteger()); } for (S32 i = 0; i < MODEL_NAMES_LENGTH; i++) @@ -1685,7 +1682,7 @@ LLModel::weight_list& LLModel::getJointInfluences(const LLVector3& pos) { if ((iter->first - pos).magVec() > 0.1f) { - llerrs << "WTF?" << llendl; + llerrs << "Couldn't find weight list." << llendl; } return iter->second; @@ -1778,7 +1775,7 @@ void LLModel::updateHullCenters() if (mHullPoints > 0) { mCenterOfHullCenters *= 1.f / mHullPoints; - llassert(mPhysics.asLLSD().has("HullList")); + llassert(mPhysics.hasHullList()); } } @@ -1801,7 +1798,7 @@ bool LLModel::loadModel(std::istream& is) "low_lod", "medium_lod", "high_lod", - "physics_shape", + "physics_mesh", }; const S32 MODEL_LODS = 5; @@ -1900,8 +1897,8 @@ bool LLModel::loadSkinInfo(LLSD& header, std::istream &is) bool LLModel::loadDecomposition(LLSD& header, std::istream& is) { - S32 offset = header["decomposition"]["offset"].asInteger(); - S32 size = header["decomposition"]["size"].asInteger(); + S32 offset = header["physics_convex"]["offset"].asInteger(); + S32 size = header["physics_convex"]["size"].asInteger(); if (offset >= 0 && size > 0) { @@ -2041,7 +2038,7 @@ void LLModel::Decomposition::fromLLSD(LLSD& decomp) { // updated for const-correctness. gcc is picky about this type of thing - Nyx const LLSD::Binary& hulls = decomp["HullList"].asBinary(); - const LLSD::Binary& position = decomp["Position"].asBinary(); + const LLSD::Binary& position = decomp["Positions"].asBinary(); U16* p = (U16*) &position[0]; @@ -2051,11 +2048,19 @@ void LLModel::Decomposition::fromLLSD(LLSD& decomp) LLVector3 max; LLVector3 range; - min.setValue(decomp["Min"]); - max.setValue(decomp["Max"]); + if (decomp.has("Min")) + { + min.setValue(decomp["Min"]); + max.setValue(decomp["Max"]); + } + else + { + min.set(-0.5f, -0.5f, -0.5f); + max.set(0.5f, 0.5f, 0.5f); + } + range = max-min; - for (U32 i = 0; i < hulls.size(); ++i) { U16 count = (hulls[i] == 0) ? 256 : hulls[i]; @@ -2071,6 +2076,7 @@ void LLModel::Decomposition::fromLLSD(LLSD& decomp) //point must be unique //llassert(valid.find(test) == valid.end()); valid.insert(test); + mHull[i].push_back(LLVector3( (F32) p[0]/65535.f*range.mV[0]+min.mV[0], (F32) p[1]/65535.f*range.mV[1]+min.mV[1], @@ -2085,9 +2091,9 @@ void LLModel::Decomposition::fromLLSD(LLSD& decomp) } } - if (decomp.has("Hull")) + if (decomp.has("BoundingVerts")) { - const LLSD::Binary& position = decomp["Hull"].asBinary(); + const LLSD::Binary& position = decomp["BoundingVerts"].asBinary(); U16* p = (U16*) &position[0]; @@ -2123,10 +2129,15 @@ void LLModel::Decomposition::fromLLSD(LLSD& decomp) { //empty base hull mesh to indicate decomposition has been loaded //but contains no base hull - mBaseHullMesh.clear();; + mBaseHullMesh.clear(); } } +bool LLModel::Decomposition::hasHullList() const +{ + return !mHull.empty() ; +} + LLSD LLModel::Decomposition::asLLSD() const { LLSD ret; @@ -2137,11 +2148,9 @@ LLSD LLModel::Decomposition::asLLSD() const } //write decomposition block - // ["decomposition"]["HullList"] -- list of 8 bit integers, each entry represents a hull with specified number of points - // ["decomposition"]["PositionDomain"]["Min"/"Max"] - // ["decomposition"]["Position"] -- list of 16-bit integers to be decoded to given domain, encoded 3D points - // ["decomposition"]["Hull"] -- list of 16-bit integers to be decoded to given domain, encoded 3D points representing a single hull approximation of given shape - + // ["physics_convex"]["HullList"] -- list of 8 bit integers, each entry represents a hull with specified number of points + // ["physics_convex"]["Position"] -- list of 16-bit integers to be decoded to given domain, encoded 3D points + // ["physics_convex"]["BoundingVerts"] -- list of 16-bit integers to be decoded to given domain, encoded 3D points representing a single hull approximation of given shape //get minimum and maximum LLVector3 min; @@ -2190,6 +2199,8 @@ LLSD LLModel::Decomposition::asLLSD() const { LLSD::Binary p(total*3*2); + LLVector3 min(-0.5f, -0.5f, -0.5f); + LLVector3 max(0.5f, 0.5f, 0.5f); LLVector3 range = max-min; U32 vert_idx = 0; @@ -2205,17 +2216,24 @@ LLSD LLModel::Decomposition::asLLSD() const U64 test = 0; for (U32 k = 0; k < 3; k++) { + F32* src = (F32*) (mHull[i][j].mV); + + llassert(src[k] <= 0.501f && src[k] >= -0.501f); + //convert to 16-bit normalized across domain - U16 val = (U16) (((mHull[i][j].mV[k]-min.mV[k])/range.mV[k])*65535); + U16 val = (U16) (((src[k]-min.mV[k])/range.mV[k])*65535); - switch (k) + if(valid.size() < 3) { - case 0: test = test | (U64) val; break; - case 1: test = test | ((U64) val << 16); break; - case 2: test = test | ((U64) val << 32); break; - }; + switch (k) + { + case 0: test = test | (U64) val; break; + case 1: test = test | ((U64) val << 16); break; + case 2: test = test | ((U64) val << 32); break; + }; - valid.insert(test); + valid.insert(test); + } U8* buff = (U8*) &val; //write to binary buffer @@ -2227,17 +2245,21 @@ LLSD LLModel::Decomposition::asLLSD() const } } - //must have at least 4 unique points - llassert(valid.size() > 3); + //must have at least 3 unique points + llassert(valid.size() > 2); } - ret["Position"] = p; + ret["Positions"] = p; } + //llassert(!mBaseHull.empty()); + if (!mBaseHull.empty()) { LLSD::Binary p(mBaseHull.size()*3*2); + LLVector3 min(-0.5f, -0.5f, -0.5f); + LLVector3 max(0.5f, 0.5f, 0.5f); LLVector3 range = max-min; U32 vert_idx = 0; @@ -2245,6 +2267,8 @@ LLSD LLModel::Decomposition::asLLSD() const { for (U32 k = 0; k < 3; k++) { + llassert(mBaseHull[j].mV[k] <= 0.51f && mBaseHull[j].mV[k] >= -0.51f); + //convert to 16-bit normalized across domain U16 val = (U16) (((mBaseHull[j].mV[k]-min.mV[k])/range.mV[k])*65535); @@ -2255,12 +2279,12 @@ LLSD LLModel::Decomposition::asLLSD() const if (vert_idx > p.size()) { - llerrs << "WTF?" << llendl; + llerrs << "Index out of bounds" << llendl; } } } - ret["Hull"] = p; + ret["BoundingVerts"] = p; } return ret; @@ -2290,10 +2314,5 @@ void LLModel::Decomposition::merge(const LLModel::Decomposition* rhs) { //take physics shape mesh from rhs mPhysicsShapeMesh = rhs->mPhysicsShapeMesh; } - - if (!mHull.empty()) - { //verify - llassert(asLLSD().has("HullList")); - } } diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h index 23f4b5cb42733a0565fc4d15d19f9976266d4595..cd9f76fcb740026fd1239bc73f904ac3a4eeed9b 100644 --- a/indra/llprimitive/llmodel.h +++ b/indra/llprimitive/llmodel.h @@ -73,6 +73,7 @@ class LLModel : public LLVolume { NO_ERRORS = 0, VERTEX_NUMBER_OVERFLOW, //vertex number is >= 65535. + BAD_ELEMENT, INVALID_STATUS } ; @@ -106,6 +107,7 @@ class LLModel : public LLVolume Decomposition(LLSD& data); void fromLLSD(LLSD& data); LLSD asLLSD() const; + bool hasHullList() const; void merge(const Decomposition* rhs); diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index a460912e70d080b98d97416f9ce308d3aebd2f61..a3aed4dd8abba758d7247fcbe436ed77b4f3faad 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -127,6 +127,11 @@ PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB = NULL; PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB = NULL; PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB = NULL; +// GL_ARB_map_buffer_range +PFNGLMAPBUFFERRANGEPROC glMapBufferRange; +PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange; + + // vertex object prototypes PFNGLNEWOBJECTBUFFERATIPROC glNewObjectBufferATI = NULL; PFNGLISOBJECTBUFFERATIPROC glIsObjectBufferATI = NULL; @@ -178,6 +183,12 @@ PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer = NULL; PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample = NULL; PFNGLFRAMEBUFFERTEXTURELAYERPROC glFramebufferTextureLayer = NULL; +//GL_ARB_texture_multisample +PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample; +PFNGLTEXIMAGE3DMULTISAMPLEPROC glTexImage3DMultisample; +PFNGLGETMULTISAMPLEFVPROC glGetMultisamplefv; +PFNGLSAMPLEMASKIPROC glSampleMaski; + // GL_EXT_blend_func_separate PFNGLBLENDFUNCSEPARATEEXTPROC glBlendFuncSeparateEXT = NULL; @@ -321,9 +332,11 @@ LLGLManager::LLGLManager() : mHasMipMapGeneration(FALSE), mHasCompressedTextures(FALSE), mHasFramebufferObject(FALSE), + mMaxSamples(0), mHasBlendFuncSeparate(FALSE), mHasVertexBufferObject(FALSE), + mHasMapBufferRange(FALSE), mHasPBuffer(FALSE), mHasShaderObjects(FALSE), mHasVertexShader(FALSE), @@ -334,6 +347,11 @@ LLGLManager::LLGLManager() : mHasPointParameters(FALSE), mHasDrawBuffers(FALSE), mHasTextureRectangle(FALSE), + mHasTextureMultisample(FALSE), + mMaxSampleMaskWords(0), + mMaxColorTextureSamples(0), + mMaxDepthTextureSamples(0), + mMaxIntegerSamples(0), mHasAnisotropic(FALSE), mHasARBEnvCombine(FALSE), @@ -539,7 +557,20 @@ bool LLGLManager::initGL() { GLint num_tex_image_units; glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS_ARB, &num_tex_image_units); - mNumTextureImageUnits = num_tex_image_units; + mNumTextureImageUnits = llmin(num_tex_image_units, 32); + } + + if (mHasTextureMultisample) + { + glGetIntegerv(GL_MAX_COLOR_TEXTURE_SAMPLES, &mMaxColorTextureSamples); + glGetIntegerv(GL_MAX_DEPTH_TEXTURE_SAMPLES, &mMaxDepthTextureSamples); + glGetIntegerv(GL_MAX_INTEGER_SAMPLES, &mMaxIntegerSamples); + glGetIntegerv(GL_MAX_SAMPLE_MASK_WORDS, &mMaxSampleMaskWords); + } + + if (mHasFramebufferObject) + { + glGetIntegerv(GL_MAX_SAMPLES, &mMaxSamples); } setToDebugGPU(); @@ -648,6 +679,14 @@ std::string LLGLManager::getRawGLString() return gl_string; } +U32 LLGLManager::getNumFBOFSAASamples(U32 samples) +{ + samples = llmin(samples, (U32) mMaxColorTextureSamples); + samples = llmin(samples, (U32) mMaxDepthTextureSamples); + samples = llmin(samples, (U32) 4); + return samples; +} + void LLGLManager::shutdownGL() { if (mInited) @@ -728,6 +767,7 @@ void LLGLManager::initExtensions() mHasOcclusionQuery = ExtensionExists("GL_ARB_occlusion_query", gGLHExts.mSysExts); mHasOcclusionQuery2 = ExtensionExists("GL_ARB_occlusion_query2", gGLHExts.mSysExts); mHasVertexBufferObject = ExtensionExists("GL_ARB_vertex_buffer_object", gGLHExts.mSysExts); + mHasMapBufferRange = ExtensionExists("GL_ARB_map_buffer_range", gGLHExts.mSysExts); mHasDepthClamp = ExtensionExists("GL_ARB_depth_clamp", gGLHExts.mSysExts) || ExtensionExists("GL_NV_depth_clamp", gGLHExts.mSysExts); // mask out FBO support when packed_depth_stencil isn't there 'cause we need it for LLRenderTarget -Brad #ifdef GL_ARB_framebuffer_object @@ -742,6 +782,7 @@ void LLGLManager::initExtensions() mHasDrawBuffers = ExtensionExists("GL_ARB_draw_buffers", gGLHExts.mSysExts); mHasBlendFuncSeparate = ExtensionExists("GL_EXT_blend_func_separate", gGLHExts.mSysExts); mHasTextureRectangle = ExtensionExists("GL_ARB_texture_rectangle", gGLHExts.mSysExts); + mHasTextureMultisample = ExtensionExists("GL_ARB_texture_multisample", gGLHExts.mSysExts); #if !LL_DARWIN mHasPointParameters = !mIsATI && ExtensionExists("GL_ARB_point_parameters", gGLHExts.mSysExts); #endif @@ -921,6 +962,11 @@ void LLGLManager::initExtensions() mHasVertexBufferObject = FALSE; } } + if (mHasMapBufferRange) + { + glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC) GLH_EXT_GET_PROC_ADDRESS("glMapBufferRange"); + glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC) GLH_EXT_GET_PROC_ADDRESS("glFlushMappedBufferRange"); + } if (mHasFramebufferObject) { llinfos << "initExtensions() FramebufferObject-related procs..." << llendl; @@ -953,6 +999,13 @@ void LLGLManager::initExtensions() { glBlendFuncSeparateEXT = (PFNGLBLENDFUNCSEPARATEEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glBlendFuncSeparateEXT"); } + if (mHasTextureMultisample) + { + glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC) GLH_EXT_GET_PROC_ADDRESS("glTexImage2DMultisample"); + glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC) GLH_EXT_GET_PROC_ADDRESS("glTexImage3DMultisample"); + glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC) GLH_EXT_GET_PROC_ADDRESS("glGetMultisamplefv"); + glSampleMaski = (PFNGLSAMPLEMASKIPROC) GLH_EXT_GET_PROC_ADDRESS("glSampleMaski"); + } #if (!LL_LINUX && !LL_SOLARIS) || LL_LINUX_NV_GL_HEADERS // This is expected to be a static symbol on Linux GL implementations, except if we use the nvidia headers - bah glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)GLH_EXT_GET_PROC_ADDRESS("glDrawRangeElements"); @@ -1370,10 +1423,6 @@ void LLGLState::checkTextureChannels(const std::string& msg) } } - GLint maxTextureUnits = 0; - glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &maxTextureUnits); - stop_glerror(); - static const char* label[] = { "GL_TEXTURE_2D", @@ -1384,7 +1433,8 @@ void LLGLState::checkTextureChannels(const std::string& msg) "GL_TEXTURE_GEN_T", "GL_TEXTURE_GEN_Q", "GL_TEXTURE_GEN_R", - "GL_TEXTURE_RECTANGLE_ARB" + "GL_TEXTURE_RECTANGLE_ARB", + "GL_TEXTURE_2D_MULTISAMPLE" }; static GLint value[] = @@ -1397,7 +1447,8 @@ void LLGLState::checkTextureChannels(const std::string& msg) GL_TEXTURE_GEN_T, GL_TEXTURE_GEN_Q, GL_TEXTURE_GEN_R, - GL_TEXTURE_RECTANGLE_ARB + GL_TEXTURE_RECTANGLE_ARB, + GL_TEXTURE_2D_MULTISAMPLE }; GLint stackDepth = 0; @@ -1406,68 +1457,96 @@ void LLGLState::checkTextureChannels(const std::string& msg) glh::matrix4f identity; identity.identity(); - for (GLint i = 1; i < maxTextureUnits; i++) + for (GLint i = 1; i < gGLManager.mNumTextureUnits; i++) { gGL.getTexUnit(i)->activate(); - glClientActiveTextureARB(GL_TEXTURE0_ARB+i); - stop_glerror(); - glGetIntegerv(GL_TEXTURE_STACK_DEPTH, &stackDepth); - stop_glerror(); - if (stackDepth != 1) + if (i < gGLManager.mNumTextureUnits) { - error = TRUE; - LL_WARNS("RenderState") << "Texture matrix stack corrupted." << LL_ENDL; + glClientActiveTextureARB(GL_TEXTURE0_ARB+i); + stop_glerror(); + glGetIntegerv(GL_TEXTURE_STACK_DEPTH, &stackDepth); + stop_glerror(); - if (gDebugSession) + if (stackDepth != 1) { - gFailLog << "Texture matrix stack corrupted." << std::endl; + error = TRUE; + LL_WARNS("RenderState") << "Texture matrix stack corrupted." << LL_ENDL; + + if (gDebugSession) + { + gFailLog << "Texture matrix stack corrupted." << std::endl; + } } - } - glGetFloatv(GL_TEXTURE_MATRIX, (GLfloat*) mat.m); - stop_glerror(); + glGetFloatv(GL_TEXTURE_MATRIX, (GLfloat*) mat.m); + stop_glerror(); - if (mat != identity) - { - error = TRUE; - LL_WARNS("RenderState") << "Texture matrix in channel " << i << " corrupt." << LL_ENDL; - if (gDebugSession) + if (mat != identity) { - gFailLog << "Texture matrix in channel " << i << " corrupt." << std::endl; + error = TRUE; + LL_WARNS("RenderState") << "Texture matrix in channel " << i << " corrupt." << LL_ENDL; + if (gDebugSession) + { + gFailLog << "Texture matrix in channel " << i << " corrupt." << std::endl; + } + } + + for (S32 j = (i == 0 ? 1 : 0); + j < 9; j++) + { + if (j == 8 && !gGLManager.mHasTextureRectangle || + j == 9 && !gGLManager.mHasTextureMultisample) + { + continue; + } + + if (glIsEnabled(value[j])) + { + error = TRUE; + LL_WARNS("RenderState") << "Texture channel " << i << " still has " << label[j] << " enabled." << LL_ENDL; + if (gDebugSession) + { + gFailLog << "Texture channel " << i << " still has " << label[j] << " enabled." << std::endl; + } + } + stop_glerror(); } - } - - for (S32 j = (i == 0 ? 1 : 0); - j < (gGLManager.mHasTextureRectangle ? 9 : 8); j++) - { - if (glIsEnabled(value[j])) + glGetFloatv(GL_TEXTURE_MATRIX, mat.m); + stop_glerror(); + + if (mat != identity) { error = TRUE; - LL_WARNS("RenderState") << "Texture channel " << i << " still has " << label[j] << " enabled." << LL_ENDL; + LL_WARNS("RenderState") << "Texture matrix " << i << " is not identity." << LL_ENDL; if (gDebugSession) { - gFailLog << "Texture channel " << i << " still has " << label[j] << " enabled." << std::endl; + gFailLog << "Texture matrix " << i << " is not identity." << std::endl; } } - stop_glerror(); } - glGetFloatv(GL_TEXTURE_MATRIX, mat.m); - stop_glerror(); - - if (mat != identity) { - error = TRUE; - LL_WARNS("RenderState") << "Texture matrix " << i << " is not identity." << LL_ENDL; - if (gDebugSession) + GLint tex = 0; + stop_glerror(); + glGetIntegerv(GL_TEXTURE_BINDING_2D, &tex); + stop_glerror(); + + if (tex != 0) { - gFailLog << "Texture matrix " << i << " is not identity." << std::endl; + error = TRUE; + LL_WARNS("RenderState") << "Texture channel " << i << " still has texture " << tex << " bound." << llendl; + + if (gDebugSession) + { + gFailLog << "Texture channel " << i << " still has texture " << tex << " bound." << std::endl; + } } } } + stop_glerror(); gGL.getTexUnit(0)->activate(); glClientActiveTextureARB(GL_TEXTURE0_ARB); stop_glerror(); diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h index 1d7ab188fcef1991a22e8e38342cdd20041433d7..d1bee001617b33f0c3447b6571c50cefeff5949b 100644 --- a/indra/llrender/llgl.h +++ b/indra/llrender/llgl.h @@ -83,10 +83,12 @@ class LLGLManager BOOL mHasMipMapGeneration; BOOL mHasCompressedTextures; BOOL mHasFramebufferObject; + S32 mMaxSamples; BOOL mHasBlendFuncSeparate; - + // ARB Extensions BOOL mHasVertexBufferObject; + BOOL mHasMapBufferRange; BOOL mHasPBuffer; BOOL mHasShaderObjects; BOOL mHasVertexShader; @@ -98,6 +100,11 @@ class LLGLManager BOOL mHasDrawBuffers; BOOL mHasDepthClamp; BOOL mHasTextureRectangle; + BOOL mHasTextureMultisample; + S32 mMaxSampleMaskWords; + S32 mMaxColorTextureSamples; + S32 mMaxDepthTextureSamples; + S32 mMaxIntegerSamples; // Other extensions. BOOL mHasAnisotropic; @@ -139,6 +146,7 @@ class LLGLManager void printGLInfoString(); void getGLInfo(LLSD& info); + U32 getNumFBOFSAASamples(U32 desired_samples = 32); // In ALL CAPS std::string mGLVendor; std::string mGLVendorShort; diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h index d8140a124db1d5a02b3cf07518d07031ce2896ff..f35f329f002488b8b8ce61cd2149f462b253be47 100644 --- a/indra/llrender/llglheaders.h +++ b/indra/llrender/llglheaders.h @@ -68,6 +68,10 @@ extern PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB; extern PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB; extern PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB; +// GL_ARB_map_buffer_range +extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange; +extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange; + // GL_ATI_vertex_array_object extern PFNGLNEWOBJECTBUFFERATIPROC glNewObjectBufferATI; extern PFNGLISOBJECTBUFFERATIPROC glIsObjectBufferATI; @@ -306,6 +310,10 @@ extern PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB; extern PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB; extern PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB; +// GL_ARB_map_buffer_range +extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange; +extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange; + // GL_ATI_vertex_array_object extern PFNGLNEWOBJECTBUFFERATIPROC glNewObjectBufferATI; extern PFNGLISOBJECTBUFFERATIPROC glIsObjectBufferATI; @@ -474,6 +482,11 @@ extern PFNGLFRAMEBUFFERTEXTURELAYERPROC glFramebufferTextureLayer; //GL_ARB_draw_buffers extern PFNGLDRAWBUFFERSARBPROC glDrawBuffersARB; +//GL_ARB_texture_multisample +extern PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample; +extern PFNGLTEXIMAGE3DMULTISAMPLEPROC glTexImage3DMultisample; +extern PFNGLGETMULTISAMPLEFVPROC glGetMultisamplefv; +extern PFNGLSAMPLEMASKIPROC glSampleMaski; #elif LL_WINDOWS //---------------------------------------------------------------------------- @@ -506,6 +519,10 @@ extern PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB; extern PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB; extern PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB; +// GL_ARB_map_buffer_range +extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange; +extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange; + // GL_ATI_vertex_array_object extern PFNGLNEWOBJECTBUFFERATIPROC glNewObjectBufferATI; extern PFNGLISOBJECTBUFFERATIPROC glIsObjectBufferATI; @@ -673,6 +690,11 @@ extern PFNGLFRAMEBUFFERTEXTURELAYERPROC glFramebufferTextureLayer; //GL_ARB_draw_buffers extern PFNGLDRAWBUFFERSARBPROC glDrawBuffersARB; +//GL_ARB_texture_multisample +extern PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample; +extern PFNGLTEXIMAGE3DMULTISAMPLEPROC glTexImage3DMultisample; +extern PFNGLGETMULTISAMPLEFVPROC glGetMultisamplefv; +extern PFNGLSAMPLEMASKIPROC glSampleMaski; #elif LL_DARWIN //---------------------------------------------------------------------------- @@ -714,13 +736,55 @@ extern void glGenerateMipmapEXT(GLenum target) AVAILABLE_MAC_OS_X_VERSION_10_4_A #ifndef GL_ARB_framebuffer_object #define glGenerateMipmap glGenerateMipmapEXT +#define GL_MAX_SAMPLES 0x8D57 #endif + // GL_ARB_draw_buffers extern void glDrawBuffersARB(GLsizei n, const GLenum* bufs) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER; #ifdef __cplusplus extern "C" { #endif + +// +// Define map buffer range headers on Mac +// +#ifndef GL_ARB_map_buffer_range +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 +#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 +#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 +#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 +#endif + +// +// Define multisample headers on Mac +// +#ifndef GL_ARB_texture_multisample +#define GL_SAMPLE_POSITION 0x8E50 +#define GL_SAMPLE_MASK 0x8E51 +#define GL_SAMPLE_MASK_VALUE 0x8E52 +#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 +#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 +#define GL_TEXTURE_SAMPLES 0x9106 +#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 +#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 +#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D +#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E +#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F +#define GL_MAX_INTEGER_SAMPLES 0x9110 +#endif + // // Define vertex buffer object headers on Mac // @@ -757,7 +821,7 @@ extern "C" { #define GL_DYNAMIC_READ_ARB 0x88E9 #define GL_DYNAMIC_COPY_ARB 0x88EA #endif - + #ifndef GL_ARB_vertex_buffer_object diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index 257bcd93802883dec2c2ca149a89fb7008ad110a..8e99f62de680ead157709bd7a895724d2b995153 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -48,6 +48,8 @@ using std::pair; using std::make_pair; using std::string; +GLhandleARB LLGLSLShader::sCurBoundShader = 0; + BOOL shouldChange(const LLVector4& v1, const LLVector4& v2) { return v1 != v2; @@ -56,7 +58,7 @@ BOOL shouldChange(const LLVector4& v1, const LLVector4& v2) LLShaderFeatures::LLShaderFeatures() : calculatesLighting(false), isShiny(false), isFullbright(false), hasWaterFog(false), hasTransport(false), hasSkinning(false), hasObjectSkinning(false), hasAtmospherics(false), isSpecular(false), -hasGamma(false), hasLighting(false), calculatesAtmospherics(false) +hasGamma(false), hasLighting(false), calculatesAtmospherics(false), mIndexedTextureChannels(0), disableTextureIndex(false) { } @@ -107,16 +109,11 @@ BOOL LLGLSLShader::createShader(vector<string> * attributes, // Create program mProgramObject = glCreateProgramObjectARB(); - // Attach existing objects - if (!LLShaderMgr::instance()->attachShaderFeatures(this)) - { - return FALSE; - } - + //compile new source vector< pair<string,GLenum> >::iterator fileIter = mShaderFiles.begin(); for ( ; fileIter != mShaderFiles.end(); fileIter++ ) { - GLhandleARB shaderhandle = LLShaderMgr::instance()->loadShaderFile((*fileIter).first, mShaderLevel, (*fileIter).second); + GLhandleARB shaderhandle = LLShaderMgr::instance()->loadShaderFile((*fileIter).first, mShaderLevel, (*fileIter).second, mFeatures.mIndexedTextureChannels); LL_DEBUGS("ShaderLoading") << "SHADER FILE: " << (*fileIter).first << " mShaderLevel=" << mShaderLevel << LL_ENDL; if (shaderhandle > 0) { @@ -128,6 +125,12 @@ BOOL LLGLSLShader::createShader(vector<string> * attributes, } } + // Attach existing objects + if (!LLShaderMgr::instance()->attachShaderFeatures(this)) + { + return FALSE; + } + // Map attributes and uniforms if (success) { @@ -149,6 +152,29 @@ BOOL LLGLSLShader::createShader(vector<string> * attributes, return createShader(attributes,uniforms); } } + else if (mFeatures.mIndexedTextureChannels > 0) + { //override texture channels for indexed texture rendering + bind(); + S32 channel_count = mFeatures.mIndexedTextureChannels; + + for (S32 i = 0; i < channel_count; i++) + { + uniform1i(llformat("tex%d", i), i); + } + + S32 cur_tex = channel_count; //adjust any texture channels that might have been overwritten + for (U32 i = 0; i < mTexture.size(); i++) + { + if (mTexture[i] > -1 && mTexture[i] < channel_count) + { + llassert(cur_tex < gGLManager.mNumTextureImageUnits); + uniform1i(i, cur_tex); + mTexture[i] = cur_tex++; + } + } + unbind(); + } + return success; } @@ -293,7 +319,8 @@ void LLGLSLShader::mapUniform(GLint index, const vector<string> * uniforms) GLint LLGLSLShader::mapUniformTextureChannel(GLint location, GLenum type) { - if (type >= GL_SAMPLER_1D_ARB && type <= GL_SAMPLER_2D_RECT_SHADOW_ARB) + if (type >= GL_SAMPLER_1D_ARB && type <= GL_SAMPLER_2D_RECT_SHADOW_ARB || + type == GL_SAMPLER_2D_MULTISAMPLE) { //this here is a texture glUniform1iARB(location, mActiveTextureChannels); LL_DEBUGS("ShaderLoading") << "Assigned to texture channel " << mActiveTextureChannels << LL_ENDL; @@ -342,7 +369,7 @@ void LLGLSLShader::bind() if (gGLManager.mHasShaderObjects) { glUseProgramObjectARB(mProgramObject); - + sCurBoundShader = mProgramObject; if (mUniformsDirty) { LLShaderMgr::instance()->updateShaderUniforms(this); @@ -365,6 +392,7 @@ void LLGLSLShader::unbind() } } glUseProgramObjectARB(0); + sCurBoundShader = 0; stop_glerror(); } } @@ -372,6 +400,7 @@ void LLGLSLShader::unbind() void LLGLSLShader::bindNoShader(void) { glUseProgramObjectARB(0); + sCurBoundShader = 0; } S32 LLGLSLShader::enableTexture(S32 uniform, LLTexUnit::eTextureType mode) diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h index d46ddbbe183992ab791626a227e8792b67c82912..4922eb6d6725bd0eee38177a2d776231c9e27ed1 100644 --- a/indra/llrender/llglslshader.h +++ b/indra/llrender/llglslshader.h @@ -45,6 +45,8 @@ class LLShaderFeatures bool hasObjectSkinning; bool hasAtmospherics; bool hasGamma; + S32 mIndexedTextureChannels; + bool disableTextureIndex; // char numLights; @@ -64,6 +66,8 @@ class LLGLSLShader LLGLSLShader(); + static GLhandleARB sCurBoundShader; + void unload(); BOOL createShader(std::vector<std::string> * attributes, std::vector<std::string> * uniforms); diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index d408077c683d48f97cd042b8bb366061ebacd432..60a5962234054aa34b64ea9d543759f54113beb6 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -1083,12 +1083,17 @@ void LLImageGL::generateTextures(S32 numTextures, U32 *textures) } // static -void LLImageGL::deleteTextures(S32 numTextures, U32 *textures) +void LLImageGL::deleteTextures(S32 numTextures, U32 *textures, bool immediate) { for (S32 i = 0; i < numTextures; i++) { sDeadTextureList.push_back(textures[i]); } + + if (immediate) + { + LLImageGL::deleteDeadTextures(); + } } // static @@ -1413,11 +1418,13 @@ void LLImageGL::deleteDeadTextures() { GLuint tex = sDeadTextureList.front(); sDeadTextureList.pop_front(); - for (int i = 0; i < gGLManager.mNumTextureUnits; i++) + for (int i = 0; i < gGLManager.mNumTextureImageUnits; i++) { - if (sCurrentBoundTextures[i] == tex) + LLTexUnit* tex_unit = gGL.getTexUnit(i); + + if (tex_unit->getCurrTexture() == tex) { - gGL.getTexUnit(i)->unbind(LLTexUnit::TT_TEXTURE); + tex_unit->unbind(tex_unit->getCurrType()); stop_glerror(); } } diff --git a/indra/llrender/llimagegl.h b/indra/llrender/llimagegl.h index 6c980984c0a5facb3433480f363b3414d10b257f..2cfb15b0d9d4d03c30efa2e8de9f1be2fcafedf4 100644 --- a/indra/llrender/llimagegl.h +++ b/indra/llrender/llimagegl.h @@ -98,7 +98,7 @@ class LLImageGL : public LLRefCount // These 3 functions currently wrap glGenTextures(), glDeleteTextures(), and glTexImage2D() // for tracking purposes and will be deprecated in the future static void generateTextures(S32 numTextures, U32 *textures); - static void deleteTextures(S32 numTextures, U32 *textures); + static void deleteTextures(S32 numTextures, U32 *textures, bool immediate = false); static void setManualImage(U32 target, S32 miplevel, S32 intformat, S32 width, S32 height, U32 pixformat, U32 pixtype, const void *pixels); BOOL createGLTexture() ; diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index c37139ac4c41a32da4ea4aaf364ac7a3bb40edfa..6a3f1865316fc5992809049e348e91b242e60c94 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -30,6 +30,7 @@ #include "llvertexbuffer.h" #include "llcubemap.h" +#include "llglslshader.h" #include "llimagegl.h" #include "llrendertarget.h" #include "lltexture.h" @@ -46,14 +47,15 @@ S32 gGLViewport[4]; U32 LLRender::sUICalls = 0; U32 LLRender::sUIVerts = 0; -static const U32 LL_NUM_TEXTURE_LAYERS = 16; +static const U32 LL_NUM_TEXTURE_LAYERS = 32; static const U32 LL_NUM_LIGHT_UNITS = 8; static GLenum sGLTextureType[] = { GL_TEXTURE_2D, GL_TEXTURE_RECTANGLE_ARB, - GL_TEXTURE_CUBE_MAP_ARB + GL_TEXTURE_CUBE_MAP_ARB, + GL_TEXTURE_2D_MULTISAMPLE }; static GLint sGLAddressMode[] = @@ -124,7 +126,7 @@ void LLTexUnit::refreshState(void) // 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); + bool enableDisable = (mIndex < gGLManager.mNumTextureUnits) && mCurrTexType != LLTexUnit::TT_MULTISAMPLE_TEXTURE; if (mCurrTexType != TT_NONE) { @@ -182,8 +184,8 @@ void LLTexUnit::enable(eTextureType type) mCurrTexType = type; gGL.flush(); - - if (mIndex < gGLManager.mNumTextureUnits) + if (type != LLTexUnit::TT_MULTISAMPLE_TEXTURE && + mIndex < gGLManager.mNumTextureUnits) { glEnable(sGLTextureType[type]); } @@ -199,8 +201,8 @@ void LLTexUnit::disable(void) activate(); unbind(mCurrTexType); gGL.flush(); - - if (mIndex < gGLManager.mNumTextureUnits) + if (mCurrTexType != LLTexUnit::TT_MULTISAMPLE_TEXTURE && + mIndex < gGLManager.mNumTextureUnits) { glDisable(sGLTextureType[mCurrTexType]); } @@ -292,7 +294,7 @@ bool LLTexUnit::bind(LLImageGL* texture, bool for_rendering, bool forceBind) glBindTexture(sGLTextureType[texture->getTarget()], mCurrTexture); texture->updateBindStats(texture->mTextureMemory); mHasMipMaps = texture->mHasMipMaps; - if (texture->mTexOptionsDirty) + if (mIndex == 0 && texture->mTexOptionsDirty) { texture->mTexOptionsDirty = false; setTextureAddressMode(texture->mAddressMode); @@ -402,6 +404,7 @@ void LLTexUnit::unbind(eTextureType type) activate(); mCurrTexture = 0; glBindTexture(sGLTextureType[type], 0); + stop_glerror(); } } @@ -423,7 +426,7 @@ void LLTexUnit::setTextureAddressMode(eTextureAddressMode mode) void LLTexUnit::setTextureFilteringOption(LLTexUnit::eTextureFilterOptions option) { - if (mIndex < 0 || mCurrTexture == 0) return; + if (mIndex < 0 || mCurrTexture == 0 || mCurrTexType == LLTexUnit::TT_MULTISAMPLE_TEXTURE) return; gGL.flush(); diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h index 7ba14f7b405376f77060bfb331ca18b0bb31b27a..41e7b35341d17f27b77ccd761d44bca95463e399 100644 --- a/indra/llrender/llrender.h +++ b/indra/llrender/llrender.h @@ -57,6 +57,7 @@ class LLTexUnit TT_TEXTURE = 0, // Standard 2D Texture TT_RECT_TEXTURE, // Non power of 2 texture TT_CUBE_MAP, // 6-sided cube map texture + TT_MULTISAMPLE_TEXTURE, // see GL_ARB_texture_multisample TT_NONE // No texture type is currently enabled } eTextureType; diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index da1e94df64e5e0546a1f9fec67b8272bc67a1c5f..b6463309e111f81db4805915fe472577ec435f20 100644 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -63,8 +63,7 @@ LLRenderTarget::LLRenderTarget() : mUseDepth(false), mRenderDepth(false), mUsage(LLTexUnit::TT_TEXTURE), - mSamples(0), - mSampleBuffer(NULL) + mSamples(0) { } @@ -73,23 +72,32 @@ LLRenderTarget::~LLRenderTarget() release(); } - -void LLRenderTarget::setSampleBuffer(LLMultisampleBuffer* buffer) -{ - mSampleBuffer = buffer; -} - -void LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage, bool use_fbo) +void LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage, bool use_fbo, S32 samples) { stop_glerror(); + + release(); + mResX = resx; mResY = resy; mStencil = stencil; mUsage = usage; mUseDepth = depth; + mSamples = samples; - release(); + mSamples = gGLManager.getNumFBOFSAASamples(mSamples); + + if (mSamples > 1 && gGLManager.mHasTextureMultisample) + { + mUsage = LLTexUnit::TT_MULTISAMPLE_TEXTURE; + //no support for multisampled stencil targets yet + mStencil = false; + } + else + { + mSamples = 0; + } if ((sUseFBO || use_fbo) && gGLManager.mHasFramebufferObject) { @@ -146,29 +154,51 @@ void LLRenderTarget::addColorAttachment(U32 color_fmt) stop_glerror(); - LLImageGL::setManualImage(LLTexUnit::getInternalType(mUsage), 0, color_fmt, mResX, mResY, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - - stop_glerror(); - if (offset == 0) +#ifdef GL_ARB_texture_multisample + if (mSamples > 1) { - gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR); + glTexImage2DMultisample(LLTexUnit::getInternalType(mUsage), mSamples, color_fmt, mResX, mResY, GL_TRUE); } else - { //don't filter data attachments - gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT); - } - if (mUsage != LLTexUnit::TT_RECT_TEXTURE) +#else + llassert_always(mSamples <= 1); +#endif { - gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_MIRROR); + LLImageGL::setManualImage(LLTexUnit::getInternalType(mUsage), 0, color_fmt, mResX, mResY, GL_RGBA, GL_UNSIGNED_BYTE, NULL); } - else - { - // ATI doesn't support mirrored repeat for rectangular textures. - gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP); + + stop_glerror(); + + if (mSamples == 0) + { + if (offset == 0) + { //use bilinear filtering on single texture render targets that aren't multisampled + gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR); + stop_glerror(); + } + else + { //don't filter data attachments + gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT); + stop_glerror(); + } + + if (mUsage != LLTexUnit::TT_RECT_TEXTURE) + { + gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_MIRROR); + stop_glerror(); + } + else + { + // ATI doesn't support mirrored repeat for rectangular textures. + gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP); + stop_glerror(); + } } + if (mFBO) { + stop_glerror(); glBindFramebuffer(GL_FRAMEBUFFER, mFBO); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0+offset, LLTexUnit::getInternalType(mUsage), tex, 0); @@ -181,6 +211,12 @@ void LLRenderTarget::addColorAttachment(U32 color_fmt) mTex.push_back(tex); + if (gDebugGL) + { //bind and unbind to validate target + bindTarget(); + flush(); + } + } void LLRenderTarget::allocateDepth() @@ -197,9 +233,20 @@ void LLRenderTarget::allocateDepth() { LLImageGL::generateTextures(1, &mDepth); gGL.getTexUnit(0)->bindManual(mUsage, mDepth); - U32 internal_type = LLTexUnit::getInternalType(mUsage); - gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT); - LLImageGL::setManualImage(internal_type, 0, GL_DEPTH_COMPONENT32, mResX, mResY, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL); + if (mSamples == 0) + { + U32 internal_type = LLTexUnit::getInternalType(mUsage); + gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT); + LLImageGL::setManualImage(internal_type, 0, GL_DEPTH_COMPONENT32, mResX, mResY, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL); + } +#ifdef GL_ARB_texture_multisample + else + { + glTexImage2DMultisample(LLTexUnit::getInternalType(mUsage), mSamples, GL_DEPTH_COMPONENT32, mResX, mResY, GL_TRUE); + } +#else + llassert_always(mSamples <= 1); +#endif } } @@ -239,6 +286,9 @@ void LLRenderTarget::shareDepthBuffer(LLRenderTarget& target) glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, LLTexUnit::getInternalType(mUsage), mDepth, 0); stop_glerror(); } + + check_framebuffer_status(); + glBindFramebuffer(GL_FRAMEBUFFER, 0); target.mUseDepth = true; @@ -256,7 +306,7 @@ void LLRenderTarget::release() } else { - LLImageGL::deleteTextures(1, &mDepth); + LLImageGL::deleteTextures(1, &mDepth, true); stop_glerror(); } mDepth = 0; @@ -285,11 +335,12 @@ void LLRenderTarget::release() if (mTex.size() > 0) { - LLImageGL::deleteTextures(mTex.size(), &mTex[0]); + LLImageGL::deleteTextures(mTex.size(), &mTex[0], true); mTex.clear(); } + + mResX = mResY = 0; - mSampleBuffer = NULL; sBoundTarget = NULL; } @@ -298,34 +349,27 @@ void LLRenderTarget::bindTarget() if (mFBO) { stop_glerror(); - if (mSampleBuffer) - { - mSampleBuffer->bindTarget(this); - stop_glerror(); + + glBindFramebuffer(GL_FRAMEBUFFER, mFBO); + stop_glerror(); + if (gGLManager.mHasDrawBuffers) + { //setup multiple render targets + GLenum drawbuffers[] = {GL_COLOR_ATTACHMENT0, + GL_COLOR_ATTACHMENT1, + GL_COLOR_ATTACHMENT2, + GL_COLOR_ATTACHMENT3}; + glDrawBuffersARB(mTex.size(), drawbuffers); } - else - { - glBindFramebuffer(GL_FRAMEBUFFER, mFBO); - stop_glerror(); - if (gGLManager.mHasDrawBuffers) - { //setup multiple render targets - GLenum drawbuffers[] = {GL_COLOR_ATTACHMENT0, - GL_COLOR_ATTACHMENT1, - GL_COLOR_ATTACHMENT2, - GL_COLOR_ATTACHMENT3}; - glDrawBuffersARB(mTex.size(), drawbuffers); - } - if (mTex.empty()) - { //no color buffer to draw to - glDrawBuffer(GL_NONE); - glReadBuffer(GL_NONE); - } + if (mTex.empty()) + { //no color buffer to draw to + glDrawBuffer(GL_NONE); + glReadBuffer(GL_NONE); + } - check_framebuffer_status(); + check_framebuffer_status(); - stop_glerror(); - } + stop_glerror(); } glViewport(0, 0, mResX, mResY); @@ -407,50 +451,8 @@ void LLRenderTarget::flush(bool fetch_depth) else { stop_glerror(); - glBindFramebuffer(GL_FRAMEBUFFER, 0); - stop_glerror(); - - if (mSampleBuffer) - { - LLGLEnable multisample(GL_MULTISAMPLE); - stop_glerror(); - glBindFramebuffer(GL_FRAMEBUFFER, mFBO); - stop_glerror(); - check_framebuffer_status(); - glBindFramebuffer(GL_READ_FRAMEBUFFER, mSampleBuffer->mFBO); - check_framebuffer_status(); - - stop_glerror(); - glBlitFramebuffer(0, 0, mResX, mResY, 0, 0, mResX, mResY, GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT, GL_NEAREST); - stop_glerror(); - - if (mTex.size() > 1) - { - for (U32 i = 1; i < mTex.size(); ++i) - { - glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, - LLTexUnit::getInternalType(mUsage), mTex[i], 0); - stop_glerror(); - glFramebufferRenderbuffer(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, mSampleBuffer->mTex[i]); - stop_glerror(); - glBlitFramebuffer(0, 0, mResX, mResY, 0, 0, mResX, mResY, GL_COLOR_BUFFER_BIT, GL_NEAREST); - stop_glerror(); - } - - for (U32 i = 0; i < mTex.size(); ++i) - { - glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0+i, - LLTexUnit::getInternalType(mUsage), mTex[i], 0); - stop_glerror(); - glFramebufferRenderbuffer(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0+i, GL_RENDERBUFFER, mSampleBuffer->mTex[i]); - stop_glerror(); - } - } - } - - glBindFramebuffer(GL_FRAMEBUFFER, 0); } } @@ -467,37 +469,36 @@ void LLRenderTarget::copyContents(LLRenderTarget& source, S32 srcX0, S32 srcY0, llerrs << "Cannot copy framebuffer contents for non FBO render targets." << llendl; } - if (mSampleBuffer) + + if (mask == GL_DEPTH_BUFFER_BIT && source.mStencil != mStencil) { - mSampleBuffer->copyContents(source, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); + stop_glerror(); + + glBindFramebuffer(GL_FRAMEBUFFER, source.mFBO); + check_framebuffer_status(); + gGL.getTexUnit(0)->bind(this, true); + stop_glerror(); + glCopyTexSubImage2D(LLTexUnit::getInternalType(mUsage), 0, srcX0, srcY0, dstX0, dstY0, dstX1, dstY1); + stop_glerror(); + glBindFramebuffer(GL_FRAMEBUFFER, 0); + stop_glerror(); } else { - if (mask == GL_DEPTH_BUFFER_BIT && source.mStencil != mStencil) - { - stop_glerror(); - - glBindFramebuffer(GL_FRAMEBUFFER, source.mFBO); - gGL.getTexUnit(0)->bind(this, true); - stop_glerror(); - glCopyTexSubImage2D(LLTexUnit::getInternalType(mUsage), 0, srcX0, srcY0, dstX0, dstY0, dstX1, dstY1); - stop_glerror(); - glBindFramebuffer(GL_FRAMEBUFFER, 0); - stop_glerror(); - } - else - { - glBindFramebuffer(GL_READ_FRAMEBUFFER, source.mFBO); - stop_glerror(); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, mFBO); - stop_glerror(); - check_framebuffer_status(); - stop_glerror(); - glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); - stop_glerror(); - glBindFramebuffer(GL_FRAMEBUFFER, 0); - stop_glerror(); - } + glBindFramebuffer(GL_READ_FRAMEBUFFER, source.mFBO); + stop_glerror(); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, mFBO); + stop_glerror(); + check_framebuffer_status(); + stop_glerror(); + glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); + stop_glerror(); + glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); + stop_glerror(); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); + stop_glerror(); + glBindFramebuffer(GL_FRAMEBUFFER, 0); + stop_glerror(); } } @@ -540,179 +541,3 @@ void LLRenderTarget::getViewport(S32* viewport) viewport[3] = mResY; } -//================================================== -// LLMultisampleBuffer implementation -//================================================== -LLMultisampleBuffer::LLMultisampleBuffer() -{ - -} - -LLMultisampleBuffer::~LLMultisampleBuffer() -{ - release(); -} - -void LLMultisampleBuffer::release() -{ - if (mFBO) - { - glDeleteFramebuffers(1, (GLuint *) &mFBO); - mFBO = 0; - } - - if (mTex.size() > 0) - { - glDeleteRenderbuffers(mTex.size(), (GLuint *) &mTex[0]); - mTex.clear(); - } - - if (mDepth) - { - glDeleteRenderbuffers(1, (GLuint *) &mDepth); - mDepth = 0; - } -} - -void LLMultisampleBuffer::bindTarget() -{ - bindTarget(this); -} - -void LLMultisampleBuffer::bindTarget(LLRenderTarget* ref) -{ - if (!ref) - { - ref = this; - } - - glBindFramebuffer(GL_FRAMEBUFFER, mFBO); - if (gGLManager.mHasDrawBuffers) - { //setup multiple render targets - GLenum drawbuffers[] = {GL_COLOR_ATTACHMENT0, - GL_COLOR_ATTACHMENT1, - GL_COLOR_ATTACHMENT2, - GL_COLOR_ATTACHMENT3}; - glDrawBuffersARB(ref->mTex.size(), drawbuffers); - } - - check_framebuffer_status(); - - glViewport(0, 0, mResX, mResY); - - sBoundTarget = this; -} - -void LLMultisampleBuffer::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage, bool use_fbo ) -{ - allocate(resx,resy,color_fmt,depth,stencil,usage,use_fbo,2); -} - -void LLMultisampleBuffer::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage, bool use_fbo, U32 samples ) -{ - stop_glerror(); - mResX = resx; - mResY = resy; - - mUsage = usage; - mUseDepth = depth; - mStencil = stencil; - - release(); - - mSamples = samples; - - if (mSamples <= 1) - { - llerrs << "Cannot create a multisample buffer with less than 2 samples." << llendl; - } - - stop_glerror(); - - if ((sUseFBO || use_fbo) && gGLManager.mHasFramebufferObject) - { - - if (depth) - { - stop_glerror(); - allocateDepth(); - stop_glerror(); - } - - glGenFramebuffers(1, (GLuint *) &mFBO); - - glBindFramebuffer(GL_FRAMEBUFFER, mFBO); - - if (mDepth) - { - glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, mDepth); - if (mStencil) - { - glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, mDepth); - } - } - - stop_glerror(); - glBindFramebuffer(GL_FRAMEBUFFER, 0); - stop_glerror(); - } - - addColorAttachment(color_fmt); -} - -void LLMultisampleBuffer::addColorAttachment(U32 color_fmt) -{ - if (color_fmt == 0) - { - return; - } - - U32 offset = mTex.size(); - if (offset >= 4 || - (offset > 0 && (mFBO == 0 || !gGLManager.mHasDrawBuffers))) - { - llerrs << "Too many color attachments!" << llendl; - } - - U32 tex; - glGenRenderbuffers(1, &tex); - - glBindRenderbuffer(GL_RENDERBUFFER, tex); - glRenderbufferStorageMultisample(GL_RENDERBUFFER, mSamples, color_fmt, mResX, mResY); - stop_glerror(); - - if (mFBO) - { - glBindFramebuffer(GL_FRAMEBUFFER, mFBO); - glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0+offset, GL_RENDERBUFFER, tex); - stop_glerror(); - GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); - switch (status) - { - case GL_FRAMEBUFFER_COMPLETE: - break; - default: - llerrs << "WTF? " << std::hex << status << llendl; - break; - } - - glBindFramebuffer(GL_FRAMEBUFFER, 0); - } - - mTex.push_back(tex); -} - -void LLMultisampleBuffer::allocateDepth() -{ - glGenRenderbuffers(1, (GLuint* ) &mDepth); - glBindRenderbuffer(GL_RENDERBUFFER, mDepth); - if (mStencil) - { - glRenderbufferStorageMultisample(GL_RENDERBUFFER, mSamples, GL_DEPTH24_STENCIL8, mResX, mResY); - } - else - { - glRenderbufferStorageMultisample(GL_RENDERBUFFER, mSamples, GL_DEPTH_COMPONENT16, mResX, mResY); - } -} - diff --git a/indra/llrender/llrendertarget.h b/indra/llrender/llrendertarget.h index 12dd1c8b90f85a734e9a108226a4e85552588798..094b58b562cabcab805cbfc7415c7805714d9940 100644 --- a/indra/llrender/llrendertarget.h +++ b/indra/llrender/llrendertarget.h @@ -71,10 +71,7 @@ class LLRenderTarget //allocate resources for rendering //must be called before use //multiple calls will release previously allocated resources - void allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage = LLTexUnit::TT_TEXTURE, bool use_fbo = FALSE); - - //provide this render target with a multisample resource. - void setSampleBuffer(LLMultisampleBuffer* buffer); + void allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage = LLTexUnit::TT_TEXTURE, bool use_fbo = false, S32 samples = 0); //add color buffer attachment //limit of 4 color attachments per render target @@ -141,7 +138,6 @@ class LLRenderTarget static LLRenderTarget* getCurrentBoundTarget() { return sBoundTarget; } protected: - friend class LLMultisampleBuffer; U32 mResX; U32 mResY; std::vector<U32> mTex; @@ -152,26 +148,8 @@ class LLRenderTarget bool mRenderDepth; LLTexUnit::eTextureType mUsage; U32 mSamples; - LLMultisampleBuffer* mSampleBuffer; - - static LLRenderTarget* sBoundTarget; -}; - -class LLMultisampleBuffer : public LLRenderTarget -{ -public: - LLMultisampleBuffer(); - virtual ~LLMultisampleBuffer(); - - virtual void release(); - - virtual void bindTarget(); - void bindTarget(LLRenderTarget* ref); - virtual void allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage, bool use_fbo); - void allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage, bool use_fbo, U32 samples); - virtual void addColorAttachment(U32 color_fmt); - virtual void allocateDepth(); + static LLRenderTarget* sBoundTarget; }; #endif //!LL_MESA_HEADLESS diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index 98a0a93084e1762281ba02da11ec5daff2490b6e..bdc103b9170526602ae58aca40cd0dca6cb855a5 100644 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -209,17 +209,39 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader) if (features->hasWaterFog) { - if (!shader->attachObject("lighting/lightWaterF.glsl")) + if (features->disableTextureIndex) { - return FALSE; + if (!shader->attachObject("lighting/lightWaterNonIndexedF.glsl")) + { + return FALSE; + } + } + else + { + if (!shader->attachObject("lighting/lightWaterF.glsl")) + { + return FALSE; + } + shader->mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits-1; } } else { - if (!shader->attachObject("lighting/lightF.glsl")) + if (features->disableTextureIndex) { - return FALSE; + if (!shader->attachObject("lighting/lightNonIndexedF.glsl")) + { + return FALSE; + } + } + else + { + if (!shader->attachObject("lighting/lightF.glsl")) + { + return FALSE; + } + shader->mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits-1; } } } @@ -230,32 +252,76 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader) if (features->isShiny && features->hasWaterFog) { - if (!shader->attachObject("lighting/lightFullbrightShinyWaterF.glsl")) + if (features->disableTextureIndex) { - return FALSE; + if (!shader->attachObject("lighting/lightFullbrightShinyWaterNonIndexedF.glsl")) + { + return FALSE; + } + } + else + { + if (!shader->attachObject("lighting/lightFullbrightShinyWaterF.glsl")) + { + return FALSE; + } + shader->mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits-1; } } else if (features->hasWaterFog) { - if (!shader->attachObject("lighting/lightFullbrightWaterF.glsl")) + if (features->disableTextureIndex) { - return FALSE; + if (!shader->attachObject("lighting/lightFullbrightWaterNonIndexedF.glsl")) + { + return FALSE; + } + } + else + { + if (!shader->attachObject("lighting/lightFullbrightWaterF.glsl")) + { + return FALSE; + } + shader->mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits-1; } } else if (features->isShiny) { - if (!shader->attachObject("lighting/lightFullbrightShinyF.glsl")) + if (features->disableTextureIndex) { - return FALSE; + if (!shader->attachObject("lighting/lightFullbrightShinyNonIndexedF.glsl")) + { + return FALSE; + } + } + else + { + if (!shader->attachObject("lighting/lightFullbrightShinyF.glsl")) + { + return FALSE; + } + shader->mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits-1; } } else { - if (!shader->attachObject("lighting/lightFullbrightF.glsl")) + if (features->disableTextureIndex) { - return FALSE; + if (!shader->attachObject("lighting/lightFullbrightNonIndexedF.glsl")) + { + return FALSE; + } + } + else + { + if (!shader->attachObject("lighting/lightFullbrightF.glsl")) + { + return FALSE; + } + shader->mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits-1; } } } @@ -266,17 +332,39 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader) if (features->hasWaterFog) { - if (!shader->attachObject("lighting/lightShinyWaterF.glsl")) + if (features->disableTextureIndex) { - return FALSE; + if (!shader->attachObject("lighting/lightShinyWaterNonIndexedF.glsl")) + { + return FALSE; + } + } + else + { + if (!shader->attachObject("lighting/lightShinyWaterF.glsl")) + { + return FALSE; + } + shader->mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits-1; } } else { - if (!shader->attachObject("lighting/lightShinyF.glsl")) + if (features->disableTextureIndex) { - return FALSE; + if (!shader->attachObject("lighting/lightShinyNonIndexedF.glsl")) + { + return FALSE; + } + } + else + { + if (!shader->attachObject("lighting/lightShinyF.glsl")) + { + return FALSE; + } + shader->mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits-1; } } } @@ -315,12 +403,12 @@ void LLShaderMgr::dumpObjectLog(GLhandleARB ret, BOOL warns) } else { - LL_INFOS("ShaderLoading") << log << LL_ENDL; + LL_DEBUGS("ShaderLoading") << log << LL_ENDL; } } } -GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_level, GLenum type) +GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_level, GLenum type, S32 texture_index_channels) { GLenum error = GL_NO_ERROR; if (gDebugGL) @@ -374,6 +462,106 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade GLcharARB* text[1024]; GLuint count = 0; + if (gGLManager.mGLVersion < 3.f) + { + //set version to 1.20 + text[count++] = strdup("#version 120\n"); + } + else + { //set version to 1.30 + text[count++] = strdup("#version 130\n"); + } + + //copy preprocessor definitions into buffer + for (std::map<std::string,std::string>::iterator iter = mDefinitions.begin(); iter != mDefinitions.end(); ++iter) + { + std::string define = "#define " + iter->first + " " + iter->second + "\n"; + text[count++] = (GLcharARB *) strdup(define.c_str()); + } + + if (texture_index_channels > 0 && type == GL_FRAGMENT_SHADER_ARB) + { + //use specified number of texture channels for indexed texture rendering + + /* prepend shader code that looks like this: + + uniform sampler2D tex0; + uniform sampler2D tex1; + uniform sampler2D tex2; + . + . + . + uniform sampler2D texN; + + varying float vary_texture_index; + + vec4 diffuseLookup(vec2 texcoord) + { + switch (int(vary_texture_index+0.25)) + { + case 0: return texture2D(tex0, texcoord); + case 1: return texture2D(tex1, texcoord); + case 2: return texture2D(tex2, texcoord); + . + . + . + case N: return texture2D(texN, texcoord); + } + + return vec4(0,0,0,0); + } + */ + + //uniform declartion + for (S32 i = 0; i < texture_index_channels; ++i) + { + std::string decl = llformat("uniform sampler2D tex%d;\n", i); + text[count++] = strdup(decl.c_str()); + } + + text[count++] = strdup("varying float vary_texture_index;\n"); + text[count++] = strdup("vec4 diffuseLookup(vec2 texcoord)\n"); + text[count++] = strdup("{\n"); + + + if (gGLManager.mGLVersion >= 3.f) + { + text[count++] = strdup("\tswitch (int(vary_texture_index+0.25))\n"); + text[count++] = strdup("\t{\n"); + + //switch body + for (S32 i = 0; i < texture_index_channels; ++i) + { + std::string case_str = llformat("\t\tcase %d: return texture2D(tex%d, texcoord);\n", i, i); + text[count++] = strdup(case_str.c_str()); + } + + text[count++] = strdup("\t}\n"); + } + else + { + //switches aren't supported, make block that looks like: + /* + int ti = int(vary_texture_index+0.25); + if (ti == 0) return texture2D(tex0, texcoord); + if (ti == 1) return texture2D(tex1, texcoord); + . + . + . + if (ti == N) return texture2D(texN, texcoord); + */ + + text[count++] = strdup("int ti = int(vary_texture_index+0.25);\n"); + for (S32 i = 0; i < texture_index_channels; ++i) + { + std::string if_str = llformat("if (ti == %d) return texture2D(tex%d, texcoord);\n", i, i); + text[count++] = strdup(if_str.c_str()); + } + } + + text[count++] = strdup("\treturn vec4(0,0,0,0);\n"); + text[count++] = strdup("}\n"); + } //copy file into memory while( fgets((char *)buff, 1024, file) != NULL && count < LL_ARRAY_SIZE(buff) ) @@ -457,7 +645,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade if (shader_level > 1) { shader_level--; - return loadShaderFile(filename,shader_level,type); + return loadShaderFile(filename,shader_level,type,texture_index_channels); } LL_WARNS("ShaderLoading") << "Failed to load " << filename << LL_ENDL; } diff --git a/indra/llrender/llshadermgr.h b/indra/llrender/llshadermgr.h index c54c4608d7f043a9822b35272291d294569ffe15..2f3010381127f281d78f3bdf5c2739865a9ba65c 100644 --- a/indra/llrender/llshadermgr.h +++ b/indra/llrender/llshadermgr.h @@ -43,7 +43,7 @@ class LLShaderMgr void dumpObjectLog(GLhandleARB ret, BOOL warns = TRUE); BOOL linkProgramObject(GLhandleARB obj, BOOL suppress_errors = FALSE); BOOL validateProgramObject(GLhandleARB obj); - GLhandleARB loadShaderFile(const std::string& filename, S32 & shader_level, GLenum type); + GLhandleARB loadShaderFile(const std::string& filename, S32 & shader_level, GLenum type, S32 texture_index_channels = -1); // Implemented in the application to actually point to the shader directory. virtual std::string getShaderDirPrefix(void) = 0; // Pure Virtual @@ -60,6 +60,9 @@ class LLShaderMgr std::vector<std::string> mReservedUniforms; + //preprocessor definitions (name/value) + std::map<std::string, std::string> mDefinitions; + protected: // our parameter manager singleton instance diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 8c9171ccf45cedbb24fe1cb3890948f17093f190..4a0b964e616bb06644ed4bbe6b5f011ca2fdb021 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -934,8 +934,26 @@ void LLVertexBuffer::allocateClientIndexBuffer() } } +bool expand_region(LLVertexBuffer::MappedRegion& region, S32 index, S32 count) +{ + S32 end = index+count; + S32 region_end = region.mIndex+region.mCount; + + if (end < region.mIndex || + index > region_end) + { //gap exists, do not merge + return false; + } + + S32 new_end = llmax(end, region_end); + S32 new_index = llmin(index, region.mIndex); + region.mIndex = new_index; + region.mCount = new_end-new_index; + return true; +} + // Map for data access -U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 access) +U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_range) { LLMemType mt2(LLMemType::MTYPE_VERTEX_MAP_BUFFER); if (mFinal) @@ -947,8 +965,45 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 access) llerrs << "LLVertexBuffer::mapVertexBuffer() called on unallocated buffer." << llendl; } - if (!mVertexLocked && useVBOs()) + if (useVBOs()) { + + if (sDisableVBOMapping || gGLManager.mHasMapBufferRange) + { + if (count == -1) + { + count = mNumVerts-index; + } + + bool mapped = false; + //see if range is already mapped + for (U32 i = 0; i < mMappedVertexRegions.size(); ++i) + { + MappedRegion& region = mMappedVertexRegions[i]; + if (region.mType == type) + { + if (expand_region(region, index, count)) + { + mapped = true; + break; + } + } + } + + if (!mapped) + { + //not already mapped, map new region + MappedRegion region(type, !sDisableVBOMapping && map_range ? -1 : index, count); + mMappedVertexRegions.push_back(region); + } + } + + if (mVertexLocked && map_range) + { + llerrs << "Attempted to map a specific range of a buffer that was already mapped." << llendl; + } + + if (!mVertexLocked) { LLMemType mt_v(LLMemType::MTYPE_VERTEX_MAP_BUFFER_VERTICES); setBuffer(0, type); @@ -957,61 +1012,95 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 access) if(sDisableVBOMapping) { + map_range = false; allocateClientVertexBuffer() ; } else { - U8* src = (U8*) glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); + U8* src = NULL; +#ifdef GL_ARB_map_buffer_range + if (gGLManager.mHasMapBufferRange) + { + if (map_range) + { + S32 offset = mOffsets[type] + sTypeSize[type]*index; + S32 length = (sTypeSize[type]*count+0xF) & ~0xF; + src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, offset, length, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT | GL_MAP_INVALIDATE_RANGE_BIT); + } + else + { + src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, 0, mSize, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT); + } + } + else +#else + llassert_always(!gGLManager.mHasMapBufferRange); +#endif + { + map_range = false; + src = (U8*) glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); + } + mMappedData = LL_NEXT_ALIGNED_ADDRESS<U8>(src); mAlignedOffset = mMappedData - src; stop_glerror(); } - } - - - if (!mMappedData) - { - log_glerror(); - - //check the availability of memory - U32 avail_phy_mem, avail_vir_mem; - LLMemoryInfo::getAvailableMemoryKB(avail_phy_mem, avail_vir_mem) ; - llinfos << "Available physical mwmory(KB): " << avail_phy_mem << llendl ; - llinfos << "Available virtual memory(KB): " << avail_vir_mem << llendl; - - if(!sDisableVBOMapping) - { - //-------------------- - //print out more debug info before crash - llinfos << "vertex buffer size: (num verts : num indices) = " << getNumVerts() << " : " << getNumIndices() << llendl ; - GLint size ; - glGetBufferParameterivARB(GL_ARRAY_BUFFER_ARB, GL_BUFFER_SIZE_ARB, &size) ; - llinfos << "GL_ARRAY_BUFFER_ARB size is " << size << llendl ; - //-------------------- + + if (!mMappedData) + { + log_glerror(); + + //check the availability of memory + U32 avail_phy_mem, avail_vir_mem; + LLMemoryInfo::getAvailableMemoryKB(avail_phy_mem, avail_vir_mem) ; + llinfos << "Available physical mwmory(KB): " << avail_phy_mem << llendl ; + llinfos << "Available virtual memory(KB): " << avail_vir_mem << llendl; + + if(!sDisableVBOMapping) + { + //-------------------- + //print out more debug info before crash + llinfos << "vertex buffer size: (num verts : num indices) = " << getNumVerts() << " : " << getNumIndices() << llendl ; + GLint size ; + glGetBufferParameterivARB(GL_ARRAY_BUFFER_ARB, GL_BUFFER_SIZE_ARB, &size) ; + llinfos << "GL_ARRAY_BUFFER_ARB size is " << size << llendl ; + //-------------------- + + GLint buff; + glGetIntegerv(GL_ARRAY_BUFFER_BINDING_ARB, &buff); + if ((GLuint)buff != mGLBuffer) + { + llerrs << "Invalid GL vertex buffer bound: " << buff << llendl; + } - GLint buff; - glGetIntegerv(GL_ARRAY_BUFFER_BINDING_ARB, &buff); - if ((GLuint)buff != mGLBuffer) + + llerrs << "glMapBuffer returned NULL (no vertex data)" << llendl; + } + else { - llerrs << "Invalid GL vertex buffer bound: " << buff << llendl; + llerrs << "memory allocation for vertex data failed." << llendl ; } - - - llerrs << "glMapBuffer returned NULL (no vertex data)" << llendl; - } - else - { - llerrs << "memory allocation for vertex data failed." << llendl ; } + sMappedCount++; } - sMappedCount++; + } + else + { + map_range = false; } - return mMappedData; + if (map_range && !sDisableVBOMapping) + { + return mMappedData; + } + else + { + return mMappedData+mOffsets[type]+sTypeSize[type]*index; + } } -U8* LLVertexBuffer::mapIndexBuffer(S32 access) +U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range) { LLMemType mt2(LLMemType::MTYPE_VERTEX_MAP_BUFFER); if (mFinal) @@ -1023,8 +1112,41 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 access) llerrs << "LLVertexBuffer::mapIndexBuffer() called on unallocated buffer." << llendl; } - if (!mIndexLocked && useVBOs()) + if (useVBOs()) { + if (sDisableVBOMapping || gGLManager.mHasMapBufferRange) + { + if (count == -1) + { + count = mNumIndices-index; + } + + bool mapped = false; + //see if range is already mapped + for (U32 i = 0; i < mMappedIndexRegions.size(); ++i) + { + MappedRegion& region = mMappedIndexRegions[i]; + if (expand_region(region, index, count)) + { + mapped = true; + break; + } + } + + if (!mapped) + { + //not already mapped, map new region + MappedRegion region(TYPE_INDEX, !sDisableVBOMapping && map_range ? -1 : index, count); + mMappedIndexRegions.push_back(region); + } + } + + if (mIndexLocked && map_range) + { + llerrs << "Attempted to map a specific range of a buffer that was already mapped." << llendl; + } + + if (!mIndexLocked) { LLMemType mt_v(LLMemType::MTYPE_VERTEX_MAP_BUFFER_INDICES); @@ -1034,12 +1156,36 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 access) if(sDisableVBOMapping) { + map_range = false; allocateClientIndexBuffer() ; } else { - U8* src = (U8*) glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); - mMappedIndexData = LL_NEXT_ALIGNED_ADDRESS<U8>(src); + U8* src = NULL; +#ifdef GL_ARB_map_buffer_range + if (gGLManager.mHasMapBufferRange) + { + if (map_range) + { + S32 offset = sizeof(U16)*index; + S32 length = sizeof(U16)*count; + src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT | GL_MAP_INVALIDATE_RANGE_BIT); + } + else + { + src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, sizeof(U16)*mNumIndices, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT); + } + } + else +#else + llassert_always(!gGLManager.mHasMapBufferRange); +#endif + { + map_range = false; + src = (U8*) glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); + } + + mMappedIndexData = src; //LL_NEXT_ALIGNED_ADDRESS<U8>(src); mAlignedIndexOffset = mMappedIndexData - src; stop_glerror(); } @@ -1068,31 +1214,81 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 access) sMappedCount++; } + else + { + map_range = false; + } - return mMappedIndexData ; + if (map_range && !sDisableVBOMapping) + { + return mMappedIndexData; + } + else + { + return mMappedIndexData + sizeof(U16)*index; + } } void LLVertexBuffer::unmapBuffer(S32 type) { LLMemType mt2(LLMemType::MTYPE_VERTEX_UNMAP_BUFFER); - if (!useVBOs()) + if (!useVBOs() || type == -2) { return ; //nothing to unmap } bool updated_all = false ; + if (mMappedData && mVertexLocked && type != TYPE_INDEX) { updated_all = (mIndexLocked && type < 0) ; //both vertex and index buffers done updating if(sDisableVBOMapping) { - stop_glerror(); - glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, getSize(), mMappedData); - stop_glerror(); + if (!mMappedVertexRegions.empty()) + { + stop_glerror(); + for (U32 i = 0; i < mMappedVertexRegions.size(); ++i) + { + const MappedRegion& region = mMappedVertexRegions[i]; + S32 offset = region.mIndex >= 0 ? mOffsets[region.mType]+sTypeSize[region.mType]*region.mIndex : 0; + S32 length = sTypeSize[region.mType]*region.mCount; + glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, offset, length, mMappedData+offset); + stop_glerror(); + } + + mMappedVertexRegions.clear(); + } + else + { + stop_glerror(); + glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, getSize(), mMappedData); + stop_glerror(); + } } else { +#ifdef GL_ARB_map_buffer_range + if (gGLManager.mHasMapBufferRange) + { + if (!mMappedVertexRegions.empty()) + { + stop_glerror(); + for (U32 i = 0; i < mMappedVertexRegions.size(); ++i) + { + const MappedRegion& region = mMappedVertexRegions[i]; + S32 offset = region.mIndex >= 0 ? mOffsets[region.mType]+sTypeSize[region.mType]*region.mIndex : 0; + S32 length = sTypeSize[region.mType]*region.mCount; + glFlushMappedBufferRange(GL_ARRAY_BUFFER_ARB, offset, length); + stop_glerror(); + } + + mMappedVertexRegions.clear(); + } + } +#else + llassert_always(!gGLManager.mHasMapBufferRange); +#endif stop_glerror(); glUnmapBufferARB(GL_ARRAY_BUFFER_ARB); stop_glerror(); @@ -1103,17 +1299,53 @@ void LLVertexBuffer::unmapBuffer(S32 type) mVertexLocked = FALSE ; sMappedCount--; } - - if(mMappedIndexData && mIndexLocked && (type < 0 || type == TYPE_INDEX)) + + if (mMappedIndexData && mIndexLocked && (type < 0 || type == TYPE_INDEX)) { if(sDisableVBOMapping) { - stop_glerror(); - glBufferSubDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, getIndicesSize(), mMappedIndexData); - stop_glerror(); + if (!mMappedIndexRegions.empty()) + { + for (U32 i = 0; i < mMappedIndexRegions.size(); ++i) + { + const MappedRegion& region = mMappedIndexRegions[i]; + S32 offset = region.mIndex >= 0 ? sizeof(U16)*region.mIndex : 0; + S32 length = sizeof(U16)*region.mCount; + glBufferSubDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length, mMappedIndexData+offset); + stop_glerror(); + } + + mMappedIndexRegions.clear(); + } + else + { + stop_glerror(); + glBufferSubDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, getIndicesSize(), mMappedIndexData); + stop_glerror(); + } } else { +#ifdef GL_ARB_map_buffer_range + if (gGLManager.mHasMapBufferRange) + { + if (!mMappedIndexRegions.empty()) + { + for (U32 i = 0; i < mMappedIndexRegions.size(); ++i) + { + const MappedRegion& region = mMappedIndexRegions[i]; + S32 offset = region.mIndex >= 0 ? sizeof(U16)*region.mIndex : 0; + S32 length = sizeof(U16)*region.mCount; + glFlushMappedBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length); + stop_glerror(); + } + + mMappedIndexRegions.clear(); + } + } +#else + llassert_always(!gGLManager.mHasMapBufferRange); +#endif stop_glerror(); glUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB); stop_glerror(); @@ -1152,19 +1384,19 @@ template <class T,S32 type> struct VertexBufferStrider typedef LLStrider<T> strider_t; static bool get(LLVertexBuffer& vbo, strider_t& strider, - S32 index) + S32 index, S32 count, bool map_range) { if (type == LLVertexBuffer::TYPE_INDEX) { - S32 stride = sizeof(T); + U8* ptr = vbo.mapIndexBuffer(index, count, map_range); - if (vbo.mapIndexBuffer() == NULL) + if (ptr == NULL) { llwarns << "mapIndexBuffer failed!" << llendl; return FALSE; } - strider = (T*)(vbo.getMappedIndices() + index*stride); + strider = (T*)ptr; strider.setStride(0); return TRUE; } @@ -1172,13 +1404,15 @@ template <class T,S32 type> struct VertexBufferStrider { S32 stride = LLVertexBuffer::sTypeSize[type]; - if (vbo.mapVertexBuffer(type) == NULL) + U8* ptr = vbo.mapVertexBuffer(type, index, count, map_range); + + if (ptr == NULL) { llwarns << "mapVertexBuffer failed!" << llendl; return FALSE; } - strider = (T*)(vbo.getMappedData() + vbo.getOffset(type)+index*stride); + strider = (T*)ptr; strider.setStride(stride); return TRUE; } @@ -1190,55 +1424,48 @@ template <class T,S32 type> struct VertexBufferStrider } }; -bool LLVertexBuffer::getVertexStrider(LLStrider<LLVector3>& strider, S32 index) -{ - return VertexBufferStrider<LLVector3,TYPE_VERTEX>::get(*this, strider, index); -} -bool LLVertexBuffer::getIndexStrider(LLStrider<U16>& strider, S32 index) +bool LLVertexBuffer::getVertexStrider(LLStrider<LLVector3>& strider, S32 index, S32 count, bool map_range) { - return VertexBufferStrider<U16,TYPE_INDEX>::get(*this, strider, index); + return VertexBufferStrider<LLVector3,TYPE_VERTEX>::get(*this, strider, index, count, map_range); } -bool LLVertexBuffer::getTexCoord0Strider(LLStrider<LLVector2>& strider, S32 index) +bool LLVertexBuffer::getIndexStrider(LLStrider<U16>& strider, S32 index, S32 count, bool map_range) { - return VertexBufferStrider<LLVector2,TYPE_TEXCOORD0>::get(*this, strider, index); + return VertexBufferStrider<U16,TYPE_INDEX>::get(*this, strider, index, count, map_range); } -bool LLVertexBuffer::getTexCoord1Strider(LLStrider<LLVector2>& strider, S32 index) +bool LLVertexBuffer::getTexCoord0Strider(LLStrider<LLVector2>& strider, S32 index, S32 count, bool map_range) { - return VertexBufferStrider<LLVector2,TYPE_TEXCOORD1>::get(*this, strider, index); + return VertexBufferStrider<LLVector2,TYPE_TEXCOORD0>::get(*this, strider, index, count, map_range); } -/*bool LLVertexBuffer::getTexCoord2Strider(LLStrider<LLVector2>& strider, S32 index) +bool LLVertexBuffer::getTexCoord1Strider(LLStrider<LLVector2>& strider, S32 index, S32 count, bool map_range) { - return VertexBufferStrider<LLVector2,TYPE_TEXCOORD2>::get(*this, strider, index); + return VertexBufferStrider<LLVector2,TYPE_TEXCOORD1>::get(*this, strider, index, count, map_range); } -bool LLVertexBuffer::getTexCoord3Strider(LLStrider<LLVector2>& strider, S32 index) -{ - return VertexBufferStrider<LLVector2,TYPE_TEXCOORD3>::get(*this, strider, index); -}*/ -bool LLVertexBuffer::getNormalStrider(LLStrider<LLVector3>& strider, S32 index) + +bool LLVertexBuffer::getNormalStrider(LLStrider<LLVector3>& strider, S32 index, S32 count, bool map_range) { - return VertexBufferStrider<LLVector3,TYPE_NORMAL>::get(*this, strider, index); + return VertexBufferStrider<LLVector3,TYPE_NORMAL>::get(*this, strider, index, count, map_range); } -bool LLVertexBuffer::getBinormalStrider(LLStrider<LLVector3>& strider, S32 index) +bool LLVertexBuffer::getBinormalStrider(LLStrider<LLVector3>& strider, S32 index, S32 count, bool map_range) { - return VertexBufferStrider<LLVector3,TYPE_BINORMAL>::get(*this, strider, index); + return VertexBufferStrider<LLVector3,TYPE_BINORMAL>::get(*this, strider, index, count, map_range); } -bool LLVertexBuffer::getColorStrider(LLStrider<LLColor4U>& strider, S32 index) +bool LLVertexBuffer::getColorStrider(LLStrider<LLColor4U>& strider, S32 index, S32 count, bool map_range) { - return VertexBufferStrider<LLColor4U,TYPE_COLOR>::get(*this, strider, index); + return VertexBufferStrider<LLColor4U,TYPE_COLOR>::get(*this, strider, index, count, map_range); } -bool LLVertexBuffer::getWeightStrider(LLStrider<F32>& strider, S32 index) +bool LLVertexBuffer::getWeightStrider(LLStrider<F32>& strider, S32 index, S32 count, bool map_range) { - return VertexBufferStrider<F32,TYPE_WEIGHT>::get(*this, strider, index); + return VertexBufferStrider<F32,TYPE_WEIGHT>::get(*this, strider, index, count, map_range); } -bool LLVertexBuffer::getWeight4Strider(LLStrider<LLVector4>& strider, S32 index) +bool LLVertexBuffer::getWeight4Strider(LLStrider<LLVector4>& strider, S32 index, S32 count, bool map_range) { - return VertexBufferStrider<LLVector4,TYPE_WEIGHT4>::get(*this, strider, index); + return VertexBufferStrider<LLVector4,TYPE_WEIGHT4>::get(*this, strider, index, count, map_range); } -bool LLVertexBuffer::getClothWeightStrider(LLStrider<LLVector4>& strider, S32 index) +bool LLVertexBuffer::getClothWeightStrider(LLStrider<LLVector4>& strider, S32 index, S32 count, bool map_range) { - return VertexBufferStrider<LLVector4,TYPE_CLOTHWEIGHT>::get(*this, strider, index); + return VertexBufferStrider<LLVector4,TYPE_CLOTHWEIGHT>::get(*this, strider, index, count, map_range); } //---------------------------------------------------------------------------- @@ -1497,17 +1724,16 @@ void LLVertexBuffer::setupVertexBuffer(U32 data_mask) const } if (data_mask & MAP_VERTEX) { - glVertexPointer(3,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_VERTEX], (void*)(base + 0)); + if (data_mask & MAP_TEXTURE_INDEX) + { + glVertexPointer(4,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_VERTEX], (void*)(base + 0)); + } + else + { + glVertexPointer(3,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_VERTEX], (void*)(base + 0)); + } } llglassertok(); } -void LLVertexBuffer::markDirty(U32 vert_index, U32 vert_count, U32 indices_index, U32 indices_count) -{ - // TODO: use GL_APPLE_flush_buffer_range here - /*if (useVBOs() && !mFilthy) - { - - }*/ -} diff --git a/indra/llrender/llvertexbuffer.h b/indra/llrender/llvertexbuffer.h index a9f22193f87a4601aa25b94da85ad4fdb7ded85b..aa5df305a66f0eda5bf8b31caa304311f454e4d1 100644 --- a/indra/llrender/llvertexbuffer.h +++ b/indra/llrender/llvertexbuffer.h @@ -77,6 +77,18 @@ class LLVBOPool : public LLGLNamePool class LLVertexBuffer : public LLRefCount { public: + class MappedRegion + { + public: + S32 mType; + S32 mIndex; + S32 mCount; + + MappedRegion(S32 type, S32 index, S32 count) + : mType(type), mIndex(index), mCount(count) + { } + }; + LLVertexBuffer(const LLVertexBuffer& rhs) { *this = rhs; @@ -130,6 +142,9 @@ class LLVertexBuffer : public LLRefCount TYPE_CLOTHWEIGHT, TYPE_MAX, TYPE_INDEX, + + //no actual additional data, but indicates position.w is texture index + TYPE_TEXTURE_INDEX, }; enum { MAP_VERTEX = (1<<TYPE_VERTEX), @@ -144,6 +159,7 @@ class LLVertexBuffer : public LLRefCount MAP_WEIGHT = (1<<TYPE_WEIGHT), MAP_WEIGHT4 = (1<<TYPE_WEIGHT4), MAP_CLOTHWEIGHT = (1<<TYPE_CLOTHWEIGHT), + MAP_TEXTURE_INDEX = (1<<TYPE_TEXTURE_INDEX), }; protected: @@ -173,8 +189,8 @@ class LLVertexBuffer : public LLRefCount LLVertexBuffer(U32 typemask, S32 usage); // map for data access - U8* mapVertexBuffer(S32 type = -1, S32 access = -1); - U8* mapIndexBuffer(S32 access = -1); + U8* mapVertexBuffer(S32 type, S32 index, S32 count, bool map_range); + U8* mapIndexBuffer(S32 index, S32 count, bool map_range); // set for rendering virtual void setBuffer(U32 data_mask, S32 type = -1); // calls setupVertexBuffer() if data_mask is not 0 @@ -189,16 +205,16 @@ class LLVertexBuffer : public LLRefCount // vb->getNormalStrider(norms); // setVertsNorms(verts, norms); // vb->unmapBuffer(); - bool getVertexStrider(LLStrider<LLVector3>& strider, S32 index=0); - bool getIndexStrider(LLStrider<U16>& strider, S32 index=0); - bool getTexCoord0Strider(LLStrider<LLVector2>& strider, S32 index=0); - bool getTexCoord1Strider(LLStrider<LLVector2>& strider, S32 index=0); - bool getNormalStrider(LLStrider<LLVector3>& strider, S32 index=0); - bool getBinormalStrider(LLStrider<LLVector3>& strider, S32 index=0); - bool getColorStrider(LLStrider<LLColor4U>& strider, S32 index=0); - bool getWeightStrider(LLStrider<F32>& strider, S32 index=0); - bool getWeight4Strider(LLStrider<LLVector4>& strider, S32 index=0); - bool getClothWeightStrider(LLStrider<LLVector4>& strider, S32 index=0); + bool getVertexStrider(LLStrider<LLVector3>& strider, S32 index=0, S32 count = -1, bool map_range = false); + bool getIndexStrider(LLStrider<U16>& strider, S32 index=0, S32 count = -1, bool map_range = false); + bool getTexCoord0Strider(LLStrider<LLVector2>& strider, S32 index=0, S32 count = -1, bool map_range = false); + bool getTexCoord1Strider(LLStrider<LLVector2>& strider, S32 index=0, S32 count = -1, bool map_range = false); + bool getNormalStrider(LLStrider<LLVector3>& strider, S32 index=0, S32 count = -1, bool map_range = false); + bool getBinormalStrider(LLStrider<LLVector3>& strider, S32 index=0, S32 count = -1, bool map_range = false); + bool getColorStrider(LLStrider<LLColor4U>& strider, S32 index=0, S32 count = -1, bool map_range = false); + bool getWeightStrider(LLStrider<F32>& strider, S32 index=0, S32 count = -1, bool map_range = false); + bool getWeight4Strider(LLStrider<LLVector4>& strider, S32 index=0, S32 count = -1, bool map_range = false); + bool getClothWeightStrider(LLStrider<LLVector4>& strider, S32 index=0, S32 count = -1, bool map_range = false); BOOL isEmpty() const { return mEmpty; } BOOL isLocked() const { return mVertexLocked || mIndexLocked; } @@ -218,8 +234,6 @@ class LLVertexBuffer : public LLRefCount S32 getOffset(S32 type) const { return mOffsets[type]; } S32 getUsage() const { return mUsage; } - void markDirty(U32 vert_index, U32 vert_count, U32 indices_index, U32 indices_count); - void draw(U32 mode, U32 count, U32 indices_offset) const; void drawArrays(U32 mode, U32 offset, U32 count) const; void drawRange(U32 mode, U32 start, U32 end, U32 count, U32 indices_offset) const; @@ -253,20 +267,8 @@ class LLVertexBuffer : public LLRefCount BOOL mDynamicSize; // if TRUE, buffer has been resized at least once (and should be padded) S32 mOffsets[TYPE_MAX]; - class DirtyRegion - { - public: - U32 mIndex; - U32 mCount; - U32 mIndicesIndex; - U32 mIndicesCount; - - DirtyRegion(U32 vi, U32 vc, U32 ii, U32 ic) - : mIndex(vi), mCount(vc), mIndicesIndex(ii), mIndicesCount(ic) - { } - }; - - std::vector<DirtyRegion> mDirtyRegions; //vector of dirty regions to rebuild + std::vector<MappedRegion> mMappedVertexRegions; + std::vector<MappedRegion> mMappedIndexRegions; public: static S32 sCount; diff --git a/indra/llui/llresmgr.cpp b/indra/llui/llresmgr.cpp index 39385786bc826ee2f7552d8086794dda6767fa62..820e7cb26af36021a92d63c11645700fab644a1c 100644 --- a/indra/llui/llresmgr.cpp +++ b/indra/llui/llresmgr.cpp @@ -337,7 +337,7 @@ LLLocale::LLLocale(const std::string& locale_string) char* new_locale_string = setlocale( LC_ALL, locale_string.c_str()); if ( new_locale_string == NULL) { - llwarns << "Failed to set locale " << locale_string << llendl; + LL_WARNS_ONCE("LLLocale") << "Failed to set locale " << locale_string << LL_ENDL; setlocale(LC_ALL, SYSTEM_LOCALE.c_str()); } //else diff --git a/indra/llui/llspinctrl.cpp b/indra/llui/llspinctrl.cpp index 6b4e9cf923f86c94fc805274144087775dc6e19b..15a7438ec956796567cfcbcfe427c6e8e009d70d 100644 --- a/indra/llui/llspinctrl.cpp +++ b/indra/llui/llspinctrl.cpp @@ -52,6 +52,7 @@ LLSpinCtrl::Params::Params() : label_width("label_width"), decimal_digits("decimal_digits"), allow_text_entry("allow_text_entry", true), + label_wrap("label_wrap", false), text_enabled_color("text_enabled_color"), text_disabled_color("text_disabled_color"), up_button("up_button"), @@ -80,6 +81,7 @@ LLSpinCtrl::LLSpinCtrl(const LLSpinCtrl::Params& p) { LLRect label_rect( 0, centered_top, label_width, centered_bottom ); LLTextBox::Params params; + params.wrap(p.label_wrap); params.name("SpinCtrl Label"); params.rect(label_rect); params.initial_value(p.label()); diff --git a/indra/llui/llspinctrl.h b/indra/llui/llspinctrl.h index 8960971594d84b737bda01d907057584d09eba6e..d197084e38fac9c3c572a012d8577daf6e64e333 100644 --- a/indra/llui/llspinctrl.h +++ b/indra/llui/llspinctrl.h @@ -44,6 +44,7 @@ class LLSpinCtrl Optional<S32> label_width; Optional<U32> decimal_digits; Optional<bool> allow_text_entry; + Optional<bool> label_wrap; Optional<LLUIColor> text_enabled_color; Optional<LLUIColor> text_disabled_color; diff --git a/indra/newview/app_settings/logcontrol.xml b/indra/newview/app_settings/logcontrol.xml index 937c4e4c6a02e8bb764527a8e2ea407c6f3b7631..9f4e89691f1ba3dc5628c63dcbce4a028983d77c 100644 --- a/indra/newview/app_settings/logcontrol.xml +++ b/indra/newview/app_settings/logcontrol.xml @@ -20,6 +20,7 @@ <key>tags</key> <array> <string>AppInit</string> + <string>Capabilities</string> <string>SystemInfo</string> <string>TextureCache</string> <string>AppCache</string> @@ -43,6 +44,7 @@ <array> <!-- sample entry for debugging a specific item --> <!-- <string>Voice</string> --> + <string>Capabilities</string> </array> </map> </array> diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml old mode 100644 new mode 100755 index 871fd7eb975e32597f7b2a7baafce7cf9338b288..604b1f2fc665879081b4a4c1eb75f7fd6af392f8 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3135,6 +3135,17 @@ <key>Value</key> <integer>1</integer> </map> + <key>EnableGestureSounds</key> + <map> + <key>Comment</key> + <string>Play sounds from gestures</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> <key>EnableMouselook</key> <map> <key>Comment</key> @@ -3333,17 +3344,6 @@ <key>Value</key> <integer>1</integer> </map> - <key>FirstLoginThisInstall</key> - <map> - <key>Comment</key> - <string>Specifies that you have not successfully logged in since you installed the latest update</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>1</integer> - </map> <key>FirstName</key> <map> <key>Comment</key> @@ -5666,10 +5666,10 @@ <key>Value</key> <real>0</real> </map> - <key>MeshUseWholeModelUpload</key> + <key>MeshUploadLogXML</key> <map> <key>Comment</key> - <string>Upload model in its entirety instead of mesh-by-mesh (new caps)</string> + <string>Verbose XML logging on mesh upload</string> <key>Persist</key> <integer>1</integer> <key>Type</key> @@ -5677,6 +5677,17 @@ <key>Value</key> <real>0</real> </map> + <key>MeshUploadFakeErrors</key> + <map> + <key>Comment</key> + <string>Force upload errors (for testing)</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <real>0</real> + </map> <key>MigrateCacheDirectory</key> <map> <key>Comment</key> @@ -7179,7 +7190,76 @@ <key>Value</key> <integer>1</integer> </map> - <key>RenderAnisotropic</key> + + <key>OctreeMaxNodeCapacity</key> + <map> + <key>Comment</key> + <string>Maximum number of elements to store in a single octree node</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>U32</string> + <key>Value</key> + <integer>128</integer> + </map> + + <key>OctreeStaticObjectSizeFactor</key> + <map> + <key>Comment</key> + <string>Multiplier on static object size for determining octree node size </string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <integer>4</integer> + </map> + + <key>OctreeAlphaDistanceFactor</key> + <map> + <key>Comment</key> + <string>Multiplier on alpha object distance for determining octree node size </string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Vector3</string> + <key>Value</key> + <array> + <real>0.1</real> + <real>0.0</real> + <real>0.0</real> + </array> + </map> + + <key>OctreeAttachmentSizeFactor</key> + <map> + <key>Comment</key> + <string>Multiplier on attachment size for determining octree node size </string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <integer>4</integer> + </map> + + <key>OctreeDistanceFactor</key> + <map> + <key>Comment</key> + <string>Multiplier on distance for determining octree node size </string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Vector3</string> + <key>Value</key> + <array> + <real>0.01</real> + <real>0.0</real> + <real>0.0</real> + </array> + </map> + + <key>RenderAnisotropic</key> <map> <key>Comment</key> <string>Render textures using anisotropic filtering</string> @@ -7276,7 +7356,7 @@ <key>Type</key> <string>F32</string> <key>Value</key> - <integer>1.0</integer> + <real>1.0</real> </map> <key>RenderAvatarVP</key> <map> @@ -7532,6 +7612,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>RenderMaxTextureIndex</key> + <map> + <key>Comment</key> + <string>Maximum texture index to use for indexed texture rendering.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>U32</string> + <key>Value</key> + <integer>6</integer> + </map> <key>RenderDebugTextureBind</key> <map> <key>Comment</key> @@ -8677,7 +8768,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <integer>8192</integer> + <integer>65536</integer> </map> <key>RenderMaxVBOSize</key> <map> @@ -8945,17 +9036,6 @@ <integer>0</integer> </map> <key>RenderUseTriStrips</key> - <map> - <key>Comment</key> - <string>Use triangle strips for rendering prims.</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>0</integer> - </map> - <key>RenderUseTriStrips</key> <map> <key>Comment</key> <string>Use triangle strips for rendering prims.</string> @@ -9030,7 +9110,7 @@ <key>Type</key> <string>Boolean</string> <key>Value</key> - <integer>1</integer> + <integer>0</integer> </map> <key>RenderUseStreamVBO</key> <map> @@ -9140,7 +9220,7 @@ <key>Type</key> <string>F32</string> <key>Value</key> - <real>3.0</real> + <real>2.0</real> </map> <key>MeshThreadCount</key> <map> @@ -9736,6 +9816,17 @@ <key>Value</key> <integer>1</integer> </map> + <key>NearbyListShowMap</key> + <map> + <key>Comment</key> + <string>Show/hide map above nearby people list</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> <key>NearbyListShowIcons</key> <map> <key>Comment</key> @@ -12483,7 +12574,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <integer>-1</integer> + <integer>20</integer> </map> <key>WaterEditPresets</key> <map> diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl index 3f6b8b33238fc1fd4b228575109fdd4eac825552..b0fa0ddd3ed7b3fc2f5a1a7a81d49b413c924e2d 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void default_lighting(); diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl index 1ad87badfe17dfe8b21a8beecdbbe25a9d911c9d..d9f29ced4fd1a90b66f5b1775bce85ae036c74b5 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + attribute vec4 weight; //1 diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl index a15846f192f66b5356bec88cc4f3a38bf6100eb4..2796222c68d74e577ba584fb93068e6cb1474476 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); mat4 getSkinnedTransform(); diff --git a/indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl b/indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl index 05fe10037227c1826e430b14ec3af7cbb877ee7d..d86ef19a0466e90f9f50dcaac93d50599dfafef6 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void default_lighting(); diff --git a/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl b/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl index 4b8a7604a1b6ffdaa45b6077fc20b14bab0ad861..2eb814bd91e1bb4a8fd603e9085ef8b26a2156c2 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + vec4 calcLightingSpecular(vec3 pos, vec3 norm, vec4 color, inout vec4 specularColor, vec4 baseCol); void calcAtmospherics(vec3 inPositionEye); diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl index ef823c28b1c48693e7e8151fefe8baade88988cf..7613e50dca936c87195d4cc5bc8101737ef70dad 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl @@ -5,7 +5,7 @@ * $License$ */ -#version 120 + attribute vec4 object_weight; diff --git a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl index 27ac59a840f53adf2bb805c9c324f2a5afd097b9..2638351e962adfcb7ade3f413959e97c22dd569f 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; diff --git a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl index f1aa549a478c7798b99ae7088db26840ff07c232..86b189b282cd9997bc3f65f76d5d133d1011ce06 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + mat4 getSkinnedTransform(); diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index 3b12a07a27df958a59de4e0dcc10e488b9bdb9ce..4a0815a163867fe5482b5d412bc15287970e5774 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -5,13 +5,14 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable -uniform sampler2D diffuseMap; uniform sampler2DRect depthMap; +vec4 diffuseLookup(vec2 texcoord); + uniform mat4 shadow_matrix[6]; uniform vec4 shadow_clip; uniform vec2 screen_res; @@ -47,7 +48,7 @@ void main() vec4 pos = vec4(vary_position, 1.0); - vec4 diff= texture2D(diffuseMap, gl_TexCoord[0].xy); + vec4 diff= diffuseLookup(gl_TexCoord[0].xy); vec4 col = vec4(vary_ambient + vary_directional.rgb, gl_Color.a); vec4 color = diff * col; diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..b0d029dbf41b129df3b62f310683c7ddc7465ffc --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl @@ -0,0 +1,67 @@ +/** + * @file alphaF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRect depthMap; +uniform sampler2D diffuseMap; + + +uniform mat4 shadow_matrix[6]; +uniform vec4 shadow_clip; +uniform vec2 screen_res; + +vec3 atmosLighting(vec3 light); +vec3 scaleSoftClip(vec3 light); + +varying vec3 vary_ambient; +varying vec3 vary_directional; +varying vec3 vary_fragcoord; +varying vec3 vary_position; +varying vec3 vary_pointlight_col; + +uniform mat4 inv_proj; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +void main() +{ + vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5; + frag *= screen_res; + + vec4 pos = vec4(vary_position, 1.0); + + vec4 diff= texture2D(diffuseMap,gl_TexCoord[0].xy); + + vec4 col = vec4(vary_ambient + vary_directional.rgb, gl_Color.a); + vec4 color = diff * col; + + color.rgb = atmosLighting(color.rgb); + + color.rgb = scaleSoftClip(color.rgb); + + color.rgb += diff.rgb * vary_pointlight_col.rgb; + + gl_FragColor = color; + //gl_FragColor = vec4(1,0,1,1); + //gl_FragColor = vec4(1,0,1,1)*shadow; + +} + diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl index 65d9209983e74e5ea677ede25935b472b4484cf2..ac3f7189c2f79b0f4f3629e980682f3c22465a67 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl @@ -5,7 +5,7 @@ * $License$ */ -#version 120 + vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); mat4 getObjectSkinnedTransform(); diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl index 2691fc8dedb64b85a8cc3ecac5660e3c842fc23b..44cb78e9147dcd50df06f50799f4d0ef17b284ae 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); void calcAtmospherics(vec3 inPositionEye); @@ -23,6 +23,7 @@ varying vec3 vary_fragcoord; varying vec3 vary_position; varying vec3 vary_light; varying vec3 vary_pointlight_col; +varying float vary_texture_index; uniform float near_clip; uniform float shadow_offset; @@ -61,11 +62,13 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa void main() { //transform vertex - gl_Position = ftransform(); + vec4 vert = vec4(gl_Vertex.xyz, 1.0); + vary_texture_index = gl_Vertex.w; + gl_Position = gl_ModelViewProjectionMatrix * vert; gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; - vec4 pos = (gl_ModelViewMatrix * gl_Vertex); + vec4 pos = (gl_ModelViewMatrix * vert); vec3 norm = normalize(gl_NormalMatrix * gl_Normal); float dp_directional_light = max(0.0, dot(norm, gl_LightSource[0].position.xyz)); @@ -102,7 +105,7 @@ void main() gl_FogFragCoord = pos.z; - pos = gl_ModelViewProjectionMatrix * gl_Vertex; + pos = gl_ModelViewProjectionMatrix * vert; vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip); } diff --git a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl index 164322c3a732a87e16d84edd104876370e095931..870d593311f5a34d66bff7aedd3583f2252eaecc 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl @@ -5,7 +5,7 @@ * $License$ */ -#version 120 + uniform sampler2D diffuseMap; diff --git a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl index 5ae41cb73093d99f0e6c5ba60f3c109729057c6d..c7a4f86727178f55ff1b66bc4e0ef20eac070887 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl @@ -5,7 +5,7 @@ * $License$ */ -#version 120 + mat4 getObjectSkinnedTransform(); diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl index a012cb50304c7283716ca09638d5c3ef6bda7b23..68e4055cf228188145d6519e273d93990e7cc387 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); mat4 getSkinnedTransform(); diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl new file mode 100644 index 0000000000000000000000000000000000000000..7bc78fe407408575b036c1e4bb235c9de19fb654 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl @@ -0,0 +1,21 @@ +/** + * @file avatarEyesV.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +varying vec3 vary_normal; + +void main() +{ + //transform vertex + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + + vary_normal = normalize(gl_NormalMatrix * gl_Normal); + + gl_FrontColor = gl_Color; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl index 9748727147d62107ee9ed3f708852446d785cacc..326861809313b7e2d7fd9c21b5a15b241a5dcffa 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl index 1b7ae0688841b60691e279a18efd5f6d3baa9ec8..78986ab12efd65784a256b0fcf3406388e60e0ea 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl @@ -5,14 +5,17 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; +varying vec4 post_pos; void main() { //gl_FragColor = vec4(1,1,1,gl_Color.a * texture2D(diffuseMap, gl_TexCoord[0].xy).a); gl_FragColor = vec4(1,1,1,1); + + gl_FragDepth = max(post_pos.z/post_pos.w*0.5+0.5, 0.0); } diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl index cf6579a40d4c608193da404644ad33ba1594fa9c..f177fcd8f11b6fc0d9463126c6dd54641c5b277c 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl @@ -5,12 +5,14 @@ * $/LicenseInfo$ */ -#version 120 + mat4 getSkinnedTransform(); attribute vec4 weight; +varying vec4 post_pos; + void main() { gl_TexCoord[0] = gl_MultiTexCoord0; @@ -30,8 +32,9 @@ void main() norm = normalize(norm); pos = gl_ProjectionMatrix * pos; - pos.z = max(pos.z, -pos.w+0.01); - gl_Position = pos; + post_pos = pos; + + gl_Position = vec4(pos.x, pos.y, pos.w*0.5, pos.w); gl_FrontColor = gl_Color; } diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl index 69c93799b5d358b612c5be0a18150c6b193fb777..7eac11287a2b7e2f7666f90b10a5a137cfdeb8f7 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + mat4 getSkinnedTransform(); diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl index d9f021b114f4919327c70f62c967750f98887d22..8c75c8045af71835637efb9be7fff0db707ad34f 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable @@ -26,7 +26,7 @@ uniform vec2 screen_res; vec4 getPosition(vec2 pos_screen) { - float depth = texture2DRect(depthMap, pos_screen.xy).a; + float depth = texture2DRect(depthMap, pos_screen.xy).r; vec2 sc = pos_screen.xy*2.0; sc /= screen_res; sc -= vec2(1.0,1.0); @@ -39,7 +39,7 @@ vec4 getPosition(vec2 pos_screen) void main() { - vec2 tc = vary_fragcoord.xy; + vec2 tc = vary_fragcoord.xy; vec3 norm = texture2DRect(normalMap, tc).xyz; norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm vec3 pos = getPosition(tc).xyz; diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightMSF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..6ca51377c167fade71505ece7e3f9729a5e70557 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightMSF.glsl @@ -0,0 +1,113 @@ +/** + * @file blurLightF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +#extension GL_ARB_texture_rectangle : enable +#extension GL_ARB_texture_multisample : enable + +uniform sampler2DMS depthMap; +uniform sampler2DMS normalMap; +uniform sampler2DRect lightMap; + +uniform float dist_factor; +uniform float blur_size; +uniform vec2 delta; +uniform vec3 kern[4]; +uniform float kern_scale; + +varying vec2 vary_fragcoord; + +uniform mat4 inv_proj; +uniform vec2 screen_res; + +vec3 texture2DMS3(sampler2DMS tex, ivec2 tc) +{ + vec3 ret = vec3(0,0,0); + for (int i = 0; i < samples; i++) + { + ret += texelFetch(tex, tc, i).rgb; + } + + return ret/samples; +} + +float texture2DMS1(sampler2DMS tex, ivec2 tc) +{ + float ret = 0; + for (int i = 0; i < samples; i++) + { + ret += texelFetch(tex, tc, i).r; + } + + return ret/samples; +} + +vec4 getPosition(ivec2 pos_screen) +{ + float depth = texture2DMS1(depthMap, pos_screen.xy); + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +void main() +{ + vec2 tc = vary_fragcoord.xy; + ivec2 itc = ivec2(tc); + + vec3 norm = texture2DMS3(normalMap, itc).xyz; + norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm + vec3 pos = getPosition(itc).xyz; + vec4 ccol = texture2DRect(lightMap, tc).rgba; + + vec2 dlt = kern_scale * delta / (1.0+norm.xy*norm.xy); + dlt /= max(-pos.z*dist_factor, 1.0); + + vec2 defined_weight = kern[0].xy; // special case the first (centre) sample's weight in the blur; we have to sample it anyway so we get it for 'free' + vec4 col = defined_weight.xyxx * ccol; + + // relax tolerance according to distance to avoid speckling artifacts, as angles and distances are a lot more abrupt within a small screen area at larger distances + float pointplanedist_tolerance_pow2 = pos.z*pos.z*0.00005; + + // perturb sampling origin slightly in screen-space to hide edge-ghosting artifacts where smoothing radius is quite large + tc += ( (mod(tc.x+tc.y,2) - 0.5) * kern[1].z * dlt * 0.5 ); + + for (int i = 1; i < 4; i++) + { + vec2 samptc = tc + kern[i].z*dlt; + vec3 samppos = getPosition(ivec2(samptc)).xyz; + float d = dot(norm.xyz, samppos.xyz-pos.xyz);// dist from plane + if (d*d <= pointplanedist_tolerance_pow2) + { + col += texture2DRect(lightMap, samptc)*kern[i].xyxx; + defined_weight += kern[i].xy; + } + } + for (int i = 1; i < 4; i++) + { + vec2 samptc = vec2(tc - kern[i].z*dlt); + vec3 samppos = getPosition(ivec2(samptc)).xyz; + float d = dot(norm.xyz, samppos.xyz-pos.xyz);// dist from plane + if (d*d <= pointplanedist_tolerance_pow2) + { + col += texture2DRect(lightMap, samptc)*kern[i].xyxx; + defined_weight += kern[i].xy; + } + } + + col /= defined_weight.xyxx; + col.y *= col.y; + + gl_FragColor = col; +} + diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl index c2d05c601a8cf9b760c5c0d4bdbc302619000055..862f809de5387f197ae38d5dd4ad02a8078d02d0 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec2 vary_fragcoord; uniform vec2 screen_res; diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl index 37bfaac32cbf49f49aec497f0aee6d689010f5ff..75b4dc624a9f33035a971ac68260d3dd62cf3144 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; uniform sampler2D bumpMap; diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl index d884f2e4a5de3b066518ddba72758c0bd05b912a..dc69519a8596c41468a96523f5514c9dc5a160bc 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl @@ -5,7 +5,7 @@ * $License$ */ -#version 120 + varying vec3 vary_mat0; varying vec3 vary_mat1; diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl index 9b109b2db67ec589d752f18cd8c3103e67df2138..5b6726488bdce1ee127b9c9da5c4e237eb892f40 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec3 vary_mat0; varying vec3 vary_mat1; diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..ef300d5631da9be354f6f9ec0d7dbd813235f126 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl @@ -0,0 +1,79 @@ +/** + * @file WLCloudsF.glsl + * + * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +///////////////////////////////////////////////////////////////////////// +// The fragment shader for the sky +///////////////////////////////////////////////////////////////////////// + +varying vec4 vary_CloudColorSun; +varying vec4 vary_CloudColorAmbient; +varying float vary_CloudDensity; + +uniform sampler2D cloud_noise_texture; +uniform vec4 cloud_pos_density1; +uniform vec4 cloud_pos_density2; +uniform vec4 gamma; + +/// Soft clips the light with a gamma correction +vec3 scaleSoftClip(vec3 light) { + //soft clip effect: + light = 1. - clamp(light, vec3(0.), vec3(1.)); + light = 1. - pow(light, gamma.xxx); + + return light; +} + +void main() +{ + // Set variables + vec2 uv1 = gl_TexCoord[0].xy; + vec2 uv2 = gl_TexCoord[1].xy; + + vec4 cloudColorSun = vary_CloudColorSun; + vec4 cloudColorAmbient = vary_CloudColorAmbient; + float cloudDensity = vary_CloudDensity; + vec2 uv3 = gl_TexCoord[2].xy; + vec2 uv4 = gl_TexCoord[3].xy; + + // Offset texture coords + uv1 += cloud_pos_density1.xy; //large texture, visible density + uv2 += cloud_pos_density1.xy; //large texture, self shadow + uv3 += cloud_pos_density2.xy; //small texture, visible density + uv4 += cloud_pos_density2.xy; //small texture, self shadow + + + // Compute alpha1, the main cloud opacity + float alpha1 = (texture2D(cloud_noise_texture, uv1).x - 0.5) + (texture2D(cloud_noise_texture, uv3).x - 0.5) * cloud_pos_density2.z; + alpha1 = min(max(alpha1 + cloudDensity, 0.) * 10. * cloud_pos_density1.z, 1.); + + // And smooth + alpha1 = 1. - alpha1 * alpha1; + alpha1 = 1. - alpha1 * alpha1; + + + // Compute alpha2, for self shadowing effect + // (1 - alpha2) will later be used as percentage of incoming sunlight + float alpha2 = (texture2D(cloud_noise_texture, uv2).x - 0.5); + alpha2 = min(max(alpha2 + cloudDensity, 0.) * 2.5 * cloud_pos_density1.z, 1.); + + // And smooth + alpha2 = 1. - alpha2; + alpha2 = 1. - alpha2 * alpha2; + + // Combine + vec4 color; + color = (cloudColorSun*(1.-alpha2) + cloudColorAmbient); + color *= 2.; + + /// Gamma correct for WL (soft clip effect). + gl_FragData[0] = vec4(scaleSoftClip(color.rgb), alpha1); + gl_FragData[1] = vec4(0.0,0.0,0.0,0.0); + gl_FragData[2] = vec4(0,0,1,0); +} + diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl new file mode 100644 index 0000000000000000000000000000000000000000..3eac63076c19119a7e0f78e4c0d68f20e2dcf26e --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl @@ -0,0 +1,165 @@ +/** + * @file WLCloudsV.glsl + * + * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +////////////////////////////////////////////////////////////////////////// +// The vertex shader for creating the atmospheric sky +/////////////////////////////////////////////////////////////////////////////// + +// Output parameters +varying vec4 vary_CloudColorSun; +varying vec4 vary_CloudColorAmbient; +varying float vary_CloudDensity; + +// Inputs +uniform vec3 camPosLocal; + +uniform vec4 lightnorm; +uniform vec4 sunlight_color; +uniform vec4 ambient; +uniform vec4 blue_horizon; +uniform vec4 blue_density; +uniform vec4 haze_horizon; +uniform vec4 haze_density; + +uniform vec4 cloud_shadow; +uniform vec4 density_multiplier; +uniform vec4 max_y; + +uniform vec4 glow; + +uniform vec4 cloud_color; + +uniform vec4 cloud_scale; + +void main() +{ + + // World / view / projection + gl_Position = ftransform(); + + gl_TexCoord[0] = gl_MultiTexCoord0; + + // Get relative position + vec3 P = gl_Vertex.xyz - camPosLocal.xyz + vec3(0,50,0); + + // Set altitude + if (P.y > 0.) + { + P *= (max_y.x / P.y); + } + else + { + P *= (-32000. / P.y); + } + + // Can normalize then + vec3 Pn = normalize(P); + float Plen = length(P); + + // Initialize temp variables + vec4 temp1 = vec4(0.); + vec4 temp2 = vec4(0.); + vec4 blue_weight; + vec4 haze_weight; + vec4 sunlight = sunlight_color; + vec4 light_atten; + + + // Sunlight attenuation effect (hue and brightness) due to atmosphere + // this is used later for sunlight modulation at various altitudes + light_atten = (blue_density * 1.0 + haze_density.x * 0.25) * (density_multiplier.x * max_y.x); + + // Calculate relative weights + temp1 = blue_density + haze_density.x; + blue_weight = blue_density / temp1; + haze_weight = haze_density.x / temp1; + + // Compute sunlight from P & lightnorm (for long rays like sky) + temp2.y = max(0., max(0., Pn.y) * 1.0 + lightnorm.y ); + temp2.y = 1. / temp2.y; + sunlight *= exp( - light_atten * temp2.y); + + // Distance + temp2.z = Plen * density_multiplier.x; + + // Transparency (-> temp1) + // ATI Bugfix -- can't store temp1*temp2.z in a variable because the ati + // compiler gets confused. + temp1 = exp(-temp1 * temp2.z); + + + // Compute haze glow + temp2.x = dot(Pn, lightnorm.xyz); + temp2.x = 1. - temp2.x; + // temp2.x is 0 at the sun and increases away from sun + temp2.x = max(temp2.x, .001); + // Set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot) + temp2.x *= glow.x; + // Higher glow.x gives dimmer glow (because next step is 1 / "angle") + temp2.x = pow(temp2.x, glow.z); + // glow.z should be negative, so we're doing a sort of (1 / "angle") function + + // Add "minimum anti-solar illumination" + temp2.x += .25; + + // Increase ambient when there are more clouds + vec4 tmpAmbient = ambient; + tmpAmbient += (1. - tmpAmbient) * cloud_shadow.x * 0.5; + + // Dim sunlight by cloud shadow percentage + sunlight *= (1. - cloud_shadow.x); + + // Haze color below cloud + vec4 additiveColorBelowCloud = ( blue_horizon * blue_weight * (sunlight + tmpAmbient) + + (haze_horizon.r * haze_weight) * (sunlight * temp2.x + tmpAmbient) + ); + + // CLOUDS + + sunlight = sunlight_color; + temp2.y = max(0., lightnorm.y * 2.); + temp2.y = 1. / temp2.y; + sunlight *= exp( - light_atten * temp2.y); + + // Cloud color out + vary_CloudColorSun = (sunlight * temp2.x) * cloud_color; + vary_CloudColorAmbient = tmpAmbient * cloud_color; + + // Attenuate cloud color by atmosphere + temp1 = sqrt(temp1); //less atmos opacity (more transparency) below clouds + vary_CloudColorSun *= temp1; + vary_CloudColorAmbient *= temp1; + vec4 oHazeColorBelowCloud = additiveColorBelowCloud * (1. - temp1); + + // Make a nice cloud density based on the cloud_shadow value that was passed in. + vary_CloudDensity = 2. * (cloud_shadow.x - 0.25); + + + // Texture coords + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_TexCoord[0].xy -= 0.5; + gl_TexCoord[0].xy /= cloud_scale.x; + gl_TexCoord[0].xy += 0.5; + + gl_TexCoord[1] = gl_TexCoord[0]; + gl_TexCoord[1].x += lightnorm.x * 0.0125; + gl_TexCoord[1].y += lightnorm.z * 0.0125; + + gl_TexCoord[2] = gl_TexCoord[0] * 16.; + gl_TexCoord[3] = gl_TexCoord[1] * 16.; + + // Combine these to minimize register use + vary_CloudColorAmbient += oHazeColorBelowCloud; + + // needs this to compile on mac + //vary_AtmosAttenuation = vec3(0.0,0.0,0.0); + + // END CLOUDS +} + diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl index 35cfb80c93882795211bd29c2834427513ac0a2b..43af480c5046aae8576c01844cd8ef1a033bdf93 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; @@ -20,3 +20,4 @@ void main() vec3 nvn = normalize(vary_normal); gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0); } + diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..e7b5dcce7f95bc643bf16c50068789af1743d154 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl @@ -0,0 +1,19 @@ +/** + * @file diffuseIndexedF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + +varying vec3 vary_normal; + +void main() +{ + vec3 col = gl_Color.rgb * diffuseLookup(gl_TexCoord[0].xy).rgb; + + gl_FragData[0] = vec4(col, 0.0); + gl_FragData[1] = gl_Color.aaaa; // spec + //gl_FragData[1] = vec4(vec3(gl_Color.a), gl_Color.a+(1.0-gl_Color.a)*gl_Color.a); // spec - from former class3 - maybe better, but not so well tested + vec3 nvn = normalize(vary_normal); + gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0); +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl index 9a45c03237a885a54958c239dafbc473f9ec56e9..2c4caea1090dddb78cb0c236370e50d1682abc7e 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl @@ -5,7 +5,7 @@ * $License$ */ -#version 120 + varying vec3 vary_normal; diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl index 03d3322cb68855adfc5a7c9fe0de09b73ae96a19..b56d1493c3a84d3f61e7c457406f7b3e4922d23c 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl @@ -5,16 +5,18 @@ * $/LicenseInfo$ */ -#version 120 + varying vec3 vary_normal; +varying float vary_texture_index; void main() { //transform vertex - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + gl_Position = gl_ModelViewProjectionMatrix * vec4(gl_Vertex.xyz, 1.0); gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + vary_texture_index = gl_Vertex.w; vary_normal = normalize(gl_NormalMatrix * gl_Normal); gl_FrontColor = gl_Color; diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl index 34298773974b2d35ea7396dceaebf3b7e1d363b9..d781e08548ccf229e331c74d8ac1889816db7d0d 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl @@ -5,60 +5,24 @@ * $/LicenseInfo$ */ -#version 120 -#extension GL_ARB_texture_rectangle : enable - -uniform sampler2D diffuseMap; -uniform sampler2DRect depthMap; -uniform sampler2D noiseMap; -uniform vec4 shadow_clip; -uniform vec2 screen_res; +#extension GL_ARB_texture_rectangle : enable vec3 fullbrightAtmosTransport(vec3 light); vec3 fullbrightScaleSoftClip(vec3 light); -varying vec3 vary_ambient; -varying vec3 vary_directional; -varying vec4 vary_position; -varying vec3 vary_normal; -varying vec3 vary_fragcoord; - -uniform mat4 inv_proj; - -vec4 getPosition(vec2 pos_screen) -{ - float depth = texture2DRect(depthMap, pos_screen.xy).a; - vec2 sc = pos_screen.xy*2.0; - sc /= screen_res; - sc -= vec2(1.0,1.0); - vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); - vec4 pos = inv_proj * ndc; - pos /= pos.w; - pos.w = 1.0; - return pos; -} void main() { - vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5; - frag *= screen_res; - - vec3 samp_pos = getPosition(frag).xyz; - float shadow = 1.0; - vec4 pos = vary_position; - vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy)*gl_Color; + vec4 color = diffuseLookup(gl_TexCoord[0].xy)*gl_Color; color.rgb = fullbrightAtmosTransport(color.rgb); color.rgb = fullbrightScaleSoftClip(color.rgb); - //gl_FragColor = gl_Color; gl_FragColor = color; - //gl_FragColor = vec4(1,0,1,1); - } diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl index 6c38d220e26962bf7ad251ca51fcc3f7e456c0d0..2eed044b7cc7db24521f785f70cce0fbae16fb92 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void calcAtmospherics(vec3 inPositionEye); @@ -14,30 +14,23 @@ vec3 atmosAffectDirectionalLight(float lightIntensity); vec3 scaleDownLight(vec3 light); vec3 scaleUpLight(vec3 light); -varying vec3 vary_ambient; -varying vec3 vary_directional; -varying vec3 vary_normal; -varying vec3 vary_fragcoord; -uniform float near_clip; -varying vec4 vary_position; +varying float vary_texture_index; void main() { //transform vertex - gl_Position = ftransform(); + vec4 vert = vec4(gl_Vertex.xyz, 1.0); + vary_texture_index = gl_Vertex.w; + + gl_Position = gl_ModelViewProjectionMatrix*vert; gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; - vec4 pos = (gl_ModelViewMatrix * gl_Vertex); - vary_position = pos; - + vec4 pos = (gl_ModelViewMatrix * vert); + calcAtmospherics(pos.xyz); gl_FrontColor = gl_Color; gl_FogFragCoord = pos.z; - - pos = gl_ModelViewProjectionMatrix * gl_Vertex; - vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip); - } diff --git a/indra/newview/app_settings/shaders/class1/deferred/giF.glsl b/indra/newview/app_settings/shaders/class1/deferred/giF.glsl index 75b555e8ae35eb709428304f60e9a16836938f6d..41c149e7744775d182ffb67a01330c25da722bef 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/giF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/giF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable diff --git a/indra/newview/app_settings/shaders/class1/deferred/giV.glsl b/indra/newview/app_settings/shaders/class1/deferred/giV.glsl index 8dc1410ea5ad90d05d8bad4c485238550fd4cdd7..e86f2896da5fbc006f817a4f03a256599a7a69e3 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/giV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/giV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec2 vary_fragcoord; diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl index e3c15a2ab2d668bc15bdc2649c0f98ae1d585222..fa811f0d559e0510adea7eb4be98df4235032488 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; uniform sampler2D normalMap; diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl index 37148b3f1a8c48c036290a9b2edc431ab5e61a9e..723777bd3a3329a69af2fa8d2012672115ba7df3 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void main() { diff --git a/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl b/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl index 78df54d5dc2b3726ad28daa881f3ceb1b9eebc8f..25e93ae266e99d1794c7f16dfd80e0c3aea010f2 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2DRect diffuseMap; diff --git a/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl b/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl index 0c820bfc6cf314aed20c9049b255953aac8b7f4f..4baf1fc65aa7836a423f60b869dbfdc9870a5773 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec2 vary_fragcoord; diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl index 609fc4f14ffa68aa634e0356d88891d022131ed7..3c5c780d944238b2add8962d7e20e4f200a92053 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable @@ -36,7 +36,7 @@ uniform mat4 inv_proj; vec4 getPosition(vec2 pos_screen) { - float depth = texture2DRect(depthMap, pos_screen.xy).a; + float depth = texture2DRect(depthMap, pos_screen.xy).r; vec2 sc = pos_screen.xy*2.0; sc /= screen_res; sc -= vec2(1.0,1.0); diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightMSF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..6c43679acf281c28485f9802d0a2a9bf16bb21d0 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightMSF.glsl @@ -0,0 +1,137 @@ +/** + * @file multiPointLightF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +#extension GL_ARB_texture_rectangle : enable +#extension GL_ARB_texture_multisample : enable + +uniform sampler2DMS depthMap; +uniform sampler2DMS diffuseRect; +uniform sampler2DMS specularRect; +uniform sampler2DMS normalMap; +uniform sampler2D noiseMap; +uniform sampler2D lightFunc; + + +uniform vec3 env_mat[3]; +uniform float sun_wash; + +uniform int light_count; + +#define MAX_LIGHT_COUNT 16 +uniform vec4 light[MAX_LIGHT_COUNT]; +uniform vec4 light_col[MAX_LIGHT_COUNT]; + +varying vec4 vary_fragcoord; +uniform vec2 screen_res; + +uniform float far_z; + +uniform mat4 inv_proj; + +vec4 getPosition(ivec2 pos_screen, int sample) +{ + float depth = texelFetch(depthMap, pos_screen, sample).r; + vec2 sc = vec2(pos_screen.xy)*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +void main() +{ + vec2 frag = (vary_fragcoord.xy*0.5+0.5)*screen_res; + ivec2 itc = ivec2(frag); + + int wght = 0; + vec3 fcol = vec3(0,0,0); + + for (int s = 0; s < samples; ++s) + { + vec3 pos = getPosition(itc, s).xyz; + if (pos.z >= far_z) + { + vec3 norm = texelFetch(normalMap, itc, s).xyz; + norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm + norm = normalize(norm); + vec4 spec = texelFetch(specularRect, itc, s); + vec3 diff = texelFetch(diffuseRect, itc, s).rgb; + float noise = texture2D(noiseMap, frag.xy/128.0).b; + vec3 out_col = vec3(0,0,0); + vec3 npos = normalize(-pos); + + // As of OSX 10.6.7 ATI Apple's crash when using a variable size loop + for (int i = 0; i < MAX_LIGHT_COUNT; ++i) + { + 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) + { + light_contrib = false; + } + + float da = dot(norm, lv); + if (da < 0.0) + { + light_contrib = false; + } + + if (light_contrib) + { + 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) + { + //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; + } + } + + fcol += out_col; + ++wght; + } + } + + if (wght <= 0) + { + discard; + } + + gl_FragColor.rgb = fcol/samples; + gl_FragColor.a = 0.0; + + +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl index 2e3e84dd156fd62563fbd241cd02d38f9236fb50..434fb6f53462bbb23a585f2ae339f12efb907c85 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec4 vary_fragcoord; diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl index a9f03f76151d014db77e7b46d4f5a20e805f8eaf..0d25d7792da169da6a9e9917543c00622b6b2df7 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + //class 1 -- no shadows diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightMSF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..c80a54346e4cb78cdb5c666327d8d32524e23784 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightMSF.glsl @@ -0,0 +1,232 @@ +/** + * @file multiSpotLightF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +//class 1 -- no shadows + +#extension GL_ARB_texture_rectangle : enable +#extension GL_ARB_texture_multisample : enable + +uniform sampler2DMS diffuseRect; +uniform sampler2DMS specularRect; +uniform sampler2DMS depthMap; +uniform sampler2DMS normalMap; +uniform sampler2D noiseMap; +uniform sampler2D lightFunc; +uniform sampler2D projectionMap; + +uniform mat4 proj_mat; //screen space to light space +uniform float proj_near; //near clip for projection +uniform vec3 proj_p; //plane projection is emitting from (in screen space) +uniform vec3 proj_n; +uniform float proj_focus; //distance from plane to begin blurring +uniform float proj_lod; //(number of mips in proj map) +uniform float proj_range; //range between near clip and far clip plane of projection +uniform float proj_ambient_lod; +uniform float proj_ambiance; +uniform float near_clip; +uniform float far_clip; + +uniform vec3 proj_origin; //origin of projection to be used for angular attenuation +uniform float sun_wash; +uniform float shadow_fade; + +varying vec4 vary_light; + +varying vec4 vary_fragcoord; +uniform vec2 screen_res; + +uniform mat4 inv_proj; + +vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod) +{ + vec4 ret = texture2DLod(projectionMap, tc, lod); + + vec2 dist = tc-vec2(0.5); + + float det = max(1.0-lod/(proj_lod*0.5), 0.0); + + float d = dot(dist,dist); + + ret *= min(clamp((0.25-d)/0.25, 0.0, 1.0)+det, 1.0); + + return ret; +} + +vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod) +{ + vec4 ret = texture2DLod(projectionMap, tc, lod); + + vec2 dist = vec2(0.5) - abs(tc-vec2(0.5)); + + float det = min(lod/(proj_lod*0.5), 1.0); + + float d = min(dist.x, dist.y); + + float edge = 0.25*det; + + ret *= clamp(d/edge, 0.0, 1.0); + + return ret; +} + +vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod) +{ + vec4 ret = texture2DLod(projectionMap, tc, lod); + + vec2 dist = tc-vec2(0.5); + + float d = dot(dist,dist); + + ret *= min(clamp((0.25-d)/0.25, 0.0, 1.0), 1.0); + + return ret; +} + + +vec4 getPosition(ivec2 pos_screen, int sample) +{ + float depth = texelFetch(depthMap, pos_screen, sample).r; + vec2 sc = vec2(pos_screen.xy)*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +void main() +{ + int wght = 0; + + vec3 fcol = vec3(0,0,0); + + vec2 frag = (vary_fragcoord.xy*0.5+0.5)*screen_res; + + ivec2 itc = ivec2(frag.xy); + + for (int i = 0; i < samples; ++i) + { + vec3 pos = getPosition(itc, i).xyz; + vec3 lv = vary_light.xyz-pos.xyz; + float dist2 = dot(lv,lv); + dist2 /= vary_light.w; + if (dist2 <= 1.0) + { + vec3 norm = texelFetch(normalMap, itc, i).xyz*2.0-1.0; + + norm = normalize(norm); + float l_dist = -dot(lv, proj_n); + + vec4 proj_tc = (proj_mat * vec4(pos.xyz, 1.0)); + if (proj_tc.z >= 0.0) + { + proj_tc.xyz /= proj_tc.w; + + float fa = gl_Color.a+1.0; + float dist_atten = min(1.0-(dist2-1.0*(1.0-fa))/fa, 1.0); + if (dist_atten > 0.0) + { + lv = proj_origin-pos.xyz; + lv = normalize(lv); + float da = dot(norm, lv); + + vec3 col = vec3(0,0,0); + + vec3 diff_tex = texelFetch(diffuseRect, itc, i).rgb; + + float noise = texture2D(noiseMap, frag.xy/128.0).b; + if (proj_tc.z > 0.0 && + proj_tc.x < 1.0 && + proj_tc.y < 1.0 && + proj_tc.x > 0.0 && + proj_tc.y > 0.0) + { + float lit = 0.0; + float amb_da = proj_ambiance; + + if (da > 0.0) + { + float diff = clamp((l_dist-proj_focus)/proj_range, 0.0, 1.0); + float lod = diff * proj_lod; + + vec4 plcol = texture2DLodDiffuse(projectionMap, proj_tc.xy, lod); + + vec3 lcol = gl_Color.rgb * plcol.rgb * plcol.a; + + lit = da * dist_atten * noise; + + col = lcol*lit*diff_tex; + amb_da += (da*0.5)*proj_ambiance; + } + + //float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0); + vec4 amb_plcol = texture2DLodAmbient(projectionMap, proj_tc.xy, proj_lod); + + amb_da += (da*da*0.5+0.5)*proj_ambiance; + + amb_da *= dist_atten * noise; + + amb_da = min(amb_da, 1.0-lit); + + col += amb_da*gl_Color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a; + } + + + vec4 spec = texelFetch(specularRect, itc, i); + if (spec.a > 0.0) + { + vec3 ref = reflect(normalize(pos), norm); + + //project from point pos in direction ref to plane proj_p, proj_n + vec3 pdelta = proj_p-pos; + float ds = dot(ref, proj_n); + + if (ds < 0.0) + { + vec3 pfinal = pos + ref * dot(pdelta, proj_n)/ds; + + vec4 stc = (proj_mat * vec4(pfinal.xyz, 1.0)); + + if (stc.z > 0.0) + { + stc.xy /= stc.w; + + float fatten = clamp(spec.a*spec.a+spec.a*0.5, 0.25, 1.0); + + stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5); + + if (stc.x < 1.0 && + stc.y < 1.0 && + stc.x > 0.0 && + stc.y > 0.0) + { + vec4 scol = texture2DLodSpecular(projectionMap, stc.xy, proj_lod-spec.a*proj_lod); + col += dist_atten*scol.rgb*gl_Color.rgb*scol.a*spec.rgb; + } + } + } + } + + fcol += col; + ++wght; + } + } + } + } + + if (wght <= 0) + { + discard; + } + + gl_FragColor.rgb = fcol/samples; + gl_FragColor.a = 0.0; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl index 22ed9dcd40ec25f456f91c5dc0e92333e41dfb27..5efa3200d4ab93057ab80c3fecbe17d87e391d69 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ - #version 120 + #extension GL_ARB_texture_rectangle : enable @@ -30,7 +30,7 @@ uniform vec4 viewport; vec4 getPosition(vec2 pos_screen) { - float depth = texture2DRect(depthMap, pos_screen.xy).a; + float depth = texture2DRect(depthMap, pos_screen.xy).r; vec2 sc = (pos_screen.xy-viewport.xy)*2.0; sc /= viewport.zw; sc -= vec2(1.0,1.0); diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightMSF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..feaf38115d1c3904249eeb6028c5b25169fce6ed --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightMSF.glsl @@ -0,0 +1,108 @@ +/** + * @file pointLightF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +#extension GL_ARB_texture_rectangle : enable +#extension GL_ARB_texture_multisample : enable + +uniform sampler2DMS depthMap; +uniform sampler2DMS diffuseRect; +uniform sampler2DMS specularRect; +uniform sampler2DMS normalMap; +uniform sampler2D noiseMap; +uniform sampler2D lightFunc; + + +uniform vec3 env_mat[3]; +uniform float sun_wash; + +varying vec4 vary_light; + +varying vec4 vary_fragcoord; +uniform vec2 screen_res; + +uniform mat4 inv_proj; +uniform vec4 viewport; + +vec4 getPosition(ivec2 pos_screen, int sample) +{ + float depth = texelFetch(depthMap, pos_screen, sample).r; + vec2 sc = (vec2(pos_screen.xy)-viewport.xy)*2.0; + sc /= viewport.zw; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +void main() +{ + vec4 frag = vary_fragcoord; + frag.xyz /= frag.w; + frag.xyz = frag.xyz*0.5+0.5; + frag.xy *= screen_res; + + ivec2 itc = ivec2(frag.xy); + + int wght = 0; + vec3 fcol = vec3(0,0,0); + + for (int s = 0; s < samples; ++s) + { + vec3 pos = getPosition(itc, s).xyz; + vec3 lv = vary_light.xyz-pos; + float dist2 = dot(lv,lv); + dist2 /= vary_light.w; + if (dist2 <= 1.0) + { + vec3 norm = texelFetch(normalMap, itc, s).xyz; + norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm + float da = dot(norm, lv); + if (da >= 0.0) + { + norm = normalize(norm); + lv = normalize(lv); + da = dot(norm, lv); + + float noise = texture2D(noiseMap, frag.xy/128.0).b; + + vec3 col = texelFetch(diffuseRect, itc, s).rgb; + float fa = gl_Color.a+1.0; + float dist_atten = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); + float lit = da * dist_atten * noise; + + col = gl_Color.rgb*lit*col; + + vec4 spec = texelFetch(specularRect, itc, s); + if (spec.a > 0.0) + { + float sa = dot(normalize(lv-normalize(pos)),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*gl_Color.rgb*spec.rgb; + } + } + + fcol += col; + ++wght; + } + } + } + + if (wght <= 0) + { + discard; + } + + gl_FragColor.rgb = fcol/samples; + gl_FragColor.a = 0.0; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl index 8e74feb61565cac9f6d4736bc04c72909a293867..c510d8ad7794f040a107416ef400c01458b3bcf6 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl @@ -5,19 +5,14 @@ * $/LicenseInfo$ */ -#version 120 + varying vec4 vary_light; varying vec4 vary_fragcoord; -uniform vec2 screen_res; -uniform float near_clip; - void main() { //transform vertex - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; vary_fragcoord = pos; @@ -25,6 +20,8 @@ void main() tex.w = 1.0; vary_light = gl_MultiTexCoord0; + + gl_Position = pos; gl_FrontColor = gl_Color; } diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl index 77f1b2224c20f04f66b79b948fc5be3a3844f6ea..f6b0402bb9c532e7def229313671079828281f3a 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable @@ -29,7 +29,7 @@ varying vec2 vary_fragcoord; float getDepth(vec2 pos_screen) { - float z = texture2DRect(depthMap, pos_screen.xy).a; + float z = texture2DRect(depthMap, pos_screen.xy).r; z = z*2.0-1.0; vec4 ndc = vec4(0.0, 0.0, z, 1.0); vec4 p = inv_proj*ndc; diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredMSF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..62ae5f917a2f5645f323a58a621178ebe1019525 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredMSF.glsl @@ -0,0 +1,133 @@ +/** + * @file postDeferredF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +#extension GL_ARB_texture_rectangle : enable +#extension GL_ARB_texture_multisample : enable + +uniform sampler2DMS diffuseRect; +uniform sampler2DMS edgeMap; +uniform sampler2DMS depthMap; +uniform sampler2DMS normalMap; +uniform sampler2D bloomMap; + +uniform float depth_cutoff; +uniform float norm_cutoff; +uniform float focal_distance; +uniform float blur_constant; +uniform float tan_pixel_angle; +uniform float magnification; + +uniform mat4 inv_proj; +uniform vec2 screen_res; + +varying vec2 vary_fragcoord; + +vec4 texture2DMS(sampler2DMS tex, ivec2 tc) +{ + vec4 ret = vec4(0,0,0,0); + for (int i = 0; i < samples; ++i) + { + ret += texelFetch(tex, tc, i); + } + + return ret/samples; +} + +float getDepth(ivec2 pos_screen) +{ + float z = texture2DMS(depthMap, pos_screen.xy).r; + z = z*2.0-1.0; + vec4 ndc = vec4(0.0, 0.0, z, 1.0); + vec4 p = inv_proj*ndc; + return p.z/p.w; +} + +float calc_cof(float depth) +{ + float sc = abs(depth-focal_distance)/-depth*blur_constant; + + sc /= magnification; + + // tan_pixel_angle = pixel_length/-depth; + float pixel_length = tan_pixel_angle*-focal_distance; + + sc = sc/pixel_length; + sc *= 1.414; + + return sc; +} + +void dofSample(inout vec4 diff, inout float w, float min_sc, float cur_depth, ivec2 tc) +{ + float d = getDepth(tc); + + float sc = calc_cof(d); + + if (sc > min_sc //sampled pixel is more "out of focus" than current sample radius + || d < cur_depth) //sampled pixel is further away than current pixel + { + float wg = 0.25; + + vec4 s = texture2DMS(diffuseRect, tc); + // de-weight dull areas to make highlights 'pop' + wg += s.r+s.g+s.b; + + diff += wg*s; + + w += wg; + } +} + + +void main() +{ + ivec2 itc = ivec2(vary_fragcoord.xy); + + vec3 norm = texture2DMS(normalMap, itc).xyz; + norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm + + float depth = getDepth(itc); + + vec4 diff = texture2DMS(diffuseRect, itc); + + { + float w = 1.0; + + float sc = calc_cof(depth); + sc = min(abs(sc), 10.0); + + float fd = depth*0.5f; + + float PI = 3.14159265358979323846264; + + int isc = int(sc); + + // sample quite uniformly spaced points within a circle, for a circular 'bokeh' + //if (depth < focal_distance) + { + for (int x = -isc; x <= isc; x+=2) + { + for (int y = -isc; y <= isc; y+=2) + { + ivec2 cur_samp = ivec2(x,y); + float cur_sc = length(vec2(cur_samp)); + if (cur_sc < sc) + { + dofSample(diff, w, cur_sc, depth, itc+cur_samp); + } + } + } + } + + diff /= w; + } + + vec4 bloom = texture2D(bloomMap, vary_fragcoord.xy/screen_res); + gl_FragColor = diff + bloom; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl index ab48d08bbb070342a2f48402b32859c8aaedf01a..bf829bfc560e94ca413183588fc71382a1100634 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFMSF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..bf35dfe11cb928c7a874504689dded0ed1e2a08d --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFMSF.glsl @@ -0,0 +1,37 @@ +/** + * @file postDeferredF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +#extension GL_ARB_texture_rectangle : enable +#extension GL_ARB_texture_multisample : enable + +uniform sampler2DMS diffuseRect; +uniform sampler2D bloomMap; + +uniform vec2 screen_res; +varying vec2 vary_fragcoord; + +vec4 texture2DMS(sampler2DMS tex, ivec2 tc) +{ + vec4 ret = vec4(0,0,0,0); + + for (int i = 0; i < samples; ++i) + { + ret += texelFetch(tex,tc,i); + } + + return ret/samples; +} + +void main() +{ + vec4 diff = texture2DMS(diffuseRect, ivec2(vary_fragcoord.xy)); + + vec4 bloom = texture2D(bloomMap, vary_fragcoord.xy/screen_res); + gl_FragColor = diff + bloom; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl index 12983baa94882bfc3f58349847dd7bec1b3aadca..876f65ee3adc86302c81426f8ce576b67ae96a95 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec2 vary_fragcoord; uniform vec2 screen_res; diff --git a/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl index 63b3c9f20527dae3364ede4002f395aedf798ae4..fa3f04bcc81b9912fd7a0dcf094cab4f7c893649 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2DRect depthMap; uniform sampler2DRect normalMap; diff --git a/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl b/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl index ae57227fe528b03b5e2a0d216c9a8b97a5ddfb39..eebe930666a60742bb73b063f384b32d99d4f726 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec2 vary_fragcoord; uniform vec2 screen_res; diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl index 6674c4a5aa275a379c2bab374801a9b38ebe51f9..e0c540648307f784156647f5a1463d740e96c8de 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl index db3bddc6bea4b635bb834b2a59b29f00001ba503..9271a5115c5277925f61e0c9fa3ec61c79082a92 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec4 post_pos; diff --git a/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl b/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..820c82ffd7f964318e467c579840411de836aaec --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl @@ -0,0 +1,44 @@ +/** + * @file WLSkyF.glsl + * + * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +///////////////////////////////////////////////////////////////////////// +// The fragment shader for the sky +///////////////////////////////////////////////////////////////////////// + +varying vec4 vary_HazeColor; + +uniform sampler2D cloud_noise_texture; +uniform vec4 gamma; + +/// Soft clips the light with a gamma correction +vec3 scaleSoftClip(vec3 light) { + //soft clip effect: + light = 1. - clamp(light, vec3(0.), vec3(1.)); + light = 1. - pow(light, gamma.xxx); + + return light; +} + +void main() +{ + // Potential Fill-rate optimization. Add cloud calculation + // back in and output alpha of 0 (so that alpha culling kills + // the fragment) if the sky wouldn't show up because the clouds + // are fully opaque. + + vec4 color; + color = vary_HazeColor; + color *= 2.; + + /// Gamma correct for WL (soft clip effect). + gl_FragData[0] = vec4(scaleSoftClip(color.rgb), 1.0); + gl_FragData[1] = vec4(0.0,0.0,0.0,0.0); + gl_FragData[2] = vec4(0,0,1,0); +} + diff --git a/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl new file mode 100644 index 0000000000000000000000000000000000000000..1ea00f723afcab0ed9f5f746f194f1ab2e5e7dde --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl @@ -0,0 +1,140 @@ +/** + * @file WLSkyV.glsl + * + * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +// SKY //////////////////////////////////////////////////////////////////////// +// The vertex shader for creating the atmospheric sky +/////////////////////////////////////////////////////////////////////////////// + +// Output parameters +varying vec4 vary_HazeColor; + +// Inputs +uniform vec3 camPosLocal; + +uniform vec4 lightnorm; +uniform vec4 sunlight_color; +uniform vec4 ambient; +uniform vec4 blue_horizon; +uniform vec4 blue_density; +uniform vec4 haze_horizon; +uniform vec4 haze_density; + +uniform vec4 cloud_shadow; +uniform vec4 density_multiplier; +uniform vec4 max_y; + +uniform vec4 glow; + +uniform vec4 cloud_color; + +uniform vec4 cloud_scale; + +void main() +{ + + // World / view / projection + gl_Position = ftransform(); + gl_TexCoord[0] = gl_MultiTexCoord0; + + // Get relative position + vec3 P = gl_Vertex.xyz - camPosLocal.xyz + vec3(0,50,0); + //vec3 P = gl_Vertex.xyz + vec3(0,50,0); + + // Set altitude + if (P.y > 0.) + { + P *= (max_y.x / P.y); + } + else + { + P *= (-32000. / P.y); + } + + // Can normalize then + vec3 Pn = normalize(P); + float Plen = length(P); + + // Initialize temp variables + vec4 temp1 = vec4(0.); + vec4 temp2 = vec4(0.); + vec4 blue_weight; + vec4 haze_weight; + vec4 sunlight = sunlight_color; + vec4 light_atten; + + + // Sunlight attenuation effect (hue and brightness) due to atmosphere + // this is used later for sunlight modulation at various altitudes + light_atten = (blue_density * 1.0 + haze_density.x * 0.25) * (density_multiplier.x * max_y.x); + + // Calculate relative weights + temp1 = blue_density + haze_density.x; + blue_weight = blue_density / temp1; + haze_weight = haze_density.x / temp1; + + // Compute sunlight from P & lightnorm (for long rays like sky) + temp2.y = max(0., max(0., Pn.y) * 1.0 + lightnorm.y ); + temp2.y = 1. / temp2.y; + sunlight *= exp( - light_atten * temp2.y); + + // Distance + temp2.z = Plen * density_multiplier.x; + + // Transparency (-> temp1) + // ATI Bugfix -- can't store temp1*temp2.z in a variable because the ati + // compiler gets confused. + temp1 = exp(-temp1 * temp2.z); + + + // Compute haze glow + temp2.x = dot(Pn, lightnorm.xyz); + temp2.x = 1. - temp2.x; + // temp2.x is 0 at the sun and increases away from sun + temp2.x = max(temp2.x, .001); + // Set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot) + temp2.x *= glow.x; + // Higher glow.x gives dimmer glow (because next step is 1 / "angle") + temp2.x = pow(temp2.x, glow.z); + // glow.z should be negative, so we're doing a sort of (1 / "angle") function + + // Add "minimum anti-solar illumination" + temp2.x += .25; + + + // Haze color above cloud + vary_HazeColor = ( blue_horizon * blue_weight * (sunlight + ambient) + + (haze_horizon.r * haze_weight) * (sunlight * temp2.x + ambient) + ); + + + // Increase ambient when there are more clouds + vec4 tmpAmbient = ambient; + tmpAmbient += (1. - tmpAmbient) * cloud_shadow.x * 0.5; + + // Dim sunlight by cloud shadow percentage + sunlight *= (1. - cloud_shadow.x); + + // Haze color below cloud + vec4 additiveColorBelowCloud = ( blue_horizon * blue_weight * (sunlight + tmpAmbient) + + (haze_horizon.r * haze_weight) * (sunlight * temp2.x + tmpAmbient) + ); + + // Final atmosphere additive + vary_HazeColor *= (1. - temp1); + + // Attenuate cloud color by atmosphere + temp1 = sqrt(temp1); //less atmos opacity (more transparency) below clouds + + // At horizon, blend high altitude sky color towards the darker color below the clouds + vary_HazeColor += (additiveColorBelowCloud - vary_HazeColor) * (1. - sqrt(temp1)); + + // won't compile on mac without this being set + //vary_AtmosAttenuation = vec3(0.0,0.0,0.0); +} + diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index 29340c7e9f01bc8d44ad910fe56c4d0e243a6a4d..60082f40d691feee85946a50b180123a28c6b45a 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable @@ -259,7 +259,7 @@ vec3 scaleSoftClip(vec3 light) void main() { vec2 tc = vary_fragcoord.xy; - float depth = texture2DRect(depthMap, tc.xy).a; + float depth = texture2DRect(depthMap, tc.xy).r; vec3 pos = getPosition_d(tc, depth).xyz; vec3 norm = texture2DRect(normalMap, tc).xyz; norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..9dfacfb520cd8638b252a2845d3560f5806a4a7e --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl @@ -0,0 +1,318 @@ +/** + * @file softenLightF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +#extension GL_ARB_texture_rectangle : enable +#extension GL_ARB_texture_multisample : enable + +uniform sampler2DMS diffuseRect; +uniform sampler2DMS specularRect; +uniform sampler2DMS normalMap; +uniform sampler2DMS depthMap; +uniform sampler2D noiseMap; +uniform samplerCube environmentMap; +uniform sampler2D lightFunc; + +uniform float blur_size; +uniform float blur_fidelity; + +// Inputs +uniform vec4 morphFactor; +uniform vec3 camPosLocal; +//uniform vec4 camPosWorld; +uniform vec4 gamma; +uniform vec4 lightnorm; +uniform vec4 sunlight_color; +uniform vec4 ambient; +uniform vec4 blue_horizon; +uniform vec4 blue_density; +uniform vec4 haze_horizon; +uniform vec4 haze_density; +uniform vec4 cloud_shadow; +uniform vec4 density_multiplier; +uniform vec4 distance_multiplier; +uniform vec4 max_y; +uniform vec4 glow; +uniform float scene_light_strength; +uniform vec3 env_mat[3]; +//uniform mat4 shadow_matrix[3]; +//uniform vec4 shadow_clip; +uniform mat3 ssao_effect_mat; + +varying vec4 vary_light; +varying vec2 vary_fragcoord; + +vec3 vary_PositionEye; + +vec3 vary_SunlitColor; +vec3 vary_AmblitColor; +vec3 vary_AdditiveColor; +vec3 vary_AtmosAttenuation; + +uniform mat4 inv_proj; +uniform vec2 screen_res; + +vec4 getPosition_d(vec2 pos_screen, float depth) +{ + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +vec3 getPositionEye() +{ + return vary_PositionEye; +} +vec3 getSunlitColor() +{ + return vary_SunlitColor; +} +vec3 getAmblitColor() +{ + return vary_AmblitColor; +} +vec3 getAdditiveColor() +{ + return vary_AdditiveColor; +} +vec3 getAtmosAttenuation() +{ + return vary_AtmosAttenuation; +} + + +void setPositionEye(vec3 v) +{ + vary_PositionEye = v; +} + +void setSunlitColor(vec3 v) +{ + vary_SunlitColor = v; +} + +void setAmblitColor(vec3 v) +{ + vary_AmblitColor = v; +} + +void setAdditiveColor(vec3 v) +{ + vary_AdditiveColor = v; +} + +void setAtmosAttenuation(vec3 v) +{ + vary_AtmosAttenuation = v; +} + +void calcAtmospherics(vec3 inPositionEye, float ambFactor) { + + vec3 P = inPositionEye; + setPositionEye(P); + + //(TERRAIN) limit altitude + if (P.y > max_y.x) P *= (max_y.x / P.y); + if (P.y < -max_y.x) P *= (-max_y.x / P.y); + + vec3 tmpLightnorm = lightnorm.xyz; + + vec3 Pn = normalize(P); + float Plen = length(P); + + vec4 temp1 = vec4(0); + vec3 temp2 = vec3(0); + vec4 blue_weight; + vec4 haze_weight; + vec4 sunlight = sunlight_color; + vec4 light_atten; + + //sunlight attenuation effect (hue and brightness) due to atmosphere + //this is used later for sunlight modulation at various altitudes + light_atten = (blue_density * 1.0 + vec4(haze_density.r) * 0.25) * (density_multiplier.x * max_y.x); + //I had thought blue_density and haze_density should have equal weighting, + //but attenuation due to haze_density tends to seem too strong + + temp1 = blue_density + vec4(haze_density.r); + blue_weight = blue_density / temp1; + haze_weight = vec4(haze_density.r) / temp1; + + //(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain) + temp2.y = max(0.0, tmpLightnorm.y); + temp2.y = 1. / temp2.y; + sunlight *= exp( - light_atten * temp2.y); + + // main atmospheric scattering line integral + temp2.z = Plen * density_multiplier.x; + + // Transparency (-> temp1) + // ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier.x in a variable because the ati + // compiler gets confused. + temp1 = exp(-temp1 * temp2.z * distance_multiplier.x); + + //final atmosphere attenuation factor + setAtmosAttenuation(temp1.rgb); + + //compute haze glow + //(can use temp2.x as temp because we haven't used it yet) + temp2.x = dot(Pn, tmpLightnorm.xyz); + temp2.x = 1. - temp2.x; + //temp2.x is 0 at the sun and increases away from sun + temp2.x = max(temp2.x, .03); //was glow.y + //set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot) + temp2.x *= glow.x; + //higher glow.x gives dimmer glow (because next step is 1 / "angle") + temp2.x = pow(temp2.x, glow.z); + //glow.z should be negative, so we're doing a sort of (1 / "angle") function + + //add "minimum anti-solar illumination" + temp2.x += .25; + + //increase ambient when there are more clouds + vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow.x * 0.5; + + /* decrease value and saturation (that in HSV, not HSL) for occluded areas + * // for HSV color/geometry used here, see http://gimp-savvy.com/BOOK/index.html?node52.html + * // The following line of code performs the equivalent of: + * float ambAlpha = tmpAmbient.a; + * float ambValue = dot(vec3(tmpAmbient), vec3(0.577)); // projection onto <1/rt(3), 1/rt(3), 1/rt(3)>, the neutral white-black axis + * vec3 ambHueSat = vec3(tmpAmbient) - vec3(ambValue); + * tmpAmbient = vec4(RenderSSAOEffect.valueFactor * vec3(ambValue) + RenderSSAOEffect.saturationFactor *(1.0 - ambFactor) * ambHueSat, ambAlpha); + */ + tmpAmbient = vec4(mix(ssao_effect_mat * tmpAmbient.rgb, tmpAmbient.rgb, ambFactor), tmpAmbient.a); + + //haze color + setAdditiveColor( + vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow.x) + tmpAmbient) + + (haze_horizon.r * haze_weight) * (sunlight*(1.-cloud_shadow.x) * temp2.x + + tmpAmbient))); + + //brightness of surface both sunlight and ambient + setSunlitColor(vec3(sunlight * .5)); + setAmblitColor(vec3(tmpAmbient * .25)); + setAdditiveColor(getAdditiveColor() * vec3(1.0 - temp1)); +} + +vec3 atmosLighting(vec3 light) +{ + light *= getAtmosAttenuation().r; + light += getAdditiveColor(); + return (2.0 * light); +} + +vec3 atmosTransport(vec3 light) { + light *= getAtmosAttenuation().r; + light += getAdditiveColor() * 2.0; + return light; +} +vec3 atmosGetDiffuseSunlightColor() +{ + return getSunlitColor(); +} + +vec3 scaleDownLight(vec3 light) +{ + return (light / scene_light_strength ); +} + +vec3 scaleUpLight(vec3 light) +{ + return (light * scene_light_strength); +} + +vec3 atmosAmbient(vec3 light) +{ + return getAmblitColor() + light / 2.0; +} + +vec3 atmosAffectDirectionalLight(float lightIntensity) +{ + return getSunlitColor() * lightIntensity; +} + +vec3 scaleSoftClip(vec3 light) +{ + //soft clip effect: + light = 1. - clamp(light, vec3(0.), vec3(1.)); + light = 1. - pow(light, gamma.xxx); + + return light; +} + +vec4 texture2DMS(sampler2DMS tex, ivec2 tc) +{ + vec4 ret = vec4(0,0,0,0); + + for (int i = 0; i < samples; ++i) + { + ret += texelFetch(tex,tc,i); + } + + return ret/samples; +} + +void main() +{ + vec2 tc = vary_fragcoord.xy; + ivec2 itc = ivec2(tc); + + vec3 fcol = vec3(0,0,0); + + for (int i = 0; i < samples; ++i) + { + float depth = texelFetch(depthMap, itc, i).r; + vec3 pos = getPosition_d(tc, depth).xyz; + vec3 norm = texelFetch(normalMap, itc, i).xyz; + + norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm + //vec3 nz = texture2D(noiseMap, vary_fragcoord.xy/128.0).xyz; + + float da = max(dot(norm.xyz, vary_light.xyz), 0.0); + + vec4 diffuse = texelFetch(diffuseRect, itc, i); + if (diffuse.a >= 1.0) + { + fcol += diffuse.rgb; + } + else + { + vec4 spec = texelFetch(specularRect, itc, i); + + calcAtmospherics(pos.xyz, 1.0); + + vec3 col = atmosAmbient(vec3(0)); + col += atmosAffectDirectionalLight(max(min(da, 1.0), diffuse.a)); + + col *= diffuse.rgb; + + if (spec.a > 0.0) // specular reflection + { + // the old infinite-sky shiny reflection + // + vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); + float sa = dot(refnormpersp, vary_light.xyz); + vec3 dumbshiny = vary_SunlitColor*texture2D(lightFunc, vec2(sa, spec.a)).a; + + // add the two types of shiny together + col += dumbshiny * spec.rgb; + } + + col = atmosLighting(col); + col = scaleSoftClip(col); + fcol += col; + } + } + + gl_FragColor.rgb = fcol.rgb/samples; + gl_FragColor.a = 0.0; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl index 8f0bcca76b86a22f32101d0c81b3631110fff0c9..745cc0199236aeff1ade125a59f78bd48b15d382 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform vec2 screen_res; diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl index 29fac46bfe2dc022fb812455d3d7b072a9155c4d..9aaffc15bf3acbeb7ba94cd120d819742a00ce83 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightMSF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..4bb9bad2751bfc9c1da2352464aef5ba92c93245 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightMSF.glsl @@ -0,0 +1,234 @@ +/** + * @file multiSpotLightF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +//class 1 -- no shadows + +#extension GL_ARB_texture_rectangle : enable +#extension GL_ARB_texture_multisample : enable + +uniform sampler2DMS diffuseRect; +uniform sampler2DMS specularRect; +uniform sampler2DMS depthMap; +uniform sampler2DMS normalMap; +uniform sampler2D noiseMap; +uniform sampler2D lightFunc; +uniform sampler2D projectionMap; + +uniform mat4 proj_mat; //screen space to light space +uniform float proj_near; //near clip for projection +uniform vec3 proj_p; //plane projection is emitting from (in screen space) +uniform vec3 proj_n; +uniform float proj_focus; //distance from plane to begin blurring +uniform float proj_lod; //(number of mips in proj map) +uniform float proj_range; //range between near clip and far clip plane of projection +uniform float proj_ambient_lod; +uniform float proj_ambiance; +uniform float near_clip; +uniform float far_clip; + +uniform vec3 proj_origin; //origin of projection to be used for angular attenuation +uniform float sun_wash; +uniform int proj_shadow_idx; +uniform float shadow_fade; + +varying vec4 vary_light; + +varying vec4 vary_fragcoord; +uniform vec2 screen_res; + +uniform mat4 inv_proj; + +vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod) +{ + vec4 ret = texture2DLod(projectionMap, tc, lod); + + vec2 dist = tc-vec2(0.5); + + float det = max(1.0-lod/(proj_lod*0.5), 0.0); + + float d = dot(dist,dist); + + ret *= min(clamp((0.25-d)/0.25, 0.0, 1.0)+det, 1.0); + + return ret; +} + +vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod) +{ + vec4 ret = texture2DLod(projectionMap, tc, lod); + + vec2 dist = vec2(0.5) - abs(tc-vec2(0.5)); + + float det = min(lod/(proj_lod*0.5), 1.0); + + float d = min(dist.x, dist.y); + + float edge = 0.25*det; + + ret *= clamp(d/edge, 0.0, 1.0); + + return ret; +} + +vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod) +{ + vec4 ret = texture2DLod(projectionMap, tc, lod); + + vec2 dist = tc-vec2(0.5); + + float d = dot(dist,dist); + + ret *= min(clamp((0.25-d)/0.25, 0.0, 1.0), 1.0); + + return ret; +} + + +vec4 getPosition(ivec2 pos_screen, int sample) +{ + float depth = texelFetch(depthMap, pos_screen, sample).r; + vec2 sc = vec2(pos_screen.xy)*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +void main() +{ + vec4 frag = vary_fragcoord; + frag.xyz /= frag.w; + frag.xyz = frag.xyz*0.5+0.5; + frag.xy *= screen_res; + ivec2 itc = ivec2(frag.xy); + + vec3 fcol = vec3(0,0,0); + int wght = 0; + + for (int i = 0; i < samples; ++i) + { + vec3 pos = getPosition(itc, i).xyz; + vec3 lv = vary_light.xyz-pos.xyz; + float dist2 = dot(lv,lv); + dist2 /= vary_light.w; + if (dist2 <= 1.0) + { + vec3 norm = texelFetch(normalMap, itc, i).xyz*2.0-1.0; + + norm = normalize(norm); + float l_dist = -dot(lv, proj_n); + + vec4 proj_tc = (proj_mat * vec4(pos.xyz, 1.0)); + if (proj_tc.z >= 0.0) + { + proj_tc.xyz /= proj_tc.w; + + float fa = gl_Color.a+1.0; + float dist_atten = min(1.0-(dist2-1.0*(1.0-fa))/fa, 1.0); + if (dist_atten > 0.0) + { + lv = proj_origin-pos.xyz; + lv = normalize(lv); + float da = dot(norm, lv); + + vec3 col = vec3(0,0,0); + + vec3 diff_tex = texelFetch(diffuseRect, itc, i).rgb; + + float noise = texture2D(noiseMap, frag.xy/128.0).b; + if (proj_tc.z > 0.0 && + proj_tc.x < 1.0 && + proj_tc.y < 1.0 && + proj_tc.x > 0.0 && + proj_tc.y > 0.0) + { + float lit = 0.0; + float amb_da = proj_ambiance; + + if (da > 0.0) + { + float diff = clamp((l_dist-proj_focus)/proj_range, 0.0, 1.0); + float lod = diff * proj_lod; + + vec4 plcol = texture2DLodDiffuse(projectionMap, proj_tc.xy, lod); + + vec3 lcol = gl_Color.rgb * plcol.rgb * plcol.a; + + lit = da * dist_atten * noise; + + col = lcol*lit*diff_tex; + amb_da += (da*0.5)*proj_ambiance; + } + + //float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0); + vec4 amb_plcol = texture2DLodAmbient(projectionMap, proj_tc.xy, proj_lod); + + amb_da += (da*da*0.5+0.5)*proj_ambiance; + + amb_da *= dist_atten * noise; + + amb_da = min(amb_da, 1.0-lit); + + col += amb_da*gl_Color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a; + } + + + vec4 spec = texelFetch(specularRect, itc, i); + if (spec.a > 0.0) + { + vec3 ref = reflect(normalize(pos), norm); + + //project from point pos in direction ref to plane proj_p, proj_n + vec3 pdelta = proj_p-pos; + float ds = dot(ref, proj_n); + + if (ds < 0.0) + { + vec3 pfinal = pos + ref * dot(pdelta, proj_n)/ds; + + vec4 stc = (proj_mat * vec4(pfinal.xyz, 1.0)); + + if (stc.z > 0.0) + { + stc.xy /= stc.w; + + float fatten = clamp(spec.a*spec.a+spec.a*0.5, 0.25, 1.0); + + stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5); + + if (stc.x < 1.0 && + stc.y < 1.0 && + stc.x > 0.0 && + stc.y > 0.0) + { + vec4 scol = texture2DLodSpecular(projectionMap, stc.xy, proj_lod-spec.a*proj_lod); + col += dist_atten*scol.rgb*gl_Color.rgb*scol.a*spec.rgb; + } + } + } + } + + fcol += col; + ++wght; + } + } + } + } + + if (wght <= 0) + { + discard; + } + + gl_FragColor.rgb = fcol/samples; + gl_FragColor.a = 0.0; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..2cf7d194cc7926a2f6a2de96a6b1ccb5367733af --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl @@ -0,0 +1,19 @@ +/** + * @file starsF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +uniform sampler2D diffuseMap; + +void main() +{ + vec4 col = gl_Color * texture2D(diffuseMap, gl_TexCoord[0].xy); + + gl_FragData[0] = col; + gl_FragData[1] = vec4(0,0,0,0); + gl_FragData[2] = vec4(0,0,1,0); +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl new file mode 100644 index 0000000000000000000000000000000000000000..c43125dad9c4ccc76d324eca14e4572e405fce20 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl @@ -0,0 +1,17 @@ +/** + * @file starsV.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + + +void main() +{ + //transform vertex + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + gl_FrontColor = gl_Color; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl index 00093836a25472d9a1fa6ee545d04451d37c6e73..f20886565a196be01bbc88e5b2fedbbc4eb42a87 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + //class 1, no shadow, no SSAO, should never be called diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightMSF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..f20886565a196be01bbc88e5b2fedbbc4eb42a87 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightMSF.glsl @@ -0,0 +1,17 @@ +/** + * @file sunLightF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +//class 1, no shadow, no SSAO, should never be called + +#extension GL_ARB_texture_rectangle : enable + +void main() +{ + gl_FragColor = vec4(0,0,0,0); +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl index cd91351ad411e91b425f478e65f6123f583ea01b..665d8126a07683c7aa4c156a99341ead53a930b7 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl @@ -5,7 +5,7 @@ * $License$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable @@ -35,7 +35,7 @@ uniform float shadow_offset; vec4 getPosition(vec2 pos_screen) { - float depth = texture2DRect(depthMap, pos_screen.xy).a; + float depth = texture2DRect(depthMap, pos_screen.xy).r; vec2 sc = pos_screen.xy*2.0; sc /= screen_res; sc -= vec2(1.0,1.0); diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOMSF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..32d1b2149a4ce5a1ef002592c4b4c7fda38f9d6d --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOMSF.glsl @@ -0,0 +1,123 @@ +/** + * @file sunLightSSAOF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + + + +#extension GL_ARB_texture_rectangle : enable +#extension GL_ARB_texture_multisample : enable + +//class 1 -- no shadow, SSAO only + +uniform sampler2DMS depthMap; +uniform sampler2DMS normalMap; +uniform sampler2D noiseMap; + + +// Inputs +uniform mat4 shadow_matrix[6]; +uniform vec4 shadow_clip; +uniform float ssao_radius; +uniform float ssao_max_radius; +uniform float ssao_factor; +uniform float ssao_factor_inv; + +varying vec2 vary_fragcoord; +varying vec4 vary_light; + +uniform mat4 inv_proj; +uniform vec2 screen_res; + +uniform float shadow_bias; +uniform float shadow_offset; + +vec4 getPosition(ivec2 pos_screen, int sample) +{ + float depth = texelFetch(depthMap, pos_screen, sample).r; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +//calculate decreases in ambient lighting when crowded out (SSAO) +float calcAmbientOcclusion(vec4 pos, vec3 norm, int sample) +{ + float ret = 1.0; + + vec2 kern[8]; + // exponentially (^2) distant occlusion samples spread around origin + kern[0] = vec2(-1.0, 0.0) * 0.125*0.125; + kern[1] = vec2(1.0, 0.0) * 0.250*0.250; + kern[2] = vec2(0.0, 1.0) * 0.375*0.375; + kern[3] = vec2(0.0, -1.0) * 0.500*0.500; + kern[4] = vec2(0.7071, 0.7071) * 0.625*0.625; + kern[5] = vec2(-0.7071, -0.7071) * 0.750*0.750; + kern[6] = vec2(-0.7071, 0.7071) * 0.875*0.875; + kern[7] = vec2(0.7071, -0.7071) * 1.000*1.000; + + vec2 pos_screen = vary_fragcoord.xy; + vec3 pos_world = pos.xyz; + vec2 noise_reflect = texture2D(noiseMap, vary_fragcoord.xy/128.0).xy; + + float angle_hidden = 0.0; + int points = 0; + + float scale = min(ssao_radius / -pos_world.z, ssao_max_radius); + + // it was found that keeping # of samples a constant was the fastest, probably due to compiler optimizations unrolling?) + for (int i = 0; i < 8; i++) + { + ivec2 samppos_screen = ivec2(pos_screen + scale * reflect(kern[i], noise_reflect)); + vec3 samppos_world = getPosition(samppos_screen, sample).xyz; + + vec3 diff = pos_world - samppos_world; + float dist2 = dot(diff, diff); + + // assume each sample corresponds to an occluding sphere with constant radius, constant x-sectional area + // --> solid angle shrinking by the square of distance + //radius is somewhat arbitrary, can approx with just some constant k * 1 / dist^2 + //(k should vary inversely with # of samples, but this is taken care of later) + + angle_hidden = angle_hidden + float(dot((samppos_world - 0.05*norm - pos_world), norm) > 0.0) * min(1.0/dist2, ssao_factor_inv); + + // 'blocked' samples (significantly closer to camera relative to pos_world) are "no data", not "no occlusion" + points = points + int(diff.z > -1.0); + } + + angle_hidden = min(ssao_factor*angle_hidden/float(points), 1.0); + + ret = (1.0 - (float(points != 0) * angle_hidden)); + + return min(ret, 1.0); +} + +void main() +{ + vec2 pos_screen = vary_fragcoord.xy; + ivec2 itc = ivec2(pos_screen); + + float col = 0; + + for (int i = 0; i < samples; i++) + { + vec4 pos = getPosition(itc, i); + vec3 norm = texelFetch(normalMap, itc, i).xyz; + norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm + col += calcAmbientOcclusion(pos,norm,i); + } + + col /= samples; + + gl_FragColor[0] = 1.0; + gl_FragColor[1] = col; + gl_FragColor[2] = 1.0; + gl_FragColor[3] = 1.0; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl index 9beb513ad8a63a129b231381cb010e69c58b9510..814deb3677ab6489c305175878b9b905911996b5 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec4 vary_light; varying vec2 vary_fragcoord; diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl index 0edae4791826e05939f027c54e6e2d64f05b6a7f..d005f67bf6c96c22f7d32b6a06e64a1fba0fca25 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D detail_0; uniform sampler2D detail_1; diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl index a6163063bebecc5c23d812122b66c7b6b7ef52e8..3038fd296681900d004e67754beadfc18eeaccfd 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec3 vary_normal; diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl index c54d9a1e3e80dcf0bc9ba20d70c92b346d4fa3dc..de7e038402235d2a6044aa200d102923b210ed78 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl index 29689ecbafea503e78ef8c2413ed027c1e357885..a9bef4292de33cf182268663562bd8372d587cdd 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec3 vary_normal; diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl index e76f598d09de4cd973e867dd439901954cc4475b..2710422d32bad10dd52eb1e52263886dd534af84 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl index 649e3926300d27cf2a547230910f5a8dfba0c172..5397290b116b76b017854c3c37c84658a6931c90 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void calcAtmospherics(vec3 inPositionEye); diff --git a/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl index f2023fa5ea1a76d510ffdaaa19e70acfa63078e8..32f5f5f236043bd6f40fb5cff98d7b1a0de5dabd 100644 --- a/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl +++ b/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable diff --git a/indra/newview/app_settings/shaders/class1/effects/glowExtractMSF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowExtractMSF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..9267a8585dadcc7ea88ea753dad066da2cd8a905 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/effects/glowExtractMSF.glsl @@ -0,0 +1,38 @@ +/** + * @file glowExtractF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +#extension GL_ARB_texture_rectangle : enable +#extension GL_ARB_texture_multisample : enable + +uniform sampler2DMS diffuseMap; +uniform float minLuminance; +uniform float maxExtractAlpha; +uniform vec3 lumWeights; +uniform vec3 warmthWeights; +uniform float warmthAmount; + +void main() +{ + ivec2 itc = ivec2(gl_TexCoord[0].xy); + vec4 fcol = vec4(0,0,0,0); + + for (int i = 0; i < samples; i++) + { + vec4 col = texelFetch(diffuseMap, itc, i); + + /// CALCULATING LUMINANCE (Using NTSC lum weights) + /// http://en.wikipedia.org/wiki/Luma_%28video%29 + float lum = smoothstep(minLuminance, minLuminance+1.0, dot(col.rgb, lumWeights ) ); + float warmth = smoothstep(minLuminance, minLuminance+1.0, max(col.r * warmthWeights.r, max(col.g * warmthWeights.g, col.b * warmthWeights.b)) ); + + fcol += vec4(col.rgb, max(col.a, mix(lum, warmth, warmthAmount) * maxExtractAlpha)); + } + + gl_FragColor = fcol/samples; +} diff --git a/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl b/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl index 0ca0608b45aefebae7f54ce1016af2ead16223a5..76736fed53be470fc93969babe3cdc41516474d6 100644 --- a/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl +++ b/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void main() { diff --git a/indra/newview/app_settings/shaders/class1/effects/glowF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowF.glsl index 65fc2e9f99bc9b3bc9036c3658dfb93a51498467..d3225546b3041d2d5a7e68f2c417e06af37c17f0 100644 --- a/indra/newview/app_settings/shaders/class1/effects/glowF.glsl +++ b/indra/newview/app_settings/shaders/class1/effects/glowF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; uniform float glowStrength; diff --git a/indra/newview/app_settings/shaders/class1/effects/glowV.glsl b/indra/newview/app_settings/shaders/class1/effects/glowV.glsl index 0bd44cec903643cb7715b843524663886912e073..9bb41626ae6183ab6d1cd524697151cae7101d82 100644 --- a/indra/newview/app_settings/shaders/class1/effects/glowV.glsl +++ b/indra/newview/app_settings/shaders/class1/effects/glowV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform vec2 glowDelta; diff --git a/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl b/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl index ac00f15b35b830f63cf6f11975994f261a08461d..cdc2ca3da2f832b2ef53666ef442f5febd7f27cd 100644 --- a/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D detail0; uniform sampler2D detail1; diff --git a/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl b/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl index 1e19ee7699f4e97fa046b6092ea1e700f582b53b..8af981915bceea719f62cda3153a9ae3368befbf 100644 --- a/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); diff --git a/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl b/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl index 34f78565a5c3746d5de909709da4b918249d46a3..d94d986581bbbbb8044e0e8391cfc72ac95deed8 100644 --- a/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + // this class1 shader is just a copy of terrainF diff --git a/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl b/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl index 0dfac84a6e1928590de0cb72dc218f877c8ebb7f..06854fcc0a0a874d1e4aafed94697b07242d3a63 100644 --- a/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; uniform sampler2D bumpMap; diff --git a/indra/newview/app_settings/shaders/class1/environment/waterF.glsl b/indra/newview/app_settings/shaders/class1/environment/waterF.glsl index 4e9c09b1ea7a6dcf13fe07d22e24bb4311329dd5..0f24e3c35afff6d019ce8b1f425d02c40027aae1 100644 --- a/indra/newview/app_settings/shaders/class1/environment/waterF.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/waterF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + vec3 scaleSoftClip(vec3 inColor); vec3 atmosTransport(vec3 inColor); diff --git a/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl b/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl index a34cf23790d5bf57abdfa2c1ecaa64cc5d1ee8be..630459b3245b1880d44d48e6d924c5d05ebd9f7b 100644 --- a/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + vec4 applyWaterFog(vec4 color) { diff --git a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl index 161c794c68f7883207ae8227d43179e21b28ce8f..831d6a761c75dec5b9fbfb2072adac0e68a7320c 100644 --- a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void calcAtmospherics(vec3 inPositionEye); diff --git a/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl b/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl index 6f821f893d6faab36e2d78c2ce054574aee3c3a6..f6c6d945de38d72189664b29b34b4252cbac5d39 100644 --- a/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; diff --git a/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl b/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl index d1c98bf70cbfc39b54e6e28e96e266de3828a4a0..f114f766bf66bb82d9d959ea9718dc4f21250aeb 100644 --- a/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void main() { diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl index 9c59e8c3ad719d3f9d298c849354098b0b1d619d..1796730c923d907aac4a9ac14eb1ca43f1ab6057 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl index 1fee99c446f214a9237d1225b86cd5906613a46f..bfe0be9fdf5c29f97aaa5852e96ac12f35e89d40 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl index fb5da21c72227b8ce91e757fa23a39d6904d1a61..6f1fe9100707f7a4af9e019ce57d1826f2e207be 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl index 1bdaccf9b8f2598666b19a1780626949ea71cf2b..19072cd052198bcd76719ea233279a6bf18db0e3 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl @@ -6,7 +6,7 @@ */ -#version 120 + uniform sampler2D diffuseMap; uniform samplerCube environmentMap; diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl index 2e94d3bbf1955bea23c80c08691f7de8af140150..0ae6dc89e25a4c5ecb4bdcb557f1651b4717a4eb 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl @@ -6,7 +6,7 @@ */ -#version 120 + uniform sampler2D diffuseMap; diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl index 714f9a2551005f78c2a88bdd869b8163299236f8..5d4bf2c33e8a0095007f818ac719078df14a8e0d 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + float calcDirectionalLight(vec3 n, vec3 l) { diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl index 65b45f80818c376fe9d8ca1fd16fb73a1189e327..574252af12f4464161ea4d16f3aeffb068a98a2d 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + float calcDirectionalLight(vec3 n, vec3 l) diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl index 7f65ea76f71c156fbbfc3119e3f791c69b782bfe..29f575b7e5d29ceef8af80f2d35fca62c0a2074e 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl index 8f13e6dc0447138b2d4cf8afa8008b07e3a91e0f..65da5a68255311dcb0184e7847e0d573ef76e09f 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl index 56f31f6a79b2f7c8ae0feb748178e31efd771caf..d491f1102ea7cec45fe88cf74987c765e1d7ac34 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + float calcDirectionalLight(vec3 n, vec3 l); diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightV.glsl index 64d549ff5299d898a385ec6c6062227a65c38f38..ef38ee9699faca4b47b5d8615b7e3256f78e52af 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightV.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + float calcDirectionalLight(vec3 n, vec3 l); diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl index c5d084c1323509ced287ea0bae5a2e4ce8f782da..286c92326b965074212497634f35524fa4f021e7 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; diff --git a/indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl b/indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl index 732d2464719fa82dee191028f128d9668297f8bd..772a420e33335fd683ab053e8b59c3dac092fd50 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + float calcDirectionalLightSpecular(inout vec4 specular, vec3 view, vec3 n, vec3 l, vec3 lightCol, float da); vec3 atmosAmbient(vec3 light); diff --git a/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl index 73e1a1ec26eaa41c3b1adfbd625b23707e0fced5..da60a3ddf51e3cde2d691ba0d55442b483a4acc4 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + float calcDirectionalLight(vec3 n, vec3 l); diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl index afc3dc89bf457484f050ff0771bedc3af5a202a7..c0b72115dd08974aa5dd550712255ac3bf5317ae 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void fullbright_lighting(); diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl index 3dc4294f6781d11bf7a86ead0232a3a2430b0451..391c06edc87bd6d4a77d0c2d866d2f8f8def21d1 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void fullbright_shiny_lighting(); diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl index f0baeeeee58c787e65ec53f65d4cd4ffe4fb0de1..f44a5ce32e5ab4760f27269a464b65a7ee5f9121 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl @@ -5,7 +5,7 @@ * $License$ */ -#version 120 + void calcAtmospherics(vec3 inPositionEye); mat4 getObjectSkinnedTransform(); diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl index 02367b94393739692337d0740827c8246924ee80..31e0f0a429a6eb300b53ebb5d5c5416aa10d6638 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void calcAtmospherics(vec3 inPositionEye); diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl index 5daf66fb3108400b3613858b3c2f2139f14f0acd..8ffb252f57a86bc452853ce800f0a65561999053 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl @@ -5,7 +5,7 @@ * $License$ */ -#version 120 + void fullbright_shiny_lighting_water(); diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl index 02ff3cc2a96382d969bc020b3f87604cc9e462e7..e5dafa8c789e07ee9069ba1ae34ec30718888004 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl @@ -5,7 +5,7 @@ * $License$ */ -#version 120 + void calcAtmospherics(vec3 inPositionEye); mat4 getObjectSkinnedTransform(); diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl index 38e07dbd80c545f3413f3ca3c5913ebd9a6bc040..3382384c995bf3a33792b19755b33115bd649895 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void calcAtmospherics(vec3 inPositionEye); diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl index afaac4f69c524555118bb5029a45e8dcf914161e..220f26614f3259e6b173e6abf798018e7d5054b0 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void fullbright_lighting_water(); diff --git a/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl b/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl index 2cf7a69baac7ae157088045d51fb6fe19bc886d1..d079de53773baac4981fa9e016c758c8b4bf0310 100644 --- a/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void shiny_lighting(); diff --git a/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl index 4146646058de4abbfb34a057243967421f838f7b..cd655f3bb51cde3cf018f6cfa20cef2f5efa5416 100644 --- a/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl @@ -5,7 +5,7 @@ * $License$ */ -#version 120 + vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); void calcAtmospherics(vec3 inPositionEye); diff --git a/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl b/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl index 6ea83b721defd91a9cf7cf46d665f5eed8ce517a..68a086dbc1a5da2c567e7e0ddc6fb63186858f21 100644 --- a/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void calcAtmospherics(vec3 inPositionEye); diff --git a/indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl index e3babe2210f6c10fcb7f5347448893d409cefb16..4649d1c47c10175c9fc26516bdda4edace36a91a 100644 --- a/indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void shiny_lighting_water(); diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleF.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleF.glsl index d449d37c0c7f499b1ccce65b25d0d39af2c20060..b4e4dcfbbf14fa7a59f49add2de3521a31a919ee 100644 --- a/indra/newview/app_settings/shaders/class1/objects/simpleF.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/simpleF.glsl @@ -5,8 +5,6 @@ * $/LicenseInfo$ */ -#version 120 - void default_lighting(); void main() diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl index be38a14d527c7eb5d588a6d3780e3dd3b4e14aab..900448035c44a78a29fde95f33dff7b05852efe8 100644 --- a/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl @@ -5,7 +5,7 @@ * $License$ */ -#version 120 + vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); void calcAtmospherics(vec3 inPositionEye); diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl index 0d8e14e2e38ee1f3eafd858b2db37a208680c227..b493f76fcc60ce17619dbb09a46fbde93e2fa63d 100644 --- a/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); void calcAtmospherics(vec3 inPositionEye); diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl index 68bd81e029328495ea7350222507de43257b9fdc..4ec5ee43b416d95b8937d398c2c3abfbc4ced9dd 100644 --- a/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void default_lighting_water(); diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl index f337bde32922bf4b183ec7a8288f10830c0f4d3a..3d05850ab3d0e3da1b5e99c3f5489cad3adcbf92 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + vec3 atmosLighting(vec3 light) { diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl index 4b402a70287c6fe1580983b0d39a599fbe783346..f1a0af21afe7315a6dc9175b35df48ab4b5c8410 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + vec3 atmosAmbient(vec3 light) { diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl index 20948b1e468d07d6a6bd402c09cdf9a5623cde59..73bbd57315af369b277d5303652540829935c5a2 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void setPositionEye(vec3 v); diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl index 8a2c2a71862fb7402c313f95af0e03248262e8c4..e0eb7b37672e3c9dd242feb3195231ab3103568e 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec3 vary_PositionEye; diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl index a1dd4ed5fedefd11993c77b5fa129a1815093d98..a251213ff535eaa4121ec9926ebbb83387aefecb 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec3 vary_PositionEye; diff --git a/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl b/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl index 7aed1fd3b5cd52c82194cc5b751d832e9259bb99..4958cb2f72a4ce2b421096e64f4f0e1facf8951c 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform vec4 gamma; diff --git a/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl b/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl index 6780dc4d3e1249c3eca244acc7e5fe4ced295851..75929bc6090ba10fc69e3f2765c70a946e7f6ac0 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + vec3 atmosTransport(vec3 light) { diff --git a/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl b/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl index 172c2ca078ad4a7f5402a8b882d4f18877c23013..3e8b719f9392bc800651c762621924063e6392b9 100644 --- a/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl +++ b/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + vec4 calcLightingSpecular(vec3 pos, vec3 norm, vec4 color, inout vec4 specularColor, vec4 baseCol); void calcAtmospherics(vec3 inPositionEye); diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl index 6dfc1b952c1fc52bb82e8d690228c57d65d13457..681e52de2ab7ac45578dd229cf43c6e1f6a463aa 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl @@ -5,11 +5,10 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable -uniform sampler2D diffuseMap; uniform sampler2DRectShadow shadowMap0; uniform sampler2DRectShadow shadowMap1; uniform sampler2DRectShadow shadowMap2; @@ -105,7 +104,7 @@ void main() } } - vec4 diff= texture2D(diffuseMap, gl_TexCoord[0].xy); + vec4 diff = diffuseLookup(gl_TexCoord[0].xy); vec4 col = vec4(vary_ambient + vary_directional.rgb*shadow, gl_Color.a); vec4 color = diff * col; diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..5350359f750676b104cc741f9b3ad00cd2c2f589 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl @@ -0,0 +1,125 @@ +/** + * @file alphaF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRectShadow shadowMap0; +uniform sampler2DRectShadow shadowMap1; +uniform sampler2DRectShadow shadowMap2; +uniform sampler2DRectShadow shadowMap3; +uniform sampler2DRect depthMap; +uniform sampler2D diffuseMap; + +uniform mat4 shadow_matrix[6]; +uniform vec4 shadow_clip; +uniform vec2 screen_res; +uniform vec2 shadow_res; + +vec3 atmosLighting(vec3 light); +vec3 scaleSoftClip(vec3 light); + +varying vec3 vary_ambient; +varying vec3 vary_directional; +varying vec3 vary_fragcoord; +varying vec3 vary_position; +varying vec3 vary_pointlight_col; + +uniform float shadow_bias; + +uniform mat4 inv_proj; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos.xyz /= pos.w; + pos.w = 1.0; + return pos; +} + +float pcfShadow(sampler2DRectShadow shadowMap, vec4 stc, float scl) +{ + stc.xyz /= stc.w; + stc.z += shadow_bias; + + float cs = shadow2DRect(shadowMap, stc.xyz).x; + float shadow = cs; + + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(scl, scl, 0.0)).x, cs); + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(scl, -scl, 0.0)).x, cs); + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(-scl, scl, 0.0)).x, cs); + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(-scl, -scl, 0.0)).x, cs); + + return shadow/5.0; +} + + +void main() +{ + vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5; + frag *= screen_res; + + float shadow = 1.0; + vec4 pos = vec4(vary_position, 1.0); + + vec4 spos = pos; + + if (spos.z > -shadow_clip.w) + { + vec4 lpos; + + if (spos.z < -shadow_clip.z) + { + lpos = shadow_matrix[3]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap3, lpos, 1.5); + shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0); + } + else if (spos.z < -shadow_clip.y) + { + lpos = shadow_matrix[2]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap2, lpos, 1.5); + } + else if (spos.z < -shadow_clip.x) + { + lpos = shadow_matrix[1]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap1, lpos, 1.5); + } + else + { + lpos = shadow_matrix[0]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap0, lpos, 1.5); + } + } + + vec4 diff = texture2D(diffuseMap,gl_TexCoord[0].xy); + + vec4 col = vec4(vary_ambient + vary_directional.rgb*shadow, gl_Color.a); + vec4 color = diff * col; + + color.rgb = atmosLighting(color.rgb); + + color.rgb = scaleSoftClip(color.rgb); + + color.rgb += diff.rgb * vary_pointlight_col.rgb; + + //gl_FragColor = gl_Color; + gl_FragColor = color; + //gl_FragColor.r = 0.0; + //gl_FragColor = vec4(1,shadow,1,1); + +} + diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl index dfb36980b006cb6b56ceda38ee0540fbf584e0c3..948a52da5b83f96d9ffe1878dd99154a1bc31fee 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl @@ -5,7 +5,7 @@ * $License$ */ -#version 120 + vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); void calcAtmospherics(vec3 inPositionEye); diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl index f6160815ebb51b5afa5b3720d8cc2702bd041150..f616ecc872389ba7a816d2b0c3fb3ae688b7f368 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); void calcAtmospherics(vec3 inPositionEye); @@ -22,6 +22,7 @@ varying vec3 vary_directional; varying vec3 vary_fragcoord; varying vec3 vary_position; varying vec3 vary_pointlight_col; +varying float vary_texture_index; uniform float near_clip; uniform float shadow_offset; @@ -60,11 +61,13 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa void main() { //transform vertex - gl_Position = ftransform(); + vec4 vert = vec4(gl_Vertex.xyz, 1.0); + vary_texture_index = gl_Vertex.w; + gl_Position = gl_ModelViewProjectionMatrix * vert; gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; - vec4 pos = (gl_ModelViewMatrix * gl_Vertex); + vec4 pos = (gl_ModelViewMatrix * vert); vec3 norm = normalize(gl_NormalMatrix * gl_Normal); float dp_directional_light = max(0.0, dot(norm, gl_LightSource[0].position.xyz)); @@ -99,7 +102,7 @@ void main() gl_FogFragCoord = pos.z; - pos = gl_ModelViewProjectionMatrix * gl_Vertex; + pos = gl_ModelViewProjectionMatrix * vert; vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip); } diff --git a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl index 0ae09df0c6d1262e6e475f2e3ef6b566bb2f2fdd..01e40afc4f22150c2f488fcbfac7856b6815a583 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); mat4 getSkinnedTransform(); diff --git a/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl b/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl index 3155f3f9295a3602e8eaa1915910fd58226a48d8..729e4b55435068b2f58ec5e8a41f6f99382bc429 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable @@ -22,7 +22,7 @@ uniform vec2 screen_res; float getDepth(vec2 pos_screen) { - float z = texture2DRect(depthMap, pos_screen.xy).a; + float z = texture2DRect(depthMap, pos_screen.xy).r; z = z*2.0-1.0; vec4 ndc = vec4(0.0, 0.0, z, 1.0); vec4 p = inv_proj*ndc; diff --git a/indra/newview/app_settings/shaders/class2/deferred/edgeMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/edgeMSF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..b22bc5b28828f2b7db99f79076cf65a2553af0bc --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/edgeMSF.glsl @@ -0,0 +1,74 @@ +/** + * @file edgeF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +#extension GL_ARB_texture_rectangle : enable +#extension GL_ARB_texture_multisample : enable + +uniform sampler2DMS depthMap; +uniform sampler2DMS normalMap; + +varying vec2 vary_fragcoord; + +uniform float depth_cutoff; +uniform float norm_cutoff; + +uniform mat4 inv_proj; +uniform vec2 screen_res; + +float getDepth(ivec2 pos_screen, int sample) +{ + float z = texelFetch(depthMap, pos_screen, sample).r; + z = z*2.0-1.0; + vec4 ndc = vec4(0.0, 0.0, z, 1.0); + vec4 p = inv_proj*ndc; + return p.z/p.w; +} + +void main() +{ + float e = 0; + + ivec2 itc = ivec2(vary_fragcoord.xy); + + for (int i = 0; i < samples; i++) + { + vec3 norm = texelFetch(normalMap, itc, i).xyz; + norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm + float depth = getDepth(itc, i); + + vec2 tc = vary_fragcoord.xy; + + int sc = 1; + + vec2 de; + de.x = (depth-getDepth(itc+ivec2(sc, sc),i)) + (depth-getDepth(itc+ivec2(-sc, -sc), i)); + de.y = (depth-getDepth(itc+ivec2(-sc, sc),i)) + (depth-getDepth(itc+ivec2(sc, -sc), i)); + de /= depth; + de *= de; + de = step(depth_cutoff, de); + + vec2 ne; + vec3 nexnorm = texelFetch(normalMap, itc+ivec2(-sc,-sc), i).rgb; + nexnorm = vec3((nexnorm.xy-0.5)*2.0,nexnorm.z); // unpack norm + ne.x = dot(nexnorm, norm); + vec3 neynorm = texelFetch(normalMap, itc+ivec2(sc,sc), i).rgb; + neynorm = vec3((neynorm.xy-0.5)*2.0,neynorm.z); // unpack norm + ne.y = dot(neynorm, norm); + + ne = 1.0-ne; + + ne = step(norm_cutoff, ne); + + e += dot(de,de)+dot(ne,ne); + } + + e /= samples; + + gl_FragColor.a = e; +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl b/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl index b3413c301fc442633173347773d2f1c761d489ad..393084a3db72d9535d533e2bbe5090cbad351aa4 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec2 vary_fragcoord; uniform vec2 screen_res; diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl index d6cd984ebe1bfa037c4a20740c21a4087fc87cf9..f54186ffca369052f2a30023179f65502ab79baa 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable @@ -91,7 +91,7 @@ vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod) vec4 getPosition(vec2 pos_screen) { - float depth = texture2DRect(depthMap, pos_screen.xy).a; + float depth = texture2DRect(depthMap, pos_screen.xy).r; vec2 sc = pos_screen.xy*2.0; sc /= screen_res; sc -= vec2(1.0,1.0); diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightMSF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..fee32be3e353c660853b648cef66c377c8baee62 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightMSF.glsl @@ -0,0 +1,244 @@ +/** + * @file multiSpotLightF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +#extension GL_ARB_texture_rectangle : enable +#extension GL_ARB_texture_multisample : enable + +uniform sampler2DMS diffuseRect; +uniform sampler2DMS specularRect; +uniform sampler2DMS depthMap; +uniform sampler2DMS normalMap; +uniform sampler2DRect lightMap; +uniform sampler2D noiseMap; +uniform sampler2D lightFunc; +uniform sampler2D projectionMap; + +uniform mat4 proj_mat; //screen space to light space +uniform float proj_near; //near clip for projection +uniform vec3 proj_p; //plane projection is emitting from (in screen space) +uniform vec3 proj_n; +uniform float proj_focus; //distance from plane to begin blurring +uniform float proj_lod; //(number of mips in proj map) +uniform float proj_range; //range between near clip and far clip plane of projection +uniform float proj_ambient_lod; +uniform float proj_ambiance; +uniform float near_clip; +uniform float far_clip; + +uniform vec3 proj_origin; //origin of projection to be used for angular attenuation +uniform float sun_wash; +uniform int proj_shadow_idx; +uniform float shadow_fade; + +varying vec4 vary_light; + +varying vec4 vary_fragcoord; +uniform vec2 screen_res; + +uniform mat4 inv_proj; + +vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod) +{ + vec4 ret = texture2DLod(projectionMap, tc, lod); + + vec2 dist = tc-vec2(0.5); + + float det = max(1.0-lod/(proj_lod*0.5), 0.0); + + float d = dot(dist,dist); + + ret *= min(clamp((0.25-d)/0.25, 0.0, 1.0)+det, 1.0); + + return ret; +} + +vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod) +{ + vec4 ret = texture2DLod(projectionMap, tc, lod); + + vec2 dist = vec2(0.5) - abs(tc-vec2(0.5)); + + float det = min(lod/(proj_lod*0.5), 1.0); + + float d = min(dist.x, dist.y); + + float edge = 0.25*det; + + ret *= clamp(d/edge, 0.0, 1.0); + + return ret; +} + +vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod) +{ + vec4 ret = texture2DLod(projectionMap, tc, lod); + + vec2 dist = tc-vec2(0.5); + + float d = dot(dist,dist); + + ret *= min(clamp((0.25-d)/0.25, 0.0, 1.0), 1.0); + + return ret; +} + + +vec4 getPosition(ivec2 pos_screen, int sample) +{ + float depth = texelFetch(depthMap, pos_screen, sample).r; + vec2 sc = vec2(pos_screen.xy)*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +void main() +{ + int wght = 0; + + vec3 fcol = vec3(0,0,0); + + vec2 frag = (vary_fragcoord.xy*0.5+0.5)*screen_res; + + ivec2 itc = ivec2(frag.xy); + + float shadow = 1.0; + + if (proj_shadow_idx >= 0) + { + vec4 shd = texture2DRect(lightMap, frag); + float sh[2]; + sh[0] = shd.b; + sh[1] = shd.a; + shadow = min(sh[proj_shadow_idx]+shadow_fade, 1.0); + } + + for (int i = 0; i < samples; i++) + { + vec3 pos = getPosition(itc, i).xyz; + vec3 lv = vary_light.xyz-pos.xyz; + float dist2 = dot(lv,lv); + dist2 /= vary_light.w; + if (dist2 <= 1.0) + { + vec3 norm = texelFetch(normalMap, itc, i).xyz; + norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm + + norm = normalize(norm); + float l_dist = -dot(lv, proj_n); + + vec4 proj_tc = (proj_mat * vec4(pos.xyz, 1.0)); + if (proj_tc.z >= 0.0) + { + proj_tc.xyz /= proj_tc.w; + + float fa = gl_Color.a+1.0; + float dist_atten = min(1.0-(dist2-1.0*(1.0-fa))/fa, 1.0); + if (dist_atten > 0.0) + { + lv = proj_origin-pos.xyz; + lv = normalize(lv); + float da = dot(norm, lv); + + vec3 col = vec3(0,0,0); + + vec3 diff_tex = texelFetch(diffuseRect, itc, i).rgb; + + float noise = texture2D(noiseMap, frag.xy/128.0).b; + if (proj_tc.z > 0.0 && + proj_tc.x < 1.0 && + proj_tc.y < 1.0 && + proj_tc.x > 0.0 && + proj_tc.y > 0.0) + { + float lit = 0.0; + float amb_da = proj_ambiance; + + if (da > 0.0) + { + float diff = clamp((l_dist-proj_focus)/proj_range, 0.0, 1.0); + float lod = diff * proj_lod; + + vec4 plcol = texture2DLodDiffuse(projectionMap, proj_tc.xy, lod); + + vec3 lcol = gl_Color.rgb * plcol.rgb * plcol.a; + + lit = da * dist_atten * noise; + + col = lcol*lit*diff_tex*shadow; + amb_da += (da*0.5)*(1.0-shadow)*proj_ambiance; + } + + //float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0); + vec4 amb_plcol = texture2DLodAmbient(projectionMap, proj_tc.xy, proj_lod); + + amb_da += (da*da*0.5+0.5)*proj_ambiance; + + amb_da *= dist_atten * noise; + + amb_da = min(amb_da, 1.0-lit); + + col += amb_da*gl_Color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a; + } + + + vec4 spec = texelFetch(specularRect, itc, i); + if (spec.a > 0.0) + { + vec3 ref = reflect(normalize(pos), norm); + + //project from point pos in direction ref to plane proj_p, proj_n + vec3 pdelta = proj_p-pos; + float ds = dot(ref, proj_n); + + if (ds < 0.0) + { + vec3 pfinal = pos + ref * dot(pdelta, proj_n)/ds; + + vec4 stc = (proj_mat * vec4(pfinal.xyz, 1.0)); + + if (stc.z > 0.0) + { + stc.xy /= stc.w; + + float fatten = clamp(spec.a*spec.a+spec.a*0.5, 0.25, 1.0); + + stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5); + + if (stc.x < 1.0 && + stc.y < 1.0 && + stc.x > 0.0 && + stc.y > 0.0) + { + vec4 scol = texture2DLodSpecular(projectionMap, stc.xy, proj_lod-spec.a*proj_lod); + col += dist_atten*scol.rgb*gl_Color.rgb*scol.a*spec.rgb*shadow; + } + } + } + } + + fcol += col; + wght++; + } + } + } + } + + if (wght <= 0) + { + discard; + } + + gl_FragColor.rgb = fcol/samples; + gl_FragColor.a = 0.0; +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index 0160e84278fc665f06adde57cda481a1b9d39f52..66a1a8515f257bf4fc7fa610edb12afe455d20cb 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable @@ -71,7 +71,7 @@ vec4 getPosition_d(vec2 pos_screen, float depth) vec4 getPosition(vec2 pos_screen) { //get position in screen space (world units) given window coordinate and depth map - float depth = texture2DRect(depthMap, pos_screen.xy).a; + float depth = texture2DRect(depthMap, pos_screen.xy).r; return getPosition_d(pos_screen, depth); } @@ -258,7 +258,7 @@ vec3 scaleSoftClip(vec3 light) void main() { vec2 tc = vary_fragcoord.xy; - float depth = texture2DRect(depthMap, tc.xy).a; + float depth = texture2DRect(depthMap, tc.xy).r; vec3 pos = getPosition_d(tc, depth).xyz; vec3 norm = texture2DRect(normalMap, tc).xyz; norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm @@ -288,54 +288,8 @@ void main() float sa = dot(refnormpersp, vary_light.xyz); vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a; - /* - // screen-space cheap fakey reflection map - // - vec3 refnorm = normalize(reflect(vec3(0,0,-1), norm.xyz)); - depth -= 0.5; // unbias depth - // first figure out where we'll make our 2D guess from - vec2 ref2d = (0.25 * screen_res.y) * (refnorm.xy) * abs(refnorm.z) / depth; - // Offset the guess source a little according to a trivial - // checkerboard dither function and spec.a. - // This is meant to be similar to sampling a blurred version - // of the diffuse map. LOD would be better in that regard. - // The goal of the blur is to soften reflections in surfaces - // with low shinyness, and also to disguise our lameness. - float checkerboard = floor(mod(tc.x+tc.y, 2.0)); // 0.0, 1.0 - float checkoffset = (3.0 + (7.0*(1.0-spec.a)))*(checkerboard-0.5); - ref2d += vec2(checkoffset, checkoffset); - ref2d += tc.xy; // use as offset from destination - // Get attributes from the 2D guess point. - // We average two samples of diffuse (not of anything else) per - // pixel to try to reduce aliasing some more. - vec3 refcol = 0.5 * (texture2DRect(diffuseRect, ref2d + vec2(0.0, -checkoffset)).rgb + - texture2DRect(diffuseRect, ref2d + vec2(-checkoffset, 0.0)).rgb); - float refdepth = texture2DRect(depthMap, ref2d).a; - vec3 refpos = getPosition_d(ref2d, refdepth).xyz; - float refshad = texture2DRect(lightMap, ref2d).r; - vec3 refn = texture2DRect(normalMap, ref2d).rgb; - refn = vec3((refn.xy-0.5)*2.0,refn.z); // unpack norm - refn = normalize(refn); - // figure out how appropriate our guess actually was - float refapprop = max(0.0, dot(-refnorm, normalize(pos - refpos))); - // darken reflections from points which face away from the reflected ray - our guess was a back-face - //refapprop *= step(dot(refnorm, refn), 0.0); - refapprop = min(refapprop, max(0.0, -dot(refnorm, refn))); // more conservative variant - // get appropriate light strength for guess-point - // reflect light direction to increase the illusion that - // these are reflections. - vec3 reflight = reflect(lightnorm.xyz, norm.xyz); - float reflit = min(max(dot(refn, reflight.xyz), 0.0), refshad); - // apply sun color to guess-point, dampen according to inappropriateness of guess - float refmod = min(refapprop, reflit); - vec3 refprod = vary_SunlitColor * refcol.rgb * refmod; - vec3 ssshiny = (refprod * spec.a); - ssshiny *= 0.3; // dampen it even more - */ - vec3 ssshiny = vec3(0,0,0); - // add the two types of shiny together - col += (ssshiny + dumbshiny) * spec.rgb; + col += dumbshiny * spec.rgb; } col = atmosLighting(col); diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..0bae10ca7d218a844f7fd4562548a6cb9881fb0d --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl @@ -0,0 +1,307 @@ +/** + * @file softenLightMSF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +#extension GL_ARB_texture_rectangle : enable +#extension GL_ARB_texture_multisample : enable + +uniform sampler2DMS diffuseRect; +uniform sampler2DMS specularRect; +uniform sampler2DMS normalMap; +uniform sampler2DRect lightMap; +uniform sampler2DMS depthMap; +uniform sampler2D noiseMap; +uniform samplerCube environmentMap; +uniform sampler2D lightFunc; +uniform vec3 gi_quad; + +uniform float blur_size; +uniform float blur_fidelity; + +// Inputs +uniform vec4 morphFactor; +uniform vec3 camPosLocal; +//uniform vec4 camPosWorld; +uniform vec4 gamma; +uniform vec4 lightnorm; +uniform vec4 sunlight_color; +uniform vec4 ambient; +uniform vec4 blue_horizon; +uniform vec4 blue_density; +uniform vec4 haze_horizon; +uniform vec4 haze_density; +uniform vec4 cloud_shadow; +uniform vec4 density_multiplier; +uniform vec4 distance_multiplier; +uniform vec4 max_y; +uniform vec4 glow; +uniform float scene_light_strength; +uniform vec3 env_mat[3]; +uniform vec4 shadow_clip; +uniform mat3 ssao_effect_mat; + +uniform mat4 inv_proj; +uniform vec2 screen_res; + +varying vec4 vary_light; +varying vec2 vary_fragcoord; + +vec3 vary_PositionEye; + +vec3 vary_SunlitColor; +vec3 vary_AmblitColor; +vec3 vary_AdditiveColor; +vec3 vary_AtmosAttenuation; + +vec4 getPosition_d(vec2 pos_screen, float depth) +{ + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +vec3 getPositionEye() +{ + return vary_PositionEye; +} +vec3 getSunlitColor() +{ + return vary_SunlitColor; +} +vec3 getAmblitColor() +{ + return vary_AmblitColor; +} +vec3 getAdditiveColor() +{ + return vary_AdditiveColor; +} +vec3 getAtmosAttenuation() +{ + return vary_AtmosAttenuation; +} + + +void setPositionEye(vec3 v) +{ + vary_PositionEye = v; +} + +void setSunlitColor(vec3 v) +{ + vary_SunlitColor = v; +} + +void setAmblitColor(vec3 v) +{ + vary_AmblitColor = v; +} + +void setAdditiveColor(vec3 v) +{ + vary_AdditiveColor = v; +} + +void setAtmosAttenuation(vec3 v) +{ + vary_AtmosAttenuation = v; +} + +void calcAtmospherics(vec3 inPositionEye, float ambFactor) { + + vec3 P = inPositionEye; + setPositionEye(P); + + //(TERRAIN) limit altitude + if (P.y > max_y.x) P *= (max_y.x / P.y); + if (P.y < -max_y.x) P *= (-max_y.x / P.y); + + vec3 tmpLightnorm = lightnorm.xyz; + + vec3 Pn = normalize(P); + float Plen = length(P); + + vec4 temp1 = vec4(0); + vec3 temp2 = vec3(0); + vec4 blue_weight; + vec4 haze_weight; + vec4 sunlight = sunlight_color; + vec4 light_atten; + + //sunlight attenuation effect (hue and brightness) due to atmosphere + //this is used later for sunlight modulation at various altitudes + light_atten = (blue_density * 1.0 + vec4(haze_density.r) * 0.25) * (density_multiplier.x * max_y.x); + //I had thought blue_density and haze_density should have equal weighting, + //but attenuation due to haze_density tends to seem too strong + + temp1 = blue_density + vec4(haze_density.r); + blue_weight = blue_density / temp1; + haze_weight = vec4(haze_density.r) / temp1; + + //(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain) + temp2.y = max(0.0, tmpLightnorm.y); + temp2.y = 1. / temp2.y; + sunlight *= exp( - light_atten * temp2.y); + + // main atmospheric scattering line integral + temp2.z = Plen * density_multiplier.x; + + // Transparency (-> temp1) + // ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier.x in a variable because the ati + // compiler gets confused. + temp1 = exp(-temp1 * temp2.z * distance_multiplier.x); + + //final atmosphere attenuation factor + setAtmosAttenuation(temp1.rgb); + + //compute haze glow + //(can use temp2.x as temp because we haven't used it yet) + temp2.x = dot(Pn, tmpLightnorm.xyz); + temp2.x = 1. - temp2.x; + //temp2.x is 0 at the sun and increases away from sun + temp2.x = max(temp2.x, .03); //was glow.y + //set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot) + temp2.x *= glow.x; + //higher glow.x gives dimmer glow (because next step is 1 / "angle") + temp2.x = pow(temp2.x, glow.z); + //glow.z should be negative, so we're doing a sort of (1 / "angle") function + + //add "minimum anti-solar illumination" + temp2.x += .25; + + //increase ambient when there are more clouds + vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow.x * 0.5; + + /* decrease value and saturation (that in HSV, not HSL) for occluded areas + * // for HSV color/geometry used here, see http://gimp-savvy.com/BOOK/index.html?node52.html + * // The following line of code performs the equivalent of: + * float ambAlpha = tmpAmbient.a; + * float ambValue = dot(vec3(tmpAmbient), vec3(0.577)); // projection onto <1/rt(3), 1/rt(3), 1/rt(3)>, the neutral white-black axis + * vec3 ambHueSat = vec3(tmpAmbient) - vec3(ambValue); + * tmpAmbient = vec4(RenderSSAOEffect.valueFactor * vec3(ambValue) + RenderSSAOEffect.saturationFactor *(1.0 - ambFactor) * ambHueSat, ambAlpha); + */ + tmpAmbient = vec4(mix(ssao_effect_mat * tmpAmbient.rgb, tmpAmbient.rgb, ambFactor), tmpAmbient.a); + + //haze color + setAdditiveColor( + vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow.x) + tmpAmbient) + + (haze_horizon.r * haze_weight) * (sunlight*(1.-cloud_shadow.x) * temp2.x + + tmpAmbient))); + + //brightness of surface both sunlight and ambient + setSunlitColor(vec3(sunlight * .5)); + setAmblitColor(vec3(tmpAmbient * .25)); + setAdditiveColor(getAdditiveColor() * vec3(1.0 - temp1)); +} + +vec3 atmosLighting(vec3 light) +{ + light *= getAtmosAttenuation().r; + light += getAdditiveColor(); + return (2.0 * light); +} + +vec3 atmosTransport(vec3 light) { + light *= getAtmosAttenuation().r; + light += getAdditiveColor() * 2.0; + return light; +} +vec3 atmosGetDiffuseSunlightColor() +{ + return getSunlitColor(); +} + +vec3 scaleDownLight(vec3 light) +{ + return (light / scene_light_strength ); +} + +vec3 scaleUpLight(vec3 light) +{ + return (light * scene_light_strength); +} + +vec3 atmosAmbient(vec3 light) +{ + return getAmblitColor() + light / 2.0; +} + +vec3 atmosAffectDirectionalLight(float lightIntensity) +{ + return getSunlitColor() * lightIntensity; +} + +vec3 scaleSoftClip(vec3 light) +{ + //soft clip effect: + light = 1. - clamp(light, vec3(0.), vec3(1.)); + light = 1. - pow(light, gamma.xxx); + + return light; +} + +void main() +{ + vec2 tc = vary_fragcoord.xy; + ivec2 itc = ivec2(tc); + + vec3 fcol = vec3(0,0,0); + + vec2 scol_ambocc = texture2DRect(lightMap, tc).rg; + float ambocc = scol_ambocc.g; + + for (int i = 0; i < samples; ++i) + { + float depth = texelFetch(depthMap, itc.xy, i).r; + vec3 pos = getPosition_d(tc, depth).xyz; + vec3 norm = texelFetch(normalMap, itc, i).xyz; + norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm + + float da = max(dot(norm.xyz, vary_light.xyz), 0.0); + + vec4 diffuse = texelFetch(diffuseRect, itc, i); + vec4 spec = texelFetch(specularRect, itc, i); + + float amb = 0; + + float scol = max(scol_ambocc.r, diffuse.a); + amb += ambocc; + + calcAtmospherics(pos.xyz, ambocc); + + vec3 col = atmosAmbient(vec3(0)); + col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a)); + + col *= diffuse.rgb; + + if (spec.a > 0.0) // specular reflection + { + // the old infinite-sky shiny reflection + // + vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); + float sa = dot(refnormpersp, vary_light.xyz); + vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a; + + // add the two types of shiny together + col += dumbshiny * spec.rgb; + } + + col = atmosLighting(col); + col = scaleSoftClip(col); + + fcol += col; + } + + gl_FragColor.rgb = fcol/samples; + gl_FragColor.a = 0.0; +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl index 8f0bcca76b86a22f32101d0c81b3631110fff0c9..745cc0199236aeff1ade125a59f78bd48b15d382 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform vec2 screen_res; diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl index 50b9ef276e6ab7bb98a51eb5a00dff4ce9afa0d7..cd3828fbd4084d0fd980e65ce8dae2ecca4f9c1b 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightMSF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..ec9b547a47210ff1d032e9859bc9004de583a55f --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightMSF.glsl @@ -0,0 +1,245 @@ +/** + * @file multiSpotLightF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +#extension GL_ARB_texture_rectangle : enable +#extension GL_ARB_texture_multisample : enable + +uniform sampler2DMS diffuseRect; +uniform sampler2DMS specularRect; +uniform sampler2DMS depthMap; +uniform sampler2DMS normalMap; +uniform sampler2DRect lightMap; +uniform sampler2D noiseMap; +uniform sampler2D lightFunc; +uniform sampler2D projectionMap; + +uniform mat4 proj_mat; //screen space to light space +uniform float proj_near; //near clip for projection +uniform vec3 proj_p; //plane projection is emitting from (in screen space) +uniform vec3 proj_n; +uniform float proj_focus; //distance from plane to begin blurring +uniform float proj_lod; //(number of mips in proj map) +uniform float proj_range; //range between near clip and far clip plane of projection +uniform float proj_ambient_lod; +uniform float proj_ambiance; +uniform float near_clip; +uniform float far_clip; + +uniform vec3 proj_origin; //origin of projection to be used for angular attenuation +uniform float sun_wash; +uniform int proj_shadow_idx; +uniform float shadow_fade; + +varying vec4 vary_light; + +varying vec4 vary_fragcoord; +uniform vec2 screen_res; + +uniform mat4 inv_proj; + +vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod) +{ + vec4 ret = texture2DLod(projectionMap, tc, lod); + + vec2 dist = tc-vec2(0.5); + + float det = max(1.0-lod/(proj_lod*0.5), 0.0); + + float d = dot(dist,dist); + + ret *= min(clamp((0.25-d)/0.25, 0.0, 1.0)+det, 1.0); + + return ret; +} + +vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod) +{ + vec4 ret = texture2DLod(projectionMap, tc, lod); + + vec2 dist = vec2(0.5) - abs(tc-vec2(0.5)); + + float det = min(lod/(proj_lod*0.5), 1.0); + + float d = min(dist.x, dist.y); + + float edge = 0.25*det; + + ret *= clamp(d/edge, 0.0, 1.0); + + return ret; +} + +vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod) +{ + vec4 ret = texture2DLod(projectionMap, tc, lod); + + vec2 dist = tc-vec2(0.5); + + float d = dot(dist,dist); + + ret *= min(clamp((0.25-d)/0.25, 0.0, 1.0), 1.0); + + return ret; +} + + +vec4 getPosition(ivec2 pos_screen, int sample) +{ + float depth = texelFetch(depthMap, pos_screen, sample).r; + vec2 sc = vec2(pos_screen.xy)*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +void main() +{ + vec4 frag = vary_fragcoord; + frag.xyz /= frag.w; + frag.xyz = frag.xyz*0.5+0.5; + frag.xy *= screen_res; + ivec2 itc = ivec2(frag.xy); + + vec3 fcol = vec3(0,0,0); + int wght = 0; + + float shadow = 1.0; + + if (proj_shadow_idx >= 0) + { + vec4 shd = texture2DRect(lightMap, frag.xy); + float sh[2]; + sh[0] = shd.b; + sh[1] = shd.a; + shadow = min(sh[proj_shadow_idx]+shadow_fade, 1.0); + } + + for (int i = 0; i < samples; i++) + { + vec3 pos = getPosition(itc, i).xyz; + vec3 lv = vary_light.xyz-pos.xyz; + float dist2 = dot(lv,lv); + dist2 /= vary_light.w; + if (dist2 <= 1.0) + { + vec3 norm = texelFetch(normalMap, itc, i).xyz; + norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm + + norm = normalize(norm); + float l_dist = -dot(lv, proj_n); + + vec4 proj_tc = (proj_mat * vec4(pos.xyz, 1.0)); + if (proj_tc.z >= 0.0) + { + proj_tc.xyz /= proj_tc.w; + + float fa = gl_Color.a+1.0; + float dist_atten = min(1.0-(dist2-1.0*(1.0-fa))/fa, 1.0); + if (dist_atten > 0.0) + { + lv = proj_origin-pos.xyz; + lv = normalize(lv); + float da = dot(norm, lv); + + vec3 col = vec3(0,0,0); + + vec3 diff_tex = texelFetch(diffuseRect, itc, i).rgb; + + float noise = texture2D(noiseMap, frag.xy/128.0).b; + if (proj_tc.z > 0.0 && + proj_tc.x < 1.0 && + proj_tc.y < 1.0 && + proj_tc.x > 0.0 && + proj_tc.y > 0.0) + { + float lit = 0.0; + float amb_da = proj_ambiance; + + if (da > 0.0) + { + float diff = clamp((l_dist-proj_focus)/proj_range, 0.0, 1.0); + float lod = diff * proj_lod; + + vec4 plcol = texture2DLodDiffuse(projectionMap, proj_tc.xy, lod); + + vec3 lcol = gl_Color.rgb * plcol.rgb * plcol.a; + + lit = da * dist_atten * noise; + + col = lcol*lit*diff_tex*shadow; + amb_da += (da*0.5)*(1.0-shadow)*proj_ambiance; + } + + //float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0); + vec4 amb_plcol = texture2DLodAmbient(projectionMap, proj_tc.xy, proj_lod); + + amb_da += (da*da*0.5+0.5)*proj_ambiance; + + amb_da *= dist_atten * noise; + + amb_da = min(amb_da, 1.0-lit); + + col += amb_da*gl_Color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a; + } + + + vec4 spec = texelFetch(specularRect, itc, i); + if (spec.a > 0.0) + { + vec3 ref = reflect(normalize(pos), norm); + + //project from point pos in direction ref to plane proj_p, proj_n + vec3 pdelta = proj_p-pos; + float ds = dot(ref, proj_n); + + if (ds < 0.0) + { + vec3 pfinal = pos + ref * dot(pdelta, proj_n)/ds; + + vec4 stc = (proj_mat * vec4(pfinal.xyz, 1.0)); + + if (stc.z > 0.0) + { + stc.xy /= stc.w; + + float fatten = clamp(spec.a*spec.a+spec.a*0.5, 0.25, 1.0); + + stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5); + + if (stc.x < 1.0 && + stc.y < 1.0 && + stc.x > 0.0 && + stc.y > 0.0) + { + vec4 scol = texture2DLodSpecular(projectionMap, stc.xy, proj_lod-spec.a*proj_lod); + col += dist_atten*scol.rgb*gl_Color.rgb*scol.a*spec.rgb*shadow; + } + } + } + } + + fcol += col; + wght++; + } + } + } + } + + if (wght <= 0) + { + discard; + } + + gl_FragColor.rgb = fcol/wght; + gl_FragColor.a = 0.0; +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl index 4369b3b34ff8da6af4aabcf4b57e58b02024dd2b..315139b4151e3b5bb260af68e1fac61060b11029 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable @@ -45,7 +45,7 @@ uniform float spot_shadow_offset; vec4 getPosition(vec2 pos_screen) { - float depth = texture2DRect(depthMap, pos_screen.xy).a; + float depth = texture2DRect(depthMap, pos_screen.xy).r; vec2 sc = pos_screen.xy*2.0; sc /= screen_res; sc -= vec2(1.0,1.0); diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightMSF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..63d13c996d4107ffebededace3462370cf5d4fff --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightMSF.glsl @@ -0,0 +1,202 @@ +/** + * @file sunLightMSF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +#extension GL_ARB_texture_rectangle : enable +#extension GL_ARB_texture_multisample : enable + +//class 2, shadows, no SSAO + +uniform sampler2DMS depthMap; +uniform sampler2DMS normalMap; +uniform sampler2DRectShadow shadowMap0; +uniform sampler2DRectShadow shadowMap1; +uniform sampler2DRectShadow shadowMap2; +uniform sampler2DRectShadow shadowMap3; +uniform sampler2DShadow shadowMap4; +uniform sampler2DShadow shadowMap5; + + +// Inputs +uniform mat4 shadow_matrix[6]; +uniform vec4 shadow_clip; +uniform float ssao_radius; +uniform float ssao_max_radius; +uniform float ssao_factor; +uniform float ssao_factor_inv; + +varying vec2 vary_fragcoord; +varying vec4 vary_light; + +uniform mat4 inv_proj; +uniform vec2 screen_res; +uniform vec2 shadow_res; +uniform vec2 proj_shadow_res; + +uniform float shadow_bias; +uniform float shadow_offset; + +uniform float spot_shadow_bias; +uniform float spot_shadow_offset; + +vec4 getPosition(ivec2 pos_screen, int sample) +{ + float depth = texelFetch(depthMap, pos_screen.xy, sample).r; + vec2 sc = vec2(pos_screen.xy)*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +float pcfShadow(sampler2DRectShadow shadowMap, vec4 stc, float scl) +{ + stc.xyz /= stc.w; + stc.z += shadow_bias*scl; + + float cs = shadow2DRect(shadowMap, stc.xyz).x; + float shadow = cs; + + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(1.5, 1.5, 0.0)).x, cs); + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(1.5, -1.5, 0.0)).x, cs); + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(-1.5, 1.5, 0.0)).x, cs); + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(-1.5, -1.5, 0.0)).x, cs); + + return shadow/5.0; + + //return shadow; +} + +float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float scl) +{ + stc.xyz /= stc.w; + stc.z += spot_shadow_bias*scl; + + float cs = shadow2D(shadowMap, stc.xyz).x; + float shadow = cs; + + vec2 off = 1.5/proj_shadow_res; + + shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, off.y, 0.0)).x, cs); + shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, -off.y, 0.0)).x, cs); + shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, off.y, 0.0)).x, cs); + shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, -off.y, 0.0)).x, cs); + + return shadow/5.0; + + //return shadow; +} + +void main() +{ + vec2 pos_screen = vary_fragcoord.xy; + ivec2 itc = ivec2(pos_screen); + + //try doing an unproject here + + vec4 fcol = vec4(0,0,0,0); + + for (int i = 0; i < samples; i++) + { + vec4 pos = getPosition(itc, i); + + vec4 nmap4 = texelFetch(normalMap, itc, i); + nmap4 = vec4((nmap4.xy-0.5)*2.0,nmap4.z,nmap4.w); // unpack norm + float displace = nmap4.w; + vec3 norm = nmap4.xyz; + + /*if (pos.z == 0.0) // do nothing for sky *FIX: REMOVE THIS IF/WHEN THE POSITION MAP IS BEING USED AS A STENCIL + { + gl_FragColor = vec4(0.0); // doesn't matter + return; + }*/ + + float shadow = 1.0; + float dp_directional_light = max(0.0, dot(norm, vary_light.xyz)); + + vec3 shadow_pos = pos.xyz + displace*norm; + vec3 offset = vary_light.xyz * (1.0-dp_directional_light); + + vec4 spos = vec4(shadow_pos+offset*shadow_offset, 1.0); + + if (spos.z > -shadow_clip.w) + { + if (dp_directional_light == 0.0) + { + // if we know this point is facing away from the sun then we know it's in shadow without having to do a squirrelly shadow-map lookup + shadow = 0.0; + } + else + { + vec4 lpos; + + if (spos.z < -shadow_clip.z) + { + lpos = shadow_matrix[3]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap3, lpos, 0.25); + shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0); + } + else if (spos.z < -shadow_clip.y) + { + lpos = shadow_matrix[2]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap2, lpos, 0.5); + } + else if (spos.z < -shadow_clip.x) + { + lpos = shadow_matrix[1]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap1, lpos, 0.75); + } + else + { + lpos = shadow_matrix[0]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap0, lpos, 1.0); + } + + // take the most-shadowed value out of these two: + // * the blurred sun shadow in the light (shadow) map + // * an unblurred dot product between the sun and this norm + // the goal is to err on the side of most-shadow to fill-in shadow holes and reduce artifacting + shadow = min(shadow, dp_directional_light); + + //lpos.xy /= lpos.w*32.0; + //if (fract(lpos.x) < 0.1 || fract(lpos.y) < 0.1) + //{ + // shadow = 0.0; + //} + + } + } + else + { + // more distant than the shadow map covers + shadow = 1.0; + } + + fcol[0] += shadow; + fcol[1] += 1.0; + + spos = vec4(shadow_pos+norm*spot_shadow_offset, 1.0); + + //spotlight shadow 1 + vec4 lpos = shadow_matrix[4]*spos; + fcol[2] += pcfShadow(shadowMap4, lpos, 0.8); + + //spotlight shadow 2 + lpos = shadow_matrix[5]*spos; + fcol[3] += pcfShadow(shadowMap5, lpos, 0.8); + } + + gl_FragColor = fcol/samples; +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl index 847b36b1ace5722cf0a4cdec723bc75b2549c177..d53850b489ca0c18763f0a7b839e46964085f1dd 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl @@ -5,7 +5,7 @@ * $License$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable @@ -45,7 +45,7 @@ uniform float spot_shadow_offset; vec4 getPosition(vec2 pos_screen) { - float depth = texture2DRect(depthMap, pos_screen.xy).a; + float depth = texture2DRect(depthMap, pos_screen.xy).r; vec2 sc = pos_screen.xy*2.0; sc /= screen_res; sc -= vec2(1.0,1.0); @@ -234,7 +234,7 @@ void main() gl_FragColor[0] = shadow; gl_FragColor[1] = calcAmbientOcclusion(pos, norm); - spos.xyz = shadow_pos+offset*spot_shadow_offset; + spos.xyz = shadow_pos+norm*spot_shadow_offset; //spotlight shadow 1 vec4 lpos = shadow_matrix[4]*spos; diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOMSF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..a2a76eed9fdd22ee8fa79178fd21ec8e7969fd49 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOMSF.glsl @@ -0,0 +1,241 @@ +/** + * @file sunLightSSAOF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + + + +#extension GL_ARB_texture_rectangle : enable +#extension GL_ARB_texture_multisample : enable + +//class 2 -- shadows and SSAO + +uniform sampler2DMS depthMap; +uniform sampler2DMS normalMap; +uniform sampler2DRectShadow shadowMap0; +uniform sampler2DRectShadow shadowMap1; +uniform sampler2DRectShadow shadowMap2; +uniform sampler2DRectShadow shadowMap3; +uniform sampler2DShadow shadowMap4; +uniform sampler2DShadow shadowMap5; +uniform sampler2D noiseMap; + +// Inputs +uniform mat4 shadow_matrix[6]; +uniform vec4 shadow_clip; +uniform float ssao_radius; +uniform float ssao_max_radius; +uniform float ssao_factor; +uniform float ssao_factor_inv; + +varying vec2 vary_fragcoord; +varying vec4 vary_light; + +uniform mat4 inv_proj; +uniform vec2 screen_res; +uniform vec2 shadow_res; +uniform vec2 proj_shadow_res; + +uniform float shadow_bias; +uniform float shadow_offset; + +uniform float spot_shadow_bias; +uniform float spot_shadow_offset; + +vec4 getPosition(ivec2 pos_screen, int sample) +{ + float depth = texelFetch(depthMap, pos_screen, sample).r; + vec2 sc = vec2(pos_screen.xy)*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +//calculate decreases in ambient lighting when crowded out (SSAO) +float calcAmbientOcclusion(vec4 pos, vec3 norm, int sample) +{ + float ret = 1.0; + + vec2 kern[8]; + // exponentially (^2) distant occlusion samples spread around origin + kern[0] = vec2(-1.0, 0.0) * 0.125*0.125; + kern[1] = vec2(1.0, 0.0) * 0.250*0.250; + kern[2] = vec2(0.0, 1.0) * 0.375*0.375; + kern[3] = vec2(0.0, -1.0) * 0.500*0.500; + kern[4] = vec2(0.7071, 0.7071) * 0.625*0.625; + kern[5] = vec2(-0.7071, -0.7071) * 0.750*0.750; + kern[6] = vec2(-0.7071, 0.7071) * 0.875*0.875; + kern[7] = vec2(0.7071, -0.7071) * 1.000*1.000; + + vec2 pos_screen = vary_fragcoord.xy; + vec3 pos_world = pos.xyz; + vec2 noise_reflect = texture2D(noiseMap, vary_fragcoord.xy/128.0).xy; + + float angle_hidden = 0.0; + int points = 0; + + float scale = min(ssao_radius / -pos_world.z, ssao_max_radius); + + // it was found that keeping # of samples a constant was the fastest, probably due to compiler optimizations (unrolling?) + for (int i = 0; i < 8; i++) + { + ivec2 samppos_screen = ivec2(pos_screen + scale * reflect(kern[i], noise_reflect)); + vec3 samppos_world = getPosition(samppos_screen, sample).xyz; + + vec3 diff = pos_world - samppos_world; + float dist2 = dot(diff, diff); + + // assume each sample corresponds to an occluding sphere with constant radius, constant x-sectional area + // --> solid angle shrinking by the square of distance + //radius is somewhat arbitrary, can approx with just some constant k * 1 / dist^2 + //(k should vary inversely with # of samples, but this is taken care of later) + + angle_hidden = angle_hidden + float(dot((samppos_world - 0.05*norm - pos_world), norm) > 0.0) * min(1.0/dist2, ssao_factor_inv); + + // 'blocked' samples (significantly closer to camera relative to pos_world) are "no data", not "no occlusion" + points = points + int(diff.z > -1.0); + } + + angle_hidden = min(ssao_factor*angle_hidden/float(points), 1.0); + + ret = (1.0 - (float(points != 0) * angle_hidden)); + + return min(ret, 1.0); +} + +float pcfShadow(sampler2DRectShadow shadowMap, vec4 stc, float scl) +{ + stc.xyz /= stc.w; + stc.z += shadow_bias*scl; + + float cs = shadow2DRect(shadowMap, stc.xyz).x; + float shadow = cs; + + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(1.5, 1.5, 0.0)).x, cs); + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(1.5, -1.5, 0.0)).x, cs); + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(-1.5, 1.5, 0.0)).x, cs); + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(-1.5, -1.5, 0.0)).x, cs); + + return shadow/5.0; + + //return shadow; +} + +float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float scl) +{ + stc.xyz /= stc.w; + stc.z += spot_shadow_bias*scl; + + float cs = shadow2D(shadowMap, stc.xyz).x; + float shadow = cs; + + vec2 off = 1.5/proj_shadow_res; + + shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, off.y, 0.0)).x, cs); + shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, -off.y, 0.0)).x, cs); + shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, off.y, 0.0)).x, cs); + shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, -off.y, 0.0)).x, cs); + + + return shadow/5.0; + + //return shadow; +} + +void main() +{ + vec2 pos_screen = vary_fragcoord.xy; + ivec2 itc = ivec2(pos_screen); + vec4 fcol = vec4(0,0,0,0); + + for (int i = 0; i < samples; i++) + { + vec4 pos = getPosition(itc, i); + + vec4 nmap4 = texelFetch(normalMap, itc, i); + nmap4 = vec4((nmap4.xy-0.5)*2.0,nmap4.z,nmap4.w); // unpack norm + float displace = nmap4.w; + vec3 norm = nmap4.xyz; + + float shadow = 1.0; + float dp_directional_light = max(0.0, dot(norm, vary_light.xyz)); + + vec3 shadow_pos = pos.xyz + displace*norm; + vec3 offset = vary_light.xyz * (1.0-dp_directional_light); + + vec4 spos = vec4(shadow_pos+offset*shadow_offset, 1.0); + + if (spos.z > -shadow_clip.w) + { + if (dp_directional_light == 0.0) + { + // if we know this point is facing away from the sun then we know it's in shadow without having to do a squirrelly shadow-map lookup + shadow = 0.0; + } + else + { + vec4 lpos; + + if (spos.z < -shadow_clip.z) + { + lpos = shadow_matrix[3]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap3, lpos, 0.25); + shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0); + } + else if (spos.z < -shadow_clip.y) + { + lpos = shadow_matrix[2]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap2, lpos, 0.5); + } + else if (spos.z < -shadow_clip.x) + { + lpos = shadow_matrix[1]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap1, lpos, 0.75); + } + else + { + lpos = shadow_matrix[0]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap0, lpos, 1.0); + } + + // take the most-shadowed value out of these two: + // * the blurred sun shadow in the light (shadow) map + // * an unblurred dot product between the sun and this norm + // the goal is to err on the side of most-shadow to fill-in shadow holes and reduce artifacting + shadow = min(shadow, dp_directional_light); + + } + } + else + { + // more distant than the shadow map covers + shadow = 1.0; + } + + + fcol[0] += shadow; + fcol[1] += calcAmbientOcclusion(pos, norm, i); + + spos.xyz = shadow_pos+offset*spot_shadow_offset; + + //spotlight shadow 1 + vec4 lpos = shadow_matrix[4]*spos; + fcol[2] += pcfShadow(shadowMap4, lpos, 0.8); + + //spotlight shadow 2 + lpos = shadow_matrix[5]*spos; + fcol[3] += pcfShadow(shadowMap5, lpos, 0.8); + } + + gl_FragColor = fcol / samples; +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl index 9beb513ad8a63a129b231381cb010e69c58b9510..814deb3677ab6489c305175878b9b905911996b5 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec4 vary_light; varying vec2 vary_fragcoord; diff --git a/indra/newview/app_settings/shaders/class2/effects/blurF.glsl b/indra/newview/app_settings/shaders/class2/effects/blurF.glsl index a4ad0bfa15f1053bc0b8292cfb9c8eb26644ac0a..dff4d4a68f928986d7134688c019de3750db0185 100644 --- a/indra/newview/app_settings/shaders/class2/effects/blurF.glsl +++ b/indra/newview/app_settings/shaders/class2/effects/blurF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2DRect RenderTexture; uniform float bloomStrength; diff --git a/indra/newview/app_settings/shaders/class2/effects/blurV.glsl b/indra/newview/app_settings/shaders/class2/effects/blurV.glsl index d471a6c5e59582d536ad1d591462f7c683f3ad11..de469542f98cfec18c6332b5ee82fa75ec4c8ef6 100644 --- a/indra/newview/app_settings/shaders/class2/effects/blurV.glsl +++ b/indra/newview/app_settings/shaders/class2/effects/blurV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform vec2 texelSize; uniform vec2 blurDirection; diff --git a/indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl b/indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl index 66880b958e0c9b1d9e12f59a06b4225ab0d65e8c..8871bb3fc7da685c41206176ae0259443e124e85 100644 --- a/indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl +++ b/indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2DRect RenderTexture; uniform float brightness; diff --git a/indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl b/indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl index c35c500d62374029b3123963f81185bf44253c10..9c52b8dd5d45f6a926379fe8c0f8b5c04e544f0f 100644 --- a/indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl +++ b/indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void main(void) { diff --git a/indra/newview/app_settings/shaders/class2/effects/extractF.glsl b/indra/newview/app_settings/shaders/class2/effects/extractF.glsl index e77baa5bee115ea038138883aacb1c546ddea94a..713f8021de0c636f800e38fec0d8bacc8fc856b4 100644 --- a/indra/newview/app_settings/shaders/class2/effects/extractF.glsl +++ b/indra/newview/app_settings/shaders/class2/effects/extractF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2DRect RenderTexture; uniform float extractLow; diff --git a/indra/newview/app_settings/shaders/class2/effects/nightVisionF.glsl b/indra/newview/app_settings/shaders/class2/effects/nightVisionF.glsl index 8e0eec6f5e9a98c5727f73aa929832db345489d5..fd94b2e95f97a6b0d702ec3730d93bc5cef0bacf 100644 --- a/indra/newview/app_settings/shaders/class2/effects/nightVisionF.glsl +++ b/indra/newview/app_settings/shaders/class2/effects/nightVisionF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2DRect RenderTexture; uniform sampler2D NoiseTexture; diff --git a/indra/newview/app_settings/shaders/class2/effects/simpleF.glsl b/indra/newview/app_settings/shaders/class2/effects/simpleF.glsl index 98a50e22fc441d72aff3a2e87a77470bc1acc70b..a1a9c9716cc792b2e0f53b41896d16880f7bc613 100644 --- a/indra/newview/app_settings/shaders/class2/effects/simpleF.glsl +++ b/indra/newview/app_settings/shaders/class2/effects/simpleF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2DRect RenderTexture; diff --git a/indra/newview/app_settings/shaders/class2/environment/terrainF.glsl b/indra/newview/app_settings/shaders/class2/environment/terrainF.glsl index bbb8951f3a3e9d4cab7c98637195735f196421a3..9527dc469bab812a31ad26a74d7df4b86d52ebac 100644 --- a/indra/newview/app_settings/shaders/class2/environment/terrainF.glsl +++ b/indra/newview/app_settings/shaders/class2/environment/terrainF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D detail_0; uniform sampler2D detail_1; diff --git a/indra/newview/app_settings/shaders/class2/environment/terrainV.glsl b/indra/newview/app_settings/shaders/class2/environment/terrainV.glsl index 84906c16bffd638afc6024c84d4c1bc2c43299c2..2658bee88da1296f48d0c607be49f4493f212d98 100644 --- a/indra/newview/app_settings/shaders/class2/environment/terrainV.glsl +++ b/indra/newview/app_settings/shaders/class2/environment/terrainV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + void calcAtmospherics(vec3 inPositionEye); diff --git a/indra/newview/app_settings/shaders/class2/environment/terrainWaterF.glsl b/indra/newview/app_settings/shaders/class2/environment/terrainWaterF.glsl index 7590c542ef46cea4a5f3d901ab7809c4b5ebbd4d..974e227b77f1bfb7fd2a03ae560a4119e24543c0 100644 --- a/indra/newview/app_settings/shaders/class2/environment/terrainWaterF.glsl +++ b/indra/newview/app_settings/shaders/class2/environment/terrainWaterF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D detail_0; uniform sampler2D detail_1; diff --git a/indra/newview/app_settings/shaders/class2/environment/underWaterF.glsl b/indra/newview/app_settings/shaders/class2/environment/underWaterF.glsl index 900f1a6cb83668b0ae79622e49861bfd969ae4e0..702e0881acd0d6bcc56cfacc8815e93f381389e1 100644 --- a/indra/newview/app_settings/shaders/class2/environment/underWaterF.glsl +++ b/indra/newview/app_settings/shaders/class2/environment/underWaterF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; uniform sampler2D bumpMap; diff --git a/indra/newview/app_settings/shaders/class2/environment/waterF.glsl b/indra/newview/app_settings/shaders/class2/environment/waterF.glsl index f4f6b6e90fa0bd80dd494a0482e14b25c7beffc8..c4e4bc08c5138c8cc4fc21687c57da95ddf3fa9e 100644 --- a/indra/newview/app_settings/shaders/class2/environment/waterF.glsl +++ b/indra/newview/app_settings/shaders/class2/environment/waterF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + vec3 scaleSoftClip(vec3 inColor); vec3 atmosTransport(vec3 inColor); diff --git a/indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl b/indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl index 9f3328cbf0cfe9bb6d019fe20edb90fd899ee91b..b66b72b4015b3e6ce3e679686553c91289df3d2d 100644 --- a/indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl +++ b/indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform vec4 lightnorm; uniform vec4 waterPlane; diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightF.glsl index 342bc2ab6673aaea1d76832502645140401d874e..4c31602736ca019e230c0b17f40b4d56ffe4e47e 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightF.glsl @@ -5,16 +5,14 @@ * $/LicenseInfo$ */ -#version 120 -uniform sampler2D diffuseMap; vec3 atmosLighting(vec3 light); vec3 scaleSoftClip(vec3 light); void default_lighting() { - vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy) * gl_Color; + vec4 color = diffuseLookup(gl_TexCoord[0].xy) * gl_Color; color.rgb = atmosLighting(color.rgb); diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightF.glsl index dad18b588383139379889a453e207972cc1be2e2..95bd052b5d4e2810b7e7871adf9c48fba44d8b57 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightF.glsl @@ -5,16 +5,14 @@ * $/LicenseInfo$ */ -#version 120 -uniform sampler2D diffuseMap; vec3 fullbrightAtmosTransport(vec3 light); vec3 fullbrightScaleSoftClip(vec3 light); void fullbright_lighting() { - vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy) * gl_Color; + vec4 color = diffuseLookup(gl_TexCoord[0].xy) * gl_Color; color.rgb = fullbrightAtmosTransport(color.rgb); diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..b1e61e1a33afdac4da5f633dc15405489d87e3d7 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedF.glsl @@ -0,0 +1,25 @@ +/** + * @file lightFullbrightF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +vec3 fullbrightAtmosTransport(vec3 light); +vec3 fullbrightScaleSoftClip(vec3 light); + +uniform sampler2D diffuseMap; + +void fullbright_lighting() +{ + vec4 color = texture2D(diffuseMap,gl_TexCoord[0].xy) * gl_Color; + + color.rgb = fullbrightAtmosTransport(color.rgb); + + color.rgb = fullbrightScaleSoftClip(color.rgb); + + gl_FragColor = color; +} + diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyF.glsl index 73ff81e03a6ffdb2865356b48efde11a54136ae4..26f0ea84e06286e48c6f57f5b7326e0485887722 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyF.glsl @@ -5,9 +5,8 @@ * $/LicenseInfo$ */ -#version 120 -uniform sampler2D diffuseMap; + uniform samplerCube environmentMap; vec3 fullbrightShinyAtmosTransport(vec3 light); @@ -15,7 +14,7 @@ vec3 fullbrightScaleSoftClip(vec3 light); void fullbright_shiny_lighting() { - vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy); + vec4 color = diffuseLookup(gl_TexCoord[0].xy); color.rgb *= gl_Color.rgb; vec3 envColor = textureCube(environmentMap, gl_TexCoord[1].xyz).rgb; diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyNonIndexedF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..953298da0dae05b25b27971bae4783b02e3d80ab --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyNonIndexedF.glsl @@ -0,0 +1,32 @@ +/** + * @file lightFullbrightShinyF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +uniform samplerCube environmentMap; +uniform sampler2D diffuseMap; + +vec3 fullbrightShinyAtmosTransport(vec3 light); +vec3 fullbrightScaleSoftClip(vec3 light); + +void fullbright_shiny_lighting() +{ + vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy); + color.rgb *= gl_Color.rgb; + + vec3 envColor = textureCube(environmentMap, gl_TexCoord[1].xyz).rgb; + color.rgb = mix(color.rgb, envColor.rgb, gl_Color.a); + + color.rgb = fullbrightShinyAtmosTransport(color.rgb); + + color.rgb = fullbrightScaleSoftClip(color.rgb); + + color.a = max(color.a, gl_Color.a); + + gl_FragColor = color; +} + diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl index 9b4b58436990b10e00a82b031fbcdbc0c061e7f1..a6e10a249d677109dc468ac3139cb88f94acb8cf 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl @@ -5,9 +5,9 @@ * $License$ */ -#version 120 -uniform sampler2D diffuseMap; + + uniform samplerCube environmentMap; vec3 fullbrightShinyAtmosTransport(vec3 light); @@ -16,7 +16,7 @@ vec4 applyWaterFog(vec4 color); void fullbright_shiny_lighting_water() { - vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy); + vec4 color = diffuseLookup(gl_TexCoord[0].xy); color.rgb *= gl_Color.rgb; vec3 envColor = textureCube(environmentMap, gl_TexCoord[1].xyz).rgb; diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterNonIndexedF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..b4bb665a2b1b3f3ba4fdad8c920193c4138b9656 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterNonIndexedF.glsl @@ -0,0 +1,32 @@ +/** + * @file lightFullbrightShinyWaterF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + + + + +uniform samplerCube environmentMap; +uniform sampler2D diffuseMap; + +vec3 fullbrightShinyAtmosTransport(vec3 light); +vec3 fullbrightScaleSoftClip(vec3 light); +vec4 applyWaterFog(vec4 color); + +void fullbright_shiny_lighting_water() +{ + vec4 color = texture2D(diffuseMap,gl_TexCoord[0].xy); + color.rgb *= gl_Color.rgb; + + vec3 envColor = textureCube(environmentMap, gl_TexCoord[1].xyz).rgb; + color.rgb = mix(color.rgb, envColor.rgb, gl_Color.a); + + color.rgb = fullbrightShinyAtmosTransport(color.rgb); + color.rgb = fullbrightScaleSoftClip(color.rgb); + color.a = max(color.a, gl_Color.a); + + gl_FragColor = applyWaterFog(color); +} + diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterF.glsl index 3d46c8d8744271a0a07e9ebfa2bc01a8a1f0bb5e..887d4130e70cd64962e64f7753c653e1a0f706c6 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterF.glsl @@ -5,16 +5,16 @@ * $/LicenseInfo$ */ -#version 120 -uniform sampler2D diffuseMap; + +vec4 diffuseLookup(vec2 texcoord); vec3 fullbrightAtmosTransport(vec3 light); vec4 applyWaterFog(vec4 color); void fullbright_lighting_water() { - vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy) * gl_Color; + vec4 color = diffuseLookup(gl_TexCoord[0].xy) * gl_Color; color.rgb = fullbrightAtmosTransport(color.rgb); diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..1234682ae978b9d29e6b1d682af2d69e77810da7 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedF.glsl @@ -0,0 +1,23 @@ +/** + * @file lightFullbrightWaterF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +uniform sampler2D diffuseMap; + +vec3 fullbrightAtmosTransport(vec3 light); +vec4 applyWaterFog(vec4 color); + +void fullbright_lighting_water() +{ + vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy) * gl_Color; + + color.rgb = fullbrightAtmosTransport(color.rgb); + + gl_FragColor = applyWaterFog(color); +} + diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightNonIndexedF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..149cf791f57f0a6c2e81529e19b12386afd3609c --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/lighting/lightNonIndexedF.glsl @@ -0,0 +1,25 @@ +/** + * @file lightF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +uniform sampler2D diffuseMap; + +vec3 atmosLighting(vec3 light); +vec3 scaleSoftClip(vec3 light); + +void default_lighting() +{ + vec4 color = texture2D(diffuseMap,gl_TexCoord[0].xy) * gl_Color; + + color.rgb = atmosLighting(color.rgb); + + color.rgb = scaleSoftClip(color.rgb); + + gl_FragColor = color; +} + diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightShinyF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightShinyF.glsl index ebe21320b43f8a8118623dae5bd7ba8f2fb5e9e9..300fcac0924251f8b30cc7313c205b6211430bc3 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightShinyF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightShinyF.glsl @@ -5,9 +5,9 @@ * $/LicenseInfo$ */ -#version 120 -uniform sampler2D diffuseMap; + + uniform samplerCube environmentMap; vec3 scaleSoftClip(vec3 light); @@ -16,7 +16,7 @@ vec4 applyWaterFog(vec4 color); void shiny_lighting() { - vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy); + vec4 color = diffuseLookup(gl_TexCoord[0].xy); color.rgb *= gl_Color.rgb; vec3 envColor = textureCube(environmentMap, gl_TexCoord[1].xyz).rgb; diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightShinyNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightShinyNonIndexedF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..e877c0abb122744c2e161c60a2a65ed1fc7dfa8b --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/lighting/lightShinyNonIndexedF.glsl @@ -0,0 +1,32 @@ +/** + * @file lightShinyF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + + +uniform samplerCube environmentMap; +uniform sampler2D diffuseMap; + +vec3 scaleSoftClip(vec3 light); +vec3 atmosLighting(vec3 light); +vec4 applyWaterFog(vec4 color); + +void shiny_lighting() +{ + vec4 color = texture2D(diffuseMap,gl_TexCoord[0].xy); + color.rgb *= gl_Color.rgb; + + vec3 envColor = textureCube(environmentMap, gl_TexCoord[1].xyz).rgb; + color.rgb = mix(color.rgb, envColor.rgb, gl_Color.a); + + color.rgb = atmosLighting(color.rgb); + + color.rgb = scaleSoftClip(color.rgb); + color.a = max(color.a, gl_Color.a); + gl_FragColor = color; +} + diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterF.glsl index 7f48e2cf1d5ec1c5ed586b4101fb5b385545e451..07572fa91542e66acbbb95ba95aa3fd06ab68269 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterF.glsl @@ -5,10 +5,9 @@ * $/LicenseInfo$ */ -#version 120 -uniform sampler2D diffuseMap; + uniform samplerCube environmentMap; vec3 atmosLighting(vec3 light); @@ -16,7 +15,7 @@ vec4 applyWaterFog(vec4 color); void shiny_lighting_water() { - vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy); + vec4 color = diffuseLookup(gl_TexCoord[0].xy); color.rgb *= gl_Color.rgb; vec3 envColor = textureCube(environmentMap, gl_TexCoord[1].xyz).rgb; diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterNonIndexedF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..39041794272c65914cc1b587584a09abc4839aef --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterNonIndexedF.glsl @@ -0,0 +1,29 @@ +/** + * @file lightShinyWaterF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + + +uniform sampler2D diffuseMap; +uniform samplerCube environmentMap; + +vec3 atmosLighting(vec3 light); +vec4 applyWaterFog(vec4 color); + +void shiny_lighting_water() +{ + vec4 color = texture2D(diffuseMap,gl_TexCoord[0].xy); + color.rgb *= gl_Color.rgb; + + vec3 envColor = textureCube(environmentMap, gl_TexCoord[1].xyz).rgb; + color.rgb = mix(color.rgb, envColor.rgb, gl_Color.a); + + color.rgb = atmosLighting(color.rgb); + color.a = max(color.a, gl_Color.a); + gl_FragColor = applyWaterFog(color); +} + diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightSpecularV.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightSpecularV.glsl index ad1dc4da77e17a34c9830f60566770f31cac6a64..3384f64d07a4d293f27e927d251a73e2f04188ec 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightSpecularV.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightSpecularV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + // All lights, no specular highlights diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightV.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightV.glsl index a0f6e019ef12c4779a770c65553db3b44e2a0799..10c770fcc240abc6dd2780fa777e6f67a5f10f66 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightV.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + // All lights, no specular highlights diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightWaterF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightWaterF.glsl index 97eba92d7b51f463f0e6cd877eb3ed6950855fad..61341a9f1fb08adbf05cbdcd49ff023625898a70 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightWaterF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightWaterF.glsl @@ -5,16 +5,14 @@ * $/LicenseInfo$ */ -#version 120 -uniform sampler2D diffuseMap; vec3 atmosLighting(vec3 light); vec4 applyWaterFog(vec4 color); void default_lighting_water() { - vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy) * gl_Color; + vec4 color = diffuseLookup(gl_TexCoord[0].xy) * gl_Color; color.rgb = atmosLighting(color.rgb); diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightWaterNonIndexedF.glsl new file mode 100644 index 0000000000000000000000000000000000000000..ba850b61d0b0bd5b6e05dc52bc14fe32756844f9 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/lighting/lightWaterNonIndexedF.glsl @@ -0,0 +1,23 @@ +/** + * @file lightWaterF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +uniform sampler2D diffuseMap; + +vec3 atmosLighting(vec3 light); +vec4 applyWaterFog(vec4 color); + +void default_lighting_water() +{ + vec4 color = texture2D(diffuseMap,gl_TexCoord[0].xy) * gl_Color; + + color.rgb = atmosLighting(color.rgb); + + gl_FragColor = applyWaterFog(color); +} + diff --git a/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl b/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl index fde32ed0358f55c07f8124454c3086f775bb5cd8..8df2e6f222baab4182815ca31545350f60f3d6cc 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + float calcDirectionalLightSpecular(inout vec4 specular, vec3 view, vec3 n, vec3 l, vec3 lightCol, float da); vec3 calcPointLightSpecular(inout vec4 specular, vec3 view, vec3 v, vec3 n, vec3 l, float r, float pw, vec3 lightCol); diff --git a/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl index 8fe49e3be026cebf056e9d6968361346abdd1465..3d43a1813a53f4329751bc760b0305f93e024d6e 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + float calcDirectionalLight(vec3 n, vec3 l); float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight); diff --git a/indra/newview/app_settings/shaders/class2/objects/fullbrightShinyV.glsl b/indra/newview/app_settings/shaders/class2/objects/fullbrightShinyV.glsl new file mode 100644 index 0000000000000000000000000000000000000000..f49e74406fd19c5490849e7b3f731acfdd04df36 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/objects/fullbrightShinyV.glsl @@ -0,0 +1,35 @@ +/** + * @file fullbrightShinyV.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +void calcAtmospherics(vec3 inPositionEye); + +uniform vec4 origin; + +varying float vary_texture_index; + +void main() +{ + //transform vertex + vec4 vert = vec4(gl_Vertex.xyz,1.0); + vary_texture_index = gl_Vertex.w; + gl_Position = gl_ModelViewProjectionMatrix*vert; + + vec4 pos = (gl_ModelViewMatrix * vert); + vec3 norm = normalize(gl_NormalMatrix * gl_Normal); + vec3 ref = reflect(pos.xyz, -norm); + + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + gl_TexCoord[1] = gl_TextureMatrix[1]*vec4(ref,1.0); + + calcAtmospherics(pos.xyz); + + gl_FrontColor = gl_Color; + + gl_FogFragCoord = pos.z; +} diff --git a/indra/newview/app_settings/shaders/class2/objects/fullbrightV.glsl b/indra/newview/app_settings/shaders/class2/objects/fullbrightV.glsl new file mode 100644 index 0000000000000000000000000000000000000000..3076fa3260035ddd247467927c02fbfe9af19794 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/objects/fullbrightV.glsl @@ -0,0 +1,29 @@ +/** + * @file fullbrightV.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +void calcAtmospherics(vec3 inPositionEye); + +varying float vary_texture_index; + +void main() +{ + //transform vertex + vec4 vert = vec4(gl_Vertex.xyz,1.0); + vary_texture_index = gl_Vertex.w; + gl_Position = gl_ModelViewProjectionMatrix*vert; + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + + vec4 pos = (gl_ModelViewMatrix * vert); + + calcAtmospherics(pos.xyz); + + gl_FrontColor = gl_Color; + + gl_FogFragCoord = pos.z; +} diff --git a/indra/newview/app_settings/shaders/class2/objects/shinyV.glsl b/indra/newview/app_settings/shaders/class2/objects/shinyV.glsl index 4cebb06df080e8b289cccaee534789d54d7177aa..49992d353555757efe783be2a3f641dd0b078e17 100644 --- a/indra/newview/app_settings/shaders/class2/objects/shinyV.glsl +++ b/indra/newview/app_settings/shaders/class2/objects/shinyV.glsl @@ -5,20 +5,24 @@ * $/LicenseInfo$ */ -#version 120 + vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); void calcAtmospherics(vec3 inPositionEye); +varying float vary_texture_index; + uniform vec4 origin; void main() { //transform vertex - gl_Position = ftransform(); + vec4 vert = vec4(gl_Vertex.xyz,1.0); + vary_texture_index = gl_Vertex.w; + gl_Position = gl_ModelViewProjectionMatrix*vert; - vec4 pos = (gl_ModelViewMatrix * gl_Vertex); + vec4 pos = (gl_ModelViewMatrix * vert); vec3 norm = normalize(gl_NormalMatrix * gl_Normal); vec3 ref = reflect(pos.xyz, -norm); diff --git a/indra/newview/app_settings/shaders/class2/objects/simpleV.glsl b/indra/newview/app_settings/shaders/class2/objects/simpleV.glsl new file mode 100644 index 0000000000000000000000000000000000000000..5e02391767fefedd416b6fb0a0cd69ae0aaedb68 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/objects/simpleV.glsl @@ -0,0 +1,33 @@ +/** + * @file simpleV.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + + + +vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); +void calcAtmospherics(vec3 inPositionEye); + +varying float vary_texture_index; + +void main() +{ + //transform vertex + vec4 vert = vec4(gl_Vertex.xyz,1.0); + vary_texture_index = gl_Vertex.w; + gl_Position = gl_ModelViewProjectionMatrix*vert; + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + + vec4 pos = (gl_ModelViewMatrix * vert); + + vec3 norm = normalize(gl_NormalMatrix * gl_Normal); + + calcAtmospherics(pos.xyz); + + vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0.)); + gl_FrontColor = color; + + gl_FogFragCoord = pos.z; +} diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl index 77d15fba9a938989469fcbbf151e0b5f76203f61..21a0812c1b5ce1bd269bf8701c81ccd26ad9351e 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + ////////////////////////////////////////////////////////// // The fragment shader for the terrain atmospherics diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl index 8c5b864cbef69e49d0e0c71571ebcbcedbd0ac3c..ab4cf4806d36397ba9ebf6d5935f10f635915620 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + // Output variables vec3 getSunlitColor(); diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl index 8d365c15caf4fedb58ee369ee58a83462703995d..b61b0bb3966db2dd191aec85c47f54254327f2b1 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + // varying param funcs void setSunlitColor(vec3 v); diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl index cf9ef306324b1565d17e61496bce1b0da47e7f2c..3a6585bb330bb6c1c8d0c99f960adb1b4c2f7a24 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec3 vary_PositionEye; diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl index 398f1556a06925a21a2e18e15ad8a120af7573ca..0f6e231ca6988c85d0bec99f3cab73242cc4e35a 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec3 vary_PositionEye; diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl index 13207997b2f88b2f91842bec4a15a98ddb115804..20f907a006215a630ce250a039974dcda03a6f7d 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + ///////////////////////////////////////////////////////////////////////// // The fragment shader for the sky diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl index 267ef36d4db63e6666d8cbf17a561546497d3eec..3eac63076c19119a7e0f78e4c0d68f20e2dcf26e 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + ////////////////////////////////////////////////////////////////////////// // The vertex shader for creating the atmospheric sky diff --git a/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl b/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl index a658edd21f82d539bf9235fa27ddd41dc5275459..6570dcb6081d0f95fd6f2f107d01842cd39ce56b 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform vec4 gamma; diff --git a/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl b/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl index 77ca4868a68a81eeeee79cece7cddddfe2cfd004..d14c638130172c95807e6821a5691170f3277ced 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + ///////////////////////////////////////////////////////////////////////// // The fragment shader for the sky diff --git a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl index 03bca8f27e2e2ec9c45cbb4386be0ee70fefc416..1ea00f723afcab0ed9f5f746f194f1ab2e5e7dde 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + // SKY //////////////////////////////////////////////////////////////////////// // The vertex shader for creating the atmospheric sky diff --git a/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl b/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl index 7f1ad4d5b4d31efb498056e130b7b6aacf6ead14..28381482c135df9b91875775191f2279a1dae708 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl @@ -5,8 +5,6 @@ * $/LicenseInfo$ */ -#version 120 - ////////////////////////////////////////////////////////// // The fragment shader for the terrain atmospherics ////////////////////////////////////////////////////////// diff --git a/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl b/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl index a003e2a1f10e521eaee6a9188bf5a0a69cc61ddc..3d970d252c6e581b9fbe879fcd8f434df8077337 100644 --- a/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl +++ b/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); mat4 getSkinnedTransform(); diff --git a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl index fc370ef367c3f60319f84c0027c5ecb4bf6cf77b..498fee7c66ba3ab9495afb273425a84cc1ac43e6 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2DRect giLightMap; diff --git a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl index ae57227fe528b03b5e2a0d216c9a8b97a5ddfb39..eebe930666a60742bb73b063f384b32d99d4f726 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec2 vary_fragcoord; uniform vec2 screen_res; diff --git a/indra/newview/app_settings/shaders/class3/deferred/giF.glsl b/indra/newview/app_settings/shaders/class3/deferred/giF.glsl index 951e3e97aefc88dee9408e01aad35d701c24d2d5..9896f8dafecbe6438ffc12486fcbdb0a57222477 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/giF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/giF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable diff --git a/indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl b/indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl index b2f8b2c6338b207c23270e896d50a87f58f6a619..df4c6b3e0a4af0488db7fc977b767b11930a28b8 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable diff --git a/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl b/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl index 19c4e07b8b8dffa2791280efcf370e0940e5e306..7e20d71529ea52671fd1a19d10134e93f15adde0 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec2 vary_fragcoord; uniform vec2 screen_res; diff --git a/indra/newview/app_settings/shaders/class3/deferred/giV.glsl b/indra/newview/app_settings/shaders/class3/deferred/giV.glsl index 8dc1410ea5ad90d05d8bad4c485238550fd4cdd7..e86f2896da5fbc006f817a4f03a256599a7a69e3 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/giV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/giV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec2 vary_fragcoord; diff --git a/indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl b/indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl index 5f3bf68b240132fbe301d529805a06c9fa9e7b93..980def6443aba0136bd876eac59877c4acd288a0 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable diff --git a/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl b/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl index a24eda35dce7e099240dfc47dd37de2e5a1cb06b..9afeac6ddfa76c4ce00d63f57325d8defc09f166 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec2 vary_fragcoord; diff --git a/indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl b/indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl index ab99a889718571b597a502d811b8c30551d440ef..6d4c20f68c01e535fb1f62a78c04aa9ba16b1065 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable diff --git a/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl b/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl index 12983baa94882bfc3f58349847dd7bec1b3aadca..876f65ee3adc86302c81426f8ce576b67ae96a95 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec2 vary_fragcoord; uniform vec2 screen_res; diff --git a/indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl b/indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl index f037754708726c727f9cff7a43598c3eb4d9e562..fc658816805ccf6236f4b7b93f7909c2513c40c2 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable diff --git a/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl b/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl index ae57227fe528b03b5e2a0d216c9a8b97a5ddfb39..eebe930666a60742bb73b063f384b32d99d4f726 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + varying vec2 vary_fragcoord; uniform vec2 screen_res; diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl index ce32f66000f91fa0b67400b931f3da6464d669c7..d38d33cc2193cd64280e863bdd958d8beb595954 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + #extension GL_ARB_texture_rectangle : enable diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl index 8f0bcca76b86a22f32101d0c81b3631110fff0c9..745cc0199236aeff1ade125a59f78bd48b15d382 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform vec2 screen_res; diff --git a/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl b/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl index c54d9a1e3e80dcf0bc9ba20d70c92b346d4fa3dc..de7e038402235d2a6044aa200d102923b210ed78 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + uniform sampler2D diffuseMap; diff --git a/indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl b/indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl index 04533fdce1ac78d75e8d724802d07a4aba5e2d3e..92347a5b4a4fb2172c3679f86035e890bc3669da 100644 --- a/indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl +++ b/indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + float calcDirectionalLightSpecular(inout vec4 specular, vec3 view, vec3 n, vec3 l, vec3 lightCol, float da); vec3 calcPointLightSpecular(inout vec4 specular, vec3 view, vec3 v, vec3 n, vec3 l, float r, float pw, vec3 lightCol); diff --git a/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl index 73bc18b8663aa6de17e17800558da1d7d5e0a50f..24bbc0a1a115c6267ab5948ebc3b23f51de38b88 100644 --- a/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl +++ b/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl @@ -5,7 +5,7 @@ * $/LicenseInfo$ */ -#version 120 + float calcDirectionalLight(vec3 n, vec3 l); float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight); diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index dd8a88e5586036e14b46bf6ffbeca97485cd83eb..4da155efdab1c5f9fa7396a4762ba7b4418d27a2 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -1,4 +1,4 @@ -version 27 +version 29 // NOTE: This is mostly identical to featuretable_mac.txt with a few differences // Should be combined into one table @@ -48,6 +48,7 @@ RenderTransparentWater 1 1 RenderTreeLODFactor 1 1.0 RenderUseImpostors 1 1 RenderVBOEnable 1 1 +RenderVBOMappingDisable 1 1 RenderVolumeLODFactor 1 2.0 UseStartScreen 1 1 UseOcclusion 1 1 @@ -64,6 +65,7 @@ RenderDeferredSSAO 1 1 RenderShadowDetail 1 2 WatchdogDisabled 1 1 RenderUseStreamVBO 1 1 +RenderFSAASamples 1 16 // // Low Graphics Settings @@ -95,6 +97,7 @@ SkyUseClassicClouds 1 0 RenderDeferred 1 0 RenderDeferredSSAO 1 0 RenderShadowDetail 1 0 +RenderFSAASamples 1 0 // // Mid Graphics Settings @@ -124,6 +127,7 @@ WLSkyDetail 1 48 RenderDeferred 1 0 RenderDeferredSSAO 1 0 RenderShadowDetail 1 0 +RenderFSAASamples 1 0 // // High Graphics Settings (purty) @@ -153,6 +157,7 @@ WLSkyDetail 1 48 RenderDeferred 1 0 RenderDeferredSSAO 1 0 RenderShadowDetail 1 0 +RenderFSAASamples 1 4 // // Ultra graphics (REALLY PURTY!) @@ -181,6 +186,8 @@ WLSkyDetail 1 128 RenderDeferred 1 1 RenderDeferredSSAO 1 1 RenderShadowDetail 1 2 +RenderFSAASamples 1 8 + // // Class Unknown Hardware (unknown) @@ -238,6 +245,12 @@ RenderDeferred 0 0 RenderDeferredSSAO 0 0 RenderShadowDetail 0 0 +// +// No GL_ARB_map_buffer_range +// +list NoMapBufferRange +RenderVBOMappingDisable 1 0 + // // "Default" setups for safe, low, medium, high @@ -467,7 +480,6 @@ RenderAvatarCloth 0 0 list ATI RenderUseStreamVBO 1 0 -RenderAvatarVP 1 0 // Disable vertex buffer objects by default for ATI cards with little video memory list ATIVramLT256 diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt index 058bdcc7308bf9a35709c3304afb724491a06852..dab73dc3d18fd3d5f70d4b45ed26664189d40f76 100644 --- a/indra/newview/featuretable_linux.txt +++ b/indra/newview/featuretable_linux.txt @@ -1,4 +1,4 @@ -version 23 +version 25 // NOTE: This is mostly identical to featuretable_mac.txt with a few differences // Should be combined into one table @@ -48,6 +48,7 @@ RenderTransparentWater 1 1 RenderTreeLODFactor 1 1.0 RenderUseImpostors 1 1 RenderVBOEnable 1 1 +RenderVBOMappingDisable 1 1 RenderVolumeLODFactor 1 2.0 UseStartScreen 1 1 UseOcclusion 1 1 @@ -62,6 +63,7 @@ RenderShaderLightingMaxLevel 1 3 RenderDeferred 1 1 RenderDeferredSSAO 1 1 RenderShadowDetail 1 2 +RenderFSAASamples 1 16 // // Low Graphics Settings @@ -93,6 +95,7 @@ SkyUseClassicClouds 1 0 RenderDeferred 1 0 RenderDeferredSSAO 1 0 RenderShadowDetail 1 0 +RenderFSAASamples 1 0 // // Mid Graphics Settings @@ -122,6 +125,7 @@ WLSkyDetail 1 48 RenderDeferred 1 0 RenderDeferredSSAO 1 0 RenderShadowDetail 1 0 +RenderFSAASamples 1 0 // // High Graphics Settings (purty) @@ -151,6 +155,7 @@ WLSkyDetail 1 48 RenderDeferred 1 0 RenderDeferredSSAO 1 0 RenderShadowDetail 1 0 +RenderFSAASamples 1 4 // // Ultra graphics (REALLY PURTY!) @@ -180,6 +185,7 @@ WLSkyDetail 1 128 RenderDeferred 1 1 RenderDeferredSSAO 1 1 RenderShadowDetail 1 2 +RenderFSAASamples 1 8 // // Class Unknown Hardware (unknown) @@ -237,6 +243,13 @@ RenderDeferred 0 0 RenderDeferredSSAO 0 0 RenderShadowDetail 0 0 +// +// No GL_ARB_map_buffer_range +// +list NoMapBufferRange +RenderVBOMappingDisable 1 0 + + // "Default" setups for safe, low, medium, high // diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index e2b979d9e9c235e84bc3e14694e2a86c2eb5748f..a1e25aae0884f7162c78cdb023f3122b77ffe115 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -1,4 +1,4 @@ -version 23 +version 26 // NOTE: This is mostly identical to featuretable_mac.txt with a few differences // Should be combined into one table @@ -48,6 +48,7 @@ RenderTransparentWater 1 1 RenderTreeLODFactor 1 1.0 RenderUseImpostors 1 1 RenderVBOEnable 1 1 +RenderVBOMappingDisable 1 1 RenderVolumeLODFactor 1 2.0 UseStartScreen 1 1 UseOcclusion 1 1 @@ -64,6 +65,7 @@ RenderDeferredSSAO 1 1 RenderShadowDetail 1 2 WatchdogDisabled 1 1 RenderUseStreamVBO 1 1 +RenderFSAASamples 1 16 // // Low Graphics Settings @@ -95,6 +97,7 @@ SkyUseClassicClouds 1 0 RenderDeferred 1 0 RenderDeferredSSAO 1 0 RenderShadowDetail 1 0 +RenderFSAASamples 1 0 // // Mid Graphics Settings @@ -124,6 +127,7 @@ WLSkyDetail 1 48 RenderDeferred 1 0 RenderDeferredSSAO 1 0 RenderShadowDetail 1 0 +RenderFSAASamples 1 0 // // High Graphics Settings (purty) @@ -153,6 +157,7 @@ WLSkyDetail 1 48 RenderDeferred 1 0 RenderDeferredSSAO 1 0 RenderShadowDetail 1 2 +RenderFSAASamples 1 4 // // Ultra graphics (REALLY PURTY!) @@ -182,6 +187,7 @@ WLSkyDetail 1 128 RenderDeferred 1 0 RenderDeferredSSAO 1 0 RenderShadowDetail 1 2 +RenderFSAASamples 1 8 // // Class Unknown Hardware (unknown) @@ -239,6 +245,13 @@ RenderDeferred 0 0 RenderDeferredSSAO 0 0 RenderShadowDetail 0 0 +// +// No GL_ARB_map_buffer_range +// +list NoMapBufferRange +RenderVBOMappingDisable 1 0 + + // // "Default" setups for safe, low, medium, high // @@ -412,31 +425,6 @@ Disregard128DefaultDrawDistance 1 0 list ATI_Mobility_Radeon_X1xxx Disregard128DefaultDrawDistance 1 0 - - - -// Avatar hardware skinning causes -// invisible avatars on HD 2600... so I masked -// out other possible bad ones till it's fixed - -list ATI_Radeon_HD_2300 -RenderAvatarVP 0 0 -RenderAvatarCloth 0 0 -Disregard128DefaultDrawDistance 1 0 -list ATI_Radeon_HD_2400 -RenderAvatarVP 0 0 -RenderAvatarCloth 0 0 -Disregard128DefaultDrawDistance 1 0 -list ATI_Radeon_HD_2600 -RenderAvatarVP 0 0 -RenderAvatarCloth 0 0 -list ATI_Radeon_HD_2900 -RenderAvatarVP 0 0 -RenderAvatarCloth 0 0 -list ATI_Radeon_HD_3800 -RenderAvatarVP 0 0 -RenderAvatarCloth 0 0 - /// Tweaked NVIDIA list NVIDIA_GeForce_FX_5100 diff --git a/indra/newview/featuretable_xp.txt b/indra/newview/featuretable_xp.txt index 3339172a1a3d49ead0f4562b06c10af0974e05b6..abe4ec99285d9aa3dc4774d963ba90fa3e46ad28 100644 --- a/indra/newview/featuretable_xp.txt +++ b/indra/newview/featuretable_xp.txt @@ -1,4 +1,4 @@ -version 27 +version 29 // NOTE: This is mostly identical to featuretable_mac.txt with a few differences // Should be combined into one table @@ -48,6 +48,7 @@ RenderTransparentWater 1 1 RenderTreeLODFactor 1 1.0 RenderUseImpostors 1 1 RenderVBOEnable 1 1 +RenderVBOMappingDisable 1 1 RenderVolumeLODFactor 1 2.0 UseStartScreen 1 1 UseOcclusion 1 1 @@ -64,6 +65,7 @@ RenderDeferredSSAO 1 0 RenderShadowDetail 1 0 WatchdogDisabled 1 1 RenderUseStreamVBO 1 1 +RenderFSAASamples 1 16 // // Low Graphics Settings @@ -95,6 +97,7 @@ SkyUseClassicClouds 1 0 RenderDeferred 1 0 RenderDeferredSSAO 1 0 RenderShadowDetail 1 0 +RenderFSAASamples 1 0 // // Mid Graphics Settings @@ -124,6 +127,7 @@ WLSkyDetail 1 48 RenderDeferred 1 0 RenderDeferredSSAO 1 0 RenderShadowDetail 1 0 +RenderFSAASamples 1 0 // // High Graphics Settings (purty) @@ -153,6 +157,7 @@ WLSkyDetail 1 48 RenderDeferred 1 0 RenderDeferredSSAO 1 0 RenderShadowDetail 1 2 +RenderFSAASamples 1 4 // // Ultra graphics (REALLY PURTY!) @@ -182,6 +187,7 @@ WLSkyDetail 1 128 RenderDeferred 1 0 RenderDeferredSSAO 1 0 RenderShadowDetail 1 2 +RenderFSAASamples 1 8 // // Class Unknown Hardware (unknown) @@ -239,6 +245,13 @@ RenderDeferred 0 0 RenderDeferredSSAO 0 0 RenderShadowDetail 0 0 +// +// No GL_ARB_map_buffer_range +// +list NoMapBufferRange +RenderVBOMappingDisable 1 0 + + // // "Default" setups for safe, low, medium, high // @@ -466,7 +479,6 @@ RenderAvatarCloth 0 0 list ATI RenderUseStreamVBO 1 0 -RenderAvatarVP 1 0 // Disable vertex buffer objects by default for ATI cards with little video memory list ATIVramLT256 diff --git a/indra/newview/llaccountingquotamanager.cpp b/indra/newview/llaccountingquotamanager.cpp index 0a171959e7a69e8fe5d0feaed9f4a0eb550c6ed1..a4f5de5632fb0e8d54f777235595e8a7bc3543ca 100644 --- a/indra/newview/llaccountingquotamanager.cpp +++ b/indra/newview/llaccountingquotamanager.cpp @@ -71,12 +71,10 @@ class LLAccountingQuotaResponder : public LLCurl::Responder return; } - //Differentiate what the incoming caps could be from the data - //bool VOContent = content.has("Objects"); + //Differentiate what the incoming caps could be from the data 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 ) { @@ -91,16 +89,17 @@ class LLAccountingQuotaResponder : public LLCurl::Responder 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; + LLUUID parcelId; + //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(); + parcelId = content["parcel"][i]["parcel_id"].asUUID(); } + + //if ( content["parcel"][i].has("parcel_owner") ) + //{ + // parcelOwner = content["parcel"][i]["parcel_owner"].asInteger(); + //} F32 ownerRenderCost = 0; F32 ownerPhysicsCost = 0; @@ -117,48 +116,69 @@ class LLAccountingQuotaResponder : public LLCurl::Responder F32 otherNetworkCost = 0; F32 otherSimulationCost = 0; - F32 totalRenderCost = 0; - F32 totalPhysicsCost = 0; - F32 totalNetworkCost = 0; - F32 totalSimulationCost = 0; + F32 tempRenderCost = 0; + F32 tempPhysicsCost = 0; + F32 tempNetworkCost = 0; + F32 tempSimulationCost = 0; + + F32 selectedRenderCost = 0; + F32 selectedPhysicsCost = 0; + F32 selectedNetworkCost = 0; + F32 selectedSimulationCost = 0; + F32 parcelCapacity = 0; + + if ( content["parcel"][i].has("capacity") ) + { + parcelCapacity = content["parcel"][i].has("capacity"); + } + if ( content["parcel"][i].has("owner") ) { - ownerRenderCost = content["parcel"][i]["owner"]["render"].asReal(); + ownerRenderCost = content["parcel"][i]["owner"]["rendering"].asReal(); ownerPhysicsCost = content["parcel"][i]["owner"]["physics"].asReal(); - ownerNetworkCost = content["parcel"][i]["owner"]["network"].asReal(); - ownerSimulationCost = content["parcel"][i]["owner"]["simulation"].asReal(); - + ownerNetworkCost = content["parcel"][i]["owner"]["streaming"].asReal(); + ownerSimulationCost = content["parcel"][i]["owner"]["simulation"].asReal(); } + if ( content["parcel"][i].has("group") ) { - groupRenderCost = content["parcel"][i]["group"]["render"].asReal(); + groupRenderCost = content["parcel"][i]["group"]["rendering"].asReal(); groupPhysicsCost = content["parcel"][i]["group"]["physics"].asReal(); - groupNetworkCost = content["parcel"][i]["group"]["network"].asReal(); + groupNetworkCost = content["parcel"][i]["group"]["streaming"].asReal(); groupSimulationCost = content["parcel"][i]["group"]["simulation"].asReal(); } if ( content["parcel"][i].has("other") ) { - otherRenderCost = content["parcel"][i]["other"]["render"].asReal(); + otherRenderCost = content["parcel"][i]["other"]["rendering"].asReal(); otherPhysicsCost = content["parcel"][i]["other"]["physics"].asReal(); - otherNetworkCost = content["parcel"][i]["other"]["network"].asReal(); + otherNetworkCost = content["parcel"][i]["other"]["streaming"].asReal(); otherSimulationCost = content["parcel"][i]["other"]["simulation"].asReal(); } - if ( content["parcel"][i].has("total") ) + if ( content["parcel"][i].has("temp") ) { - 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(); - + tempRenderCost = content["parcel"][i]["total"]["rendering"].asReal(); + tempPhysicsCost = content["parcel"][i]["total"]["physics"].asReal(); + tempNetworkCost = content["parcel"][i]["total"]["streaming"].asReal(); + tempSimulationCost = content["parcel"][i]["total"]["simulation"].asReal(); + } + + if ( content["parcel"][i].has("selected") ) + { + selectedRenderCost = content["parcel"][i]["total"]["rendering"].asReal(); + selectedPhysicsCost = content["parcel"][i]["total"]["physics"].asReal(); + selectedNetworkCost = content["parcel"][i]["total"]["streaming"].asReal(); + selectedSimulationCost = content["parcel"][i]["total"]["simulation"].asReal(); } - ParcelQuota parcelQuota( ownerRenderCost, ownerPhysicsCost, ownerNetworkCost, ownerSimulationCost, - groupRenderCost, groupPhysicsCost, groupNetworkCost, groupSimulationCost, - otherRenderCost, otherPhysicsCost, otherNetworkCost, otherSimulationCost, - totalRenderCost, totalPhysicsCost, totalNetworkCost, totalSimulationCost ); + ParcelQuota parcelQuota( ownerRenderCost, ownerPhysicsCost, ownerNetworkCost, ownerSimulationCost, + groupRenderCost, groupPhysicsCost, groupNetworkCost, groupSimulationCost, + otherRenderCost, otherPhysicsCost, otherNetworkCost, otherSimulationCost, + tempRenderCost, tempPhysicsCost, tempNetworkCost, tempSimulationCost, + selectedRenderCost, selectedPhysicsCost, selectedNetworkCost, selectedSimulationCost, + parcelCapacity ); //Update the Parcel LLParcel* pParcel = LLViewerParcelMgr::getInstance()->getParcelSelection()->getParcel(); if ( pParcel ) @@ -179,18 +199,18 @@ class LLAccountingQuotaResponder : public LLCurl::Responder F32 networkCost = 0; F32 simulationCost = 0; - S32 localId = 0; + LLUUID objectId; - localId = content["selected"][i]["local_id"].asInteger(); - renderCost = content["selected"][i]["render"].asReal(); + objectId = content["selected"][i]["local_id"].asUUID(); + renderCost = content["selected"][i]["rendering"].asReal(); physicsCost = content["selected"][i]["physics"].asReal(); - networkCost = content["selected"][i]["network"].asReal(); + networkCost = content["selected"][i]["streaming"].asReal(); simulationCost = content["selected"][i]["simulation"].asReal(); - SelectionQuota selectionQuota( localId, renderCost, physicsCost, networkCost, simulationCost ); + SelectionQuota selectionQuota( objectId, renderCost, physicsCost, networkCost, simulationCost ); //Update the objects - //gObjectList.updateQuota( localId, selectionQuota ); + gObjectList.updateQuota( objectId, selectionQuota ); } } diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 80085dad9d2609d53f12cfdc6c7226ca76dec9e3..c30d3b9aa3e5e92a2376176c2d3e48d8ef985342 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -392,11 +392,9 @@ LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 origi } LLQuaternion inv_obj_rot = ~obj_rot; // get inverse of rotation - LLVector3 object_extents; + LLVector3 object_extents = object->getScale(); const LLVector4a* oe4 = object->mDrawable->getSpatialExtents(); - LLVector4a size; - size.setSub(oe4[1], oe4[0]); - object_extents.set( size[0], size[1], size[2] ); + object_extents.set( oe4[1][0], oe4[1][1], oe4[1][2] ); // make sure they object extents are non-zero object_extents.clamp(0.001f, F32_MAX); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 90f46316e82385d2febf6efe5f7c3ba658bda6e7..d2582d524d1097ec8ccfbfab16be4fd244a46eff 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3497,7 +3497,7 @@ void LLAppViewer::migrateCacheDirectory() // Migrate inventory cache to avoid pain to inventory database after mass update S32 file_count = 0; std::string file_name; - std::string mask = delimiter + "*.*"; + std::string mask = "*.*"; LLDirIterator iter(old_cache_dir, mask); while (iter.next(file_name)) @@ -3725,8 +3725,7 @@ bool LLAppViewer::initCache() { // doesn't exist, look for a data file std::string mask; - mask = gDirUtilp->getDirDelimiter(); - mask += VFS_DATA_FILE_BASE; + mask = VFS_DATA_FILE_BASE; mask += "*"; std::string dir; diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp index c08771c5e7d2352049fa4c56004e6432d182d272..d7ba4ea4706b89604fdbe19faa44acd5d8fb0d17 100644 --- a/indra/newview/llassetuploadresponders.cpp +++ b/indra/newview/llassetuploadresponders.cpp @@ -384,18 +384,18 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content) // Continuing the horrible hack above, we need to extract the originally requested permissions data, if any, // and use them for each next file to be uploaded. Note the requested perms are not the same as the U32 everyone_perms = - content.has("everyone_mask") ? - content["everyone_mask"].asInteger() : + content.has("new_everyone_mask") ? + content["new_everyone_mask"].asInteger() : PERM_NONE; U32 group_perms = - content.has("group_mask") ? - content["group_mask"].asInteger() : + content.has("new_group_mask") ? + content["new_group_mask"].asInteger() : PERM_NONE; U32 next_owner_perms = - content.has("next_owner_mask") ? - content["next_owner_mask"].asInteger() : + content.has("new_next_owner_mask") ? + content["new_next_owner_mask"].asInteger() : PERM_NONE; std::string display_name = LLStringUtil::null; diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp index 84c560639e00961b568c25f1a92f03f039ecfc00..254c0adef16bfffb71c6b0ff955914f795be29cc 100644 --- a/indra/newview/llcofwearables.cpp +++ b/indra/newview/llcofwearables.cpp @@ -317,7 +317,6 @@ BOOL LLCOFWearables::postBuild() mAttachments->setComparator(&WEARABLE_NAME_COMPARATOR); mBodyParts->setComparator(&WEARABLE_NAME_COMPARATOR); - mClothingTab = getChild<LLAccordionCtrlTab>("tab_clothing"); mClothingTab->setDropDownStateChangedCallback(boost::bind(&LLCOFWearables::onAccordionTabStateChanged, this, _1, _2)); @@ -499,6 +498,10 @@ void LLCOFWearables::populateAttachmentsAndBodypartsLists(const LLInventoryModel mAttachments->sort(); mAttachments->notify(REARRANGE); //notifying the parent about the list's size change (cause items were added with rearrange=false) } + else + { + mAttachments->setNoItemsCommentText(LLTrans::getString("no_attachments")); + } if (mBodyParts->size()) { diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index bdc12ec0e3c384ca6003dde4477a62c00bf64ba1..ad3710843c60b4f8c821cad0dabc2ac73e84ffdd 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -94,7 +94,9 @@ void LLDrawable::init() mRenderType = 0; mCurrentScale = LLVector3(1,1,1); mDistanceWRTCamera = 0.0f; - + mPositionGroup.clear(); + mExtents[0].clear(); + mExtents[1].clear(); mQuietCount = 0; mState = 0; @@ -587,7 +589,10 @@ void LLDrawable::setRadius(F32 radius) void LLDrawable::moveUpdatePipeline(BOOL moved) { - makeActive(); + if (moved) + { + makeActive(); + } // Update the face centers. for (S32 i = 0; i < getNumFaces(); i++) @@ -695,7 +700,8 @@ void LLDrawable::updateDistance(LLCamera& camera, bool force_update) { if (LLViewerCamera::sCurCameraID != LLViewerCamera::CAMERA_WORLD) { - llerrs << "WTF?" << llendl; + llwarns << "Attempted to update distance for non-world camera." << llendl; + return; } //switch LOD with the spatial group to avoid artifacts diff --git a/indra/newview/lldrawable.h b/indra/newview/lldrawable.h index 9ebe1a45b44a12654a9c1ca8afb66da7941d735f..e268640a21cdf806415bd68bea90e9f719da88df 100644 --- a/indra/newview/lldrawable.h +++ b/indra/newview/lldrawable.h @@ -276,6 +276,7 @@ class LLDrawable : public LLRefCount REBUILD_SHADOW = 0x02000000, HAS_ALPHA = 0x04000000, RIGGED = 0x08000000, + PARTITION_MOVE = 0x10000000, } EDrawableFlags; private: //aligned members diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp index 25e4bc847c253dcfd41423ef3575751c21c073c5..f5483d969d196ce1095d2c54da32a4a6e326ac9e 100644 --- a/indra/newview/lldrawpool.cpp +++ b/indra/newview/lldrawpool.cpp @@ -191,6 +191,16 @@ void LLDrawPool::renderPostDeferred(S32 pass) //virtual void LLDrawPool::endRenderPass( S32 pass ) { + for (U32 i = 0; i < gGLManager.mNumTextureImageUnits; i++) + { //dummy cleanup of any currently bound textures + if (gGL.getTexUnit(i)->getCurrType() != LLTexUnit::TT_NONE) + { + gGL.getTexUnit(i)->unbind(gGL.getTexUnit(i)->getCurrType()); + gGL.getTexUnit(i)->disable(); + } + } + + gGL.getTexUnit(0)->activate(); } //virtual @@ -430,14 +440,14 @@ void LLRenderPass::renderTexture(U32 type, U32 mask) pushBatches(type, mask, TRUE); } -void LLRenderPass::pushBatches(U32 type, U32 mask, BOOL texture) +void LLRenderPass::pushBatches(U32 type, U32 mask, BOOL texture, BOOL batch_textures) { for (LLCullResult::drawinfo_list_t::iterator i = gPipeline.beginRenderMap(type); i != gPipeline.endRenderMap(type); ++i) { LLDrawInfo* pparams = *i; if (pparams) { - pushBatch(*pparams, mask, texture); + pushBatch(*pparams, mask, texture, batch_textures); } } } @@ -456,26 +466,43 @@ void LLRenderPass::applyModelMatrix(LLDrawInfo& params) } } -void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture) +void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL batch_textures) { applyModelMatrix(params); + bool tex_setup = false; + if (texture) { - if (params.mTexture.notNull()) + if (batch_textures && params.mTextureList.size() > 1) { - params.mTexture->addTextureStats(params.mVSize); - gGL.getTexUnit(0)->bind(params.mTexture, TRUE) ; - if (params.mTextureMatrix) + for (U32 i = 0; i < params.mTextureList.size(); ++i) { - glMatrixMode(GL_TEXTURE); - glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix); - gPipeline.mTextureMatrixOps++; + if (params.mTextureList[i].notNull()) + { + gGL.getTexUnit(i)->bind(params.mTextureList[i], TRUE); + } } } else - { - gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + { //not batching textures or batch has only 1 texture -- might need a texture matrix + if (params.mTexture.notNull()) + { + params.mTexture->addTextureStats(params.mVSize); + gGL.getTexUnit(0)->bind(params.mTexture, TRUE) ; + if (params.mTextureMatrix) + { + tex_setup = true; + gGL.getTexUnit(0)->activate(); + glMatrixMode(GL_TEXTURE); + glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix); + gPipeline.mTextureMatrixOps++; + } + } + else + { + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + } } } @@ -490,7 +517,7 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture) gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode); } - if (params.mTextureMatrix && texture && params.mTexture.notNull()) + if (tex_setup) { glLoadIdentity(); glMatrixMode(GL_MODELVIEW); diff --git a/indra/newview/lldrawpool.h b/indra/newview/lldrawpool.h index d3fd9ead0d4ef42a88f3a0d0230ffc03d8586b2b..c7acbb42c62da2c8aa5a471e7c8f5a5aaddfd536 100644 --- a/indra/newview/lldrawpool.h +++ b/indra/newview/lldrawpool.h @@ -146,8 +146,8 @@ class LLRenderPass : public LLDrawPool void resetDrawOrders() { } static void applyModelMatrix(LLDrawInfo& params); - virtual void pushBatches(U32 type, U32 mask, BOOL texture = TRUE); - virtual void pushBatch(LLDrawInfo& params, U32 mask, BOOL texture); + virtual void pushBatches(U32 type, U32 mask, BOOL texture = TRUE, BOOL batch_textures = FALSE); + virtual void pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL batch_textures = FALSE); virtual void renderGroup(LLSpatialGroup* group, U32 type, U32 mask, BOOL texture = TRUE); virtual void renderGroups(U32 type, U32 mask, BOOL texture = TRUE); virtual void renderTexture(U32 type, U32 mask); diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp index 8b5a2ce78182d6e4147c73cb09430aaae7453f88..8d46133912e61fd7b0840ef7822041cc46f4375a 100644 --- a/indra/newview/lldrawpoolalpha.cpp +++ b/indra/newview/lldrawpoolalpha.cpp @@ -124,7 +124,10 @@ void LLDrawPoolAlpha::beginPostDeferredPass(S32 pass) if (pass == 0) { simple_shader = &gDeferredAlphaProgram; - fullbright_shader = &gDeferredFullbrightProgram; + fullbright_shader = &gObjectFullbrightProgram; + + //prime simple shader (loads shadow relevant uniforms) + gPipeline.bindDeferredShader(*simple_shader); } else { @@ -228,13 +231,13 @@ void LLDrawPoolAlpha::render(S32 pass) if (!LLPipeline::sRenderDeferred) { simple_shader->bind(); - pushBatches(LLRenderPass::PASS_ALPHA_MASK, getVertexDataMask()); + pushBatches(LLRenderPass::PASS_ALPHA_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE); } if (fullbright_shader) { fullbright_shader->bind(); } - pushBatches(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, getVertexDataMask()); + pushBatches(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE); LLGLSLShader::bindNoShader(); } else @@ -273,7 +276,14 @@ void LLDrawPoolAlpha::render(S32 pass) } } - renderAlpha(getVertexDataMask()); + if (mVertexShaderLevel > 0) + { + renderAlpha(getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX); + } + else + { + renderAlpha(getVertexDataMask()); + } gGL.setColorMask(true, false); @@ -283,11 +293,6 @@ void LLDrawPoolAlpha::render(S32 pass) gGL.setSceneBlendType(LLRender::BT_ALPHA); } - if (deferred_render && current_shader != NULL) - { - gPipeline.unbindDeferredShader(*current_shader); - } - if (sShowDebugAlpha) { if(gPipeline.canUseWindLightShaders()) @@ -339,12 +344,9 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask) { BOOL initialized_lighting = FALSE; BOOL light_enabled = TRUE; - S32 diffuse_channel = 0; - - BOOL use_shaders = (LLPipeline::sUnderWaterRender && gPipeline.canUseVertexShaders()) - || gPipeline.canUseWindLightShadersOnObjects(); - + BOOL use_shaders = gPipeline.canUseVertexShaders(); + for (LLCullResult::sg_list_t::iterator i = gPipeline.beginAlphaGroups(); i != gPipeline.endAlphaGroups(); ++i) { LLSpatialGroup* group = *i; @@ -368,92 +370,89 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask) LLRenderPass::applyModelMatrix(params); + + if (params.mFullbright) { - if (params.mFullbright) - { - // Turn off lighting if it hasn't already been so. - if (light_enabled || !initialized_lighting) - { - initialized_lighting = TRUE; - if (use_shaders) - { - target_shader = fullbright_shader; - } - else - { - gPipeline.enableLightsFullbright(LLColor4(1,1,1,1)); - } - light_enabled = FALSE; - } - } - // Turn on lighting if it isn't already. - else if (!light_enabled || !initialized_lighting) + // Turn off lighting if it hasn't already been so. + if (light_enabled || !initialized_lighting) { initialized_lighting = TRUE; if (use_shaders) { - target_shader = simple_shader; + target_shader = fullbright_shader; } else { - gPipeline.enableLightsDynamic(); + gPipeline.enableLightsFullbright(LLColor4(1,1,1,1)); } - light_enabled = TRUE; + light_enabled = FALSE; } - - // If we need shaders, and we're not ALREADY using the proper shader, then bind it - // (this way we won't rebind shaders unnecessarily). - if(use_shaders && (current_shader != target_shader)) + } + // Turn on lighting if it isn't already. + else if (!light_enabled || !initialized_lighting) + { + initialized_lighting = TRUE; + if (use_shaders) { - llassert(target_shader != NULL); - if (deferred_render && current_shader != NULL) - { - gPipeline.unbindDeferredShader(*current_shader); - diffuse_channel = 0; - } - current_shader = target_shader; - if (deferred_render) - { - gPipeline.bindDeferredShader(*current_shader); - diffuse_channel = current_shader->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP); - } - else - { - current_shader->bind(); - } + target_shader = simple_shader; } - else if (!use_shaders && current_shader != NULL) + else { - if (deferred_render) - { - gPipeline.unbindDeferredShader(*current_shader); - diffuse_channel = 0; - } - LLGLSLShader::bindNoShader(); - current_shader = NULL; + gPipeline.enableLightsDynamic(); } + light_enabled = TRUE; + } - if (params.mGroup) - { - params.mGroup->rebuildMesh(); - } + // If we need shaders, and we're not ALREADY using the proper shader, then bind it + // (this way we won't rebind shaders unnecessarily). + if(use_shaders && (current_shader != target_shader)) + { + llassert(target_shader != NULL); + current_shader = target_shader; + current_shader->bind(); + } + else if (!use_shaders && current_shader != NULL) + { + LLGLSLShader::bindNoShader(); + current_shader = NULL; + } - - if (params.mTexture.notNull()) + if (params.mGroup) + { + params.mGroup->rebuildMesh(); + } + + bool tex_setup = false; + + if (use_shaders && params.mTextureList.size() > 1) + { + for (U32 i = 0; i < params.mTextureList.size(); ++i) { - gGL.getTexUnit(diffuse_channel)->bind(params.mTexture.get()); - if(params.mTexture.notNull()) + if (params.mTextureList[i].notNull()) { - params.mTexture->addTextureStats(params.mVSize); + gGL.getTexUnit(i)->bind(params.mTextureList[i], TRUE); } + } + } + else + { //not batching textures or batch has only 1 texture -- might need a texture matrix + if (params.mTexture.notNull()) + { + params.mTexture->addTextureStats(params.mVSize); + gGL.getTexUnit(0)->bind(params.mTexture, TRUE) ; if (params.mTextureMatrix) { + tex_setup = true; gGL.getTexUnit(0)->activate(); glMatrixMode(GL_TEXTURE); glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix); gPipeline.mTextureMatrixOps++; } } + else + { + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + } } params.mVertexBuffer->setBuffer(mask); @@ -480,7 +479,7 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask) gGL.blendFunc(mColorSFactor, mColorDFactor, mAlphaSFactor, mAlphaDFactor); } - if (params.mTextureMatrix && params.mTexture.notNull()) + if (tex_setup) { gGL.getTexUnit(0)->activate(); glLoadIdentity(); @@ -490,15 +489,8 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask) } } - if (deferred_render && current_shader != NULL) - { - gPipeline.unbindDeferredShader(*current_shader); - LLVertexBuffer::unbind(); - LLGLState::checkStates(); - LLGLState::checkTextureChannels(); - LLGLState::checkClientArrays(); - } - + LLVertexBuffer::unbind(); + if (!light_enabled) { gPipeline.enableLightsDynamic(); diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 645c7ebcaeb933d586074da457beb80c55518d3d..9f790d03fe05a3d47ac1728b428a2ba457b7c9cc 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -459,14 +459,6 @@ S32 LLDrawPoolAvatar::getNumPasses() { return 10; } - if (LLPipeline::sImpostorRender) - { - return 1; - } - else - { - return 3; - } } @@ -613,11 +605,11 @@ void LLDrawPoolAvatar::beginRigid() { if (LLPipeline::sUnderWaterRender) { - sVertexProgram = &gObjectSimpleWaterProgram; + sVertexProgram = &gObjectSimpleNonIndexedWaterProgram; } else { - sVertexProgram = &gObjectSimpleProgram; + sVertexProgram = &gObjectSimpleNonIndexedProgram; } if (sVertexProgram != NULL) @@ -669,7 +661,7 @@ void LLDrawPoolAvatar::endDeferredImpostor() void LLDrawPoolAvatar::beginDeferredRigid() { - sVertexProgram = &gDeferredDiffuseProgram; + sVertexProgram = &gDeferredNonIndexedDiffuseProgram; sVertexProgram->bind(); } @@ -700,11 +692,11 @@ void LLDrawPoolAvatar::beginSkinned() { if (LLPipeline::sUnderWaterRender) { - sVertexProgram = &gObjectSimpleWaterProgram; + sVertexProgram = &gObjectSimpleNonIndexedWaterProgram; } else { - sVertexProgram = &gObjectSimpleProgram; + sVertexProgram = &gObjectSimpleNonIndexedProgram; } } @@ -789,11 +781,11 @@ void LLDrawPoolAvatar::beginRiggedSimple() { if (LLPipeline::sUnderWaterRender) { - sVertexProgram = &gObjectSimpleWaterProgram; + sVertexProgram = &gObjectSimpleNonIndexedWaterProgram; } else { - sVertexProgram = &gObjectSimpleProgram; + sVertexProgram = &gObjectSimpleNonIndexedProgram; } } @@ -864,11 +856,11 @@ void LLDrawPoolAvatar::beginRiggedFullbright() { if (LLPipeline::sUnderWaterRender) { - sVertexProgram = &gObjectFullbrightWaterProgram; + sVertexProgram = &gObjectFullbrightNonIndexedWaterProgram; } else { - sVertexProgram = &gObjectFullbrightProgram; + sVertexProgram = &gObjectFullbrightNonIndexedProgram; } } @@ -908,11 +900,11 @@ void LLDrawPoolAvatar::beginRiggedShinySimple() { if (LLPipeline::sUnderWaterRender) { - sVertexProgram = &gObjectShinyWaterProgram; + sVertexProgram = &gObjectShinyNonIndexedWaterProgram; } else { - sVertexProgram = &gObjectShinyProgram; + sVertexProgram = &gObjectShinyNonIndexedProgram; } } @@ -953,11 +945,11 @@ void LLDrawPoolAvatar::beginRiggedFullbrightShiny() { if (LLPipeline::sUnderWaterRender) { - sVertexProgram = &gObjectFullbrightShinyWaterProgram; + sVertexProgram = &gObjectFullbrightShinyNonIndexedWaterProgram; } else { - sVertexProgram = &gObjectFullbrightShinyProgram; + sVertexProgram = &gObjectFullbrightShinyNonIndexedProgram; } } @@ -1419,7 +1411,7 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace* void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow) { - if (avatar->isSelf() && !gAgent.needsRenderAvatar()) + if (avatar->isSelf() && !gAgent.needsRenderAvatar() || !gMeshRepo.meshRezEnabled()) { return; } @@ -1456,7 +1448,7 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow) continue; } - const LLMeshSkinInfo* skin = gMeshRepo.getSkinInfo(mesh_id); + const LLMeshSkinInfo* skin = gMeshRepo.getSkinInfo(mesh_id, vobj); if (!skin) { continue; diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index 2f76baaaf7eb7f3d6b61aab63db61752df14a62f..813b3820ee8948c05e566754853c8531af581281 100644 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -316,6 +316,9 @@ void LLDrawPoolBump::endRenderPass(S32 pass) llassert(0); break; } + + //to cleanup texture channels + LLRenderPass::endRenderPass(pass); } //static @@ -354,6 +357,11 @@ void LLDrawPoolBump::beginShiny(bool invisible) } bindCubeMap(shader, mVertexShaderLevel, diffuse_channel, cube_channel, invisible); + + if (mVertexShaderLevel > 1) + { //indexed texture rendering, channel 0 is always diffuse + diffuse_channel = 0; + } } //static @@ -421,16 +429,16 @@ void LLDrawPoolBump::renderShiny(bool invisible) LLGLEnable blend_enable(GL_BLEND); if (!invisible && mVertexShaderLevel > 1) { - LLRenderPass::renderTexture(LLRenderPass::PASS_SHINY, sVertexMask); + LLRenderPass::pushBatches(LLRenderPass::PASS_SHINY, sVertexMask | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE); } else if (!invisible) { renderGroups(LLRenderPass::PASS_SHINY, sVertexMask); } - else // invisible - { - renderGroups(LLRenderPass::PASS_INVISI_SHINY, sVertexMask); - } + //else // invisible (deprecated) + //{ + //renderGroups(LLRenderPass::PASS_INVISI_SHINY, sVertexMask); + //} } } @@ -529,6 +537,12 @@ void LLDrawPoolBump::beginFullbrightShiny() gGL.getTexUnit(cube_channel)->bind(cube_map); gGL.getTexUnit(0)->activate(); } + + if (mVertexShaderLevel > 1) + { //indexed texture rendering, channel 0 is always diffuse + diffuse_channel = 0; + } + mShiny = TRUE; } @@ -543,7 +557,15 @@ void LLDrawPoolBump::renderFullbrightShiny() if( gSky.mVOSkyp->getCubeMap() ) { LLGLEnable blend_enable(GL_BLEND); - LLRenderPass::renderTexture(LLRenderPass::PASS_FULLBRIGHT_SHINY, sVertexMask); + + if (mVertexShaderLevel > 1) + { + LLRenderPass::pushBatches(LLRenderPass::PASS_FULLBRIGHT_SHINY, sVertexMask | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE); + } + else + { + LLRenderPass::renderTexture(LLRenderPass::PASS_FULLBRIGHT_SHINY, sVertexMask); + } } } @@ -843,6 +865,9 @@ void LLDrawPoolBump::endPostDeferredPass(S32 pass) endBump(LLRenderPass::PASS_POST_BUMP); break; } + + //to disable texture channels + LLRenderPass::endRenderPass(pass); } void LLDrawPoolBump::renderPostDeferred(S32 pass) @@ -1300,43 +1325,60 @@ void LLDrawPoolBump::renderBump(U32 type, U32 mask) } } -void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture) +void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL batch_textures) { applyModelMatrix(params); - if (params.mTextureMatrix) + bool tex_setup = false; + + if (batch_textures && params.mTextureList.size() > 1) { - if (mShiny) + for (U32 i = 0; i < params.mTextureList.size(); ++i) { - gGL.getTexUnit(0)->activate(); - glMatrixMode(GL_TEXTURE); + if (params.mTextureList[i].notNull()) + { + gGL.getTexUnit(i)->bind(params.mTextureList[i], TRUE); + } } - else + } + else + { //not batching textures or batch has only 1 texture -- might need a texture matrix + if (params.mTextureMatrix) { - gGL.getTexUnit(1)->activate(); - glMatrixMode(GL_TEXTURE); + if (mShiny) + { + gGL.getTexUnit(0)->activate(); + glMatrixMode(GL_TEXTURE); + } + else + { + gGL.getTexUnit(1)->activate(); + glMatrixMode(GL_TEXTURE); + glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix); + gPipeline.mTextureMatrixOps++; + gGL.getTexUnit(0)->activate(); + } + glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix); gPipeline.mTextureMatrixOps++; - gGL.getTexUnit(0)->activate(); - } - - glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix); - gPipeline.mTextureMatrixOps++; - } - if (mShiny && mVertexShaderLevel > 1 && texture) - { - if (params.mTexture.notNull()) - { - gGL.getTexUnit(diffuse_channel)->bind(params.mTexture) ; - params.mTexture->addTextureStats(params.mVSize); + tex_setup = true; } - else + + if (mShiny && mVertexShaderLevel > 1 && texture) { - gGL.getTexUnit(diffuse_channel)->unbind(LLTexUnit::TT_TEXTURE); + if (params.mTexture.notNull()) + { + gGL.getTexUnit(diffuse_channel)->bind(params.mTexture) ; + params.mTexture->addTextureStats(params.mVSize); + } + else + { + gGL.getTexUnit(diffuse_channel)->unbind(LLTexUnit::TT_TEXTURE); + } } } - + if (params.mGroup) { params.mGroup->rebuildMesh(); @@ -1344,7 +1386,7 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture) params.mVertexBuffer->setBuffer(mask); params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset); gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode); - if (params.mTextureMatrix) + if (tex_setup) { if (mShiny) { diff --git a/indra/newview/lldrawpoolbump.h b/indra/newview/lldrawpoolbump.h index f4702bf61d4ed3ed8d8a2c6545cc36f0fcdaf64a..476b1d41b7d40d85ac08d6fb353cabe18d4773b3 100644 --- a/indra/newview/lldrawpoolbump.h +++ b/indra/newview/lldrawpoolbump.h @@ -55,7 +55,7 @@ protected : virtual void endRenderPass( S32 pass ); virtual S32 getNumPasses(); /*virtual*/ void prerender(); - /*virtual*/ void pushBatch(LLDrawInfo& params, U32 mask, BOOL texture); + /*virtual*/ void pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL batch_textures = FALSE); void renderBump(U32 type, U32 mask); void renderGroup(LLSpatialGroup* group, U32 type, U32 mask, BOOL texture); diff --git a/indra/newview/lldrawpoolsimple.cpp b/indra/newview/lldrawpoolsimple.cpp index 2e83167851d7abd61941c00da7889d5a386dc7c7..5dbb27cabb84e174b0dcb0b9a7f4c82daa266ec6 100644 --- a/indra/newview/lldrawpoolsimple.cpp +++ b/indra/newview/lldrawpoolsimple.cpp @@ -44,6 +44,36 @@ static LLGLSLShader* fullbright_shader = NULL; static LLFastTimer::DeclareTimer FTM_RENDER_SIMPLE_DEFERRED("Deferred Simple"); static LLFastTimer::DeclareTimer FTM_RENDER_GRASS_DEFERRED("Deferred Grass"); +void LLDrawPoolGlow::beginPostDeferredPass(S32 pass) +{ + gDeferredFullbrightProgram.bind(); +} + +void LLDrawPoolGlow::renderPostDeferred(S32 pass) +{ + LLFastTimer t(FTM_RENDER_GLOW); + LLGLEnable blend(GL_BLEND); + LLGLDisable test(GL_ALPHA_TEST); + gGL.flush(); + /// Get rid of z-fighting with non-glow pass. + LLGLEnable polyOffset(GL_POLYGON_OFFSET_FILL); + glPolygonOffset(-1.0f, -1.0f); + gGL.setSceneBlendType(LLRender::BT_ADD); + + LLGLDepthTest depth(GL_TRUE, GL_FALSE); + gGL.setColorMask(false, true); + pushBatches(LLRenderPass::PASS_GLOW, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE); + + gGL.setColorMask(true, false); + gGL.setSceneBlendType(LLRender::BT_ALPHA); +} + +void LLDrawPoolGlow::endPostDeferredPass(S32 pass) +{ + gDeferredFullbrightProgram.unbind(); + LLRenderPass::endRenderPass(pass); +} + void LLDrawPoolGlow::render(S32 pass) { LLFastTimer t(FTM_RENDER_GLOW); @@ -68,7 +98,15 @@ void LLDrawPoolGlow::render(S32 pass) LLGLDepthTest depth(GL_TRUE, GL_FALSE); gGL.setColorMask(false, true); - renderTexture(LLRenderPass::PASS_GLOW, getVertexDataMask()); + + if (shader_level > 1) + { + pushBatches(LLRenderPass::PASS_GLOW, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE); + } + else + { + renderTexture(LLRenderPass::PASS_GLOW, getVertexDataMask()); + } gGL.setColorMask(true, false); gGL.setSceneBlendType(LLRender::BT_ALPHA); @@ -79,10 +117,10 @@ void LLDrawPoolGlow::render(S32 pass) } } -void LLDrawPoolGlow::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture) +void LLDrawPoolGlow::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL batch_textures) { glColor4ubv(params.mGlowColor.mV); - LLRenderPass::pushBatch(params, mask, texture); + LLRenderPass::pushBatch(params, mask, texture, batch_textures); } @@ -126,10 +164,11 @@ void LLDrawPoolSimple::beginRenderPass(S32 pass) void LLDrawPoolSimple::endRenderPass(S32 pass) { LLFastTimer t(FTM_RENDER_SIMPLE); + stop_glerror(); LLRenderPass::endRenderPass(pass); - - if (mVertexShaderLevel > 0){ - + stop_glerror(); + if (mVertexShaderLevel > 0) + { simple_shader->unbind(); } } @@ -142,13 +181,24 @@ void LLDrawPoolSimple::render(S32 pass) { //render simple LLFastTimer t(FTM_RENDER_SIMPLE); gPipeline.enableLightsDynamic(); - renderTexture(LLRenderPass::PASS_SIMPLE, getVertexDataMask()); - if (LLPipeline::sRenderDeferred) - { //if deferred rendering is enabled, bump faces aren't registered as simple - //render bump faces here as simple so bump faces will appear under water - renderTexture(LLRenderPass::PASS_BUMP, getVertexDataMask()); + if (mVertexShaderLevel > 0) + { + U32 mask = getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX; + + pushBatches(LLRenderPass::PASS_SIMPLE, mask, TRUE, TRUE); + + if (LLPipeline::sRenderDeferred) + { //if deferred rendering is enabled, bump faces aren't registered as simple + //render bump faces here as simple so bump faces will appear under water + pushBatches(LLRenderPass::PASS_BUMP, mask, TRUE, TRUE); + } + } + else + { + renderTexture(LLRenderPass::PASS_SIMPLE, getVertexDataMask()); } + } } @@ -177,7 +227,7 @@ void LLDrawPoolSimple::renderDeferred(S32 pass) { //render simple LLFastTimer t(FTM_RENDER_SIMPLE_DEFERRED); - renderTexture(LLRenderPass::PASS_SIMPLE, getVertexDataMask()); + pushBatches(LLRenderPass::PASS_SIMPLE, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE); } } @@ -200,11 +250,11 @@ void LLDrawPoolGrass::beginRenderPass(S32 pass) if (LLPipeline::sUnderWaterRender) { - simple_shader = &gObjectSimpleWaterProgram; + simple_shader = &gObjectSimpleNonIndexedWaterProgram; } else { - simple_shader = &gObjectSimpleProgram; + simple_shader = &gObjectSimpleNonIndexedProgram; } if (mVertexShaderLevel > 0) @@ -285,6 +335,26 @@ void LLDrawPoolFullbright::prerender() mVertexShaderLevel = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_OBJECT); } +void LLDrawPoolFullbright::beginPostDeferredPass(S32 pass) +{ + gDeferredFullbrightProgram.bind(); +} + +void LLDrawPoolFullbright::renderPostDeferred(S32 pass) +{ + LLFastTimer t(FTM_RENDER_FULLBRIGHT); + + gGL.setSceneBlendType(LLRender::BT_ALPHA); + U32 fullbright_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_COLOR | LLVertexBuffer::MAP_TEXTURE_INDEX; + pushBatches(LLRenderPass::PASS_FULLBRIGHT, fullbright_mask, TRUE, TRUE); +} + +void LLDrawPoolFullbright::endPostDeferredPass(S32 pass) +{ + gDeferredFullbrightProgram.unbind(); + LLRenderPass::endRenderPass(pass); +} + void LLDrawPoolFullbright::beginRenderPass(S32 pass) { LLFastTimer t(FTM_RENDER_FULLBRIGHT); @@ -313,25 +383,21 @@ void LLDrawPoolFullbright::endRenderPass(S32 pass) void LLDrawPoolFullbright::render(S32 pass) { //render fullbright LLFastTimer t(FTM_RENDER_FULLBRIGHT); + gGL.setSceneBlendType(LLRender::BT_ALPHA); + if (mVertexShaderLevel > 0) { fullbright_shader->bind(); fullbright_shader->uniform1f(LLViewerShaderMgr::FULLBRIGHT, 1.f); + U32 fullbright_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_COLOR | LLVertexBuffer::MAP_TEXTURE_INDEX; + pushBatches(LLRenderPass::PASS_FULLBRIGHT, fullbright_mask, TRUE, TRUE); } else { gPipeline.enableLightsFullbright(LLColor4(1,1,1,1)); + U32 fullbright_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_COLOR; + renderTexture(LLRenderPass::PASS_FULLBRIGHT, fullbright_mask); } - - //gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.25f); - - //LLGLEnable test(GL_ALPHA_TEST); - //LLGLEnable blend(GL_BLEND); - gGL.setSceneBlendType(LLRender::BT_ALPHA); - U32 fullbright_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_COLOR; - renderTexture(LLRenderPass::PASS_FULLBRIGHT, fullbright_mask); - - //gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); } S32 LLDrawPoolFullbright::getNumPasses() diff --git a/indra/newview/lldrawpoolsimple.h b/indra/newview/lldrawpoolsimple.h index 5f3bbebbdad5e6df941150e3f387c61ddfc72880..3811b3d398f872193cb6861e63c053f6f926e263 100644 --- a/indra/newview/lldrawpoolsimple.h +++ b/indra/newview/lldrawpoolsimple.h @@ -98,9 +98,9 @@ class LLDrawPoolFullbright : public LLRenderPass LLDrawPoolFullbright(); /*virtual*/ S32 getNumPostDeferredPasses() { return 1; } - /*virtual*/ void beginPostDeferredPass(S32 pass) { beginRenderPass(pass); } - /*virtual*/ void endPostDeferredPass(S32 pass) { endRenderPass(pass); } - /*virtual*/ void renderPostDeferred(S32 pass) { render(pass); } + /*virtual*/ void beginPostDeferredPass(S32 pass); + /*virtual*/ void endPostDeferredPass(S32 pass); + /*virtual*/ void renderPostDeferred(S32 pass); /*virtual*/ void beginRenderPass(S32 pass); /*virtual*/ void endRenderPass(S32 pass); @@ -126,12 +126,12 @@ class LLDrawPoolGlow : public LLRenderPass virtual void prerender() { } /*virtual*/ S32 getNumPostDeferredPasses() { return 1; } - /*virtual*/ void beginPostDeferredPass(S32 pass) { beginRenderPass(pass); } - /*virtual*/ void endPostDeferredPass(S32 pass) { endRenderPass(pass); } - /*virtual*/ void renderPostDeferred(S32 pass) { render(pass); } + /*virtual*/ void beginPostDeferredPass(S32 pass); + /*virtual*/ void endPostDeferredPass(S32 pass); + /*virtual*/ void renderPostDeferred(S32 pass); void render(S32 pass = 0); - void pushBatch(LLDrawInfo& params, U32 mask, BOOL texture = TRUE); + void pushBatch(LLDrawInfo& params, U32 mask, BOOL texture = TRUE, BOOL batch_textures = FALSE); }; diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp index 195ee60a2ef164019287c4ccc860d209e0f3a9a7..81c796b14630f19aea34b1fcdaac174baf95688b 100644 --- a/indra/newview/lldrawpooltree.cpp +++ b/indra/newview/lldrawpooltree.cpp @@ -66,11 +66,11 @@ void LLDrawPoolTree::beginRenderPass(S32 pass) if (LLPipeline::sUnderWaterRender) { - shader = &gObjectSimpleWaterProgram; + shader = &gObjectSimpleNonIndexedWaterProgram; } else { - shader = &gObjectSimpleProgram; + shader = &gObjectSimpleNonIndexedProgram; } if (gPipeline.canUseWindLightShadersOnObjects()) diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp index 696c2d1abdcf3533f291c2193fdbaa4921d222b6..409b18d5229cb6c2c0cccd8620ce9dad9873f938 100644 --- a/indra/newview/lldrawpoolwlsky.cpp +++ b/indra/newview/lldrawpoolwlsky.cpp @@ -44,6 +44,8 @@ LLPointer<LLViewerTexture> LLDrawPoolWLSky::sCloudNoiseTexture = NULL; LLPointer<LLImageRaw> LLDrawPoolWLSky::sCloudNoiseRawImage = NULL; +static LLGLSLShader* cloud_shader = NULL; +static LLGLSLShader* sky_shader = NULL; LLDrawPoolWLSky::LLDrawPoolWLSky(void) : @@ -83,12 +85,32 @@ LLViewerTexture *LLDrawPoolWLSky::getDebugTexture() void LLDrawPoolWLSky::beginRenderPass( S32 pass ) { + sky_shader = + LLPipeline::sUnderWaterRender ? + &gObjectSimpleWaterProgram : + &gWLSkyProgram; + + cloud_shader = + LLPipeline::sUnderWaterRender ? + &gObjectSimpleWaterProgram : + &gWLCloudProgram; } void LLDrawPoolWLSky::endRenderPass( S32 pass ) { } +void LLDrawPoolWLSky::beginDeferredPass(S32 pass) +{ + sky_shader = &gDeferredWLSkyProgram; + cloud_shader = &gDeferredWLCloudProgram; +} + +void LLDrawPoolWLSky::endDeferredPass(S32 pass) +{ + +} + void LLDrawPoolWLSky::renderDome(F32 camHeightLocal, LLGLSLShader * shader) const { LLVector3 const & origin = LLViewerCamera::getInstance()->getOrigin(); @@ -128,19 +150,14 @@ void LLDrawPoolWLSky::renderSkyHaze(F32 camHeightLocal) const { if (gPipeline.canUseWindLightShaders() && gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_SKY)) { - LLGLSLShader* shader = - LLPipeline::sUnderWaterRender ? - &gObjectSimpleWaterProgram : - &gWLSkyProgram; - LLGLDisable blend(GL_BLEND); - shader->bind(); + sky_shader->bind(); /// Render the skydome - renderDome(camHeightLocal, shader); + renderDome(camHeightLocal, sky_shader); - shader->unbind(); + sky_shader->unbind(); } } @@ -186,23 +203,18 @@ void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const { if (gPipeline.canUseWindLightShaders() && gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS)) { - LLGLSLShader* shader = - LLPipeline::sUnderWaterRender ? - &gObjectSimpleWaterProgram : - &gWLCloudProgram; - LLGLEnable blend(GL_BLEND); gGL.setSceneBlendType(LLRender::BT_ALPHA); gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); gGL.getTexUnit(0)->bind(sCloudNoiseTexture); - shader->bind(); + cloud_shader->bind(); /// Render the skydome - renderDome(camHeightLocal, shader); + renderDome(camHeightLocal, cloud_shader); - shader->unbind(); + cloud_shader->unbind(); } } @@ -246,6 +258,53 @@ void LLDrawPoolWLSky::renderHeavenlyBodies() } } +void LLDrawPoolWLSky::renderDeferred(S32 pass) +{ + if (!gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_SKY)) + { + return; + } + LLFastTimer ftm(FTM_RENDER_WL_SKY); + + const F32 camHeightLocal = LLWLParamManager::instance()->getDomeOffset() * LLWLParamManager::instance()->getDomeRadius(); + + LLGLSNoFog disableFog; + LLGLDepthTest depth(GL_TRUE, GL_FALSE); + LLGLDisable clip(GL_CLIP_PLANE0); + + gGL.setColorMask(true, false); + + LLGLSquashToFarClip far_clip(glh_get_current_projection()); + + renderSkyHaze(camHeightLocal); + + LLVector3 const & origin = LLViewerCamera::getInstance()->getOrigin(); + glPushMatrix(); + + + glTranslatef(origin.mV[0], origin.mV[1], origin.mV[2]); + + gDeferredStarProgram.bind(); + // *NOTE: have to bind a texture here since register combiners blending in + // renderStars() requires something to be bound and we might as well only + // bind the moon's texture once. + gGL.getTexUnit(0)->bind(gSky.mVOSkyp->mFace[LLVOSky::FACE_MOON]->getTexture()); + + renderHeavenlyBodies(); + + renderStars(); + + gDeferredStarProgram.unbind(); + + glPopMatrix(); + + renderSkyClouds(camHeightLocal); + + gGL.setColorMask(true, true); + //gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + +} + void LLDrawPoolWLSky::render(S32 pass) { if (!gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_SKY)) diff --git a/indra/newview/lldrawpoolwlsky.h b/indra/newview/lldrawpoolwlsky.h index 8ca1ebb94273994f01e72d5c3558ae4394082c35..cd15c991ee091fefb8e4f3f6a7ab452fa77364bb 100644 --- a/indra/newview/lldrawpoolwlsky.h +++ b/indra/newview/lldrawpoolwlsky.h @@ -44,10 +44,10 @@ class LLDrawPoolWLSky : public LLDrawPool { /*virtual*/ BOOL isDead() { return FALSE; } - /*virtual*/ S32 getNumPostDeferredPasses() { return getNumPasses(); } - /*virtual*/ void beginPostDeferredPass(S32 pass) { beginRenderPass(pass); } - /*virtual*/ void endPostDeferredPass(S32 pass) { endRenderPass(pass); } - /*virtual*/ void renderPostDeferred(S32 pass) { render(pass); } + /*virtual*/ S32 getNumDeferredPasses() { return 1; } + /*virtual*/ void beginDeferredPass(S32 pass); + /*virtual*/ void endDeferredPass(S32 pass); + /*virtual*/ void renderDeferred(S32 pass); /*virtual*/ LLViewerTexture *getDebugTexture(); /*virtual*/ void beginRenderPass( S32 pass ); diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 5398c13c44086aca667eabfac288df518b749807..b6566fcbd094da1b4c887f89ac667fafd942b1ba 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -165,6 +165,7 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp) mIndexInTex = 0; mTexture = NULL; mTEOffset = -1; + mTextureIndex = 255; setDrawable(drawablep); mVObjp = objp; @@ -364,14 +365,7 @@ void LLFace::setSize(S32 num_vertices, S32 num_indices, bool align) //allocate vertices in blocks of 4 for alignment num_vertices = (num_vertices + 0x3) & ~0x3; } - else - { - if (mDrawablep->getVOVolume()) - { - llerrs << "WTF?" << llendl; - } - } - + if (mGeomCount != num_vertices || mIndicesCount != num_indices) { @@ -393,6 +387,26 @@ void LLFace::setGeomIndex(U16 idx) } } +void LLFace::setTextureIndex(U8 index) +{ + if (index != mTextureIndex) + { + mTextureIndex = index; + + if (mTextureIndex != 255) + { + mDrawablep->setState(LLDrawable::REBUILD_POSITION); + } + else + { + if (mDrawInfo && !mDrawInfo->mTextureList.empty()) + { + llerrs << "Face with no texture index references indexed texture draw info." << llendl; + } + } + } +} + void LLFace::setIndicesIndex(S32 idx) { if (mIndicesIndex != idx) @@ -415,11 +429,11 @@ U16 LLFace::getGeometryAvatar( if (mVertexBuffer.notNull()) { - mVertexBuffer->getVertexStrider (vertices, mGeomIndex); - mVertexBuffer->getNormalStrider (normals, mGeomIndex); - mVertexBuffer->getTexCoord0Strider (tex_coords, mGeomIndex); - mVertexBuffer->getWeightStrider(vertex_weights, mGeomIndex); - mVertexBuffer->getClothWeightStrider(clothing_weights, mGeomIndex); + mVertexBuffer->getVertexStrider (vertices, mGeomIndex, mGeomCount); + mVertexBuffer->getNormalStrider (normals, mGeomIndex, mGeomCount); + mVertexBuffer->getTexCoord0Strider (tex_coords, mGeomIndex, mGeomCount); + mVertexBuffer->getWeightStrider(vertex_weights, mGeomIndex, mGeomCount); + mVertexBuffer->getClothWeightStrider(clothing_weights, mGeomIndex, mGeomCount); } return mGeomIndex; @@ -432,17 +446,17 @@ U16 LLFace::getGeometry(LLStrider<LLVector3> &vertices, LLStrider<LLVector3> &no if (mVertexBuffer.notNull()) { - mVertexBuffer->getVertexStrider(vertices, mGeomIndex); + mVertexBuffer->getVertexStrider(vertices, mGeomIndex, mGeomCount); if (mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_NORMAL)) { - mVertexBuffer->getNormalStrider(normals, mGeomIndex); + mVertexBuffer->getNormalStrider(normals, mGeomIndex, mGeomCount); } if (mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_TEXCOORD0)) { - mVertexBuffer->getTexCoord0Strider(tex_coords, mGeomIndex); + mVertexBuffer->getTexCoord0Strider(tex_coords, mGeomIndex, mGeomCount); } - mVertexBuffer->getIndexStrider(indicesp, mIndicesIndex); + mVertexBuffer->getIndexStrider(indicesp, mIndicesIndex, mIndicesCount); } return mGeomIndex; @@ -679,6 +693,19 @@ static void xform(LLVector2 &tex_coord, F32 cosAng, F32 sinAng, F32 offS, F32 of } +bool less_than_max_mag(const LLVector4a& vec) +{ + LLVector4a MAX_MAG; + MAX_MAG.splat(1024.f*1024.f); + + LLVector4a val; + val.setAbs(vec); + + S32 lt = val.lessThan(MAX_MAG).getGatheredBits() & 0x7; + + return lt == 0x7; +} + BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f, const LLMatrix4& mat_vert_in, const LLMatrix3& mat_normal_in, BOOL global_volume) { @@ -713,6 +740,8 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f, min = face.mExtents[0]; max = face.mExtents[1]; + llassert(less_than_max_mag(min)); + llassert(less_than_max_mag(max)); //min, max are in volume space, convert to drawable render space LLVector4a center; @@ -724,6 +753,9 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f, size.setSub(max, min); size.mul(0.5f); + llassert(less_than_max_mag(min)); + llassert(less_than_max_mag(max)); + if (!global_volume) { //VECTORIZE THIS @@ -761,6 +793,8 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f, newMin = newMax = center; + llassert(less_than_max_mag(center)); + for (U32 i = 0; i < 4; i++) { LLVector4a delta; @@ -772,6 +806,9 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f, newMin.setMin(newMin,min); newMax.setMax(newMax,max); + + llassert(less_than_max_mag(newMin)); + llassert(less_than_max_mag(newMax)); } if (!mDrawablep->isActive()) @@ -780,14 +817,22 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f, offset.load3(mDrawablep->getRegion()->getOriginAgent().mV); newMin.add(offset); newMax.add(offset); + + llassert(less_than_max_mag(newMin)); + llassert(less_than_max_mag(newMax)); } t.setAdd(newMin, newMax); t.mul(0.5f); + llassert(less_than_max_mag(t)); + //VECTORIZE THIS mCenterLocal.set(t.getF32ptr()); + llassert(less_than_max_mag(newMin)); + llassert(less_than_max_mag(newMax)); + t.setSub(newMax,newMin); mBoundingSphereRadius = t.getLength3().getF32()*0.5f; @@ -1078,27 +1123,6 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, const LLTextureEntry *tep = mVObjp->getTE(f); const U8 bump_code = tep ? tep->getBumpmap() : 0; - if (rebuild_pos) - { - mVertexBuffer->getVertexStrider(vert, mGeomIndex); - vertices = (LLVector4a*) vert.get(); - } - if (rebuild_normal) - { - mVertexBuffer->getNormalStrider(norm, mGeomIndex); - normals = (LLVector4a*) norm.get(); - } - if (rebuild_binormal) - { - mVertexBuffer->getBinormalStrider(binorm, mGeomIndex); - binormals = (LLVector4a*) binorm.get(); - } - if (rebuild_weights) - { - mVertexBuffer->getWeight4Strider(wght, mGeomIndex); - weights = (LLVector4a*) wght.get(); - } - F32 tcoord_xoffset = 0.f ; F32 tcoord_yoffset = 0.f ; F32 tcoord_xscale = 1.f ; @@ -1107,12 +1131,6 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, if (rebuild_tcoord) { - mVertexBuffer->getTexCoord0Strider(tex_coords, mGeomIndex); - if (bump_code && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_TEXCOORD1)) - { - mVertexBuffer->getTexCoord1Strider(tex_coords2, mGeomIndex); - } - in_atlas = isAtlasInUse() ; if(in_atlas) { @@ -1125,11 +1143,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, tcoord_yscale = tmp->mV[1] ; } } - if (rebuild_color) - { - mVertexBuffer->getColorStrider(colors, mGeomIndex); - } - + BOOL is_static = mDrawablep->isStatic(); BOOL is_global = is_static; @@ -1168,7 +1182,8 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, // INDICES if (full_rebuild) { - mVertexBuffer->getIndexStrider(indicesp, mIndicesIndex); + mVertexBuffer->getIndexStrider(indicesp, mIndicesIndex, mIndicesCount, true); + __m128i* dst = (__m128i*) indicesp.get(); __m128i* src = (__m128i*) vf.mIndices; __m128i offset = _mm_set1_epi16(index_offset); @@ -1185,6 +1200,8 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, { indicesp[i] = vf.mIndices[i]+index_offset; } + + mVertexBuffer->setBuffer(0); } LLMatrix4a mat_normal; @@ -1330,6 +1347,8 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, if (!in_atlas && !do_bump) { //not in atlas or not bump mapped, might be able to do a cheap update + mVertexBuffer->getTexCoord0Strider(tex_coords, mGeomIndex, mGeomCount); + if (texgen != LLTextureEntry::TEX_GEN_PLANAR) { if (!do_tex_mat) @@ -1402,9 +1421,15 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, } } } + + mVertexBuffer->setBuffer(0); } else { //either bump mapped or in atlas, just do the whole expensive loop + mVertexBuffer->getTexCoord0Strider(tex_coords, mGeomIndex, mGeomCount, true); + + std::vector<LLVector2> bump_tc; + for (S32 i = 0; i < num_vertices; i++) { LLVector2 tc(vf.mTexCoords[i]); @@ -1535,8 +1560,20 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, *tex_coords++ = tc; - - if (bump_code && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_TEXCOORD1)) + if (do_bump) + { + bump_tc.push_back(tc); + } + } + + mVertexBuffer->setBuffer(0); + + + if (do_bump) + { + mVertexBuffer->getTexCoord1Strider(tex_coords2, mGeomIndex, mGeomCount, true); + + for (S32 i = 0; i < num_vertices; i++) { LLVector4a tangent; tangent.setCross3(vf.mBinormals[i], vf.mNormals[i]); @@ -1558,16 +1595,22 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, } binormal.normalize3fast(); + LLVector2 tc = bump_tc[i]; tc += LLVector2( bump_s_primary_light_ray.dot3(tangent).getF32(), bump_t_primary_light_ray.dot3(binormal).getF32() ); *tex_coords2++ = tc; - } + } + + mVertexBuffer->setBuffer(0); } } } if (rebuild_pos) { + mVertexBuffer->getVertexStrider(vert, mGeomIndex, mGeomCount, true); + vertices = (LLVector4a*) vert.get(); + LLMatrix4a mat_vert; mat_vert.loadu(mat_vert_in); @@ -1580,10 +1623,28 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, mat_vert.affineTransform(*src++, *dst++); } while(dst < end); + + F32 index = (F32) (mTextureIndex < 255 ? mTextureIndex : 0); + F32 *index_dst = (F32*) vertices; + F32 *index_end = (F32*) end; + + index_dst += 3; + index_end += 3; + do + { + *index_dst = index; + index_dst += 4; + } + while (index_dst < index_end); + + mVertexBuffer->setBuffer(0); } if (rebuild_normal) { + mVertexBuffer->getNormalStrider(norm, mGeomIndex, mGeomCount, true); + normals = (LLVector4a*) norm.get(); + for (S32 i = 0; i < num_vertices; i++) { LLVector4a normal; @@ -1591,10 +1652,15 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, normal.normalize3fast(); normals[i] = normal; } + + mVertexBuffer->setBuffer(0); } if (rebuild_binormal) { + mVertexBuffer->getBinormalStrider(binorm, mGeomIndex, mGeomCount, true); + binormals = (LLVector4a*) binorm.get(); + for (S32 i = 0; i < num_vertices; i++) { LLVector4a binormal; @@ -1602,15 +1668,22 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, binormal.normalize3fast(); binormals[i] = binormal; } + + mVertexBuffer->setBuffer(0); } if (rebuild_weights && vf.mWeights) { + mVertexBuffer->getWeight4Strider(wght, mGeomIndex, mGeomCount, true); + weights = (LLVector4a*) wght.get(); LLVector4a::memcpyNonAliased16((F32*) weights, (F32*) vf.mWeights, num_vertices*4*sizeof(F32)); + mVertexBuffer->setBuffer(0); } if (rebuild_color) { + mVertexBuffer->getColorStrider(colors, mGeomIndex, mGeomCount, true); + LLVector4a src; U32 vec[4]; @@ -1629,6 +1702,8 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, { dst[i] = src; } + + mVertexBuffer->setBuffer(0); } if (rebuild_tcoord) @@ -2045,13 +2120,13 @@ S32 LLFace::getColors(LLStrider<LLColor4U> &colors) } // llassert(mGeomIndex >= 0); - mVertexBuffer->getColorStrider(colors, mGeomIndex); + mVertexBuffer->getColorStrider(colors, mGeomIndex, mGeomCount); return mGeomIndex; } S32 LLFace::getIndices(LLStrider<U16> &indicesp) { - mVertexBuffer->getIndexStrider(indicesp, mIndicesIndex); + mVertexBuffer->getIndexStrider(indicesp, mIndicesIndex, mIndicesCount); llassert(indicesp[0] != indicesp[1]); return mIndicesIndex; } diff --git a/indra/newview/llface.h b/indra/newview/llface.h index b2170c4cf3fd271c7cfd63ab7006d752892c0c3b..b5eaeecd60ea18c533f441e7c9b04c51386ef85f 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -94,6 +94,8 @@ class LLFace U16 getGeomCount() const { return mGeomCount; } // vertex count for this face U16 getGeomIndex() const { return mGeomIndex; } // index into draw pool U16 getGeomStart() const { return mGeomIndex; } // index into draw pool + void setTextureIndex(U8 index); + U8 getTextureIndex() const { return mTextureIndex; } void setTexture(LLViewerTexture* tex) ; void switchTexture(LLViewerTexture* new_texture); void dirtyTexture(); @@ -262,6 +264,7 @@ class LLFace U16 mGeomCount; // vertex count for this face U16 mGeomIndex; // index into draw pool + U8 mTextureIndex; // index of texture channel to use for pseudo-atlasing U32 mIndicesCount; U32 mIndicesIndex; // index into draw pool for indices (yeah, I know!) S32 mIndexInTex ; diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 9dd5269a6b4811519a3558bc73d966e2d797a6f6..ab6753b4be31b9f4ea0ab1cfc4c98170f2f7f671 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -178,6 +178,80 @@ std::string lod_label_name[NUM_LOD+1] = "I went off the end of the lod_label_name array. Me so smart." }; + +#define LL_DEGENERACY_TOLERANCE 1e-7f + +inline F32 dot3fpu(const LLVector4a& a, const LLVector4a& b) +{ + volatile F32 p0 = a[0] * b[0]; + volatile F32 p1 = a[1] * b[1]; + volatile F32 p2 = a[2] * b[2]; + return p0 + p1 + p2; +} + +bool ll_is_degenerate(const LLVector4a& a, const LLVector4a& b, const LLVector4a& c, F32 tolerance = LL_DEGENERACY_TOLERANCE) +{ + // small area check + { + LLVector4a edge1; edge1.setSub( a, b ); + LLVector4a edge2; edge2.setSub( a, c ); + ////////////////////////////////////////////////////////////////////////// + /// Linden Modified + ////////////////////////////////////////////////////////////////////////// + + // If no one edge is more than 10x longer than any other edge, we weaken + // the tolerance by a factor of 1e-4f. + + LLVector4a edge3; edge3.setSub( c, b ); + const F32 len1sq = edge1.dot3(edge1).getF32(); + const F32 len2sq = edge2.dot3(edge2).getF32(); + const F32 len3sq = edge3.dot3(edge3).getF32(); + bool abOK = (len1sq <= 100.f * len2sq) && (len1sq <= 100.f * len3sq); + bool acOK = (len2sq <= 100.f * len1sq) && (len1sq <= 100.f * len3sq); + bool cbOK = (len3sq <= 100.f * len1sq) && (len1sq <= 100.f * len2sq); + if ( abOK && acOK && cbOK ) + { + tolerance *= 1e-4f; + } + + ////////////////////////////////////////////////////////////////////////// + /// End Modified + ////////////////////////////////////////////////////////////////////////// + + LLVector4a cross; cross.setCross3( edge1, edge2 ); + + LLVector4a edge1b; edge1b.setSub( b, a ); + LLVector4a edge2b; edge2b.setSub( b, c ); + LLVector4a crossb; crossb.setCross3( edge1b, edge2b ); + + if ( ( cross.dot3(cross).getF32() < tolerance ) || ( crossb.dot3(crossb).getF32() < tolerance )) + { + return true; + } + } + + // point triangle distance check + { + LLVector4a Q; Q.setSub(a, b); + LLVector4a R; R.setSub(c, b); + + const F32 QQ = dot3fpu(Q, Q); + const F32 RR = dot3fpu(R, R); + const F32 QR = dot3fpu(R, Q); + + volatile F32 QQRR = QQ * RR; + volatile F32 QRQR = QR * QR; + F32 Det = (QQRR - QRQR); + + if( Det == 0.0f ) + { + return true; + } + } + + return false; +} + bool validate_face(const LLVolumeFace& face) { for (U32 i = 0; i < face.mNumIndices; ++i) @@ -189,6 +263,31 @@ bool validate_face(const LLVolumeFace& face) } } + if (face.mNumIndices % 3 != 0 || face.mNumIndices == 0) + { + llwarns << "Face has invalid number of indices." << llendl; + return false; + } + + /*const LLVector4a scale(0.5f); + + for (U32 i = 0; i < face.mNumIndices; i+=3) + { + U16 idx1 = face.mIndices[i]; + U16 idx2 = face.mIndices[i+1]; + U16 idx3 = face.mIndices[i+2]; + + LLVector4a v1; v1.setMul(face.mPositions[idx1], scale); + LLVector4a v2; v2.setMul(face.mPositions[idx2], scale); + LLVector4a v3; v3.setMul(face.mPositions[idx3], scale); + + if (ll_is_degenerate(v1,v2,v3)) + { + llwarns << "Degenerate face found!" << llendl; + return false; + } + }*/ + return true; } @@ -314,15 +413,17 @@ BOOL LLFloaterModelPreview::postBuild() childSetCommitCallback("pelvis_offset", onPelvisOffsetCommit, this); childSetCommitCallback("lod_file_or_limit", refresh, this); - childSetCommitCallback("physics_load_radio", refresh, this); + childSetCommitCallback("physics_load_radio", onPhysicsLoadRadioCommit, this); //childSetCommitCallback("physics_optimize", refresh, this); //childSetCommitCallback("physics_use_hull", refresh, this); childDisable("upload_skin"); childDisable("upload_joints"); - + childDisable("ok_btn"); + childSetCommitCallback("confirm_checkbox", refresh, this); + mViewOptionMenuButton = getChild<LLMenuButton>("options_gear_btn"); mCommitCallbackRegistrar.add("ModelImport.ViewOption.Action", boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _2)); @@ -469,6 +570,29 @@ void LLFloaterModelPreview::onPelvisOffsetCommit( LLUICtrl*, void* userdata ) fp->mModelPreview->refresh(); } +//static +void LLFloaterModelPreview::onPhysicsLoadRadioCommit( LLUICtrl*, void *userdata) +{ + LLFloaterModelPreview* fmp = LLFloaterModelPreview::sInstance; + if (fmp) + { + if (fmp->childGetValue("physics_use_lod").asBoolean()) + { + onPhysicsUseLOD(NULL,NULL); + } + if (fmp->childGetValue("physics_load_from_file").asBoolean()) + { + + } + LLModelPreview *model_preview = fmp->mModelPreview; + if (model_preview) + { + model_preview->refresh(); + model_preview->updateStatusMessages(); + } + } +} + //static void LLFloaterModelPreview::onUploadJointsCommit(LLUICtrl*,void* userdata) { @@ -573,6 +697,11 @@ void LLFloaterModelPreview::draw() childSetTextArg("status", "[STATUS]", getString(LLModel::getStatusString(mModelPreview->getLoadState() - LLModelLoader::ERROR_PARSING))); } else + if ( mModelPreview->getLoadState() == LLModelLoader::ERROR_PARSING ) + { + childSetTextArg("status", "[STATUS]", getString("status_parse_error")); + } + else { childSetTextArg("status", "[STATUS]", getString("status_idle")); } @@ -992,7 +1121,7 @@ LLModelLoader::LLModelLoader( std::string filename, S32 lod, LLModelPreview* pre std::deque<std::string>& jointsFromNodes ) : mJointList( jointMap ) , mJointsFromNode( jointsFromNodes ) -, LLThread("Model Loader"), mFilename(filename), mLod(lod), mPreview(preview), mFirstTransform(TRUE) +, LLThread("Model Loader"), mFilename(filename), mLod(lod), mPreview(preview), mFirstTransform(TRUE), mNumOfFetchingTextures(0) { mJointMap["mPelvis"] = "mPelvis"; mJointMap["mTorso"] = "mTorso"; @@ -1157,11 +1286,7 @@ void stretch_extents(LLModel* model, LLMatrix4& mat, LLVector3& min, LLVector3& void LLModelLoader::run() { - if (!doLoadModel()) - { - mPreview = NULL; - } - + doLoadModel(); doOnIdleOneTime(boost::bind(&LLModelLoader::loadModelCallback,this)); } @@ -1225,6 +1350,23 @@ bool LLModelLoader::doLoadModel() return false; } + //Verify some basic properties of the dae + //1. Basic validity check on controller + U32 controllerCount = (int) db->getElementCount( NULL, "controller" ); + bool result = false; + for ( int i=0; i<controllerCount; ++i ) + { + domController* pController = NULL; + db->getElement( (daeElement**) &pController, i , NULL, "controller" ); + result = mPreview->verifyController( pController ); + if (!result) + { + setLoadState( ERROR_PARSING ); + return true; + } + } + + //get unit scale mTransform.setIdentity(); @@ -1275,7 +1417,7 @@ bool LLModelLoader::doLoadModel() if(model->getStatus() != LLModel::NO_ERRORS) { setLoadState(ERROR_PARSING + model->getStatus()) ; - return true ; //abort + return false; //abort } if (model.notNull() && validate_model(model)) @@ -1634,7 +1776,7 @@ bool LLModelLoader::doLoadModel() { if (pos.getCount() <= j+2) { - llerrs << "WTF?" << llendl; + llerrs << "Invalid position array size." << llendl; } LLVector3 v(pos[j], pos[j+1], pos[j+2]); @@ -1759,11 +1901,19 @@ bool LLModelLoader::doLoadModel() { llwarns << "document has no visual_scene" << llendl; setLoadState( ERROR_PARSING ); - return false; + return true; } + setLoadState( DONE ); - processElement(scene); + bool badElement = false; + + processElement( scene, badElement ); + + if ( badElement ) + { + setLoadState( ERROR_PARSING ); + } return true; } @@ -2124,7 +2274,8 @@ void LLModelLoader::loadTextures() iter->second[i].mMaterial[j].mDiffuseMap = LLViewerTextureManager::getFetchedTextureFromUrl("file://" + iter->second[i].mMaterial[j].mDiffuseMapFilename, TRUE, LLViewerTexture::BOOST_PREVIEW); iter->second[i].mMaterial[j].mDiffuseMap->setLoadedCallback(LLModelPreview::textureLoadedCallback, 0, TRUE, FALSE, mPreview, NULL, FALSE); - iter->second[i].mMaterial[j].mDiffuseMap->forceToSaveRawImage(); + iter->second[i].mMaterial[j].mDiffuseMap->forceToSaveRawImage(0, F32_MAX); + mNumOfFetchingTextures++ ; } } } @@ -2153,6 +2304,90 @@ bool LLModelLoader::isNodeAJoint( domNode* pNode ) return false; } +//----------------------------------------------------------------------------- +// verifyCount +//----------------------------------------------------------------------------- +bool LLModelPreview::verifyCount( int expected, int result ) +{ + if ( expected != result ) + { + llinfos<< "Error: (expected/got)"<<expected<<"/"<<result<<"verts"<<llendl; + return false; + } + return true; +} +//----------------------------------------------------------------------------- +// verifyController +//----------------------------------------------------------------------------- +bool LLModelPreview::verifyController( domController* pController ) +{ + + bool result = true; + + domSkin* pSkin = pController->getSkin(); + + if ( pSkin ) + { + xsAnyURI & uri = pSkin->getSource(); + domElement* pElement = uri.getElement(); + + if ( !pElement ) + { + llinfos<<"Can't resolve skin source"<<llendl; + return false; + } + + daeString type_str = pElement->getTypeName(); + if ( stricmp(type_str, "geometry") == 0 ) + { + //Skin is reference directly by geometry and get the vertex count from skin + domSkin::domVertex_weights* pVertexWeights = pSkin->getVertex_weights(); + U32 vertexWeightsCount = pVertexWeights->getCount(); + domGeometry* pGeometry = (domGeometry*) (domElement*) uri.getElement(); + domMesh* pMesh = pGeometry->getMesh(); + + if ( pMesh ) + { + //Get vertex count from geometry + domVertices* pVertices = pMesh->getVertices(); + if ( !pVertices ) + { + llinfos<<"No vertices!"<<llendl; + return false; + } + + if ( pVertices ) + { + xsAnyURI src = pVertices->getInput_array()[0]->getSource(); + domSource* pSource = (domSource*) (domElement*) src.getElement(); + U32 verticesCount = pSource->getTechnique_common()->getAccessor()->getCount(); + result = verifyCount( verticesCount, vertexWeightsCount ); + if ( !result ) + { + return result; + } + } + } + + U32 vcountCount = (U32) pVertexWeights->getVcount()->getValue().getCount(); + result = verifyCount( vcountCount, vertexWeightsCount ); + if ( !result ) + { + return result; + } + + domInputLocalOffset_Array& inputs = pVertexWeights->getInput_array(); + U32 sum = 0; + for (size_t i=0; i<vcountCount; i++) + { + sum += pVertexWeights->getVcount()->getValue()[i]; + } + result = verifyCount( sum * inputs.getCount(), (domInt) pVertexWeights->getV()->getValue().getCount() ); + } + } + + return result; +} //----------------------------------------------------------------------------- // extractTranslation() @@ -2263,7 +2498,7 @@ daeElement* LLModelLoader::getChildFromElement( daeElement* pElement, std::strin return NULL; } -void LLModelLoader::processElement(daeElement* element) +void LLModelLoader::processElement( daeElement* element, bool& badElement ) { LLMatrix4 saved_transform = mTransform; @@ -2296,8 +2531,11 @@ void LLModelLoader::processElement(daeElement* element) { domFloat3 dom_value = scale->getValue(); + + LLVector3 scale_vector = LLVector3(dom_value[0], dom_value[1], dom_value[2]); + scale_vector.abs(); // Set all values positive, since we don't currently support mirrored meshes LLMatrix4 scaling; - scaling.initScale(LLVector3(dom_value[0], dom_value[1], dom_value[2])); + scaling.initScale(scale_vector); scaling *= mTransform; mTransform = scaling; @@ -2360,6 +2598,12 @@ void LLModelLoader::processElement(daeElement* element) } } } + else + { + llinfos<<"Unable to resolve geometry URL."<<llendl; + badElement = true; + } + } domInstance_node* instance_node = daeSafeCast<domInstance_node>(element); @@ -2368,7 +2612,7 @@ void LLModelLoader::processElement(daeElement* element) daeElement* instance = instance_node->getUrl().getElement(); if (instance) { - processElement(instance); + processElement(instance,badElement); } } @@ -2376,7 +2620,7 @@ void LLModelLoader::processElement(daeElement* element) daeTArray< daeSmartRef<daeElement> > children = element->getChildren(); for (S32 i = 0; i < children.getCount(); i++) { - processElement(children[i]); + processElement(children[i],badElement); } domNode* node = daeSafeCast<domNode>(element); @@ -2660,7 +2904,7 @@ LLModelPreview::~LLModelPreview() { if (mModelLoader) { - delete mModelLoader; + mModelLoader->mPreview = NULL; mModelLoader = NULL; } //*HACK : *TODO : turn this back on when we understand why this crashes @@ -2675,7 +2919,8 @@ U32 LLModelPreview::calcResourceCost() if (mFMP && mModelLoader) { - if ( getLoadState() < LLModelLoader::ERROR_PARSING ) + const BOOL confirmed_checkbox = mFMP->getChild<LLCheckBoxCtrl>("confirm_checkbox")->getValue().asBoolean(); + if ( getLoadState() < LLModelLoader::ERROR_PARSING && confirmed_checkbox ) { mFMP->childEnable("ok_btn"); } @@ -2817,7 +3062,8 @@ void LLModelPreview::rebuildUploadData() F32 max_scale = 0.f; - if ( mBaseScene.size() > 0 ) + const BOOL confirmed_checkbox = mFMP->getChild<LLCheckBoxCtrl>("confirm_checkbox")->getValue().asBoolean(); + if ( mBaseScene.size() > 0 && confirmed_checkbox ) { mFMP->childEnable("ok_btn"); } @@ -3221,6 +3467,8 @@ void LLModelPreview::loadModelCallback(S32 lod) } mLoading = false; + if (mFMP) + mFMP->getChild<LLCheckBoxCtrl>("confirm_checkbox")->set(FALSE); refresh(); mModelLoadedSignal(); @@ -3234,7 +3482,7 @@ void LLModelPreview::resetPreviewTarget() mPreviewScale = (mModelLoader->mExtents[1] - mModelLoader->mExtents[0]) * 0.5f; } - setPreviewTarget(mPreviewScale.magVec()*2.f); + setPreviewTarget(mPreviewScale.magVec()*10.f); } void LLModelPreview::generateNormals() @@ -3752,7 +4000,35 @@ void LLModelPreview::updateStatusMessages() mMaxTriangleLimit = total_tris[LLModel::LOD_HIGH]; } + bool has_degenerate = false; + + {//check for degenerate triangles in physics mesh + U32 lod = LLModel::LOD_PHYSICS; + const LLVector4a scale(0.5f); + for (U32 i = 0; i < mModel[lod].size() && !has_degenerate; ++i) + { //for each model in the lod + if (mModel[lod][i]->mPhysics.mHull.empty()) + { //no decomp exists + S32 cur_submeshes = mModel[lod][i]->getNumVolumeFaces(); + for (S32 j = 0; j < cur_submeshes && !has_degenerate; ++j) + { //for each submesh (face), add triangles and vertices to current total + const LLVolumeFace& face = mModel[lod][i]->getVolumeFace(j); + for (S32 k = 0; k < face.mNumIndices && !has_degenerate; ) + { + LLVector4a v1; v1.setMul(face.mPositions[face.mIndices[k++]], scale); + LLVector4a v2; v2.setMul(face.mPositions[face.mIndices[k++]], scale); + LLVector4a v3; v3.setMul(face.mPositions[face.mIndices[k++]], scale); + if (ll_is_degenerate(v1,v2,v3)) + { + has_degenerate = true; + } + } + } + } + } + } + mFMP->childSetTextArg("submeshes_info", "[SUBMESHES]", llformat("%d", total_submeshes[LLModel::LOD_HIGH])); std::string mesh_status_na = mFMP->getString("mesh_status_na"); @@ -3853,7 +4129,10 @@ void LLModelPreview::updateStatusMessages() for (U32 j = 0; upload_ok && j < mdl->mPhysics.mHull.size(); ++j) { - upload_ok = upload_ok && mdl->mPhysics.mHull[i].size() <= 256; + if (mdl->mPhysics.mHull[j].size() > 256) + { + upload_ok = false; + } } } @@ -3876,7 +4155,16 @@ void LLModelPreview::updateStatusMessages() } } - if ( upload_ok && !errorStateFromLoader && skinAndRigOk ) + if(upload_ok && mModelLoader) + { + if(!mModelLoader->areTexturesReady() && mFMP->childGetValue("upload_textures").asBoolean()) + { + upload_ok = false ; + } + } + + const BOOL confirmed_checkbox = mFMP->getChild<LLCheckBoxCtrl>("confirm_checkbox")->getValue().asBoolean(); + if ( upload_ok && !errorStateFromLoader && skinAndRigOk && !has_degenerate && confirmed_checkbox) { mFMP->childEnable("ok_btn"); } @@ -4238,11 +4526,7 @@ void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights) const LLModel::weight_list& weight_list = base_mdl->getJointInfluences(pos); LLVector4 w(0,0,0,0); - if (weight_list.size() > 4) - { - llerrs << "WTF?" << llendl; - } - + for (U32 i = 0; i < weight_list.size(); ++i) { F32 wght = llmin(weight_list[i].mWeight, 0.999999f); @@ -4455,7 +4739,7 @@ BOOL LLModelPreview::render() LLVector3 target_pos = mPreviewTarget+offset; F32 z_near = 0.001f; - F32 z_far = mCameraDistance+mPreviewScale.magVec()+mCameraOffset.magVec(); + F32 z_far = mCameraDistance*10.0f+mPreviewScale.magVec()+mCameraOffset.magVec(); if (skin_weight) { @@ -4605,39 +4889,43 @@ BOOL LLModelPreview::render() LLModel::Decomposition& physics = model->mPhysics; - if (physics.mMesh.empty()) - { //build vertex buffer for physics mesh - gMeshRepo.buildPhysicsMesh(physics); - } - - if (!physics.mMesh.empty()) - { //render hull instead of mesh + if (!physics.mHull.empty()) + { render_mesh = false; - for (U32 i = 0; i < physics.mMesh.size(); ++i) - { - if (explode > 0.f) + + if (physics.mMesh.empty()) + { //build vertex buffer for physics mesh + gMeshRepo.buildPhysicsMesh(physics); + } + + if (!physics.mMesh.empty()) + { //render hull instead of mesh + for (U32 i = 0; i < physics.mMesh.size(); ++i) { - gGL.pushMatrix(); + if (explode > 0.f) + { + gGL.pushMatrix(); - LLVector3 offset = model->mHullCenter[i]-model->mCenterOfHullCenters; - offset *= explode; + LLVector3 offset = model->mHullCenter[i]-model->mCenterOfHullCenters; + offset *= explode; - gGL.translatef(offset.mV[0], offset.mV[1], offset.mV[2]); - } + gGL.translatef(offset.mV[0], offset.mV[1], offset.mV[2]); + } - static std::vector<LLColor4U> hull_colors; + static std::vector<LLColor4U> hull_colors; - if (i+1 >= hull_colors.size()) - { - hull_colors.push_back(LLColor4U(rand()%128+127, rand()%128+127, rand()%128+127, 255)); - } + if (i+1 >= hull_colors.size()) + { + hull_colors.push_back(LLColor4U(rand()%128+127, rand()%128+127, rand()%128+127, 255)); + } - glColor4ubv(hull_colors[i].mV); - LLVertexBuffer::drawArrays(LLRender::TRIANGLES, physics.mMesh[i].mPositions, physics.mMesh[i].mNormals); + glColor4ubv(hull_colors[i].mV); + LLVertexBuffer::drawArrays(LLRender::TRIANGLES, physics.mMesh[i].mPositions, physics.mMesh[i].mNormals); - if (explode > 0.f) - { - gGL.popMatrix(); + if (explode > 0.f) + { + gGL.popMatrix(); + } } } } @@ -4663,9 +4951,10 @@ BOOL LLModelPreview::render() glColor3f(1.f, 1.f, 0.f); - glLineWidth(3.f); + glLineWidth(2.f); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); buffer->drawRange(LLRender::TRIANGLES, 0, buffer->getNumVerts()-1, buffer->getNumIndices(), 0); + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glLineWidth(1.f); } @@ -4674,6 +4963,80 @@ BOOL LLModelPreview::render() gGL.popMatrix(); } + glLineWidth(3.f); + glPointSize(8.f); + gPipeline.enableLightsFullbright(LLColor4::white); + //show degenerate triangles + LLGLDepthTest depth(GL_TRUE, GL_TRUE, GL_ALWAYS); + LLGLDisable cull(GL_CULL_FACE); + glColor4f(1.f,0.f,0.f,1.f); + const LLVector4a scale(0.5f); + + for (LLMeshUploadThread::instance_list::iterator iter = mUploadData.begin(); iter != mUploadData.end(); ++iter) + { + LLModelInstance& instance = *iter; + + LLModel* model = instance.mLOD[LLModel::LOD_PHYSICS]; + + if (!model) + { + continue; + } + + gGL.pushMatrix(); + LLMatrix4 mat = instance.mTransform; + + glMultMatrixf((GLfloat*) mat.mMatrix); + + + LLPhysicsDecomp* decomp = gMeshRepo.mDecompThread; + if (decomp) + { + LLMutexLock(decomp->mMutex); + + LLModel::Decomposition& physics = model->mPhysics; + + if (physics.mHull.empty()) + { + if (mVertexBuffer[LLModel::LOD_PHYSICS].empty()) + { + genBuffers(LLModel::LOD_PHYSICS, false); + } + + for (U32 i = 0; i < mVertexBuffer[LLModel::LOD_PHYSICS][model].size(); ++i) + { + LLVertexBuffer* buffer = mVertexBuffer[LLModel::LOD_PHYSICS][model][i]; + + buffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0); + + LLStrider<LLVector3> pos_strider; + buffer->getVertexStrider(pos_strider, 0); + LLVector4a* pos = (LLVector4a*) pos_strider.get(); + + LLStrider<U16> idx; + buffer->getIndexStrider(idx, 0); + + for (U32 i = 0; i < buffer->getNumIndices(); i += 3) + { + LLVector4a v1; v1.setMul(pos[*idx++], scale); + LLVector4a v2; v2.setMul(pos[*idx++], scale); + LLVector4a v3; v3.setMul(pos[*idx++], scale); + + if (ll_is_degenerate(v1,v2,v3)) + { + buffer->draw(LLRender::LINE_LOOP, 3, i); + buffer->draw(LLRender::POINTS, 3, i); + } + } + } + } + } + + gGL.popMatrix(); + } + glLineWidth(1.f); + glPointSize(1.f); + gPipeline.enableLightsPreview(); gGL.setSceneBlendType(LLRender::BT_ALPHA); } } @@ -4938,6 +5301,14 @@ void LLModelPreview::textureLoadedCallback( BOOL success, LLViewerFetchedTexture { LLModelPreview* preview = (LLModelPreview*) userdata; preview->refresh(); + + if(final && preview->mModelLoader) + { + if(preview->mModelLoader->mNumOfFetchingTextures > 0) + { + preview->mModelLoader->mNumOfFetchingTextures-- ; + } + } } void LLModelPreview::onLODParamCommit(bool enforce_tri_limit) @@ -4959,35 +5330,7 @@ LLFloaterModelPreview::DecompRequest::DecompRequest(const std::string& stage, LL mParams = sInstance->mDecompParams; //copy out positions and indices - if (mdl) - { - U16 index_offset = 0; - - mPositions.clear(); - mIndices.clear(); - - //queue up vertex positions and indices - for (S32 i = 0; i < mdl->getNumVolumeFaces(); ++i) - { - const LLVolumeFace& face = mdl->getVolumeFace(i); - if (mPositions.size() + face.mNumVertices > 65535) - { - continue; - } - - for (U32 j = 0; j < face.mNumVertices; ++j) - { - mPositions.push_back(LLVector3(face.mPositions[j].getF32ptr())); - } - - for (U32 j = 0; j < face.mNumIndices; ++j) - { - mIndices.push_back(face.mIndices[j]+index_offset); - } - - index_offset += face.mNumVertices; - } - } + assignData(mdl) ; } void LLFloaterModelPreview::setStatusMessage(const std::string& msg) diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h index f6d4a08d1f2af2cb53f5e28b680c7544db2bbf5e..d4f6b4d293d49518ac164aebb797161734e73c8b 100644 --- a/indra/newview/llfloatermodelpreview.h +++ b/indra/newview/llfloatermodelpreview.h @@ -50,6 +50,7 @@ class domProfile_COMMON; class domInstance_geometry; class domNode; class domTranslate; +class domController; class LLMenuButton; class LLToggleableMenu; @@ -107,7 +108,7 @@ class LLModelLoader : public LLThread void loadModelCallback(); void loadTextures() ; //called in the main thread. - void processElement(daeElement* element); + void processElement(daeElement* element, bool& badElement); std::vector<LLImportMaterial> getMaterials(LLModel* model, domInstance_geometry* instance_geo); LLImportMaterial profileToMaterial(domProfile_COMMON* material); std::string getElementLabel(daeElement *element); @@ -131,6 +132,9 @@ class LLModelLoader : public LLThread JointTransformMap& mJointList; std::deque<std::string>& mJointsFromNode; + S32 mNumOfFetchingTextures ; //updated in the main thread + bool areTexturesReady() { return !mNumOfFetchingTextures; } //called in the main thread. + private: static std::list<LLModelLoader*> sActiveLoaderList; static bool isAlive(LLModelLoader* loader) ; @@ -199,6 +203,8 @@ class LLFloaterModelPreview : public LLFloater static void onUploadJointsCommit(LLUICtrl*,void*); static void onUploadSkinCommit(LLUICtrl*,void*); + static void onPhysicsLoadRadioCommit(LLUICtrl*,void *data); + static void onPreviewLODCommit(LLUICtrl*,void*); static void onGenerateNormalsCommit(LLUICtrl*,void*); @@ -309,9 +315,6 @@ class LLModelPreview : public LLViewerDynamicTexture, public LLMutex void setHasPivot( bool val ) { mHasPivot = val; } void setModelPivot( const LLVector3& pivot ) { mModelPivot = pivot; } - //Sets the current avatars joints to new positions - //Makes in world go to shit, however - void changeAvatarsJointPositions( LLModel* pModel ); //Determines the viability of an asset to be used as an avatar rig (w or w/o joint upload caps) void critiqueRigForUploadApplicability( const std::vector<std::string> &jointListFromAsset ); void critiqueJointToNodeMappingFromScene( void ); @@ -325,6 +328,8 @@ class LLModelPreview : public LLViewerDynamicTexture, public LLMutex //Accessors for the legacy rigs const bool isLegacyRigValid( void ) const { return mLegacyRigValid; } void setLegacyRigValid( bool rigValid ) { mLegacyRigValid = rigValid; } + //Verify that a controller matches vertex counts + bool verifyController( domController* pController ); static void textureLoadedCallback( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* userdata ); @@ -341,7 +346,12 @@ class LLModelPreview : public LLViewerDynamicTexture, public LLMutex LLVector3 getTranslationForJointOffset( std::string joint ); +private: + //Utility function for controller vertex compare + bool verifyCount( int expected, int result ); + //Creates the dummy avatar for the preview window void createPreviewAvatar( void ); + //Accessor for the dummy avatar LLVOAvatar* getPreviewAvatar( void ) { return mPreviewAvatar; } protected: diff --git a/indra/newview/llfloatermodelwizard.cpp b/indra/newview/llfloatermodelwizard.cpp index faf81dbc5c3cef62fb519439de92b04c2c101c41..707c8288dfe5dd43b22b39139d5a03b415b8594f 100644 --- a/indra/newview/llfloatermodelwizard.cpp +++ b/indra/newview/llfloatermodelwizard.cpp @@ -422,8 +422,11 @@ void LLFloaterModelWizard::executePhysicsStage(std::string stage_name) { LLModel* mdl = sInstance->mModelPreview->mModel[LLModel::LOD_PHYSICS][i]; DecompRequest* request = new DecompRequest(stage_name, mdl); - sInstance->mCurRequest.insert(request); - gMeshRepo.mDecompThread->submitRequest(request); + if(request->isValid()) + { + sInstance->mCurRequest.insert(request); + gMeshRepo.mDecompThread->submitRequest(request); + } } } } @@ -438,35 +441,7 @@ LLFloaterModelWizard::DecompRequest::DecompRequest(const std::string& stage, LLM mParams = sInstance->mDecompParams; //copy out positions and indices - if (mdl) - { - U16 index_offset = 0; - - mPositions.clear(); - mIndices.clear(); - - //queue up vertex positions and indices - for (S32 i = 0; i < mdl->getNumVolumeFaces(); ++i) - { - const LLVolumeFace& face = mdl->getVolumeFace(i); - if (mPositions.size() + face.mNumVertices > 65535) - { - continue; - } - - for (U32 j = 0; j < face.mNumVertices; ++j) - { - mPositions.push_back(LLVector3(face.mPositions[j].getF32ptr())); - } - - for (U32 j = 0; j < face.mNumIndices; ++j) - { - mIndices.push_back(face.mIndices[j]+index_offset); - } - - index_offset += face.mNumVertices; - } - } + assignData(mdl) ; } diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index dfc3fe1fc714d8df86fd1990509c223a11142ebb..c97f0779a130415da95cbc609a26e35ca2fc7b9c 100755 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -328,6 +328,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key) mCommitCallbackRegistrar.add("Pref.SelectSkin", boost::bind(&LLFloaterPreference::onSelectSkin, this)); mCommitCallbackRegistrar.add("Pref.VoiceSetKey", boost::bind(&LLFloaterPreference::onClickSetKey, this)); mCommitCallbackRegistrar.add("Pref.VoiceSetMiddleMouse", boost::bind(&LLFloaterPreference::onClickSetMiddleMouse, this)); + mCommitCallbackRegistrar.add("Pref.SetSounds", boost::bind(&LLFloaterPreference::onClickSetSounds, this)); // mCommitCallbackRegistrar.add("Pref.ClickSkipDialogs", boost::bind(&LLFloaterPreference::onClickSkipDialogs, this)); // mCommitCallbackRegistrar.add("Pref.ClickResetDialogs", boost::bind(&LLFloaterPreference::onClickResetDialogs, this)); mCommitCallbackRegistrar.add("Pref.ClickEnablePopup", boost::bind(&LLFloaterPreference::onClickEnablePopup, this)); @@ -1294,6 +1295,14 @@ void LLFloaterPreference::onClickSetMiddleMouse() p2t_line_editor->setValue(advanced_preferences->getString("middle_mouse")); } } + +void LLFloaterPreference::onClickSetSounds() +{ + // Disable Enable gesture sounds checkbox if the master sound is disabled + // or if sound effects are disabled. + getChild<LLCheckBoxCtrl>("gesture_audio_play_btn")->setEnabled(!gSavedSettings.getBOOL("MuteSounds")); +} + /* void LLFloaterPreference::onClickSkipDialogs() { diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index 4a180ce0f74d7f86429c7f1d83aececf508a8b7a..ef9bc2dd5322313ef4f4d7da940ba92527c63440 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -129,6 +129,7 @@ class LLFloaterPreference : public LLFloater, public LLAvatarPropertiesObserver void onClickSetKey(); void setKey(KEY key); void onClickSetMiddleMouse(); + void onClickSetSounds(); // void onClickSkipDialogs(); // void onClickResetDialogs(); void onClickEnablePopup(); diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 232b8e9096bdae4b68e004a4df9dba8352d883a1..6b3e3088d5b6aed5727f1f8e55dbbac2b3c1cec7 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -82,6 +82,7 @@ #include "llvlcomposition.h" #include "lltrans.h" #include "llagentui.h" +#include "llmeshrepository.h" const S32 TERRAIN_TEXTURE_COUNT = 4; const S32 CORNER_COUNT = 4; @@ -590,10 +591,7 @@ 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(); + const bool enable_mesh = gMeshRepo.meshRezEnabled(); 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 diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index edcb96314b238f46a65e183cd085ac62539f2f8b..0d798afdcc759fbf200d3543b7e4a3f7623ee506 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -86,6 +86,7 @@ #include "llvovolume.h" #include "lluictrlfactory.h" #include "llaccountingquotamanager.h" +#include "llmeshrepository.h" // Globals LLFloaterTools *gFloaterTools = NULL; @@ -423,7 +424,8 @@ void LLFloaterTools::refresh() // Refresh object and prim count labels LLLocale locale(LLLocale::USER_LOCALE); - if ((gAgent.getRegion() && (gAgent.getRegion()->getCapability("GetMesh").empty() || gAgent.getRegion()->getCapability("ObjectAdd").empty())) || !gSavedSettings.getBOOL("MeshEnabled")) +#if 0 + if (gMeshRepo.meshRezEnabled()) { std::string obj_count_string; LLResMgr::getInstance()->getIntegerString(obj_count_string, LLSelectMgr::getInstance()->getSelection()->getRootObjectCount()); @@ -447,6 +449,7 @@ void LLFloaterTools::refresh() getChildView("RenderingCost")->setEnabled(have_selection && sShowObjectCost); } else +#endif { // Get the number of objects selected std::string root_object_count_string; @@ -788,10 +791,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) getChildView("Strength:")->setVisible( land_visible); } - bool show_mesh_cost = gAgent.getRegion() && - !gAgent.getRegion()->getCapability("GetMesh").empty() && - gSavedSettings.getBOOL("MeshEnabled") && - !gAgent.getRegion()->getCapability("ObjectAdd").empty(); + bool show_mesh_cost = gMeshRepo.meshRezEnabled(); getChildView("obj_count")->setVisible( !land_visible && !show_mesh_cost); getChildView("prim_count")->setVisible( !land_visible && !show_mesh_cost); diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index b5180854efbe73340b71dd627ba5023b850e0c58..318beafe657a97e1e029c98036468d353a9267f4 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -632,10 +632,12 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item) } // We're hiding mesh types +#if 0 if (item->getType() == LLAssetType::AT_MESH) { return mask; } +#endif LLViewerInventoryItem* old_item = getItem(item->getUUID()); LLPointer<LLViewerInventoryItem> new_item; diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp index 673f28e01fafa9f125b90da9babe73b0000f1f7b..4eb94dfb8e805997665212b06761bd929675cc30 100644 --- a/indra/newview/llmanipscale.cpp +++ b/indra/newview/llmanipscale.cpp @@ -58,6 +58,7 @@ #include "llworld.h" #include "v2math.h" #include "llvoavatar.h" +#include "llmeshrepository.h" const F32 MAX_MANIP_SELECT_DISTANCE_SQUARED = 11.f * 11.f; @@ -90,10 +91,7 @@ F32 get_default_max_prim_scale(bool is_flora) { // a bit of a hack, but if it's foilage, we don't want to use the // new larger scale which would result in giant trees and grass - if (gSavedSettings.getBOOL("MeshEnabled") && - gAgent.getRegion() && - !gAgent.getRegion()->getCapability("GetMesh").empty() && - !gAgent.getRegion()->getCapability("ObjectAdd").empty() && + if (gMeshRepo.meshRezEnabled() && !is_flora) { return DEFAULT_MAX_PRIM_SCALE; diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp old mode 100644 new mode 100755 index 55145c6ad7734aa4a95f6763acbbc9591c1587fa..6e0722bcf99fa46771bbbd90fd2c738c654a6c6a --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -61,6 +61,9 @@ #include "pipeline.h" #include "llinventorymodel.h" #include "llfoldertype.h" +#include "llviewerparcelmgr.h" + +#include "boost/lexical_cast.hpp" #ifndef LL_WINDOWS #include "netdb.h" @@ -85,7 +88,14 @@ U32 LLMeshRepository::sPeakKbps = 0; const U32 MAX_TEXTURE_UPLOAD_RETRIES = 5; -void dumpLLSDToFile(const LLSD& content, std::string filename); +static S32 dump_num = 0; +std::string make_dump_name(std::string prefix, S32 num) +{ + return prefix + boost::lexical_cast<std::string>(num) + std::string(".xml"); + +} +void dump_llsd_to_file(const LLSD& content, std::string filename); +LLSD llsd_from_file(std::string filename); std::string header_lod[] = { @@ -459,6 +469,55 @@ class LLMeshPhysicsShapeResponder : public LLCurl::Responder }; +void log_upload_error(S32 status, const LLSD& content, std::string stage, std::string model_name) +{ + // Add notification popup. + LLSD args; + std::string message = content["error"]["message"]; + std::string identifier = content["error"]["identifier"]; + args["MESSAGE"] = message; + args["IDENTIFIER"] = identifier; + args["LABEL"] = model_name; + gMeshRepo.uploadError(args); + + // Log details. + llwarns << "stage: " << stage << " http status: " << status << llendl; + if (content.has("error")) + { + const LLSD& err = content["error"]; + llwarns << "err: " << err << llendl; + llwarns << "mesh upload failed, stage '" << stage + << "' error '" << err["error"].asString() + << "', message '" << err["message"].asString() + << "', id '" << err["identifier"].asString() + << "'" << llendl; + if (err.has("errors")) + { + S32 error_num = 0; + const LLSD& err_list = err["errors"]; + for (LLSD::array_const_iterator it = err_list.beginArray(); + it != err_list.endArray(); + ++it) + { + const LLSD& err_entry = *it; + llwarns << "error[" << error_num << "]:" << llendl; + for (LLSD::map_const_iterator map_it = err_entry.beginMap(); + map_it != err_entry.endMap(); + ++map_it) + { + llwarns << "\t" << map_it->first << ": " + << map_it->second << llendl; + } + error_num++; + } + } + } + else + { + llwarns << "bad mesh, no error information available" << llendl; + } +} + class LLModelObjectUploadResponder: public LLCurl::Responder { LLSD mObjectAsset; @@ -486,40 +545,82 @@ class LLModelObjectUploadResponder: public LLCurl::Responder class LLWholeModelFeeResponder: public LLCurl::Responder { LLMeshUploadThread* mThread; + LLSD mModelData; public: - LLWholeModelFeeResponder(LLMeshUploadThread* thread): - mThread(thread) + LLWholeModelFeeResponder(LLMeshUploadThread* thread, LLSD& model_data): + mThread(thread), + mModelData(model_data) { } virtual void completed(U32 status, const std::string& reason, const LLSD& content) { - //assert_main_thread(); + LLSD cc = content; + if (gSavedSettings.getS32("MeshUploadFakeErrors")&1) + { + cc = llsd_from_file("fake_upload_error.xml"); + } + llinfos << "completed" << llendl; mThread->mPendingUploads--; - dumpLLSDToFile(content,"whole_model_response.xml"); - - mThread->mWholeModelUploadURL = content["uploader"].asString(); + dump_llsd_to_file(cc,make_dump_name("whole_model_fee_response_",dump_num)); + if (isGoodStatus(status) && + cc["state"].asString() == "upload") + { + llinfos << "fee request succeeded" << llendl; + mThread->mWholeModelUploadURL = cc["uploader"].asString(); + } + else + { + llwarns << "fee request failed" << llendl; + log_upload_error(status,cc,"fee",mModelData["name"]); + mThread->mWholeModelUploadURL = ""; + } } + }; class LLWholeModelUploadResponder: public LLCurl::Responder { LLMeshUploadThread* mThread; + LLSD mModelData; + public: - LLWholeModelUploadResponder(LLMeshUploadThread* thread): - mThread(thread) + LLWholeModelUploadResponder(LLMeshUploadThread* thread, LLSD& model_data): + mThread(thread), + mModelData(model_data) { } virtual void completed(U32 status, const std::string& reason, const LLSD& content) { + LLSD cc = content; + if (gSavedSettings.getS32("MeshUploadFakeErrors")&2) + { + cc = llsd_from_file("fake_upload_error.xml"); + } + //assert_main_thread(); - llinfos << "upload completed" << llendl; mThread->mPendingUploads--; - dumpLLSDToFile(content,"whole_model_upload_response.xml"); + dump_llsd_to_file(cc,make_dump_name("whole_model_upload_response_",dump_num)); + llinfos << "LLWholeModelUploadResponder content: " << cc << llendl; + // requested "mesh" asset type isn't actually the type + // of the resultant object, fix it up here. + if (isGoodStatus(status) && + cc["state"].asString() == "complete") + { + llinfos << "upload succeeded" << llendl; + mModelData["asset_type"] = "object"; + gMeshRepo.updateInventory(LLMeshRepository::inventory_data(mModelData,cc)); + } + else + { + llwarns << "upload failed" << llendl; + std::string model_name = mModelData["name"].asString(); + log_upload_error(status,cc,"upload",model_name); + } } }; @@ -694,10 +795,7 @@ void LLMeshRepoThread::loadMeshLOD(const LLVolumeParams& mesh_params, S32 lod) if (pending != mPendingLOD.end()) { //append this lod request to existing header request pending->second.push_back(lod); - if (pending->second.size() > 4) - { - llerrs << "WTF?" << llendl; - } + llassert(pending->second.size() <= LLModel::NUM_LODS) } else { //if no header request is pending, fetch header @@ -817,8 +915,8 @@ bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id) if (header_size > 0) { - S32 offset = header_size + mMeshHeader[mesh_id]["decomposition"]["offset"].asInteger(); - S32 size = mMeshHeader[mesh_id]["decomposition"]["size"].asInteger(); + S32 offset = header_size + mMeshHeader[mesh_id]["physics_convex"]["offset"].asInteger(); + S32 size = mMeshHeader[mesh_id]["physics_convex"]["size"].asInteger(); mHeaderMutex->unlock(); @@ -889,8 +987,8 @@ bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id) if (header_size > 0) { - S32 offset = header_size + mMeshHeader[mesh_id]["physics_shape"]["offset"].asInteger(); - S32 size = mMeshHeader[mesh_id]["physics_shape"]["size"].asInteger(); + S32 offset = header_size + mMeshHeader[mesh_id]["physics_mesh"]["offset"].asInteger(); + S32 size = mMeshHeader[mesh_id]["physics_mesh"]["size"].asInteger(); mHeaderMutex->unlock(); @@ -1282,8 +1380,6 @@ LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data, mOrigin = gAgent.getPositionAgent(); mHost = gAgent.getRegionHost(); - mUploadObjectAssetCapability = gAgent.getRegion()->getCapability("UploadObjectAsset"); - mNewInventoryCapability = gAgent.getRegion()->getCapability("NewFileAgentInventoryVariablePrice"); mWholeModelFeeCapability = gAgent.getRegion()->getCapability("NewFileAgentInventory"); mOrigin += gAgent.getAtAxis() * scale.magVec(); @@ -1303,35 +1399,7 @@ LLMeshUploadThread::DecompRequest::DecompRequest(LLModel* mdl, LLModel* base_mod mThread = thread; //copy out positions and indices - if (mdl) - { - U16 index_offset = 0; - - mPositions.clear(); - mIndices.clear(); - - //queue up vertex positions and indices - for (S32 i = 0; i < mdl->getNumVolumeFaces(); ++i) - { - const LLVolumeFace& face = mdl->getVolumeFace(i); - if (mPositions.size() + face.mNumVertices > 65535) - { - continue; - } - - for (U32 j = 0; j < face.mNumVertices; ++j) - { - mPositions.push_back(LLVector3(face.mPositions[j].getF32ptr())); - } - - for (U32 j = 0; j < face.mNumIndices; ++j) - { - mIndices.push_back(face.mIndices[j]+index_offset); - } - - index_offset += face.mNumVertices; - } - } + assignData(mdl) ; mThread->mFinalDecomp = this; mThread->mPhysicsComplete = false; @@ -1344,11 +1412,8 @@ void LLMeshUploadThread::DecompRequest::completed() mThread->mPhysicsComplete = true; } - if (mHull.size() != 1) - { - llerrs << "WTF?" << llendl; - } - + llassert(mHull.size() == 1); + mThread->mHullMap[mBaseModel] = mHull[0]; } @@ -1376,148 +1441,199 @@ BOOL LLMeshUploadThread::isDiscarded() void LLMeshUploadThread::run() { - if (gSavedSettings.getBOOL("MeshUseWholeModelUpload")) - { - doWholeModelUpload(); - } - else + doWholeModelUpload(); +} + +void dump_llsd_to_file(const LLSD& content, std::string filename) +{ + if (gSavedSettings.getBOOL("MeshUploadLogXML")) { - doIterativeUpload(); + std::ofstream of(filename.c_str()); + LLSDSerialize::toPrettyXML(content,of); } } -#if 1 -void dumpLLSDToFile(const LLSD& content, std::string filename) +LLSD llsd_from_file(std::string filename) { - std::ofstream of(filename.c_str()); - LLSDSerialize::toPrettyXML(content,of); + std::ifstream ifs(filename.c_str()); + LLSD result; + LLSDSerialize::fromXML(result,ifs); + return result; } -#endif 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"; - result["name"] = "your name here"; + result["name"] = "mesh model"; result["description"] = "your description here"; - // TODO "optional" fields from the spec - res["mesh_list"] = LLSD::emptyArray(); -// TODO Textures - //res["texture_list"] = LLSD::emptyArray(); + res["texture_list"] = LLSD::emptyArray(); + res["instance_list"] = LLSD::emptyArray(); S32 mesh_num = 0; S32 texture_num = 0; std::set<LLViewerTexture* > textures; + std::map<LLViewerTexture*,S32> texture_index; + + std::map<LLModel*,S32> mesh_index; + S32 instance_num = 0; + for (instance_map::iterator iter = mInstance.begin(); iter != mInstance.end(); ++iter) { LLMeshUploadData data; data.mBaseModel = iter->first; - - LLModelInstance& instance = *(iter->second.begin()); - + LLModelInstance& first_instance = *(iter->second.begin()); for (S32 i = 0; i < 5; i++) { - data.mModel[i] = instance.mLOD[i]; + data.mModel[i] = first_instance.mLOD[i]; } - std::stringstream ostr; - - LLModel::Decomposition& decomp = - data.mModel[LLModel::LOD_PHYSICS].notNull() ? - data.mModel[LLModel::LOD_PHYSICS]->mPhysics : - data.mBaseModel->mPhysics; - - decomp.mBaseHull = mHullMap[data.mBaseModel]; - - LLSD mesh_header = LLModel::writeModel( - ostr, - data.mModel[LLModel::LOD_PHYSICS], - data.mModel[LLModel::LOD_HIGH], - data.mModel[LLModel::LOD_MEDIUM], - data.mModel[LLModel::LOD_LOW], - data.mModel[LLModel::LOD_IMPOSTOR], - decomp, - mUploadSkin, - mUploadJoints); - - data.mAssetData = ostr.str(); + if (mesh_index.find(data.mBaseModel) == mesh_index.end()) + { + // Have not seen this model before - create a new mesh_list entry for it. + std::string model_name = data.mBaseModel->getName(); + if (!model_name.empty()) + { + result["name"] = model_name; + } - LLSD mesh_entry; + std::stringstream ostr; + + LLModel::Decomposition& decomp = + data.mModel[LLModel::LOD_PHYSICS].notNull() ? + data.mModel[LLModel::LOD_PHYSICS]->mPhysics : + data.mBaseModel->mPhysics; - LLVector3 pos, scale; - LLQuaternion rot; - LLMatrix4 transformation = instance.mTransform; - decomposeMeshMatrix(transformation,pos,rot,scale); + decomp.mBaseHull = mHullMap[data.mBaseModel]; -#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); + LLSD mesh_header = LLModel::writeModel( + ostr, + data.mModel[LLModel::LOD_PHYSICS], + data.mModel[LLModel::LOD_HIGH], + data.mModel[LLModel::LOD_MEDIUM], + data.mModel[LLModel::LOD_LOW], + data.mModel[LLModel::LOD_IMPOSTOR], + decomp, + mUploadSkin, + mUploadJoints); - // TODO should be binary. - std::string str = ostr.str(); - mesh_entry["mesh_data"] = LLSD::Binary(str.begin(),str.end()); + data.mAssetData = ostr.str(); + std::string str = ostr.str(); - res["mesh_list"][mesh_num] = mesh_entry; + res["mesh_list"][mesh_num] = LLSD::Binary(str.begin(),str.end()); + mesh_index[data.mBaseModel] = mesh_num; + mesh_num++; + } - // TODO how do textures in the list map to textures in the meshes? - if (mUploadTextures) + // For all instances that use this model + for (instance_list::iterator instance_iter = iter->second.begin(); + instance_iter != iter->second.end(); + ++instance_iter) { - for (std::vector<LLImportMaterial>::iterator material_iter = instance.mMaterial.begin(); - material_iter != instance.mMaterial.end(); ++material_iter) - { - if (textures.find(material_iter->mDiffuseMap.get()) == textures.end()) + LLModelInstance& instance = *instance_iter; + + LLSD instance_entry; + + for (S32 i = 0; i < 5; i++) + { + data.mModel[i] = instance.mLOD[i]; + } + + LLVector3 pos, scale; + LLQuaternion rot; + LLMatrix4 transformation = instance.mTransform; + decomposeMeshMatrix(transformation,pos,rot,scale); + instance_entry["position"] = ll_sd_from_vector3(pos); + instance_entry["rotation"] = ll_sd_from_quaternion(rot); + instance_entry["scale"] = ll_sd_from_vector3(scale); + + instance_entry["material"] = LL_MCODE_WOOD; + LLPermissions perm; + perm.setOwnerAndGroup(gAgent.getID(), gAgent.getID(), LLUUID::null, false); + perm.setCreator(gAgent.getID()); + + perm.initMasks(PERM_ITEM_UNRESTRICTED | PERM_MOVE, //base + PERM_ITEM_UNRESTRICTED | PERM_MOVE, //owner + LLFloaterPerms::getEveryonePerms(), + LLFloaterPerms::getGroupPerms(), + LLFloaterPerms::getNextOwnerPerms()); + instance_entry["permissions"] = ll_create_sd_from_permissions(perm); + instance_entry["physics_shape_type"] = (U8)(LLViewerObject::PHYSICS_SHAPE_CONVEX_HULL); + instance_entry["mesh"] = mesh_index[data.mBaseModel]; + + instance_entry["face_list"] = LLSD::emptyArray(); + + for (S32 face_num = 0; face_num < data.mBaseModel->getNumVolumeFaces(); face_num++) + { + LLImportMaterial& material = instance.mMaterial[face_num]; + LLSD face_entry = LLSD::emptyMap(); + LLViewerFetchedTexture *texture = material.mDiffuseMap.get(); + + if ((texture != NULL) && + (textures.find(texture) == textures.end())) { - textures.insert(material_iter->mDiffuseMap.get()); + textures.insert(texture); + } - std::stringstream ostr; - if (include_textures) // otherwise data is blank. - { - LLTextureUploadData data(material_iter->mDiffuseMap.get(), material_iter->mDiffuseMapLabel); - if (!data.mTexture->isRawImageValid()) - { - data.mTexture->reloadRawImage(data.mTexture->getDiscardLevel()); - } - + std::stringstream texture_str; + if (texture != NULL && include_textures && mUploadTextures) + { + if(texture->hasSavedRawImage()) + { LLPointer<LLImageJ2C> upload_file = - LLViewerTextureList::convertToUploadFile(data.mTexture->getRawImage()); - ostr.write((const char*) upload_file->getData(), upload_file->getDataSize()); + LLViewerTextureList::convertToUploadFile(texture->getSavedRawImage()); + texture_str.write((const char*) upload_file->getData(), upload_file->getDataSize()); } - LLSD texture_entry; - texture_entry["texture_data"] = ostr.str(); - res["texture_list"][texture_num] = texture_entry; + } + + if (texture != NULL && + mUploadTextures && + texture_index.find(texture) == texture_index.end()) + { + texture_index[texture] = texture_num; + std::string str = texture_str.str(); + res["texture_list"][texture_num] = LLSD::Binary(str.begin(),str.end()); texture_num++; } - } - } - mesh_num++; + // Subset of TextureEntry fields. + if (texture != NULL && mUploadTextures) + { + face_entry["image"] = texture_index[texture]; + face_entry["scales"] = 1.0; + face_entry["scalet"] = 1.0; + face_entry["offsets"] = 0.0; + face_entry["offsett"] = 0.0; + face_entry["imagerot"] = 0.0; + } + face_entry["diffuse_color"] = ll_sd_from_color4(material.mDiffuseColor); + face_entry["fullbright"] = material.mFullbright; + instance_entry["face_list"][face_num] = face_entry; + } + + res["instance_list"][instance_num] = instance_entry; + instance_num++; + } } result["asset_resources"] = res; -#if 1 - dumpLLSDToFile(result,"whole_model.xml"); -#endif + dump_llsd_to_file(result,make_dump_name("whole_model_",dump_num)); dest = result; } void LLMeshUploadThread::doWholeModelUpload() { + dump_num++; + mCurlRequest = new LLCurlRequest(); // Queue up models for hull generation (viewer-side) @@ -1549,13 +1665,13 @@ void LLMeshUploadThread::doWholeModelUpload() physics = data.mModel[LLModel::LOD_HIGH]; } - if (!physics) - { - llerrs << "WTF?" << llendl; - } - + llassert(physics != NULL); + DecompRequest* request = new DecompRequest(physics, data.mBaseModel, this); - gMeshRepo.mDecompThread->submitRequest(request); + if(request->isValid()) + { + gMeshRepo.mDecompThread->submitRequest(request); + } } while (!mPhysicsComplete) @@ -1563,183 +1679,44 @@ void LLMeshUploadThread::doWholeModelUpload() apr_sleep(100); } - bool do_include_textures = false; // not needed for initial cost/validation check. LLSD model_data; - wholeModelToLLSD(model_data, do_include_textures); + wholeModelToLLSD(model_data,false); + dump_llsd_to_file(model_data,make_dump_name("whole_model_fee_request_",dump_num)); mPendingUploads++; LLCurlRequest::headers_t headers; mCurlRequest->post(mWholeModelFeeCapability, headers, model_data, - new LLWholeModelFeeResponder(this)); + new LLWholeModelFeeResponder(this,model_data)); 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; -} - -void LLMeshUploadThread::doIterativeUpload() -{ - if(isDiscarded()) - { - mFinished = true; - return ; - } - - mCurlRequest = new LLCurlRequest(); - - std::set<LLViewerTexture* > textures; - - //populate upload queue with relevant models - for (instance_map::iterator iter = mInstance.begin(); iter != mInstance.end(); ++iter) - { - LLMeshUploadData data; - data.mBaseModel = iter->first; - - LLModelInstance& instance = *(iter->second.begin()); - - for (S32 i = 0; i < 5; i++) - { - data.mModel[i] = instance.mLOD[i]; - } - - uploadModel(data); - - if (mUploadTextures) - { - for (std::vector<LLImportMaterial>::iterator material_iter = instance.mMaterial.begin(); - material_iter != instance.mMaterial.end(); ++material_iter) - { - - if (textures.find(material_iter->mDiffuseMap.get()) == textures.end()) - { - textures.insert(material_iter->mDiffuseMap.get()); - - LLTextureUploadData data(material_iter->mDiffuseMap.get(), material_iter->mDiffuseMapLabel); - uploadTexture(data); - } - } - } - - //queue up models for hull generation - DecompRequest* request = new DecompRequest(data.mModel[LLModel::LOD_HIGH], data.mBaseModel, this); - gMeshRepo.mDecompThread->submitRequest(request); - } - while (!mPhysicsComplete) + if (mWholeModelUploadURL.empty()) { - apr_sleep(100); - } - - //upload textures - bool done = false; - do - { - if (!mTextureQ.empty()) - { - sendCostRequest(mTextureQ.front()); - mTextureQ.pop(); - } - - if (!mConfirmedTextureQ.empty()) - { - doUploadTexture(mConfirmedTextureQ.front()); - mConfirmedTextureQ.pop(); - } - - mCurlRequest->process(); - - done = mTextureQ.empty() && mConfirmedTextureQ.empty(); + llinfos << "unable to upload, fee request failed" << llendl; } - while (!done || mCurlRequest->getQueued() > 0); - - LLSD object_asset; - object_asset["objects"] = LLSD::emptyArray(); - - done = false; - do + else { - static S32 count = 0; - static F32 last_hundred = gFrameTimeSeconds; - if (gFrameTimeSeconds - last_hundred > 1.f) + LLSD full_model_data; + wholeModelToLLSD(full_model_data, true); + LLSD body = full_model_data["asset_resources"]; + dump_llsd_to_file(body,make_dump_name("whole_model_body_",dump_num)); + mCurlRequest->post(mWholeModelUploadURL, headers, body, + new LLWholeModelUploadResponder(this, model_data)); + do { - last_hundred = gFrameTimeSeconds; - count = 0; - } - - //how many requests to push before calling process - const S32 PUSH_PER_PROCESS = 32; - - S32 tcount = llmin(count+PUSH_PER_PROCESS, 100); - - while (!mUploadQ.empty() && count < tcount) - { //send any pending upload requests - mMutex->lock(); - LLMeshUploadData data = mUploadQ.front(); - mUploadQ.pop(); - mMutex->unlock(); - sendCostRequest(data); - count++; - } - - tcount = llmin(count+PUSH_PER_PROCESS, 100); - - while (!mConfirmedQ.empty() && count < tcount) - { //process any meshes that have been confirmed for upload - LLMeshUploadData& data = mConfirmedQ.front(); - doUploadModel(data); - mConfirmedQ.pop(); - count++; - } - - tcount = llmin(count+PUSH_PER_PROCESS, 100); - - while (!mInstanceQ.empty() && count < tcount && !isDiscarded()) - { //create any objects waiting for upload - count++; - object_asset["objects"].append(createObject(mInstanceQ.front())); - mInstanceQ.pop(); - } - - mCurlRequest->process(); - - done = isDiscarded() || (mInstanceQ.empty() && mConfirmedQ.empty() && mUploadQ.empty()); + mCurlRequest->process(); + } while (mCurlRequest->getQueued() > 0); } - while (!done || mCurlRequest->getQueued() > 0); delete mCurlRequest; mCurlRequest = NULL; - // now upload the object asset - std::string url = mUploadObjectAssetCapability; - - if (object_asset["objects"][0].has("permissions")) - { //copy permissions from first available object to be used for coalesced object - object_asset["permissions"] = object_asset["objects"][0]["permissions"]; - } - - if(!isDiscarded()) - { - mPendingUploads++; - LLHTTPClient::post(url, object_asset, new LLModelObjectUploadResponder(this,object_asset)); - } - else - { - mFinished = true; - } + // Currently a no-op. + mFinished = true; } void LLMeshUploadThread::uploadModel(LLMeshUploadData& data) @@ -2170,7 +2147,7 @@ void LLMeshHeaderResponder::completedRaw(U32 status, const std::string& reason, //just in case skin info or decomposition is at the end of the file (which it shouldn't be) lod_bytes = llmax(lod_bytes, header["skin"]["offset"].asInteger() + header["skin"]["size"].asInteger()); - lod_bytes = llmax(lod_bytes, header["decomposition"]["offset"].asInteger() + header["decomposition"]["size"].asInteger()); + lod_bytes = llmax(lod_bytes, header["physics_convex"]["offset"].asInteger() + header["physics_convex"]["size"].asInteger()); S32 header_bytes = (S32) gMeshRepo.mThread->mMeshHeaderSize[mesh_id]; S32 bytes = lod_bytes + header_bytes; @@ -2387,10 +2364,6 @@ S32 LLMeshRepository::loadMesh(LLVOVolume* vobj, const LLVolumeParams& mesh_para group->derefLOD(lod); } } - else - { - llerrs << "WTF?" << llendl; - } } return detail; @@ -2462,7 +2435,6 @@ void LLMeshRepository::notifyLoadedMeshes() if (gAgent.getRegion()->getName() != region_name && gAgent.getRegion()->capabilitiesReceived()) { region_name = gAgent.getRegion()->getName(); - mGetMeshCapability = gAgent.getRegion()->getCapability("GetMesh"); } } @@ -2570,6 +2542,20 @@ void LLMeshRepository::notifyLoadedMeshes() void LLMeshRepository::notifySkinInfoReceived(LLMeshSkinInfo& info) { mSkinMap[info.mMeshID] = info; + + skin_load_map::iterator iter = mLoadingSkins.find(info.mMeshID); + if (iter != mLoadingSkins.end()) + { + for (std::set<LLUUID>::iterator obj_id = iter->second.begin(); obj_id != iter->second.end(); ++obj_id) + { + LLVOVolume* vobj = (LLVOVolume*) gObjectList.findObject(*obj_id); + if (vobj) + { + vobj->notifyMeshLoaded(); + } + } + } + mLoadingSkins.erase(info.mMeshID); } @@ -2685,7 +2671,7 @@ U32 LLMeshRepository::getResourceCost(const LLUUID& mesh_id) return mThread->getResourceCost(mesh_id); } -const LLMeshSkinInfo* LLMeshRepository::getSkinInfo(const LLUUID& mesh_id) +const LLMeshSkinInfo* LLMeshRepository::getSkinInfo(const LLUUID& mesh_id, LLVOVolume* requesting_obj) { if (mesh_id.notNull()) { @@ -2699,12 +2685,12 @@ const LLMeshSkinInfo* LLMeshRepository::getSkinInfo(const LLUUID& mesh_id) { LLMutexLock lock(mMeshMutex); //add volume to list of loading meshes - std::set<LLUUID>::iterator iter = mLoadingSkins.find(mesh_id); + skin_load_map::iterator iter = mLoadingSkins.find(mesh_id); if (iter == mLoadingSkins.end()) { //no request pending for this skin info - mLoadingSkins.insert(mesh_id); mPendingSkinRequests.push(mesh_id); } + mLoadingSkins[mesh_id].insert(requesting_obj->getID()); } } @@ -2786,7 +2772,18 @@ void LLMeshRepository::buildHull(const LLVolumeParams& params, S32 detail) bool LLMeshRepository::hasPhysicsShape(const LLUUID& mesh_id) { LLSD mesh = mThread->getMeshHeader(mesh_id); - return mesh.has("physics_shape") && mesh["physics_shape"].has("size") && (mesh["physics_shape"]["size"].asInteger() > 0); + if (mesh.has("physics_mesh") && mesh["physics_mesh"].has("size") && (mesh["physics_mesh"]["size"].asInteger() > 0)) + { + return true; + } + + LLModel::Decomposition* decomp = getDecomposition(mesh_id); + if (decomp && !decomp->mHull.empty()) + { + return true; + } + + return false; } LLSD& LLMeshRepository::getMeshHeader(const LLUUID& mesh_id) @@ -2842,102 +2839,6 @@ S32 LLMeshRepository::getMeshSize(const LLUUID& mesh_id, S32 lod) } -void LLMeshUploadThread::sendCostRequest(LLMeshUploadData& data) -{ - if(isDiscarded()) - { - return ; - } - - //write model file to memory buffer - std::stringstream ostr; - - LLModel::Decomposition& decomp = - data.mModel[LLModel::LOD_PHYSICS].notNull() ? - data.mModel[LLModel::LOD_PHYSICS]->mPhysics : - data.mBaseModel->mPhysics; - - LLSD header = LLModel::writeModel( - ostr, - data.mModel[LLModel::LOD_PHYSICS], - data.mModel[LLModel::LOD_HIGH], - data.mModel[LLModel::LOD_MEDIUM], - data.mModel[LLModel::LOD_LOW], - data.mModel[LLModel::LOD_IMPOSTOR], - decomp, - mUploadSkin, - mUploadJoints, - true); - - std::string desc = data.mBaseModel->mLabel; - - // Grab the total vertex count of the model - // along with other information for the "asset_resources" map - // to send to the server. - LLSD asset_resources = LLSD::emptyMap(); - - - std::string url = mNewInventoryCapability; - - if (!url.empty()) - { - LLSD body = generate_new_resource_upload_capability_body( - LLAssetType::AT_MESH, - desc, - desc, - LLFolderType::FT_MESH, - LLInventoryType::IT_MESH, - LLFloaterPerms::getNextOwnerPerms(), - LLFloaterPerms::getGroupPerms(), - LLFloaterPerms::getEveryonePerms()); - - body["asset_resources"] = asset_resources; - - mPendingConfirmations++; - LLCurlRequest::headers_t headers; - - data.mPostData = body; - - mCurlRequest->post(url, headers, body, new LLMeshCostResponder(data, this)); - } -} - -void LLMeshUploadThread::sendCostRequest(LLTextureUploadData& data) -{ - if(isDiscarded()) - { - return ; - } - - if (data.mTexture && data.mTexture->getDiscardLevel() >= 0) - { - LLSD asset_resources = LLSD::emptyMap(); - - std::string url = mNewInventoryCapability; - - if (!url.empty()) - { - LLSD body = generate_new_resource_upload_capability_body( - LLAssetType::AT_TEXTURE, - data.mLabel, - data.mLabel, - LLFolderType::FT_TEXTURE, - LLInventoryType::IT_TEXTURE, - LLFloaterPerms::getNextOwnerPerms(), - LLFloaterPerms::getGroupPerms(), - LLFloaterPerms::getEveryonePerms()); - - body["asset_resources"] = asset_resources; - - mPendingConfirmations++; - LLCurlRequest::headers_t headers; - - data.mPostData = body; - mCurlRequest->post(url, headers, body, new LLTextureCostResponder(data, this)); - } - } -} - void LLMeshUploadThread::doUploadModel(LLMeshUploadData& data) { @@ -2993,9 +2894,12 @@ void LLMeshUploadThread::doUploadTexture(LLTextureUploadData& data) data.mTexture->reloadRawImage(data.mTexture->getDiscardLevel()); } - LLPointer<LLImageJ2C> upload_file = LLViewerTextureList::convertToUploadFile(data.mTexture->getRawImage()); + if(data.mTexture->hasSavedRawImage()) + { + LLPointer<LLImageJ2C> upload_file = LLViewerTextureList::convertToUploadFile(data.mTexture->getSavedRawImage()); - ostr.write((const char*) upload_file->getData(), upload_file->getDataSize()); + ostr.write((const char*) upload_file->getData(), upload_file->getDataSize()); + } data.mAssetData = ostr.str(); @@ -3075,11 +2979,8 @@ LLSD LLMeshUploadThread::createObject(LLModelInstance& instance) { LLMatrix4 transformation = instance.mTransform; - if (instance.mMeshID.isNull()) - { - llerrs << "WTF?" << llendl; - } - + llassert(instance.mMeshID.notNull()); + // check for reflection BOOL reflected = (transformation.determinant() < 0); @@ -3243,6 +3144,8 @@ bool LLImportMaterial::operator<(const LLImportMaterial &rhs) const void LLMeshRepository::updateInventory(inventory_data data) { LLMutexLock lock(mMeshMutex); + dump_llsd_to_file(data.mPostData,make_dump_name("update_inventory_post_data_",dump_num)); + dump_llsd_to_file(data.mResponse,make_dump_name("update_inventory_response_",dump_num)); mInventoryQ.push(data); } @@ -3400,15 +3303,18 @@ void LLPhysicsDecomp::setMeshData(LLCDMeshData& mesh) mesh.mNumTriangles = mCurRequest->mIndices.size()/3; - LLCDResult ret = LLCD_OK; - if (LLConvexDecomposition::getInstance() != NULL) + if (mesh.mNumTriangles > 0 && mesh.mNumVertices > 2) { - ret = LLConvexDecomposition::getInstance()->setMeshData(&mesh); - } + LLCDResult ret = LLCD_OK; + if (LLConvexDecomposition::getInstance() != NULL) + { + ret = LLConvexDecomposition::getInstance()->setMeshData(&mesh); + } - if (ret) - { - llerrs << "Convex Decomposition thread valid but could not set mesh data" << llendl; + if (ret) + { + llerrs << "Convex Decomposition thread valid but could not set mesh data" << llendl; + } } } @@ -3472,11 +3378,6 @@ void LLPhysicsDecomp::doDecomposition() { ret = LLConvexDecomposition::getInstance()->setParam(param->mName, value.asBoolean()); } - - if (ret) - { - llerrs << "WTF?" << llendl; - } } mCurRequest->setStatusMessage("Executing."); @@ -3771,6 +3672,81 @@ void LLPhysicsDecomp::run() mDone = true; } +void LLPhysicsDecomp::Request::assignData(LLModel* mdl) +{ + if (!mdl) + { + return ; + } + + U16 index_offset = 0; + U16 tri[3] ; + + mPositions.clear(); + mIndices.clear(); + mBBox[1] = LLVector3(F32_MIN, F32_MIN, F32_MIN) ; + mBBox[0] = LLVector3(F32_MAX, F32_MAX, F32_MAX) ; + + //queue up vertex positions and indices + for (S32 i = 0; i < mdl->getNumVolumeFaces(); ++i) + { + const LLVolumeFace& face = mdl->getVolumeFace(i); + if (mPositions.size() + face.mNumVertices > 65535) + { + continue; + } + + for (U32 j = 0; j < face.mNumVertices; ++j) + { + mPositions.push_back(LLVector3(face.mPositions[j].getF32ptr())); + for(U32 k = 0 ; k < 3 ; k++) + { + mBBox[0].mV[k] = llmin(mBBox[0].mV[k], mPositions[j].mV[k]) ; + mBBox[1].mV[k] = llmax(mBBox[1].mV[k], mPositions[j].mV[k]) ; + } + } + + updateTriangleAreaThreshold() ; + + for (U32 j = 0; j+2 < face.mNumIndices; j += 3) + { + tri[0] = face.mIndices[j] + index_offset ; + tri[1] = face.mIndices[j + 1] + index_offset ; + tri[2] = face.mIndices[j + 2] + index_offset ; + + if(isValidTriangle(tri[0], tri[1], tri[2])) + { + mIndices.push_back(tri[0]); + mIndices.push_back(tri[1]); + mIndices.push_back(tri[2]); + } + } + + index_offset += face.mNumVertices; + } + + return ; +} + +void LLPhysicsDecomp::Request::updateTriangleAreaThreshold() +{ + F32 range = mBBox[1].mV[0] - mBBox[0].mV[0] ; + range = llmin(range, mBBox[1].mV[1] - mBBox[0].mV[1]) ; + range = llmin(range, mBBox[1].mV[2] - mBBox[0].mV[2]) ; + + mTriangleAreaThreshold = llmin(0.0002f, range * 0.000002f) ; +} + +//check if the triangle area is large enough to qualify for a valid triangle +bool LLPhysicsDecomp::Request::isValidTriangle(U16 idx1, U16 idx2, U16 idx3) +{ + LLVector3 a = mPositions[idx2] - mPositions[idx1] ; + LLVector3 b = mPositions[idx3] - mPositions[idx1] ; + F32 c = a * b ; + + return ((a*a) * (b*b) - c * c) > mTriangleAreaThreshold ; +} + void LLPhysicsDecomp::Request::setStatusMessage(const std::string& msg) { mStatusMessage = msg; @@ -3868,3 +3844,27 @@ void LLMeshRepository::buildPhysicsMesh(LLModel::Decomposition& decomp) } } } + + +bool LLMeshRepository::meshUploadEnabled() +{ + LLViewerRegion *region = gAgent.getRegion(); + if(gSavedSettings.getBOOL("MeshEnabled") && + LLViewerParcelMgr::getInstance()->allowAgentBuild() && + region) + { + return region->meshUploadEnabled(); + } + return false; +} + +bool LLMeshRepository::meshRezEnabled() +{ + LLViewerRegion *region = gAgent.getRegion(); + if(gSavedSettings.getBOOL("MeshEnabled") && + region) + { + return region->meshRezEnabled(); + } + return false; +} diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h index f859e29c0789778440fdb1158324024348dad163..f237c3a60e6cbdc9ad8134aad4b1c2966ac9b6b6 100644 --- a/indra/newview/llmeshrepository.h +++ b/indra/newview/llmeshrepository.h @@ -152,7 +152,7 @@ class LLPhysicsDecomp : public LLThread std::string mStatusMessage; std::vector<LLModel::PhysicsMesh> mHullMesh; LLModel::convex_hull_decomposition mHull; - + //status message callback, called from decomposition thread virtual S32 statusCallback(const char* status, S32 p1, S32 p2) = 0; @@ -160,6 +160,17 @@ class LLPhysicsDecomp : public LLThread virtual void completed() = 0; virtual void setStatusMessage(const std::string& msg); + + bool isValid() const {return mPositions.size() > 2 && mIndices.size() > 2 ;} + + protected: + //internal use + LLVector3 mBBox[2] ; + F32 mTriangleAreaThreshold ; + + void assignData(LLModel* mdl) ; + void updateTriangleAreaThreshold() ; + bool isValidTriangle(U16 idx1, U16 idx2, U16 idx3) ; }; LLCondition* mSignal; @@ -385,8 +396,6 @@ class LLMeshUploadThread : public LLThread BOOL mDiscarded ; LLHost mHost; - std::string mUploadObjectAssetCapability; - std::string mNewInventoryCapability; std::string mWholeModelFeeCapability; std::string mWholeModelUploadURL; @@ -405,12 +414,10 @@ class LLMeshUploadThread : public LLThread void uploadTexture(LLTextureUploadData& data); void doUploadTexture(LLTextureUploadData& data); - void sendCostRequest(LLTextureUploadData& data); void priceResult(LLTextureUploadData& data, const LLSD& content); void onTextureUploaded(LLTextureUploadData& data); void uploadModel(LLMeshUploadData& data); - void sendCostRequest(LLMeshUploadData& data); void doUploadModel(LLMeshUploadData& data); void onModelUploaded(LLMeshUploadData& data); void createObjects(LLMeshUploadData& data); @@ -424,7 +431,6 @@ class LLMeshUploadThread : public LLThread BOOL isDiscarded(); void doWholeModelUpload(); - void doIterativeUpload(); void wholeModelToLLSD(LLSD& dest, bool include_textures); @@ -467,13 +473,17 @@ class LLMeshRepository static S32 getActualMeshLOD(LLSD& header, S32 lod); U32 calcResourceCost(LLSD& header); U32 getResourceCost(const LLUUID& mesh_params); - const LLMeshSkinInfo* getSkinInfo(const LLUUID& mesh_id); + const LLMeshSkinInfo* getSkinInfo(const LLUUID& mesh_id, LLVOVolume* requesting_obj); LLModel::Decomposition* getDecomposition(const LLUUID& mesh_id); void fetchPhysicsShape(const LLUUID& mesh_id); bool hasPhysicsShape(const LLUUID& mesh_id); void buildHull(const LLVolumeParams& params, S32 detail); void buildPhysicsMesh(LLModel::Decomposition& decomp); + + bool meshUploadEnabled(); + bool meshRezEnabled(); + LLSD& getMeshHeader(const LLUUID& mesh_id); @@ -496,7 +506,8 @@ class LLMeshRepository std::vector<LLMeshRepoThread::LODRequest> mPendingRequests; //list of mesh ids awaiting skin info - std::set<LLUUID> mLoadingSkins; + typedef std::map<LLUUID, std::set<LLUUID> > skin_load_map; + skin_load_map mLoadingSkins; //list of mesh ids that need to send skin info fetch requests std::queue<LLUUID> mPendingSkinRequests; diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index 80f68621697fe9487b0529ed1cf5e53b815b795d..c2729fa19bd395d4d3fd5ca936c0eb55911d17e4 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -299,7 +299,7 @@ void LLLandmarksPanel::onTeleport() } LLFolderViewEventListener* listenerp = current_item->getListener(); - if (listenerp->getInventoryType() == LLInventoryType::IT_LANDMARK) + if (listenerp && listenerp->getInventoryType() == LLInventoryType::IT_LANDMARK) { listenerp->openItem(); } diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index b4d0ada19655a25b5f45ddbf1b9bc435edb13be1..52917ff20b3dfbe5e30fca4c53c52a47cf8496be 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -1740,26 +1740,11 @@ void LLPanelObject::refresh() mRootObject = NULL; } - bool enable_mesh = gSavedSettings.getBOOL("MeshEnabled") && - gAgent.getRegion() && - !gAgent.getRegion()->getCapability("GetMesh").empty() && - !gAgent.getRegion()->getCapability("ObjectAdd").empty(); - F32 max_scale = get_default_max_prim_scale(LLPickInfo::isFlora(mObject)); getChild<LLSpinCtrl>("Scale X")->setMaxValue(max_scale); getChild<LLSpinCtrl>("Scale Y")->setMaxValue(max_scale); getChild<LLSpinCtrl>("Scale Z")->setMaxValue(max_scale); - - BOOL found = mCtrlSculptType->itemExists("Mesh"); - if (enable_mesh && !found) - { - mCtrlSculptType->add("Mesh"); - } - else if (!enable_mesh && found) - { - mCtrlSculptType->remove("Mesh"); - } } diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index 46262832dcddf47347fec80ff247abf4b560ee5c..1e510a2d7b424bbe172e7e4c8a4a47726134f54a 100644 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -584,6 +584,13 @@ void LLPanelPlaces::onTeleportButtonClicked() { if (mPlaceInfoType == LANDMARK_INFO_TYPE) { + if (mItem.isNull()) + { + llwarns << "NULL landmark item" << llendl; + llassert(mItem.notNull()); + return; + } + LLSD payload; payload["asset_id"] = mItem->getAssetUUID(); LLSD args; diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp index 7839cdd811141bd20924dea1cd43f409f38359b5..bb87601d2017fd6ef22bcd828d757d2057bc766e 100644 --- a/indra/newview/llpanelvolume.cpp +++ b/indra/newview/llpanelvolume.cpp @@ -530,17 +530,24 @@ void LLPanelVolume::refresh() getChildView("Light Ambiance")->setVisible( visible); getChildView("light texture control")->setVisible( visible); - bool enable_mesh = gSavedSettings.getBOOL("MeshEnabled") && - gAgent.getRegion() && - !gAgent.getRegion()->getCapability("GetMesh").empty() && - !gAgent.getRegion()->getCapability("ObjectAdd").empty(); + bool enable_mesh = false; + LLSD sim_features; + LLViewerRegion *region = gAgent.getRegion(); + if(region) + { + LLSD sim_features; + region->getSimulatorFeatures(sim_features); + enable_mesh = sim_features.has("PhysicsShapeTypes"); + } getChildView("label physicsshapetype")->setVisible(enable_mesh); getChildView("Physics Shape Type Combo Ctrl")->setVisible(enable_mesh); getChildView("Physics Gravity")->setVisible(enable_mesh); getChildView("Physics Friction")->setVisible(enable_mesh); getChildView("Physics Density")->setVisible(enable_mesh); getChildView("Physics Restitution")->setVisible(enable_mesh); + + /* TODO: add/remove individual physics shape types as per the PhysicsShapeTypes simulator features */ } diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index fa329eb0ae0271807132e0a46f576214dd5ebbd3..a5b91729e856f1dbb018b8ec53e5917c95c15081 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -35,6 +35,7 @@ #include "llvolumeoctree.h" #include "llviewercamera.h" #include "llface.h" +#include "llfloatertools.h" #include "llviewercontrol.h" #include "llviewerregion.h" #include "llcamera.h" @@ -69,6 +70,7 @@ U32 LLSpatialGroup::sNodeCount = 0; std::set<GLuint> LLSpatialGroup::sPendingQueries; +U32 gOctreeMaxCapacity; BOOL LLSpatialGroup::sNoDelete = FALSE; @@ -630,7 +632,7 @@ BOOL LLSpatialGroup::updateInGroup(LLDrawable *drawablep, BOOL immediate) if (mOctreeNode->isInside(drawablep->getPositionGroup()) && (mOctreeNode->contains(drawablep) || (drawablep->getBinRadius() > mOctreeNode->getSize()[0] && - parent && parent->getElementCount() >= LL_OCTREE_MAX_CAPACITY))) + parent && parent->getElementCount() >= gOctreeMaxCapacity))) { unbound(); setState(OBJECT_DIRTY); @@ -689,17 +691,8 @@ static LLFastTimer::DeclareTimer FTM_REBUILD_VBO("VBO Rebuilt"); void LLSpatialPartition::rebuildGeom(LLSpatialGroup* group) { - /*if (!gPipeline.hasRenderType(mDrawableType)) - { - return; - }*/ - if (group->isDead() || !group->isState(LLSpatialGroup::GEOM_DIRTY)) { - /*if (!group->isState(LLSpatialGroup::GEOM_DIRTY) && mRenderByGroup) - { - llerrs << "WTF?" << llendl; - }*/ return; } @@ -961,21 +954,15 @@ void LLSpatialGroup::setState(U32 state) { mState |= state; - if (state > LLSpatialGroup::STATE_MASK) - { - llerrs << "WTF?" << llendl; - } + llassert(state <= LLSpatialGroup::STATE_MASK); } void LLSpatialGroup::setState(U32 state, S32 mode) { LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); - if (state > LLSpatialGroup::STATE_MASK) - { - llerrs << "WTF?" << llendl; - } - + llassert(state <= LLSpatialGroup::STATE_MASK); + if (mode > STATE_MODE_SINGLE) { if (mode == STATE_MODE_DIFF) @@ -1021,20 +1008,14 @@ class LLSpatialClearStateDiff : public LLSpatialClearState void LLSpatialGroup::clearState(U32 state) { - if (state > LLSpatialGroup::STATE_MASK) - { - llerrs << "WTF?" << llendl; - } + llassert(state <= LLSpatialGroup::STATE_MASK); mState &= ~state; } void LLSpatialGroup::clearState(U32 state, S32 mode) { - if (state > LLSpatialGroup::STATE_MASK) - { - llerrs << "WTF?" << llendl; - } + llassert(state <= LLSpatialGroup::STATE_MASK); LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); @@ -1059,10 +1040,7 @@ void LLSpatialGroup::clearState(U32 state, S32 mode) BOOL LLSpatialGroup::isState(U32 state) const { - if (state > LLSpatialGroup::STATE_MASK) - { - llerrs << "WTF?" << llendl; - } + llassert(state <= LLSpatialGroup::STATE_MASK); return mState & state ? TRUE : FALSE; } @@ -1250,7 +1228,8 @@ void LLSpatialGroup::updateDistance(LLCamera &camera) { if (LLViewerCamera::sCurCameraID != LLViewerCamera::CAMERA_WORLD) { - llerrs << "WTF?" << llendl; + llwarns << "Attempted to update distance for camera other than world camera!" << llendl; + return; } #if !LL_RELEASE_FOR_DOWNLOAD @@ -2064,11 +2043,8 @@ class LLOctreeCullVisExtents: public LLOctreeCullShadow virtual void processGroup(LLSpatialGroup* group) { - if (group->isState(LLSpatialGroup::DIRTY) || group->getData().empty()) - { - llerrs << "WTF?" << llendl; - } - + llassert(!group->isState(LLSpatialGroup::DIRTY) && !group->getData().empty()) + if (mRes < 2) { if (mCamera->AABBInFrustum(group->mObjectBounds[0], group->mObjectBounds[1]) > 0) @@ -2541,7 +2517,7 @@ void renderOctree(LLSpatialGroup* group) //coded by buffer usage and activity gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA); LLVector4 col; - if (group->mBuilt > 0.f) + /*if (group->mBuilt > 0.f) { group->mBuilt -= 2.f * gFrameIntervalSeconds; if (group->mBufferUsage == GL_STATIC_DRAW_ARB) @@ -2610,7 +2586,7 @@ void renderOctree(LLSpatialGroup* group) gGL.color4f(1,1,1,1); } } - else + else*/ { if (group->mBufferUsage == GL_STATIC_DRAW_ARB && !group->getData().empty() && group->mSpatialPartition->mRenderByGroup) @@ -2630,33 +2606,24 @@ void renderOctree(LLSpatialGroup* group) size.mul(1.01f); size.add(fudge); - { - LLGLDepthTest depth(GL_TRUE, GL_FALSE); - drawBox(group->mObjectBounds[0], fudge); - } + //{ + // LLGLDepthTest depth(GL_TRUE, GL_FALSE); + // drawBox(group->mObjectBounds[0], fudge); + //} gGL.setSceneBlendType(LLRender::BT_ALPHA); - if (group->mBuilt <= 0.f) + //if (group->mBuilt <= 0.f) { //draw opaque outline - gGL.color4f(col.mV[0], col.mV[1], col.mV[2], 1.f); - drawBoxOutline(group->mObjectBounds[0], group->mObjectBounds[1]); + //gGL.color4f(col.mV[0], col.mV[1], col.mV[2], 1.f); + //drawBoxOutline(group->mObjectBounds[0], group->mObjectBounds[1]); - if (group->mOctreeNode->isLeaf()) - { - gGL.color4f(1,1,1,1); - } - else - { - gGL.color4f(0,1,1,1); - } - + gGL.color4f(0,1,1,1); drawBoxOutline(group->mBounds[0],group->mBounds[1]); - - + //draw bounding box for draw info - if (group->mSpatialPartition->mRenderByGroup) + /*if (group->mSpatialPartition->mRenderByGroup) { gGL.color4f(1.0f, 0.75f, 0.25f, 0.6f); for (LLSpatialGroup::draw_map_t::iterator i = group->mDrawMap.begin(); i != group->mDrawMap.end(); ++i) @@ -2673,7 +2640,7 @@ void renderOctree(LLSpatialGroup* group) drawBoxOutline(center, size); } } - } + }*/ } // LLSpatialGroup::OctreeNode* node = group->mOctreeNode; @@ -2716,7 +2683,7 @@ void renderVisibility(LLSpatialGroup* group, LLCamera* camera) gGL.color4f(0.f, 0.75f, 0.f, 0.5f); pushBufferVerts(group, LLVertexBuffer::MAP_VERTEX); } - else if (camera && group->mOcclusionVerts.notNull()) + /*else if (camera && group->mOcclusionVerts.notNull()) { LLVertexBuffer::unbind(); group->mOcclusionVerts->setBuffer(LLVertexBuffer::MAP_VERTEX); @@ -2728,7 +2695,7 @@ void renderVisibility(LLSpatialGroup* group, LLCamera* camera) glColor4f(1.0f, 1.f, 1.f, 1.0f); group->mOcclusionVerts->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, get_box_fan_indices(camera, group->mBounds[0])); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - } + }*/ } } @@ -3002,13 +2969,6 @@ void render_hull(LLModel::PhysicsMesh& mesh, const LLColor4& color, const LLColo void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume) { - if (volume->isSelected()) - { - LLVector3 construct_me(5,5,5); - construct_me.normalize(); - } - - U8 physics_type = volume->getPhysicsShapeType(); if (physics_type == LLViewerObject::PHYSICS_SHAPE_NONE || volume->isFlexible()) @@ -3473,6 +3433,8 @@ void renderTextureAnim(LLDrawInfo* params) void renderBatchSize(LLDrawInfo* params) { + LLGLEnable offset(GL_POLYGON_OFFSET_FILL); + glPolygonOffset(-1.f, 1.f); glColor3ubv((GLubyte*) &(params->mDebugColor)); pushVerts(params, LLVertexBuffer::MAP_VERTEX); } @@ -3910,6 +3872,28 @@ class LLOctreeRenderNonOccluded : public LLOctreeTraveler<LLDrawable> renderAgentTarget(avatar); } + if (gDebugGL) + { + for (U32 i = 0; i < drawable->getNumFaces(); ++i) + { + LLFace* facep = drawable->getFace(i); + U8 index = facep->getTextureIndex(); + if (facep->mDrawInfo) + { + if (index < 255) + { + if (facep->mDrawInfo->mTextureList.size() <= index) + { + llerrs << "Face texture index out of bounds." << llendl; + } + else if (facep->mDrawInfo->mTextureList[index] != facep->getTexture()) + { + llerrs << "Face texture index incorrect." << llendl; + } + } + } + } + } } for (LLSpatialGroup::draw_map_t::iterator i = group->mDrawMap.begin(); i != group->mDrawMap.end(); ++i) @@ -4282,7 +4266,29 @@ class LLOctreeIntersect : public LLSpatialGroup::OctreeTraveler if (vobj) { LLVector3 intersection; - if (vobj->lineSegmentIntersect(mStart, mEnd, -1, mPickTransparent, mFaceHit, &intersection, mTexCoord, mNormal, mBinormal)) + bool skip_check = false; + if (vobj->isAvatar()) + { + LLVOAvatar* avatar = (LLVOAvatar*) vobj; + if (avatar->isSelf() && LLFloater::isVisible(gFloaterTools)) + { + LLViewerObject* hit = avatar->lineSegmentIntersectRiggedAttachments(mStart, mEnd, -1, mPickTransparent, mFaceHit, &intersection, mTexCoord, mNormal, mBinormal); + if (hit) + { + mEnd = intersection; + if (mIntersection) + { + *mIntersection = intersection; + } + + mHit = hit->mDrawable; + skip_check = true; + } + + } + } + + if (!skip_check && vobj->lineSegmentIntersect(mStart, mEnd, -1, mPickTransparent, mFaceHit, &intersection, mTexCoord, mNormal, mBinormal)) { mEnd = intersection; // shorten ray so we only find CLOSER hits if (mIntersection) diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index 0d9cad914a55755344cc062719da89ec364a05d7..db8a0c29926a6b7d4356b5813c7c48c163175766 100644 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -91,6 +91,8 @@ class LLDrawInfo : public LLRefCount LLPointer<LLVertexBuffer> mVertexBuffer; LLPointer<LLViewerTexture> mTexture; + std::vector<LLPointer<LLViewerTexture> > mTextureList; + LLColor4U mGlowColor; S32 mDebugColor; const LLMatrix4* mTextureMatrix; @@ -207,7 +209,7 @@ class LLSpatialGroup : public LLOctreeListener<LLDrawable> typedef std::vector<LLPointer<LLDrawInfo> > drawmap_elem_t; typedef std::map<U32, drawmap_elem_t > draw_map_t; typedef std::vector<LLPointer<LLVertexBuffer> > buffer_list_t; - typedef std::map<LLPointer<LLViewerTexture>, buffer_list_t> buffer_texture_map_t; + typedef std::map<LLFace*, buffer_list_t> buffer_texture_map_t; typedef std::map<U32, buffer_texture_map_t> buffer_map_t; typedef LLOctreeListener<LLDrawable> BaseType; @@ -399,7 +401,7 @@ class LLSpatialGroup : public LLOctreeListener<LLDrawable> public: bridge_list_t mBridgeList; - buffer_map_t mBufferMap; //used by volume buffers to store unique buffers per texture + buffer_map_t mBufferMap; //used by volume buffers to attempt to reuse vertex buffers F32 mBuilt; OctreeNode* mOctreeNode; @@ -684,7 +686,7 @@ class LLVolumeGeometryManager: public LLGeometryManager virtual void rebuildGeom(LLSpatialGroup* group); virtual void rebuildMesh(LLSpatialGroup* group); virtual void getGeometry(LLSpatialGroup* group); - void genDrawInfo(LLSpatialGroup* group, U32 mask, std::vector<LLFace*>& faces, BOOL distance_sort = FALSE); + void genDrawInfo(LLSpatialGroup* group, U32 mask, std::vector<LLFace*>& faces, BOOL distance_sort = FALSE, BOOL batch_textures = FALSE); void registerFace(LLSpatialGroup* group, LLFace* facep, U32 type); }; diff --git a/indra/newview/lltranslate.cpp b/indra/newview/lltranslate.cpp index 2de7db38ed1cdd653f429312ceab877aa2875b54..2f60b6b90b4aa9c18fb91fbcf299fa7927337393 100644 --- a/indra/newview/lltranslate.cpp +++ b/indra/newview/lltranslate.cpp @@ -28,6 +28,8 @@ #include "lltranslate.h" +#include <curl/curl.h> + #include "llbufferstream.h" #include "llui.h" #include "llversioninfo.h" @@ -76,7 +78,9 @@ void LLTranslate::translateMessage(LLHTTPClient::ResponderPtr &result, const std //static void LLTranslate::getTranslateUrl(std::string &translate_url, const std::string &from_lang, const std::string &to_lang, const std::string &mesg) { - std::string escaped_mesg = curl_escape(mesg.c_str(), mesg.size()); + char * curl_str = curl_escape(mesg.c_str(), mesg.size()); + std::string const escaped_mesg(curl_str); + curl_free(curl_str); translate_url = m_GoogleURL + escaped_mesg + m_GoogleLangSpec diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 379bbe614d62161a5d83a0cabd4cca2830c4db84..87ca80260f4337a52e6dc54bceb31c2708651525 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -57,6 +57,7 @@ #include "llworld.h" #include "pipeline.h" #include "llviewerjoystick.h" +#include "llviewerobjectlist.h" #include "llviewerparcelmgr.h" #include "llparcel.h" #include "llkeyboard.h" @@ -183,6 +184,21 @@ static bool handleReleaseGLBufferChanged(const LLSD& newvalue) return true; } +static bool handleFSAASamplesChanged(const LLSD& newvalue) +{ + if (gPipeline.isInit()) + { + gPipeline.releaseGLBuffers(); + gPipeline.createGLBuffers(); + + if (LLPipeline::sRenderDeferred) + { + LLViewerShaderMgr::instance()->setShaders(); + } + } + return true; +} + static bool handleAnisotropicChanged(const LLSD& newvalue) { LLImageGL::sGlobalUseAnisotropic = newvalue.asBoolean(); @@ -357,6 +373,16 @@ static bool handleResetVertexBuffersChanged(const LLSD&) return true; } +static bool handleRepartition(const LLSD&) +{ + if (gPipeline.isInit()) + { + gOctreeMaxCapacity = gSavedSettings.getU32("OctreeMaxNodeCapacity"); + gObjectList.repartitionObjects(); + } + return true; +} + static bool handleRenderDynamicLODChanged(const LLSD& newvalue) { LLPipeline::sDynamicLOD = newvalue.asBoolean(); @@ -560,6 +586,12 @@ void settings_setup_listeners() gSavedSettings.getControl("FirstPersonAvatarVisible")->getSignal()->connect(boost::bind(&handleRenderAvatarMouselookChanged, _2)); gSavedSettings.getControl("RenderFarClip")->getSignal()->connect(boost::bind(&handleRenderFarClipChanged, _2)); gSavedSettings.getControl("RenderTerrainDetail")->getSignal()->connect(boost::bind(&handleTerrainDetailChanged, _2)); + gSavedSettings.getControl("OctreeStaticObjectSizeFactor")->getSignal()->connect(boost::bind(&handleRepartition, _2)); + gSavedSettings.getControl("OctreeDistanceFactor")->getSignal()->connect(boost::bind(&handleRepartition, _2)); + gSavedSettings.getControl("OctreeMaxNodeCapacity")->getSignal()->connect(boost::bind(&handleRepartition, _2)); + gSavedSettings.getControl("OctreeAlphaDistanceFactor")->getSignal()->connect(boost::bind(&handleRepartition, _2)); + gSavedSettings.getControl("OctreeAttachmentSizeFactor")->getSignal()->connect(boost::bind(&handleRepartition, _2)); + gSavedSettings.getControl("RenderMaxTextureIndex")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2)); gSavedSettings.getControl("RenderUseTriStrips")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2)); gSavedSettings.getControl("RenderAnimateTrees")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2)); gSavedSettings.getControl("RenderAvatarVP")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2)); @@ -568,7 +600,7 @@ void settings_setup_listeners() gSavedSettings.getControl("RenderSpecularResX")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2)); gSavedSettings.getControl("RenderSpecularResY")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2)); gSavedSettings.getControl("RenderSpecularExponent")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2)); - gSavedSettings.getControl("RenderFSAASamples")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2)); + gSavedSettings.getControl("RenderFSAASamples")->getSignal()->connect(boost::bind(&handleFSAASamplesChanged, _2)); gSavedSettings.getControl("RenderAnisotropic")->getSignal()->connect(boost::bind(&handleAnisotropicChanged, _2)); gSavedSettings.getControl("RenderShadowResolutionScale")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2)); gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2)); diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index e41773d27365d3d986fcd7bdb7d805b6adc90d37..f725f0fe86d4e45c19172775b909c186eb474ec2 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -582,6 +582,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) LLMemType mt_ug(LLMemType::MTYPE_DISPLAY_UPDATE_GEOM); const F32 max_geom_update_time = 0.005f*10.f*gFrameIntervalSeconds; // 50 ms/second update time gPipeline.createObjects(max_geom_update_time); + gPipeline.processPartitionQ(); gPipeline.updateGeom(max_geom_update_time); stop_glerror(); } @@ -836,7 +837,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) if (LLPipeline::sRenderDeferred && !LLPipeline::sUnderWaterRender) { gPipeline.mDeferredScreen.bindTarget(); - glClearColor(0,0,0,0); + glClearColor(1,0,1,1); gPipeline.mDeferredScreen.clear(); } else @@ -995,8 +996,7 @@ void render_hud_attachments() S32 use_occlusion = LLPipeline::sUseOcclusion; LLPipeline::sUseOcclusion = 0; - LLPipeline::sDisableShaders = TRUE; - + //cull, sort, and render hud objects static LLCullResult result; LLSpatialGroup::sNoDelete = TRUE; @@ -1036,7 +1036,6 @@ void render_hud_attachments() gPipeline.toggleRenderDebugFeature((void*) LLPipeline::RENDER_DEBUG_FEATURE_UI); } LLPipeline::sUseOcclusion = use_occlusion; - LLPipeline::sDisableShaders = FALSE; } glMatrixMode(GL_PROJECTION); glPopMatrix(); diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 37640ad0d45ea7cd4a62de1b5ecd2b29e3e394e4..b9293b3b3105f8c9a1ebaef7e2752b97df21728a 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -107,9 +107,7 @@ class LLMeshUploadVisible : public view_listener_t { bool handleEvent(const LLSD& userdata) { - return gSavedSettings.getBOOL("MeshEnabled") && - LLViewerParcelMgr::getInstance()->allowAgentBuild() && - !gAgent.getRegion()->getCapability("ObjectAdd").empty(); + return gMeshRepo.meshUploadEnabled(); } }; @@ -1203,78 +1201,6 @@ void upload_new_resource( } } -BOOL upload_new_variable_price_resource( - const LLTransactionID &tid, - LLAssetType::EType asset_type, - std::string name, - std::string desc, - LLFolderType::EType destination_folder_type, - LLInventoryType::EType inv_type, - U32 next_owner_perms, - U32 group_perms, - U32 everyone_perms, - const std::string& display_name, - const LLSD& asset_resources) -{ - LLAssetID uuid = - upload_new_resource_prep( - tid, - asset_type, - inv_type, - name, - display_name, - desc); - - llinfos << "*** Uploading: " << llendl; - llinfos << "Type: " << LLAssetType::lookup(asset_type) << llendl; - llinfos << "UUID: " << uuid << llendl; - llinfos << "Name: " << name << llendl; - llinfos << "Desc: " << desc << llendl; - lldebugs << "Folder: " - << gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? (LLFolderType::EType)asset_type : destination_folder_type) << llendl; - lldebugs << "Asset Type: " << LLAssetType::lookup(asset_type) << llendl; - - std::string url = gAgent.getRegion()->getCapability( - "NewFileAgentInventoryVariablePrice"); - - if ( !url.empty() ) - { - lldebugs - << "New Agent Inventory variable price upload" << llendl; - - // Each of the two capabilities has similar data, so - // let's reuse that code - - LLSD body; - - body = generate_new_resource_upload_capability_body( - asset_type, - name, - desc, - destination_folder_type, - inv_type, - next_owner_perms, - group_perms, - everyone_perms); - - body["asset_resources"] = asset_resources; - - LLHTTPClient::post( - url, - body, - new LLNewAgentInventoryVariablePriceResponder( - uuid, - asset_type, - body)); - - return TRUE; - } - else - { - return FALSE; - } -} - LLAssetID generate_asset_id_for_new_upload(const LLTransactionID& tid) { if ( gDisconnected ) diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h index 1597821504269e9d752e5621bed2765f2cbf0ab3..3136358b83653e8c1d4d3b6d36482895f73f2729 100644 --- a/indra/newview/llviewermenufile.h +++ b/indra/newview/llviewermenufile.h @@ -68,23 +68,6 @@ void upload_new_resource( S32 expected_upload_cost, void *userdata); -// TODO* : Move all uploads to use this new function -// since at some point, that upload path will be deprecated and no longer -// used - -// We make a new function here to ensure that previous code is not broken -BOOL upload_new_variable_price_resource( - const LLTransactionID& tid, - LLAssetType::EType type, - std::string name, - std::string desc, - LLFolderType::EType destination_folder_type, - LLInventoryType::EType inv_type, - U32 next_owner_perms, - U32 group_perms, - U32 everyone_perms, - const std::string& display_name, - const LLSD& asset_resources); LLAssetID generate_asset_id_for_new_upload(const LLTransactionID& tid); void increase_new_upload_stats(LLAssetType::EType asset_type); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 3832be727fcc331af2371065562ceedee33ca792..7ab335314a213f6a5a2f0c14b414e7ba9002770d 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -96,7 +96,6 @@ #include "llviewerwindow.h" #include "llvlmanager.h" #include "llvoavatarself.h" -#include "llvotextbubble.h" #include "llworld.h" #include "pipeline.h" #include "llfloaterworldmap.h" @@ -4228,15 +4227,8 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data) // Display green bubble on kill if ( gShowObjectUpdates ) { - LLViewerObject* newobject; - newobject = gObjectList.createObjectViewer(LL_PCODE_LEGACY_TEXT_BUBBLE, objectp->getRegion()); - - LLVOTextBubble* bubble = (LLVOTextBubble*) newobject; - - bubble->mColor.setVec(0.f, 1.f, 0.f, 1.f); - bubble->setScale( 2.0f * bubble->getScale() ); - bubble->setPositionGlobal(objectp->getPositionGlobal()); - gPipeline.addObject(bubble); + LLColor4 color(0.f,1.f,0.f,1.f); + gPipeline.addDebugBlip(objectp->getPositionAgent(), color); } // Do the kill @@ -4332,6 +4324,9 @@ void process_sound_trigger(LLMessageSystem *msg, void **) { return; } + + // Don't play sounds from gestures if they are not enabled. + if (!gSavedSettings.getBOOL("EnableGestureSounds")) return; gAudiop->triggerSound(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, pos_global); } @@ -6483,10 +6478,14 @@ void process_script_dialog(LLMessageSystem* msg, void**) LLSD payload; LLUUID object_id; - LLUUID owner_id; - msg->getUUID("Data", "ObjectID", object_id); - msg->getUUID("OwnerData", "OwnerID", owner_id); + +// For compability with OS grids first check for presence of extended packet before fetching data. + LLUUID owner_id; + if (gMessageSystem->getNumberOfBlocks("OwnerData") > 0) + { + msg->getUUID("OwnerData", "OwnerID", owner_id); + } if (LLMuteList::getInstance()->isMuted(object_id) || LLMuteList::getInstance()->isMuted(owner_id)) { diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index e7878d8adfd785dda95ba01d3c8c1be4b5ecc9b3..be9ff872c06d0456f37aa5a6bc42d45bb41c8de2 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -89,7 +89,6 @@ #include "llvopartgroup.h" #include "llvosky.h" #include "llvosurfacepatch.h" -#include "llvotextbubble.h" #include "llvotree.h" #include "llvovolume.h" #include "llvowater.h" @@ -168,8 +167,6 @@ LLViewerObject *LLViewerObject::createObject(const LLUUID &id, const LLPCode pco // llwarns << "Creating new tree!" << llendl; // res = new LLVOTree(id, pcode, regionp); break; res = NULL; break; - case LL_PCODE_LEGACY_TEXT_BUBBLE: - res = new LLVOTextBubble(id, pcode, regionp); break; case LL_VO_CLOUDS: res = new LLVOClouds(id, pcode, regionp); break; case LL_VO_SURFACE_PATCH: @@ -1894,7 +1891,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys, // // - // WTF? If we're going to skip this message, why are we + // If we're going to skip this message, why are we // doing all the parenting, etc above? U32 packet_id = mesgsys->getCurrentRecvPacketID(); if (packet_id < mLatestRecvPacketID && @@ -1973,23 +1970,16 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys, if ( gShowObjectUpdates ) { - if (!((mPrimitiveCode == LL_PCODE_LEGACY_AVATAR) && (((LLVOAvatar *) this)->isSelf())) - && mRegionp) + LLColor4 color; + if (update_type == OUT_TERSE_IMPROVED) { - LLViewerObject* object = gObjectList.createObjectViewer(LL_PCODE_LEGACY_TEXT_BUBBLE, mRegionp); - LLVOTextBubble* bubble = (LLVOTextBubble*) object; - - if (update_type == OUT_TERSE_IMPROVED) - { - bubble->mColor.setVec(0.f, 0.f, 1.f, 1.f); - } - else - { - bubble->mColor.setVec(1.f, 0.f, 0.f, 1.f); - } - object->setPositionGlobal(getPositionGlobal()); - gPipeline.addObject(object); + color.setVec(0.f, 0.f, 1.f, 1.f); + } + else + { + color.setVec(1.f, 0.f, 0.f, 1.f); } + gPipeline.addDebugBlip(getPositionAgent(), color); } if ((0.0f == vel_mag_sq) && diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 007b3416f17a28b04fa67f34e36d8c025b74a0e9..45c6777ae87eaafa6be96cb27d09108d8f0561d7 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -1418,12 +1418,12 @@ void LLViewerObjectList::onObjectCostFetchFailure(const LLUUID& object_id) mPendingObjectCost.erase(object_id); } -void LLViewerObjectList::updateQuotaCost( const LLUUID& objectId, const SelectionQuota& quota ) +void LLViewerObjectList::updateQuota( const LLUUID& objectId, const SelectionQuota& quota ) { LLViewerObject* pVO = findObject( objectId ); if ( pVO ) { - //pVO->updateQuota( quota ); + pVO->updateQuota( quota ); } } @@ -1497,6 +1497,24 @@ void LLViewerObjectList::shiftObjects(const LLVector3 &offset) LLWorld::getInstance()->shiftRegions(offset); } +void LLViewerObjectList::repartitionObjects() +{ + for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter) + { + LLViewerObject* objectp = *iter; + if (!objectp->isDead()) + { + LLDrawable* drawable = objectp->mDrawable; + if (drawable && !drawable->isDead()) + { + drawable->updateBinRadius(); + drawable->updateSpatialExtents(); + drawable->movePartition(); + } + } + } +} + //debug code bool LLViewerObjectList::hasMapObjectInRegion(LLViewerRegion* regionp) { diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h index 8e211eaf7380cbab38ccd48f60319a91f4a71dce..9d1b5cb56ff76e13d110e7fb34cf5994c6723fe1 100644 --- a/indra/newview/llviewerobjectlist.h +++ b/indra/newview/llviewerobjectlist.h @@ -102,9 +102,10 @@ class LLViewerObjectList F32 restitution, F32 gravity_multiplier); - void updateQuotaCost( const LLUUID& objectId, const SelectionQuota& costs ); + void updateQuota( const LLUUID& objectId, const SelectionQuota& costs ); void shiftObjects(const LLVector3 &offset); + void repartitionObjects(); bool hasMapObjectInRegion(LLViewerRegion* regionp) ; void clearAllMapObjectsInRegion(LLViewerRegion* regionp) ; diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 590c82856dcbc647da26dafeabb23fcde520a2fc..002e0567e4ec7b391e72f91307dc56530953b93c 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -69,6 +69,7 @@ #include "llspatialpartition.h" #include "stringize.h" #include "llviewercontrol.h" +#include "llsdserialize.h" #ifdef LL_WINDOWS #pragma warning(disable:4355) @@ -1140,6 +1141,20 @@ void LLViewerRegion::getInfo(LLSD& info) info["Region"]["Handle"]["y"] = (LLSD::Integer)y; } +void LLViewerRegion::getSimulatorFeatures(LLSD& sim_features) +{ + sim_features = mSimulatorFeatures; +} + +void LLViewerRegion::setSimulatorFeatures(const LLSD& sim_features) +{ + std::stringstream str; + + LLSDSerialize::toPrettyXML(sim_features, str); + llinfos << str.str() << llendl; + mSimulatorFeatures = sim_features; +} + LLViewerRegion::eCacheUpdateResult LLViewerRegion::cacheFullUpdate(LLViewerObject* objectp, LLDataPackerBinaryBuffer &dp) { U32 local_id = objectp->getLocalID(); @@ -1480,6 +1495,8 @@ void LLViewerRegion::setSeedCapability(const std::string& url) LLSD capabilityNames = LLSD::emptyArray(); + capabilityNames.append("AccountingParcel"); + capabilityNames.append("AccountingSelection"); capabilityNames.append("AttachmentResources"); capabilityNames.append("AvatarPickerSearch"); capabilityNames.append("ChatSessionRequest"); @@ -1509,8 +1526,6 @@ void LLViewerRegion::setSeedCapability(const std::string& url) capabilityNames.append("MapLayer"); capabilityNames.append("MapLayerGod"); capabilityNames.append("NewFileAgentInventory"); - capabilityNames.append("NewFileAgentInventoryVariablePrice"); - capabilityNames.append("ObjectAdd"); capabilityNames.append("ParcelPropertiesUpdate"); capabilityNames.append("ParcelMediaURLFilterList"); capabilityNames.append("ParcelNavigateMedia"); @@ -1541,7 +1556,6 @@ void LLViewerRegion::setSeedCapability(const std::string& url) capabilityNames.append("UpdateNotecardTaskInventory"); capabilityNames.append("UpdateScriptTask"); capabilityNames.append("UploadBakedTexture"); - capabilityNames.append("UploadObjectAsset"); capabilityNames.append("ViewerMetrics"); capabilityNames.append("ViewerStartAuction"); capabilityNames.append("ViewerStats"); @@ -1559,6 +1573,42 @@ void LLViewerRegion::setSeedCapability(const std::string& url) LLHTTPClient::post(url, capabilityNames, mImpl->mHttpResponderPtr); } +class SimulatorFeaturesReceived : public LLHTTPClient::Responder +{ + LOG_CLASS(SimulatorFeaturesReceived); +public: + SimulatorFeaturesReceived(LLViewerRegion* region) + : mRegion(region) + { } + + + void error(U32 statusNum, const std::string& reason) + { + LL_WARNS2("AppInit", "SimulatorFeatures") << statusNum << ": " << reason << LL_ENDL; + } + + void result(const LLSD& content) + { + if(!mRegion) //region is removed or responder is not created. + { + return ; + } + + mRegion->setSimulatorFeatures(content); + } + + static boost::intrusive_ptr<SimulatorFeaturesReceived> build( + LLViewerRegion* region) + { + return boost::intrusive_ptr<SimulatorFeaturesReceived>( + new SimulatorFeaturesReceived(region)); + } + +private: + LLViewerRegion* mRegion; +}; + + void LLViewerRegion::setCapability(const std::string& name, const std::string& url) { if(name == "EventQueueGet") @@ -1571,6 +1621,11 @@ void LLViewerRegion::setCapability(const std::string& name, const std::string& u { LLHTTPSender::setSender(mImpl->mHost, new LLCapHTTPSender(url)); } + else if (name == "SimulatorFeatures") + { + // kick off a request for simulator features + LLHTTPClient::get(url, new SimulatorFeaturesReceived(this)); + } else { mImpl->mCapabilities[name] = url; @@ -1664,3 +1719,16 @@ std::string LLViewerRegion::getDescription() const return stringize(*this); } +bool LLViewerRegion::meshUploadEnabled() const +{ + return (mSimulatorFeatures.has("MeshUploadEnabled") && + mSimulatorFeatures["MeshUploadEnabled"].asBoolean()); +} + +bool LLViewerRegion::meshRezEnabled() const +{ + return (mSimulatorFeatures.has("MeshRezEnabled") && + mSimulatorFeatures["MeshRezEnabled"].asBoolean()); +} + + diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index a6e5c47b866af8ba36e67eea701e3cd30e3813d1..3811b989e7c88cbdc98bc9ee1a0bce0c6de34713 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -276,6 +276,11 @@ class LLViewerRegion: public LLCapabilityProvider // implements this interface void getInfo(LLSD& info); + bool meshRezEnabled() const; + bool meshUploadEnabled() const; + + void getSimulatorFeatures(LLSD& info); + void setSimulatorFeatures(const LLSD& info); typedef enum { @@ -401,6 +406,8 @@ class LLViewerRegion: public LLCapabilityProvider // implements this interface bool mCapabilitiesReceived; BOOL mReleaseNotesRequested; + + LLSD mSimulatorFeatures; }; inline BOOL LLViewerRegion::getAllowDamage() const diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 3e85802ba6c630780e6e4cab4676e482e9caa27d..da4d0548d02811699e19ca28df1d2457167253ab 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -66,12 +66,20 @@ LLGLSLShader gObjectSimpleProgram; LLGLSLShader gObjectSimpleWaterProgram; LLGLSLShader gObjectFullbrightProgram; LLGLSLShader gObjectFullbrightWaterProgram; - LLGLSLShader gObjectFullbrightShinyProgram; LLGLSLShader gObjectFullbrightShinyWaterProgram; LLGLSLShader gObjectShinyProgram; LLGLSLShader gObjectShinyWaterProgram; +LLGLSLShader gObjectSimpleNonIndexedProgram; +LLGLSLShader gObjectSimpleNonIndexedWaterProgram; +LLGLSLShader gObjectFullbrightNonIndexedProgram; +LLGLSLShader gObjectFullbrightNonIndexedWaterProgram; +LLGLSLShader gObjectFullbrightShinyNonIndexedProgram; +LLGLSLShader gObjectFullbrightShinyNonIndexedWaterProgram; +LLGLSLShader gObjectShinyNonIndexedProgram; +LLGLSLShader gObjectShinyNonIndexedWaterProgram; + //object hardware skinning shaders LLGLSLShader gSkinnedObjectSimpleProgram; LLGLSLShader gSkinnedObjectFullbrightProgram; @@ -113,6 +121,7 @@ LLGLSLShader gDeferredImpostorProgram; LLGLSLShader gDeferredEdgeProgram; LLGLSLShader gDeferredWaterProgram; LLGLSLShader gDeferredDiffuseProgram; +LLGLSLShader gDeferredNonIndexedDiffuseProgram; LLGLSLShader gDeferredSkinnedDiffuseProgram; LLGLSLShader gDeferredSkinnedBumpProgram; LLGLSLShader gDeferredSkinnedAlphaProgram; @@ -132,13 +141,16 @@ LLGLSLShader gDeferredShadowProgram; LLGLSLShader gDeferredAvatarShadowProgram; LLGLSLShader gDeferredAttachmentShadowProgram; LLGLSLShader gDeferredAlphaProgram; +LLGLSLShader gDeferredAvatarEyesProgram; LLGLSLShader gDeferredFullbrightProgram; LLGLSLShader gDeferredGIProgram; LLGLSLShader gDeferredGIFinalProgram; LLGLSLShader gDeferredPostGIProgram; LLGLSLShader gDeferredPostProgram; LLGLSLShader gDeferredPostNoDoFProgram; - +LLGLSLShader gDeferredWLSkyProgram; +LLGLSLShader gDeferredWLCloudProgram; +LLGLSLShader gDeferredStarProgram; LLGLSLShader gLuminanceGatherProgram; @@ -160,6 +172,10 @@ LLViewerShaderMgr::LLViewerShaderMgr() : mShaderList.push_back(&gObjectFullbrightProgram); mShaderList.push_back(&gObjectFullbrightShinyProgram); mShaderList.push_back(&gObjectFullbrightShinyWaterProgram); + mShaderList.push_back(&gObjectSimpleNonIndexedProgram); + mShaderList.push_back(&gObjectFullbrightNonIndexedProgram); + mShaderList.push_back(&gObjectFullbrightShinyNonIndexedProgram); + mShaderList.push_back(&gObjectFullbrightShinyNonIndexedWaterProgram); mShaderList.push_back(&gSkinnedObjectSimpleProgram); mShaderList.push_back(&gSkinnedObjectFullbrightProgram); mShaderList.push_back(&gSkinnedObjectFullbrightShinyProgram); @@ -183,6 +199,7 @@ LLViewerShaderMgr::LLViewerShaderMgr() : mShaderList.push_back(&gDeferredAlphaProgram); mShaderList.push_back(&gDeferredSkinnedAlphaProgram); mShaderList.push_back(&gDeferredFullbrightProgram); + mShaderList.push_back(&gDeferredAvatarEyesProgram); mShaderList.push_back(&gDeferredPostGIProgram); mShaderList.push_back(&gDeferredEdgeProgram); mShaderList.push_back(&gDeferredPostProgram); @@ -190,6 +207,9 @@ LLViewerShaderMgr::LLViewerShaderMgr() : mShaderList.push_back(&gDeferredGIFinalProgram); mShaderList.push_back(&gDeferredWaterProgram); mShaderList.push_back(&gDeferredAvatarAlphaProgram); + mShaderList.push_back(&gDeferredWLSkyProgram); + mShaderList.push_back(&gDeferredWLCloudProgram); + mShaderList.push_back(&gDeferredStarProgram); } LLViewerShaderMgr::~LLViewerShaderMgr() @@ -347,6 +367,10 @@ void LLViewerShaderMgr::setShaders() return; } + //setup preprocessor definitions + LLShaderMgr::instance()->mDefinitions["samples"] = llformat("%d", gGLManager.getNumFBOFSAASamples(gSavedSettings.getU32("RenderFSAASamples"))); + LLShaderMgr::instance()->mDefinitions["NUM_TEX_UNITS"] = llformat("%d", gGLManager.mNumTextureImageUnits); + reentrance = true; // Make sure the compiled shader map is cleared before we recompile shaders. @@ -577,6 +601,16 @@ void LLViewerShaderMgr::unloadShaders() gObjectFullbrightShinyWaterProgram.unload(); gObjectShinyWaterProgram.unload(); + gObjectSimpleNonIndexedProgram.unload(); + gObjectSimpleNonIndexedWaterProgram.unload(); + gObjectFullbrightNonIndexedProgram.unload(); + gObjectFullbrightNonIndexedWaterProgram.unload(); + + gObjectShinyNonIndexedProgram.unload(); + gObjectFullbrightShinyNonIndexedProgram.unload(); + gObjectFullbrightShinyNonIndexedWaterProgram.unload(); + gObjectShinyNonIndexedWaterProgram.unload(); + gSkinnedObjectSimpleProgram.unload(); gSkinnedObjectFullbrightProgram.unload(); gSkinnedObjectFullbrightShinyProgram.unload(); @@ -607,6 +641,7 @@ void LLViewerShaderMgr::unloadShaders() gPostNightVisionProgram.unload(); gDeferredDiffuseProgram.unload(); + gDeferredNonIndexedDiffuseProgram.unload(); gDeferredSkinnedDiffuseProgram.unload(); gDeferredSkinnedBumpProgram.unload(); gDeferredSkinnedAlphaProgram.unload(); @@ -685,24 +720,35 @@ BOOL LLViewerShaderMgr::loadBasicShaders() shaders.clear(); shaders.reserve(13); - shaders.push_back( make_pair( "windlight/atmosphericsVarsF.glsl", mVertexShaderLevel[SHADER_WINDLIGHT] ) ); - shaders.push_back( make_pair( "windlight/gammaF.glsl", mVertexShaderLevel[SHADER_WINDLIGHT]) ); - shaders.push_back( make_pair( "windlight/atmosphericsF.glsl", mVertexShaderLevel[SHADER_WINDLIGHT] ) ); - shaders.push_back( make_pair( "windlight/transportF.glsl", mVertexShaderLevel[SHADER_WINDLIGHT] ) ); - shaders.push_back( make_pair( "environment/waterFogF.glsl", mVertexShaderLevel[SHADER_WATER] ) ); - shaders.push_back( make_pair( "lighting/lightF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); - shaders.push_back( make_pair( "lighting/lightFullbrightF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); - shaders.push_back( make_pair( "lighting/lightWaterF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); - shaders.push_back( make_pair( "lighting/lightFullbrightWaterF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); - shaders.push_back( make_pair( "lighting/lightShinyF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); - shaders.push_back( make_pair( "lighting/lightFullbrightShinyF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); - shaders.push_back( make_pair( "lighting/lightShinyWaterF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); - shaders.push_back( make_pair( "lighting/lightFullbrightShinyWaterF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); + S32 ch = gGLManager.mNumTextureImageUnits-1; + + std::vector<S32> index_channels; + index_channels.push_back(-1); shaders.push_back( make_pair( "windlight/atmosphericsVarsF.glsl", mVertexShaderLevel[SHADER_WINDLIGHT] ) ); + index_channels.push_back(-1); shaders.push_back( make_pair( "windlight/gammaF.glsl", mVertexShaderLevel[SHADER_WINDLIGHT]) ); + index_channels.push_back(-1); shaders.push_back( make_pair( "windlight/atmosphericsF.glsl", mVertexShaderLevel[SHADER_WINDLIGHT] ) ); + index_channels.push_back(-1); shaders.push_back( make_pair( "windlight/transportF.glsl", mVertexShaderLevel[SHADER_WINDLIGHT] ) ); + index_channels.push_back(-1); shaders.push_back( make_pair( "environment/waterFogF.glsl", mVertexShaderLevel[SHADER_WATER] ) ); + index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); + index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightFullbrightNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); + index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightWaterNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); + index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightFullbrightWaterNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); + index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightShinyNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); + index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightFullbrightShinyNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); + index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightShinyWaterNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); + index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightFullbrightShinyWaterNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); + index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); + index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightFullbrightF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); + index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightWaterF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); + index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightFullbrightWaterF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); + index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightShinyF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); + index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightFullbrightShinyF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); + index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightShinyWaterF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); + index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightFullbrightShinyWaterF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); for (U32 i = 0; i < shaders.size(); i++) { // Note usage of GL_FRAGMENT_SHADER_ARB - if (loadShaderFile(shaders[i].first, shaders[i].second, GL_FRAGMENT_SHADER_ARB) == 0) + if (loadShaderFile(shaders[i].first, shaders[i].second, GL_FRAGMENT_SHADER_ARB, index_channels[i]) == 0) { return FALSE; } @@ -833,6 +879,9 @@ BOOL LLViewerShaderMgr::loadShadersEffects() { BOOL success = TRUE; + U32 samples = gGLManager.getNumFBOFSAASamples(gSavedSettings.getU32("RenderFSAASamples")); + bool multisample = samples > 1 && LLPipeline::sRenderDeferred && gGLManager.mHasTextureMultisample; + if (mVertexShaderLevel[SHADER_EFFECT] == 0) { gGlowProgram.unload(); @@ -858,10 +907,21 @@ BOOL LLViewerShaderMgr::loadShadersEffects() if (success) { + std::string fragment; + + if (multisample) + { + fragment = "effects/glowExtractMSF.glsl"; + } + else + { + fragment = "effects/glowExtractF.glsl"; + } + gGlowExtractProgram.mName = "Glow Extract Shader (Post)"; gGlowExtractProgram.mShaderFiles.clear(); gGlowExtractProgram.mShaderFiles.push_back(make_pair("effects/glowExtractV.glsl", GL_VERTEX_SHADER_ARB)); - gGlowExtractProgram.mShaderFiles.push_back(make_pair("effects/glowExtractF.glsl", GL_FRAGMENT_SHADER_ARB)); + gGlowExtractProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER_ARB)); gGlowExtractProgram.mShaderLevel = mVertexShaderLevel[SHADER_EFFECT]; success = gGlowExtractProgram.createShader(NULL, &mGlowExtractUniforms); if (!success) @@ -925,6 +985,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() { gDeferredTreeProgram.unload(); gDeferredDiffuseProgram.unload(); + gDeferredNonIndexedDiffuseProgram.unload(); gDeferredSkinnedDiffuseProgram.unload(); gDeferredSkinnedBumpProgram.unload(); gDeferredSkinnedAlphaProgram.unload(); @@ -945,6 +1006,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() gDeferredAvatarAlphaProgram.unload(); gDeferredAlphaProgram.unload(); gDeferredFullbrightProgram.unload(); + gDeferredAvatarEyesProgram.unload(); gDeferredPostGIProgram.unload(); gDeferredEdgeProgram.unload(); gDeferredPostProgram.unload(); @@ -952,6 +1014,9 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() gDeferredGIProgram.unload(); gDeferredGIFinalProgram.unload(); gDeferredWaterProgram.unload(); + gDeferredWLSkyProgram.unload(); + gDeferredWLCloudProgram.unload(); + gDeferredStarProgram.unload(); return TRUE; } @@ -959,16 +1024,31 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() BOOL success = TRUE; + U32 samples = gGLManager.getNumFBOFSAASamples(gSavedSettings.getU32("RenderFSAASamples")); + bool multisample = samples > 1 && gGLManager.mHasTextureMultisample; + if (success) { gDeferredDiffuseProgram.mName = "Deferred Diffuse Shader"; gDeferredDiffuseProgram.mShaderFiles.clear(); gDeferredDiffuseProgram.mShaderFiles.push_back(make_pair("deferred/diffuseV.glsl", GL_VERTEX_SHADER_ARB)); - gDeferredDiffuseProgram.mShaderFiles.push_back(make_pair("deferred/diffuseF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredDiffuseProgram.mShaderFiles.push_back(make_pair("deferred/diffuseIndexedF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredDiffuseProgram.mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits; gDeferredDiffuseProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; success = gDeferredDiffuseProgram.createShader(NULL, NULL); } + if (success) + { + gDeferredNonIndexedDiffuseProgram.mName = "Non Indexed Deferred Diffuse Shader"; + gDeferredNonIndexedDiffuseProgram.mShaderFiles.clear(); + gDeferredNonIndexedDiffuseProgram.mShaderFiles.push_back(make_pair("deferred/diffuseV.glsl", GL_VERTEX_SHADER_ARB)); + gDeferredNonIndexedDiffuseProgram.mShaderFiles.push_back(make_pair("deferred/diffuseF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredNonIndexedDiffuseProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; + success = gDeferredNonIndexedDiffuseProgram.createShader(NULL, NULL); + } + + if (success) { gDeferredSkinnedDiffuseProgram.mName = "Deferred Skinned Diffuse Shader"; @@ -1000,9 +1080,10 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() gDeferredSkinnedAlphaProgram.mFeatures.hasGamma = true; gDeferredSkinnedAlphaProgram.mFeatures.hasAtmospherics = true; gDeferredSkinnedAlphaProgram.mFeatures.hasLighting = true; + gDeferredSkinnedAlphaProgram.mFeatures.disableTextureIndex = true; gDeferredSkinnedAlphaProgram.mShaderFiles.clear(); gDeferredSkinnedAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); - gDeferredSkinnedAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredSkinnedAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaNonIndexedF.glsl", GL_FRAGMENT_SHADER_ARB)); gDeferredSkinnedAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; success = gDeferredSkinnedAlphaProgram.createShader(NULL, NULL); } @@ -1039,40 +1120,83 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() if (success) { + std::string fragment; + + if (multisample) + { + fragment = "deferred/pointLightMSF.glsl"; + } + else + { + fragment = "deferred/pointLightF.glsl"; + } + gDeferredLightProgram.mName = "Deferred Light Shader"; gDeferredLightProgram.mShaderFiles.clear(); gDeferredLightProgram.mShaderFiles.push_back(make_pair("deferred/pointLightV.glsl", GL_VERTEX_SHADER_ARB)); - gDeferredLightProgram.mShaderFiles.push_back(make_pair("deferred/pointLightF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredLightProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER_ARB)); gDeferredLightProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; success = gDeferredLightProgram.createShader(NULL, NULL); } if (success) { + std::string fragment; + if (multisample) + { + fragment = "deferred/multiPointLightMSF.glsl"; + } + else + { + fragment = "deferred/multiPointLightF.glsl"; + } + gDeferredMultiLightProgram.mName = "Deferred MultiLight Shader"; gDeferredMultiLightProgram.mShaderFiles.clear(); gDeferredMultiLightProgram.mShaderFiles.push_back(make_pair("deferred/multiPointLightV.glsl", GL_VERTEX_SHADER_ARB)); - gDeferredMultiLightProgram.mShaderFiles.push_back(make_pair("deferred/multiPointLightF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredMultiLightProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER_ARB)); gDeferredMultiLightProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; success = gDeferredMultiLightProgram.createShader(NULL, NULL); } if (success) { + std::string fragment; + + if (multisample) + { + fragment = "deferred/spotLightMSF.glsl"; + } + else + { + fragment = "deferred/multiSpotLightF.glsl"; + } + gDeferredSpotLightProgram.mName = "Deferred SpotLight Shader"; gDeferredSpotLightProgram.mShaderFiles.clear(); gDeferredSpotLightProgram.mShaderFiles.push_back(make_pair("deferred/pointLightV.glsl", GL_VERTEX_SHADER_ARB)); - gDeferredSpotLightProgram.mShaderFiles.push_back(make_pair("deferred/multiSpotLightF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredSpotLightProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER_ARB)); gDeferredSpotLightProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; success = gDeferredSpotLightProgram.createShader(NULL, NULL); } if (success) { + std::string fragment; + + if (multisample) + { + fragment = "deferred/multiSpotLightMSF.glsl"; + } + else + { + fragment = "deferred/multiSpotLightF.glsl"; + } + gDeferredMultiSpotLightProgram.mName = "Deferred MultiSpotLight Shader"; gDeferredMultiSpotLightProgram.mShaderFiles.clear(); gDeferredMultiSpotLightProgram.mShaderFiles.push_back(make_pair("deferred/pointLightV.glsl", GL_VERTEX_SHADER_ARB)); - gDeferredMultiSpotLightProgram.mShaderFiles.push_back(make_pair("deferred/multiSpotLightF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredMultiSpotLightProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER_ARB)); gDeferredMultiSpotLightProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; success = gDeferredMultiSpotLightProgram.createShader(NULL, NULL); } @@ -1083,11 +1207,25 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() if (gSavedSettings.getBOOL("RenderDeferredSSAO")) { - fragment = "deferred/sunLightSSAOF.glsl"; + if (multisample) + { + fragment = "deferred/sunlightSSAOMSF.glsl"; + } + else + { + fragment = "deferred/sunLightSSAOF.glsl"; + } } else { - fragment = "deferred/sunLightF.glsl"; + if (multisample) + { + fragment = "deferred/sunlightMSF.glsl"; + } + else + { + fragment = "deferred/sunLightF.glsl"; + } } gDeferredSunProgram.mName = "Deferred Sun Shader"; @@ -1100,10 +1238,21 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() if (success) { + std::string fragment; + + if (multisample) + { + fragment = "deferred/blurLightMSF.glsl"; + } + else + { + fragment = "deferred/blurLightF.glsl"; + } + gDeferredBlurLightProgram.mName = "Deferred Blur Light Shader"; gDeferredBlurLightProgram.mShaderFiles.clear(); gDeferredBlurLightProgram.mShaderFiles.push_back(make_pair("deferred/blurLightV.glsl", GL_VERTEX_SHADER_ARB)); - gDeferredBlurLightProgram.mShaderFiles.push_back(make_pair("deferred/blurLightF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredBlurLightProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER_ARB)); gDeferredBlurLightProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; success = gDeferredBlurLightProgram.createShader(NULL, NULL); } @@ -1116,6 +1265,16 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() gDeferredAlphaProgram.mFeatures.hasGamma = true; gDeferredAlphaProgram.mFeatures.hasAtmospherics = true; gDeferredAlphaProgram.mFeatures.hasLighting = true; + gDeferredAlphaProgram.mFeatures.disableTextureIndex = true; //hack to disable auto-setup of texture channels + if (mVertexShaderLevel[SHADER_DEFERRED] < 1) + { + gDeferredAlphaProgram.mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits; + } + else + { //shave off some texture units for shadow maps + gDeferredAlphaProgram.mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits - 6; + } + gDeferredAlphaProgram.mShaderFiles.clear(); gDeferredAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaV.glsl", GL_VERTEX_SHADER_ARB)); gDeferredAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaF.glsl", GL_FRAGMENT_SHADER_ARB)); @@ -1123,13 +1282,27 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() success = gDeferredAlphaProgram.createShader(NULL, NULL); } + if (success) + { + gDeferredAvatarEyesProgram.mName = "Deferred Avatar Eyes Shader"; + gDeferredAvatarEyesProgram.mFeatures.calculatesAtmospherics = true; + gDeferredAvatarEyesProgram.mFeatures.hasGamma = true; + gDeferredAvatarEyesProgram.mFeatures.hasTransport = true; + gDeferredAvatarEyesProgram.mFeatures.disableTextureIndex = true; + gDeferredAvatarEyesProgram.mShaderFiles.clear(); + gDeferredAvatarEyesProgram.mShaderFiles.push_back(make_pair("deferred/avatarEyesV.glsl", GL_VERTEX_SHADER_ARB)); + gDeferredAvatarEyesProgram.mShaderFiles.push_back(make_pair("deferred/diffuseF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredAvatarEyesProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; + success = gDeferredAvatarEyesProgram.createShader(NULL, NULL); + } + if (success) { gDeferredFullbrightProgram.mName = "Deferred Fullbright Shader"; gDeferredFullbrightProgram.mFeatures.calculatesAtmospherics = true; gDeferredFullbrightProgram.mFeatures.hasGamma = true; gDeferredFullbrightProgram.mFeatures.hasTransport = true; - gDeferredFullbrightProgram.mFeatures.isFullbright = true; + gDeferredFullbrightProgram.mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits; gDeferredFullbrightProgram.mShaderFiles.clear(); gDeferredFullbrightProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightV.glsl", GL_VERTEX_SHADER_ARB)); gDeferredFullbrightProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightF.glsl", GL_FRAGMENT_SHADER_ARB)); @@ -1153,10 +1326,21 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() if (success) { + std::string fragment; + + if (multisample) + { + fragment = "deferred/softenLightMSF.glsl"; + } + else + { + fragment = "deferred/softenLightF.glsl"; + } + gDeferredSoftenProgram.mName = "Deferred Soften Shader"; gDeferredSoftenProgram.mShaderFiles.clear(); gDeferredSoftenProgram.mShaderFiles.push_back(make_pair("deferred/softenLightV.glsl", GL_VERTEX_SHADER_ARB)); - gDeferredSoftenProgram.mShaderFiles.push_back(make_pair("deferred/softenLightF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredSoftenProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER_ARB)); gDeferredSoftenProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; @@ -1230,41 +1414,106 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() gDeferredAvatarAlphaProgram.mFeatures.hasGamma = true; gDeferredAvatarAlphaProgram.mFeatures.hasAtmospherics = true; gDeferredAvatarAlphaProgram.mFeatures.hasLighting = true; + gDeferredAvatarAlphaProgram.mFeatures.disableTextureIndex = true; gDeferredAvatarAlphaProgram.mShaderFiles.clear(); gDeferredAvatarAlphaProgram.mShaderFiles.push_back(make_pair("deferred/avatarAlphaV.glsl", GL_VERTEX_SHADER_ARB)); - gDeferredAvatarAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredAvatarAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaNonIndexedF.glsl", GL_FRAGMENT_SHADER_ARB)); gDeferredAvatarAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; success = gDeferredAvatarAlphaProgram.createShader(&mAvatarAttribs, &mAvatarUniforms); } if (success) { + std::string fragment; + if (multisample) + { + fragment = "deferred/postDeferredMSF.glsl"; + } + else + { + fragment = "deferred/postDeferredF.glsl"; + } + gDeferredPostProgram.mName = "Deferred Post Shader"; gDeferredPostProgram.mShaderFiles.clear(); gDeferredPostProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredV.glsl", GL_VERTEX_SHADER_ARB)); - gDeferredPostProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredPostProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER_ARB)); gDeferredPostProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; success = gDeferredPostProgram.createShader(NULL, NULL); } if (success) { + std::string fragment; + if (multisample) + { + fragment = "deferred/postDeferredNoDoFMSF.glsl"; + } + else + { + fragment = "deferred/postDeferredNoDoFF.glsl"; + } + gDeferredPostNoDoFProgram.mName = "Deferred Post Shader"; gDeferredPostNoDoFProgram.mShaderFiles.clear(); gDeferredPostNoDoFProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredV.glsl", GL_VERTEX_SHADER_ARB)); - gDeferredPostNoDoFProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredNoDoFF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredPostNoDoFProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER_ARB)); gDeferredPostNoDoFProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; success = gDeferredPostNoDoFProgram.createShader(NULL, NULL); } + if (success) + { + gDeferredWLSkyProgram.mName = "Deferred Windlight Sky Shader"; + //gWLSkyProgram.mFeatures.hasGamma = true; + gDeferredWLSkyProgram.mShaderFiles.clear(); + gDeferredWLSkyProgram.mShaderFiles.push_back(make_pair("deferred/skyV.glsl", GL_VERTEX_SHADER_ARB)); + gDeferredWLSkyProgram.mShaderFiles.push_back(make_pair("deferred/skyF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredWLSkyProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; + gDeferredWLSkyProgram.mShaderGroup = LLGLSLShader::SG_SKY; + success = gDeferredWLSkyProgram.createShader(NULL, &mWLUniforms); + } + + if (success) + { + gDeferredWLCloudProgram.mName = "Deferred Windlight Cloud Program"; + gDeferredWLCloudProgram.mShaderFiles.clear(); + gDeferredWLCloudProgram.mShaderFiles.push_back(make_pair("deferred/cloudsV.glsl", GL_VERTEX_SHADER_ARB)); + gDeferredWLCloudProgram.mShaderFiles.push_back(make_pair("deferred/cloudsF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredWLCloudProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; + gDeferredWLCloudProgram.mShaderGroup = LLGLSLShader::SG_SKY; + success = gDeferredWLCloudProgram.createShader(NULL, &mWLUniforms); + } + + if (success) + { + gDeferredStarProgram.mName = "Deferred Star Program"; + gDeferredStarProgram.mShaderFiles.clear(); + gDeferredStarProgram.mShaderFiles.push_back(make_pair("deferred/starsV.glsl", GL_VERTEX_SHADER_ARB)); + gDeferredStarProgram.mShaderFiles.push_back(make_pair("deferred/starsF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredStarProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; + gDeferredStarProgram.mShaderGroup = LLGLSLShader::SG_SKY; + success = gDeferredStarProgram.createShader(NULL, &mWLUniforms); + } + if (mVertexShaderLevel[SHADER_DEFERRED] > 1) { if (success) { + std::string fragment; + if (multisample) + { + fragment = "deferred/edgeMSF.glsl"; + } + else + { + fragment = "deferred/edgeF.glsl"; + } + gDeferredEdgeProgram.mName = "Deferred Edge Shader"; gDeferredEdgeProgram.mShaderFiles.clear(); gDeferredEdgeProgram.mShaderFiles.push_back(make_pair("deferred/edgeV.glsl", GL_VERTEX_SHADER_ARB)); - gDeferredEdgeProgram.mShaderFiles.push_back(make_pair("deferred/edgeF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredEdgeProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER_ARB)); gDeferredEdgeProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; success = gDeferredEdgeProgram.createShader(NULL, NULL); } @@ -1272,8 +1521,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() if (mVertexShaderLevel[SHADER_DEFERRED] > 2) { - - if (success) { gDeferredPostGIProgram.mName = "Deferred Post GI Shader"; @@ -1321,7 +1568,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() BOOL LLViewerShaderMgr::loadShadersObject() { BOOL success = TRUE; - + if (mVertexShaderLevel[SHADER_OBJECT] == 0) { gObjectShinyProgram.unload(); @@ -1332,6 +1579,14 @@ BOOL LLViewerShaderMgr::loadShadersObject() gObjectSimpleWaterProgram.unload(); gObjectFullbrightProgram.unload(); gObjectFullbrightWaterProgram.unload(); + gObjectShinyNonIndexedProgram.unload(); + gObjectFullbrightShinyNonIndexedProgram.unload(); + gObjectFullbrightShinyNonIndexedWaterProgram.unload(); + gObjectShinyNonIndexedWaterProgram.unload(); + gObjectSimpleNonIndexedProgram.unload(); + gObjectSimpleNonIndexedWaterProgram.unload(); + gObjectFullbrightNonIndexedProgram.unload(); + gObjectFullbrightNonIndexedWaterProgram.unload(); gSkinnedObjectSimpleProgram.unload(); gSkinnedObjectFullbrightProgram.unload(); gSkinnedObjectFullbrightShinyProgram.unload(); @@ -1344,6 +1599,137 @@ BOOL LLViewerShaderMgr::loadShadersObject() return TRUE; } + if (success) + { + gObjectSimpleNonIndexedProgram.mName = "Non indexed Shader"; + gObjectSimpleNonIndexedProgram.mFeatures.calculatesLighting = true; + gObjectSimpleNonIndexedProgram.mFeatures.calculatesAtmospherics = true; + gObjectSimpleNonIndexedProgram.mFeatures.hasGamma = true; + gObjectSimpleNonIndexedProgram.mFeatures.hasAtmospherics = true; + gObjectSimpleNonIndexedProgram.mFeatures.hasLighting = true; + gObjectSimpleNonIndexedProgram.mFeatures.disableTextureIndex = true; + gObjectSimpleNonIndexedProgram.mShaderFiles.clear(); + gObjectSimpleNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB)); + gObjectSimpleNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/simpleF.glsl", GL_FRAGMENT_SHADER_ARB)); + gObjectSimpleNonIndexedProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; + success = gObjectSimpleNonIndexedProgram.createShader(NULL, NULL); + } + + if (success) + { + gObjectSimpleNonIndexedWaterProgram.mName = "Non indexed Water Shader"; + gObjectSimpleNonIndexedWaterProgram.mFeatures.calculatesLighting = true; + gObjectSimpleNonIndexedWaterProgram.mFeatures.calculatesAtmospherics = true; + gObjectSimpleNonIndexedWaterProgram.mFeatures.hasWaterFog = true; + gObjectSimpleNonIndexedWaterProgram.mFeatures.hasAtmospherics = true; + gObjectSimpleNonIndexedWaterProgram.mFeatures.hasLighting = true; + gObjectSimpleNonIndexedWaterProgram.mFeatures.disableTextureIndex = true; + gObjectSimpleNonIndexedWaterProgram.mShaderFiles.clear(); + gObjectSimpleNonIndexedWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB)); + gObjectSimpleNonIndexedWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); + gObjectSimpleNonIndexedWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; + gObjectSimpleNonIndexedWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; + success = gObjectSimpleNonIndexedWaterProgram.createShader(NULL, NULL); + } + + if (success) + { + gObjectFullbrightNonIndexedProgram.mName = "Non Indexed Fullbright Shader"; + gObjectFullbrightNonIndexedProgram.mFeatures.calculatesAtmospherics = true; + gObjectFullbrightNonIndexedProgram.mFeatures.hasGamma = true; + gObjectFullbrightNonIndexedProgram.mFeatures.hasTransport = true; + gObjectFullbrightNonIndexedProgram.mFeatures.isFullbright = true; + gObjectFullbrightNonIndexedProgram.mFeatures.disableTextureIndex = true; + gObjectFullbrightNonIndexedProgram.mShaderFiles.clear(); + gObjectFullbrightNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/fullbrightV.glsl", GL_VERTEX_SHADER_ARB)); + gObjectFullbrightNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/fullbrightF.glsl", GL_FRAGMENT_SHADER_ARB)); + gObjectFullbrightNonIndexedProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; + success = gObjectFullbrightNonIndexedProgram.createShader(NULL, NULL); + } + + if (success) + { + gObjectFullbrightNonIndexedWaterProgram.mName = "Non Indexed Fullbright Water Shader"; + gObjectFullbrightNonIndexedWaterProgram.mFeatures.calculatesAtmospherics = true; + gObjectFullbrightNonIndexedWaterProgram.mFeatures.isFullbright = true; + gObjectFullbrightNonIndexedWaterProgram.mFeatures.hasWaterFog = true; + gObjectFullbrightNonIndexedWaterProgram.mFeatures.hasTransport = true; + gObjectFullbrightNonIndexedWaterProgram.mFeatures.disableTextureIndex = true; + gObjectFullbrightNonIndexedWaterProgram.mShaderFiles.clear(); + gObjectFullbrightNonIndexedWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightV.glsl", GL_VERTEX_SHADER_ARB)); + gObjectFullbrightNonIndexedWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); + gObjectFullbrightNonIndexedWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; + gObjectFullbrightNonIndexedWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; + success = gObjectFullbrightNonIndexedWaterProgram.createShader(NULL, NULL); + } + + if (success) + { + gObjectShinyNonIndexedProgram.mName = "Non Indexed Shiny Shader"; + gObjectShinyNonIndexedProgram.mFeatures.calculatesAtmospherics = true; + gObjectShinyNonIndexedProgram.mFeatures.calculatesLighting = true; + gObjectShinyNonIndexedProgram.mFeatures.hasGamma = true; + gObjectShinyNonIndexedProgram.mFeatures.hasAtmospherics = true; + gObjectShinyNonIndexedProgram.mFeatures.isShiny = true; + gObjectShinyNonIndexedProgram.mFeatures.disableTextureIndex = true; + gObjectShinyNonIndexedProgram.mShaderFiles.clear(); + gObjectShinyNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/shinyV.glsl", GL_VERTEX_SHADER_ARB)); + gObjectShinyNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/shinyF.glsl", GL_FRAGMENT_SHADER_ARB)); + gObjectShinyNonIndexedProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; + success = gObjectShinyNonIndexedProgram.createShader(NULL, &mShinyUniforms); + } + + if (success) + { + gObjectShinyNonIndexedWaterProgram.mName = "Non Indexed Shiny Water Shader"; + gObjectShinyNonIndexedWaterProgram.mFeatures.calculatesAtmospherics = true; + gObjectShinyNonIndexedWaterProgram.mFeatures.calculatesLighting = true; + gObjectShinyNonIndexedWaterProgram.mFeatures.isShiny = true; + gObjectShinyNonIndexedWaterProgram.mFeatures.hasWaterFog = true; + gObjectShinyNonIndexedWaterProgram.mFeatures.hasAtmospherics = true; + gObjectShinyNonIndexedWaterProgram.mFeatures.disableTextureIndex = true; + gObjectShinyNonIndexedWaterProgram.mShaderFiles.clear(); + gObjectShinyNonIndexedWaterProgram.mShaderFiles.push_back(make_pair("objects/shinyWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); + gObjectShinyNonIndexedWaterProgram.mShaderFiles.push_back(make_pair("objects/shinyV.glsl", GL_VERTEX_SHADER_ARB)); + gObjectShinyNonIndexedWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; + gObjectShinyNonIndexedWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; + success = gObjectShinyNonIndexedWaterProgram.createShader(NULL, &mShinyUniforms); + } + + if (success) + { + gObjectFullbrightShinyNonIndexedProgram.mName = "Non Indexed Fullbright Shiny Shader"; + gObjectFullbrightShinyNonIndexedProgram.mFeatures.calculatesAtmospherics = true; + gObjectFullbrightShinyNonIndexedProgram.mFeatures.isFullbright = true; + gObjectFullbrightShinyNonIndexedProgram.mFeatures.isShiny = true; + gObjectFullbrightShinyNonIndexedProgram.mFeatures.hasGamma = true; + gObjectFullbrightShinyNonIndexedProgram.mFeatures.hasTransport = true; + gObjectFullbrightShinyNonIndexedProgram.mFeatures.disableTextureIndex = true; + gObjectFullbrightShinyNonIndexedProgram.mShaderFiles.clear(); + gObjectFullbrightShinyNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyV.glsl", GL_VERTEX_SHADER_ARB)); + gObjectFullbrightShinyNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyF.glsl", GL_FRAGMENT_SHADER_ARB)); + gObjectFullbrightShinyNonIndexedProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; + success = gObjectFullbrightShinyNonIndexedProgram.createShader(NULL, &mShinyUniforms); + } + + if (success) + { + gObjectFullbrightShinyNonIndexedWaterProgram.mName = "Non Indexed Fullbright Shiny Water Shader"; + gObjectFullbrightShinyNonIndexedWaterProgram.mFeatures.calculatesAtmospherics = true; + gObjectFullbrightShinyNonIndexedWaterProgram.mFeatures.isFullbright = true; + gObjectFullbrightShinyNonIndexedWaterProgram.mFeatures.isShiny = true; + gObjectFullbrightShinyNonIndexedWaterProgram.mFeatures.hasGamma = true; + gObjectFullbrightShinyNonIndexedWaterProgram.mFeatures.hasTransport = true; + gObjectFullbrightShinyNonIndexedWaterProgram.mFeatures.hasWaterFog = true; + gObjectFullbrightShinyNonIndexedWaterProgram.mFeatures.disableTextureIndex = true; + gObjectFullbrightShinyNonIndexedWaterProgram.mShaderFiles.clear(); + gObjectFullbrightShinyNonIndexedWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyV.glsl", GL_VERTEX_SHADER_ARB)); + gObjectFullbrightShinyNonIndexedWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); + gObjectFullbrightShinyNonIndexedWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; + gObjectFullbrightShinyNonIndexedWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; + success = gObjectFullbrightShinyNonIndexedWaterProgram.createShader(NULL, &mShinyUniforms); + } + if (success) { gObjectSimpleProgram.mName = "Simple Shader"; @@ -1352,6 +1738,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() gObjectSimpleProgram.mFeatures.hasGamma = true; gObjectSimpleProgram.mFeatures.hasAtmospherics = true; gObjectSimpleProgram.mFeatures.hasLighting = true; + gObjectSimpleProgram.mFeatures.mIndexedTextureChannels = 0; gObjectSimpleProgram.mShaderFiles.clear(); gObjectSimpleProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB)); gObjectSimpleProgram.mShaderFiles.push_back(make_pair("objects/simpleF.glsl", GL_FRAGMENT_SHADER_ARB)); @@ -1367,6 +1754,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() gObjectSimpleWaterProgram.mFeatures.hasWaterFog = true; gObjectSimpleWaterProgram.mFeatures.hasAtmospherics = true; gObjectSimpleWaterProgram.mFeatures.hasLighting = true; + gObjectSimpleWaterProgram.mFeatures.mIndexedTextureChannels = 0; gObjectSimpleWaterProgram.mShaderFiles.clear(); gObjectSimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB)); gObjectSimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); @@ -1382,6 +1770,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() gObjectFullbrightProgram.mFeatures.hasGamma = true; gObjectFullbrightProgram.mFeatures.hasTransport = true; gObjectFullbrightProgram.mFeatures.isFullbright = true; + gObjectFullbrightProgram.mFeatures.mIndexedTextureChannels = 0; gObjectFullbrightProgram.mShaderFiles.clear(); gObjectFullbrightProgram.mShaderFiles.push_back(make_pair("objects/fullbrightV.glsl", GL_VERTEX_SHADER_ARB)); gObjectFullbrightProgram.mShaderFiles.push_back(make_pair("objects/fullbrightF.glsl", GL_FRAGMENT_SHADER_ARB)); @@ -1396,6 +1785,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() gObjectFullbrightWaterProgram.mFeatures.isFullbright = true; gObjectFullbrightWaterProgram.mFeatures.hasWaterFog = true; gObjectFullbrightWaterProgram.mFeatures.hasTransport = true; + gObjectFullbrightWaterProgram.mFeatures.mIndexedTextureChannels = 0; gObjectFullbrightWaterProgram.mShaderFiles.clear(); gObjectFullbrightWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightV.glsl", GL_VERTEX_SHADER_ARB)); gObjectFullbrightWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); @@ -1412,6 +1802,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() gObjectShinyProgram.mFeatures.hasGamma = true; gObjectShinyProgram.mFeatures.hasAtmospherics = true; gObjectShinyProgram.mFeatures.isShiny = true; + gObjectShinyProgram.mFeatures.mIndexedTextureChannels = 0; gObjectShinyProgram.mShaderFiles.clear(); gObjectShinyProgram.mShaderFiles.push_back(make_pair("objects/shinyV.glsl", GL_VERTEX_SHADER_ARB)); gObjectShinyProgram.mShaderFiles.push_back(make_pair("objects/shinyF.glsl", GL_FRAGMENT_SHADER_ARB)); @@ -1427,6 +1818,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() gObjectShinyWaterProgram.mFeatures.isShiny = true; gObjectShinyWaterProgram.mFeatures.hasWaterFog = true; gObjectShinyWaterProgram.mFeatures.hasAtmospherics = true; + gObjectShinyWaterProgram.mFeatures.mIndexedTextureChannels = 0; gObjectShinyWaterProgram.mShaderFiles.clear(); gObjectShinyWaterProgram.mShaderFiles.push_back(make_pair("objects/shinyWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); gObjectShinyWaterProgram.mShaderFiles.push_back(make_pair("objects/shinyV.glsl", GL_VERTEX_SHADER_ARB)); @@ -1443,6 +1835,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() gObjectFullbrightShinyProgram.mFeatures.isShiny = true; gObjectFullbrightShinyProgram.mFeatures.hasGamma = true; gObjectFullbrightShinyProgram.mFeatures.hasTransport = true; + gObjectFullbrightShinyProgram.mFeatures.mIndexedTextureChannels = 0; gObjectFullbrightShinyProgram.mShaderFiles.clear(); gObjectFullbrightShinyProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyV.glsl", GL_VERTEX_SHADER_ARB)); gObjectFullbrightShinyProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyF.glsl", GL_FRAGMENT_SHADER_ARB)); @@ -1459,6 +1852,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() gObjectFullbrightShinyWaterProgram.mFeatures.hasGamma = true; gObjectFullbrightShinyWaterProgram.mFeatures.hasTransport = true; gObjectFullbrightShinyWaterProgram.mFeatures.hasWaterFog = true; + gObjectFullbrightShinyWaterProgram.mFeatures.mIndexedTextureChannels = 0; gObjectFullbrightShinyWaterProgram.mShaderFiles.clear(); gObjectFullbrightShinyWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyV.glsl", GL_VERTEX_SHADER_ARB)); gObjectFullbrightShinyWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); @@ -1478,6 +1872,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() gSkinnedObjectSimpleProgram.mFeatures.hasAtmospherics = true; gSkinnedObjectSimpleProgram.mFeatures.hasLighting = true; gSkinnedObjectSimpleProgram.mFeatures.hasObjectSkinning = true; + gSkinnedObjectSimpleProgram.mFeatures.disableTextureIndex = true; gSkinnedObjectSimpleProgram.mShaderFiles.clear(); gSkinnedObjectSimpleProgram.mShaderFiles.push_back(make_pair("objects/simpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); gSkinnedObjectSimpleProgram.mShaderFiles.push_back(make_pair("objects/simpleF.glsl", GL_FRAGMENT_SHADER_ARB)); @@ -1493,6 +1888,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() gSkinnedObjectFullbrightProgram.mFeatures.hasTransport = true; gSkinnedObjectFullbrightProgram.mFeatures.isFullbright = true; gSkinnedObjectFullbrightProgram.mFeatures.hasObjectSkinning = true; + gSkinnedObjectFullbrightProgram.mFeatures.disableTextureIndex = true; gSkinnedObjectFullbrightProgram.mShaderFiles.clear(); gSkinnedObjectFullbrightProgram.mShaderFiles.push_back(make_pair("objects/fullbrightSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); gSkinnedObjectFullbrightProgram.mShaderFiles.push_back(make_pair("objects/fullbrightF.glsl", GL_FRAGMENT_SHADER_ARB)); @@ -1509,6 +1905,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() gSkinnedObjectFullbrightShinyProgram.mFeatures.isShiny = true; gSkinnedObjectFullbrightShinyProgram.mFeatures.isFullbright = true; gSkinnedObjectFullbrightShinyProgram.mFeatures.hasObjectSkinning = true; + gSkinnedObjectFullbrightShinyProgram.mFeatures.disableTextureIndex = true; gSkinnedObjectFullbrightShinyProgram.mShaderFiles.clear(); gSkinnedObjectFullbrightShinyProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinySkinnedV.glsl", GL_VERTEX_SHADER_ARB)); gSkinnedObjectFullbrightShinyProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinyF.glsl", GL_FRAGMENT_SHADER_ARB)); @@ -1525,6 +1922,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() gSkinnedObjectShinySimpleProgram.mFeatures.hasAtmospherics = true; gSkinnedObjectShinySimpleProgram.mFeatures.hasObjectSkinning = true; gSkinnedObjectShinySimpleProgram.mFeatures.isShiny = true; + gSkinnedObjectShinySimpleProgram.mFeatures.disableTextureIndex = true; gSkinnedObjectShinySimpleProgram.mShaderFiles.clear(); gSkinnedObjectShinySimpleProgram.mShaderFiles.push_back(make_pair("objects/shinySimpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); gSkinnedObjectShinySimpleProgram.mShaderFiles.push_back(make_pair("objects/shinyF.glsl", GL_FRAGMENT_SHADER_ARB)); @@ -1540,9 +1938,11 @@ BOOL LLViewerShaderMgr::loadShadersObject() gSkinnedObjectSimpleWaterProgram.mFeatures.hasGamma = true; gSkinnedObjectSimpleWaterProgram.mFeatures.hasAtmospherics = true; gSkinnedObjectSimpleWaterProgram.mFeatures.hasLighting = true; + gSkinnedObjectSimpleWaterProgram.mFeatures.disableTextureIndex = true; gSkinnedObjectSimpleWaterProgram.mFeatures.hasWaterFog = true; gSkinnedObjectSimpleWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; gSkinnedObjectSimpleWaterProgram.mFeatures.hasObjectSkinning = true; + gSkinnedObjectSimpleWaterProgram.mFeatures.disableTextureIndex = true; gSkinnedObjectSimpleWaterProgram.mShaderFiles.clear(); gSkinnedObjectSimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); gSkinnedObjectSimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); @@ -1559,6 +1959,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() gSkinnedObjectFullbrightWaterProgram.mFeatures.isFullbright = true; gSkinnedObjectFullbrightWaterProgram.mFeatures.hasObjectSkinning = true; gSkinnedObjectFullbrightWaterProgram.mFeatures.hasWaterFog = true; + gSkinnedObjectFullbrightWaterProgram.mFeatures.disableTextureIndex = true; gSkinnedObjectFullbrightWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; gSkinnedObjectFullbrightWaterProgram.mShaderFiles.clear(); gSkinnedObjectFullbrightWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); @@ -1577,6 +1978,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.isFullbright = true; gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.hasObjectSkinning = true; gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.hasWaterFog = true; + gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.disableTextureIndex = true; gSkinnedObjectFullbrightShinyWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; gSkinnedObjectFullbrightShinyWaterProgram.mShaderFiles.clear(); gSkinnedObjectFullbrightShinyWaterProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinySkinnedV.glsl", GL_VERTEX_SHADER_ARB)); @@ -1595,6 +1997,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() gSkinnedObjectShinySimpleWaterProgram.mFeatures.hasObjectSkinning = true; gSkinnedObjectShinySimpleWaterProgram.mFeatures.isShiny = true; gSkinnedObjectShinySimpleWaterProgram.mFeatures.hasWaterFog = true; + gSkinnedObjectShinySimpleWaterProgram.mFeatures.disableTextureIndex = true; gSkinnedObjectShinySimpleWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; gSkinnedObjectShinySimpleWaterProgram.mShaderFiles.clear(); gSkinnedObjectShinySimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/shinySimpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); @@ -1635,6 +2038,7 @@ BOOL LLViewerShaderMgr::loadShadersAvatar() gAvatarProgram.mFeatures.hasGamma = true; gAvatarProgram.mFeatures.hasAtmospherics = true; gAvatarProgram.mFeatures.hasLighting = true; + gAvatarProgram.mFeatures.disableTextureIndex = true; gAvatarProgram.mShaderFiles.clear(); gAvatarProgram.mShaderFiles.push_back(make_pair("avatar/avatarV.glsl", GL_VERTEX_SHADER_ARB)); gAvatarProgram.mShaderFiles.push_back(make_pair("avatar/avatarF.glsl", GL_FRAGMENT_SHADER_ARB)); @@ -1650,6 +2054,7 @@ BOOL LLViewerShaderMgr::loadShadersAvatar() gAvatarWaterProgram.mFeatures.hasWaterFog = true; gAvatarWaterProgram.mFeatures.hasAtmospherics = true; gAvatarWaterProgram.mFeatures.hasLighting = true; + gAvatarWaterProgram.mFeatures.disableTextureIndex = true; gAvatarWaterProgram.mShaderFiles.clear(); gAvatarWaterProgram.mShaderFiles.push_back(make_pair("avatar/avatarV.glsl", GL_VERTEX_SHADER_ARB)); gAvatarWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleWaterF.glsl", GL_FRAGMENT_SHADER_ARB)); @@ -1670,6 +2075,7 @@ BOOL LLViewerShaderMgr::loadShadersAvatar() { gAvatarPickProgram.mName = "Avatar Pick Shader"; gAvatarPickProgram.mFeatures.hasSkinning = true; + gAvatarPickProgram.mFeatures.disableTextureIndex = true; gAvatarPickProgram.mShaderFiles.clear(); gAvatarPickProgram.mShaderFiles.push_back(make_pair("avatar/pickAvatarV.glsl", GL_VERTEX_SHADER_ARB)); gAvatarPickProgram.mShaderFiles.push_back(make_pair("avatar/pickAvatarF.glsl", GL_FRAGMENT_SHADER_ARB)); @@ -1686,6 +2092,7 @@ BOOL LLViewerShaderMgr::loadShadersAvatar() gAvatarEyeballProgram.mFeatures.hasGamma = true; gAvatarEyeballProgram.mFeatures.hasAtmospherics = true; gAvatarEyeballProgram.mFeatures.hasLighting = true; + gAvatarEyeballProgram.mFeatures.disableTextureIndex = true; gAvatarEyeballProgram.mShaderFiles.clear(); gAvatarEyeballProgram.mShaderFiles.push_back(make_pair("avatar/eyeballV.glsl", GL_VERTEX_SHADER_ARB)); gAvatarEyeballProgram.mShaderFiles.push_back(make_pair("avatar/eyeballF.glsl", GL_FRAGMENT_SHADER_ARB)); diff --git a/indra/newview/llviewershadermgr.h b/indra/newview/llviewershadermgr.h index 72ac5e02ee50d0931bfd595128732d201103f5d2..6ecba65470c8705de9424ec8cea924c306c8160d 100644 --- a/indra/newview/llviewershadermgr.h +++ b/indra/newview/llviewershadermgr.h @@ -298,16 +298,25 @@ extern LLVector4 gShinyOrigin; //object shaders extern LLGLSLShader gObjectSimpleProgram; extern LLGLSLShader gObjectSimpleWaterProgram; +extern LLGLSLShader gObjectSimpleNonIndexedProgram; +extern LLGLSLShader gObjectSimpleNonIndexedWaterProgram; extern LLGLSLShader gObjectFullbrightProgram; extern LLGLSLShader gObjectFullbrightWaterProgram; +extern LLGLSLShader gObjectFullbrightNonIndexedProgram; +extern LLGLSLShader gObjectFullbrightNonIndexedWaterProgram; extern LLGLSLShader gObjectSimpleLODProgram; extern LLGLSLShader gObjectFullbrightLODProgram; extern LLGLSLShader gObjectFullbrightShinyProgram; extern LLGLSLShader gObjectFullbrightShinyWaterProgram; +extern LLGLSLShader gObjectFullbrightShinyNonIndexedProgram; +extern LLGLSLShader gObjectFullbrightShinyNonIndexedWaterProgram; + extern LLGLSLShader gObjectShinyProgram; extern LLGLSLShader gObjectShinyWaterProgram; +extern LLGLSLShader gObjectShinyNonIndexedProgram; +extern LLGLSLShader gObjectShinyNonIndexedWaterProgram; extern LLGLSLShader gSkinnedObjectSimpleProgram; extern LLGLSLShader gSkinnedObjectFullbrightProgram; @@ -349,6 +358,7 @@ extern LLGLSLShader gDeferredImpostorProgram; extern LLGLSLShader gDeferredEdgeProgram; extern LLGLSLShader gDeferredWaterProgram; extern LLGLSLShader gDeferredDiffuseProgram; +extern LLGLSLShader gDeferredNonIndexedDiffuseProgram; extern LLGLSLShader gDeferredSkinnedDiffuseProgram; extern LLGLSLShader gDeferredSkinnedBumpProgram; extern LLGLSLShader gDeferredSkinnedAlphaProgram; @@ -373,8 +383,11 @@ extern LLGLSLShader gDeferredAvatarShadowProgram; extern LLGLSLShader gDeferredAttachmentShadowProgram; extern LLGLSLShader gDeferredAlphaProgram; extern LLGLSLShader gDeferredFullbrightProgram; +extern LLGLSLShader gDeferredAvatarEyesProgram; extern LLGLSLShader gDeferredAvatarAlphaProgram; - +extern LLGLSLShader gDeferredWLSkyProgram; +extern LLGLSLShader gDeferredWLCloudProgram; +extern LLGLSLShader gDeferredStarProgram; extern LLGLSLShader gLuminanceGatherProgram; //current avatar shader parameter pointer diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index af06421bf9db7c1d4686d739fc8df6d9879cc2c6..4da0f80a00281beff887a3fd191d8ebf6cb14942 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -1168,6 +1168,7 @@ void LLViewerFetchedTexture::init(bool firstinit) mSavedRawDiscardLevel = -1 ; mDesiredSavedRawDiscardLevel = -1 ; mLastReferencedSavedRawImageTime = 0.0f ; + mKeptSavedRawImageTime = 0.f ; mLastCallBackActiveTime = 0.f; } @@ -2696,8 +2697,16 @@ void LLViewerFetchedTexture::saveRawImage() mLastReferencedSavedRawImageTime = sCurrentTime ; } -void LLViewerFetchedTexture::forceToSaveRawImage(S32 desired_discard) +void LLViewerFetchedTexture::forceToSaveRawImage(S32 desired_discard, F32 kept_time) { + mKeptSavedRawImageTime = kept_time ; + mLastReferencedSavedRawImageTime = sCurrentTime ; + + if(mSavedRawDiscardLevel > -1 && mSavedRawDiscardLevel <= desired_discard) + { + return ; //raw imge is ready. + } + if(!mForceToSaveRawImage || mDesiredSavedRawDiscardLevel < 0 || mDesiredSavedRawDiscardLevel > desired_discard) { mForceToSaveRawImage = TRUE ; @@ -2713,11 +2722,16 @@ void LLViewerFetchedTexture::forceToSaveRawImage(S32 desired_discard) mRawImage = NULL ; mRawDiscardLevel = INVALID_DISCARD_LEVEL ; - } + } } } void LLViewerFetchedTexture::destroySavedRawImage() { + if(mLastReferencedSavedRawImageTime < mKeptSavedRawImageTime) + { + return ; //keep the saved raw image. + } + mForceToSaveRawImage = FALSE ; mSaveRawImage = FALSE ; @@ -2729,6 +2743,7 @@ void LLViewerFetchedTexture::destroySavedRawImage() mSavedRawDiscardLevel = -1 ; mDesiredSavedRawDiscardLevel = -1 ; mLastReferencedSavedRawImageTime = 0.0f ; + mKeptSavedRawImageTime = 0.f ; } LLImageRaw* LLViewerFetchedTexture::getSavedRawImage() diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index d512f8ec3abc4f03a34a20aa4fbc8e4e5f28baf7..c5b8c8923ad52bf6b4eb16b363778221ee106e07 100644 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -465,7 +465,7 @@ class LLViewerFetchedTexture : public LLViewerTexture S32 getCachedRawImageLevel() const {return mCachedRawDiscardLevel;} BOOL isCachedRawImageReady() const {return mCachedRawImageReady ;} BOOL isRawImageValid()const { return mIsRawImageValid ; } - void forceToSaveRawImage(S32 desired_discard = 0) ; + void forceToSaveRawImage(S32 desired_discard = 0, F32 kept_time = 0.f) ; /*virtual*/ void setCachedRawImage(S32 discard_level, LLImageRaw* imageraw) ; void destroySavedRawImage() ; LLImageRaw* getSavedRawImage() ; @@ -550,6 +550,7 @@ class LLViewerFetchedTexture : public LLViewerTexture S32 mSavedRawDiscardLevel; S32 mDesiredSavedRawDiscardLevel; F32 mLastReferencedSavedRawImageTime ; + F32 mKeptSavedRawImageTime ; //a small version of the copy of the raw image (<= 64 * 64) LLPointer<LLImageRaw> mCachedRawImage; diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 1ffae7ce839c13df5018a803ae5e8dcfcd805764..a1d9434d44e353af5e692fc3f8a277f37b20699e 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -281,6 +281,8 @@ void LLViewerTextureList::shutdown() mUUIDMap.clear(); mImageList.clear(); + + mInitialized = FALSE ; //prevent loading textures again. } void LLViewerTextureList::dump() @@ -328,6 +330,11 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string& LLGLenum primary_format, const LLUUID& force_id) { + if(!mInitialized) + { + return NULL ; + } + std::string full_path = gDirUtilp->findSkinnedFilename("textures", filename); if (full_path.empty()) { @@ -348,6 +355,11 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromUrl(const std::string& LLGLenum primary_format, const LLUUID& force_id) { + if(!mInitialized) + { + return NULL ; + } + // generate UUID based on hash of filename LLUUID new_id; if (force_id.notNull()) @@ -407,6 +419,11 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id, LLGLenum primary_format, LLHost request_from_host) { + if(!mInitialized) + { + return NULL ; + } + // Return the image with ID image_id // If the image is not found, creates new image and // enqueues a request for transmission diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 34d15a597e99466b91d77678c2fd7635384ebd2b..b1441cc2812341abf558e3d92395b53f0b3bfc52 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -601,7 +601,7 @@ class LLDebugText ypos += y_inc; - if (gSavedSettings.getBOOL("MeshEnabled")) + if (gMeshRepo.meshRezEnabled()) { addText(xpos, ypos, llformat("%.3f MB Mesh Data Received", LLMeshRepository::sBytesReceived/(1024.f*1024.f))); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index ec2b5a4c9800cc7ac7bd3711bc7984971d04151a..1b53348b43b46836c050c16c1caa84ddbd297253 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -56,6 +56,7 @@ #include "lleditingmotion.h" #include "llemote.h" //#include "llfirstuse.h" +#include "llfloatertools.h" #include "llheadrotmotion.h" #include "llhudeffecttrail.h" #include "llhudmanager.h" @@ -1541,7 +1542,35 @@ BOOL LLVOAvatar::lineSegmentIntersect(const LLVector3& start, const LLVector3& e return TRUE; } } + + if (isSelf()) + { + for (attachment_map_t::iterator iter = mAttachmentPoints.begin(); + iter != mAttachmentPoints.end(); + ++iter) + { + LLViewerJointAttachment* attachment = iter->second; + + for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin(); + attachment_iter != attachment->mAttachedObjects.end(); + ++attachment_iter) + { + LLViewerObject* attached_object = (*attachment_iter); + + if (attached_object && !attached_object->isDead() && attachment->getValid()) + { + LLDrawable* drawable = attached_object->mDrawable; + if (drawable->isState(LLDrawable::RIGGED)) + { //regenerate octree for rigged attachment + gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_RIGGED, TRUE); + } + } + } + } + } } + + LLVector3 position; if (mNameText.notNull() && mNameText->lineSegmentIntersect(start, end, position)) @@ -1557,6 +1586,56 @@ BOOL LLVOAvatar::lineSegmentIntersect(const LLVector3& start, const LLVector3& e return FALSE; } +LLViewerObject* LLVOAvatar::lineSegmentIntersectRiggedAttachments(const LLVector3& start, const LLVector3& end, + S32 face, + BOOL pick_transparent, + S32* face_hit, + LLVector3* intersection, + LLVector2* tex_coord, + LLVector3* normal, + LLVector3* bi_normal) +{ + if (isSelf() && !gAgent.needsRenderAvatar()) + { + return NULL; + } + + LLViewerObject* hit = NULL; + + if (lineSegmentBoundingBox(start, end)) + { + LLVector3 local_end = end; + LLVector3 local_intersection; + + for (attachment_map_t::iterator iter = mAttachmentPoints.begin(); + iter != mAttachmentPoints.end(); + ++iter) + { + LLViewerJointAttachment* attachment = iter->second; + + for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin(); + attachment_iter != attachment->mAttachedObjects.end(); + ++attachment_iter) + { + LLViewerObject* attached_object = (*attachment_iter); + + if (attached_object->lineSegmentIntersect(start, local_end, face, pick_transparent, face_hit, &local_intersection, tex_coord, normal, bi_normal)) + { + local_end = local_intersection; + if (intersection) + { + *intersection = local_intersection; + } + + hit = attached_object; + } + } + } + } + + return hit; +} + //----------------------------------------------------------------------------- // parseSkeletonFile() //----------------------------------------------------------------------------- @@ -4968,19 +5047,6 @@ void LLVOAvatar::resetSpecificJointPosition( const std::string& name ) //----------------------------------------------------------------------------- void LLVOAvatar::resetJointPositionsToDefault( void ) { - const LLVector3& avPos = getCharacterPosition(); - - //Reposition the pelvis - LLJoint* pPelvis = mRoot.findJoint("mPelvis"); - if ( pPelvis ) - { - pPelvis->setPosition( avPos + pPelvis->getPosition() ); - } - else - { - llwarns<<"Can't get pelvis joint."<<llendl; - return; - } //Subsequent joints are relative to pelvis for( S32 i = 0; i < (S32)mNumJoints; ++i ) @@ -4991,7 +5057,7 @@ void LLVOAvatar::resetJointPositionsToDefault( void ) pJoint->setId( LLUUID::null ); //restore joints to default positions, however skip over the pelvis - if ( pJoint && pPelvis != pJoint ) + if ( pJoint ) { pJoint->restoreOldXform(); } @@ -6017,7 +6083,7 @@ void LLVOAvatar::cleanupAttachedMesh( LLViewerObject* pVO ) LLVOVolume* pVObj = pVO->mDrawable->getVOVolume(); if ( pVObj ) { - const LLMeshSkinInfo* pSkinData = gMeshRepo.getSkinInfo( pVObj->getVolume()->getParams().getSculptID() ); + const LLMeshSkinInfo* pSkinData = gMeshRepo.getSkinInfo( pVObj->getVolume()->getParams().getSculptID(), pVObj ); if ( pSkinData ) { const int jointCnt = pSkinData->mJointNames.size(); @@ -6028,6 +6094,14 @@ void LLVOAvatar::cleanupAttachedMesh( LLViewerObject* pVO ) if ( bindCnt > 0 ) { LLVOAvatar::resetJointPositionsToDefault(); + //Need to handle the repositioning of the cam, updating rig data etc during outfit editing + //This handles the case where we detach a replacement rig. + if ( gAgentCamera.cameraCustomizeAvatar() ) + { + gAgent.unpauseAnimation(); + //Still want to refocus on head bone + gAgentCamera.changeCameraToCustomizeAvatar(); + } } } } diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 295799fd247bf95a2c86f3bb999484ce2be9d799..03c0498a2ac94c5147e7dc89570b56e6ae9b3eae 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -145,6 +145,14 @@ class LLVOAvatar : LLVector2* tex_coord = NULL, // return the texture coordinates of the intersection point LLVector3* normal = NULL, // return the surface normal at the intersection point LLVector3* bi_normal = NULL); // return the surface bi-normal at the intersection point + LLViewerObject* lineSegmentIntersectRiggedAttachments(const LLVector3& start, const LLVector3& end, + S32 face = -1, // which face to check, -1 = ALL_SIDES + BOOL pick_transparent = FALSE, + S32* face_hit = NULL, // which face was hit + LLVector3* intersection = NULL, // return the intersection point + LLVector2* tex_coord = NULL, // return the texture coordinates of the intersection point + LLVector3* normal = NULL, // return the surface normal at the intersection point + LLVector3* bi_normal = NULL); // return the surface bi-normal at the intersection point //-------------------------------------------------------------------- // LLCharacter interface and related diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp index bbb19a63f1413f5f33deb5d0a7fb9921447e4359..f0b5b50febbe2aecca2c36d3f5a587a806d5b330 100644 --- a/indra/newview/llvocache.cpp +++ b/indra/newview/llvocache.cpp @@ -137,10 +137,6 @@ LLVOCacheEntry::LLVOCacheEntry(LLAPRFile* apr_file) LLVOCacheEntry::~LLVOCacheEntry() { - if(mBuffer != mDP.getBuffer()) - { - delete[] mBuffer ; //just in case - } mDP.freeBuffer(); } diff --git a/indra/newview/llvoclouds.cpp b/indra/newview/llvoclouds.cpp index 78aa6e6ab8a5fa6b4365a5a7b96f98b5a67e9cb5..478708cd7832f522ee4f027e297470f8343e4bd2 100644 --- a/indra/newview/llvoclouds.cpp +++ b/indra/newview/llvoclouds.cpp @@ -244,9 +244,13 @@ void LLVOClouds::getGeometry(S32 te, vtx[2] = puff_pos_agent + right + up; vtx[3] = puff_pos_agent + right - up; + verticesp->mV[3] = 0.f; *verticesp++ = vtx[0]; + verticesp->mV[3] = 0.f; *verticesp++ = vtx[1]; + verticesp->mV[3] = 0.f; *verticesp++ = vtx[2]; + verticesp->mV[3] = 0.f; *verticesp++ = vtx[3]; *texcoordsp++ = uvs[0]; diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp index 6f354b78b1e1fa953e105dc98fd1e6330cd9e3d7..a4b0910c926c0abb839fcc7f4d097e43077cfccf 100644 --- a/indra/newview/llvopartgroup.cpp +++ b/indra/newview/llvopartgroup.cpp @@ -324,10 +324,18 @@ void LLVOPartGroup::getGeometry(S32 idx, LLVector3 normal = -LLViewerCamera::getInstance()->getXAxis(); - + + //HACK -- the verticesp->mV[3] = 0.f here are to set the texture index to 0 (particles don't use texture batching, maybe they should) + // this works because there is actually a 4th float stored after the vertex position which is used as a texture index + // also, somebody please VECTORIZE THIS + + verticesp->mV[3] = 0.f; *verticesp++ = part_pos_agent + up - right; + verticesp->mV[3] = 0.f; *verticesp++ = part_pos_agent - up - right; + verticesp->mV[3] = 0.f; *verticesp++ = part_pos_agent + up + right; + verticesp->mV[3] = 0.f; *verticesp++ = part_pos_agent - up + right; *colorsp++ = part.mColor; @@ -360,7 +368,7 @@ U32 LLVOPartGroup::getPartitionType() const } LLParticlePartition::LLParticlePartition() -: LLSpatialPartition(LLDrawPoolAlpha::VERTEX_DATA_MASK, TRUE, GL_STREAM_DRAW_ARB) +: LLSpatialPartition(LLDrawPoolAlpha::VERTEX_DATA_MASK | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, GL_STREAM_DRAW_ARB) { mRenderPass = LLRenderPass::PASS_ALPHA; mDrawableType = LLPipeline::RENDER_TYPE_PARTICLES; @@ -418,6 +426,7 @@ void LLParticlePartition::addGeometryCount(LLSpatialGroup* group, U32& vertex_co mFaceList.push_back(facep); vertex_count += facep->getGeomCount(); index_count += facep->getIndicesCount(); + llassert(facep->getIndicesCount() < 65536); } obj->mDepth /= count; diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index 6396bc042dba7fc9f4b01559b83adfb9fc25ae99..800af26b698c966f71926005ac293673a62f64fe 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -1483,6 +1483,8 @@ BOOL LLVOSky::updateHeavenlyBodyGeometry(LLDrawable *drawable, const S32 f, cons facep->setVertexBuffer(buff); } + llassert(facep->getVertexBuffer()->getNumIndices() == 6); + index_offset = facep->getGeometry(verticesp,normalsp,texCoordsp, indicesp); if (-1 == index_offset) diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp index dbcd4f50cadf6549509afcd1aee89ee4dd79601d..510525259f4c9a6f64fee619aafb1785880adf12 100644 --- a/indra/newview/llvosurfacepatch.cpp +++ b/indra/newview/llvosurfacepatch.cpp @@ -375,6 +375,8 @@ void LLVOSurfacePatch::updateMainGeometry(LLFace *facep, S32 num_vertices, num_indices; U32 index; + llassert(mLastStride > 0); + render_stride = mLastStride; patch_size = mPatchp->getSurface()->getGridsPerPatchEdge(); S32 vert_size = patch_size / render_stride; diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index 8946d4e0b60c2f0f0ba91aa1a827ff5b573f712e..3c7fe708e61e5537d342c72f269567777e426914 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -980,11 +980,6 @@ void LLVOTree::appendMesh(LLStrider<LLVector3>& vertices, for (S32 i = 0; i < index_count; i++) { U16 index = index_offset + i; - if (idx[index] >= vert_start + vert_count || - idx[index] < vert_start) - { - llerrs << "WTF?" << llendl; - } *indices++ = idx[index]-vert_start+cur_idx; } diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index e9a8c9b80aab16c5feccf7f1834cb8fd97b0d68b..c5e2c56e4b298a8de20d4a09a0c0f525c33160de 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -73,6 +73,7 @@ #include "llagent.h" #include "llviewermediafocus.h" #include "lldatapacker.h" +#include "llviewershadermgr.h" #include "llvoavatar.h" #include "llvocache.h" @@ -1095,8 +1096,6 @@ void LLVOVolume::updateSculptTexture() } - - void LLVOVolume::notifyMeshLoaded() { mSculptChanged = TRUE; @@ -1222,7 +1221,7 @@ BOOL LLVOVolume::calcLOD() } //hold onto unmodified distance for debugging - F32 debug_distance = distance; + //F32 debug_distance = distance; distance *= sDistanceFactor; @@ -1245,7 +1244,9 @@ BOOL LLVOVolume::calcLOD() if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_LOD_INFO)) { - setDebugText(llformat("%.2f:%.2f, %d", debug_distance, radius, cur_detail)); + //setDebugText(llformat("%.2f:%.2f, %d", debug_distance, radius, cur_detail)); + + setDebugText(llformat("%d", mDrawable->getFace(0)->getTextureIndex())); } if (cur_detail != mLOD) @@ -1274,6 +1275,15 @@ BOOL LLVOVolume::updateLOD() gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, FALSE); mLODChanged = TRUE; } + else + { + F32 new_radius = getBinRadius(); + F32 old_radius = mDrawable->getBinRadius(); + if (new_radius < old_radius * 0.9f || new_radius > old_radius*1.1f) + { + gPipeline.markPartitionMove(mDrawable); + } + } lod_changed = lod_changed || LLViewerObject::updateLOD(); @@ -3086,16 +3096,28 @@ U32 LLVOVolume::getRenderCost(std::set<LLUUID> &textures) const F32 LLVOVolume::getStreamingCost(S32* bytes, S32* visible_bytes) { + F32 radius = getScale().length(); + if (isMesh()) { LLSD& header = gMeshRepo.getMeshHeader(getVolume()->getParams().getSculptID()); - F32 radius = getScale().length(); - return LLMeshRepository::getStreamingCost(header, radius, bytes, visible_bytes, mLOD); } - - return 0.f; + else + { + LLVolume* volume = getVolume(); + S32 counts[4]; + LLVolume::getLoDTriangleCounts(volume->getParams(), counts); + + LLSD header; + header["lowest_lod"]["size"] = counts[0] * 10; + header["low_lod"]["size"] = counts[1] * 10; + header["medium_lod"]["size"] = counts[2] * 10; + header["high_lod"]["size"] = counts[3] * 10; + + return LLMeshRepository::getStreamingCost(header, radius); + } } U32 LLVOVolume::getTriangleCount() @@ -3187,6 +3209,10 @@ F32 LLVOVolume::getBinRadius() F32 scale = 1.f; + S32 size_factor = llmax(gSavedSettings.getS32("OctreeStaticObjectSizeFactor"), 1); + S32 attachment_size_factor = llmax(gSavedSettings.getS32("OctreeAttachmentSizeFactor"), 1); + LLVector3 distance_factor = gSavedSettings.getVector3("OctreeDistanceFactor"); + LLVector3 alpha_distance_factor = gSavedSettings.getVector3("OctreeAlphaDistanceFactor"); const LLVector4a* ext = mDrawable->getSpatialExtents(); BOOL shrink_wrap = mDrawable->isAnimating(); @@ -3216,6 +3242,8 @@ F32 LLVOVolume::getBinRadius() radius = llmin(bounds.mV[1], bounds.mV[2]); radius = llmin(radius, bounds.mV[0]); radius *= 0.5f; + radius *= 1.f+mDrawable->mDistanceWRTCamera*alpha_distance_factor[1]; + radius += mDrawable->mDistanceWRTCamera*alpha_distance_factor[0]; } else if (shrink_wrap) { @@ -3226,24 +3254,19 @@ F32 LLVOVolume::getBinRadius() } else if (mDrawable->isStatic()) { - /*if (mDrawable->getRadius() < 2.0f) - { - radius = 16.f; - } - else - { - radius = llmax(mDrawable->getRadius(), 32.f); - }*/ - - radius = (((S32) mDrawable->getRadius())/2+1)*8; + radius = llmax((S32) mDrawable->getRadius(), 1)*size_factor; + radius *= 1.f + mDrawable->mDistanceWRTCamera * distance_factor[1]; + radius += mDrawable->mDistanceWRTCamera * distance_factor[0]; } else if (mDrawable->getVObj()->isAttachment()) { - radius = (((S32) (mDrawable->getRadius()*4)+1))*2; + radius = llmax((S32) mDrawable->getRadius(),1)*attachment_size_factor; } else { - radius = 8.f; + radius = mDrawable->getRadius(); + radius *= 1.f + mDrawable->mDistanceWRTCamera * distance_factor[1]; + radius += mDrawable->mDistanceWRTCamera * distance_factor[0]; } return llclamp(radius*scale, 0.5f, 256.f); @@ -3342,7 +3365,8 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e { if (LLFloater::isVisible(gFloaterTools) && getAvatar()->isSelf()) { - gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_RIGGED, TRUE); + updateRiggedVolume(); + genBBoxes(FALSE); volume = mRiggedVolume; transform = false; } @@ -3521,7 +3545,7 @@ void LLVOVolume::updateRiggedVolume() LLVolume* volume = getVolume(); - const LLMeshSkinInfo* skin = gMeshRepo.getSkinInfo(volume->getParams().getSculptID()); + const LLMeshSkinInfo* skin = gMeshRepo.getSkinInfo(volume->getParams().getSculptID(), this); if (!skin) { @@ -3712,6 +3736,21 @@ LLVolumeBridge::LLVolumeBridge(LLDrawable* drawablep) mSlopRatio = 0.25f; } +bool can_batch_texture(LLFace* facep) +{ + if (facep->getTextureEntry()->getBumpmap()) + { //bump maps aren't worked into texture batching yet + return false; + } + + if (facep->isState(LLFace::TEXTURE_ANIM) && facep->getVirtualSize() > MIN_TEX_ANIM_SIZE) + { //texture animation breaks batches + return false; + } + + return true; +} + void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep, U32 type) { LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); @@ -3762,12 +3801,36 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep, LLViewerTexture* tex = facep->getTexture(); + U8 index = facep->getTextureIndex(); + + bool batchable = false; + + if (index < 255 && idx >= 0) + { + if (index < draw_vec[idx]->mTextureList.size()) + { + if (draw_vec[idx]->mTextureList[index].isNull()) + { + batchable = true; + draw_vec[idx]->mTextureList[index] = tex; + } + else if (draw_vec[idx]->mTextureList[index] == tex) + { //this face's texture index can be used with this batch + batchable = true; + } + } + else + { //texture list can be expanded to fit this texture index + batchable = true; + } + } + U8 glow = (U8) (facep->getTextureEntry()->getGlow() * 255); if (idx >= 0 && draw_vec[idx]->mVertexBuffer == facep->getVertexBuffer() && draw_vec[idx]->mEnd == facep->getGeomIndex()-1 && - (LLPipeline::sTextureBindTest || draw_vec[idx]->mTexture == tex) && + (LLPipeline::sTextureBindTest || draw_vec[idx]->mTexture == tex || batchable) && #if LL_DARWIN draw_vec[idx]->mEnd - draw_vec[idx]->mStart + facep->getGeomCount() <= (U32) gGLManager.mGLMaxVertexRange && draw_vec[idx]->mCount + facep->getIndicesCount() <= (U32) gGLManager.mGLMaxIndexRange && @@ -3781,6 +3844,12 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep, draw_vec[idx]->mCount += facep->getIndicesCount(); draw_vec[idx]->mEnd += facep->getGeomCount(); draw_vec[idx]->mVSize = llmax(draw_vec[idx]->mVSize, facep->getVirtualSize()); + + if (index >= draw_vec[idx]->mTextureList.size()) + { + draw_vec[idx]->mTextureList.resize(index+1); + draw_vec[idx]->mTextureList[index] = tex; + } draw_vec[idx]->validate(); update_min_max(draw_vec[idx]->mExtents[0], draw_vec[idx]->mExtents[1], facep->mExtents[0]); update_min_max(draw_vec[idx]->mExtents[0], draw_vec[idx]->mExtents[1], facep->mExtents[1]); @@ -3811,6 +3880,11 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep, draw_info->mDrawMode = LLRender::TRIANGLE_STRIP; } + if (index < 255) + { //initialize texture list for texture batching + draw_info->mTextureList.resize(index+1); + draw_info->mTextureList[index] = tex; + } draw_info->validate(); } } @@ -3910,7 +3984,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) LLVOVolume* vobj = drawablep->getVOVolume(); - if (vobj->getVolume() && vobj->getVolume()->isTetrahedron()) + if (vobj->getVolume() && vobj->getVolume()->isTetrahedron() || (vobj->isMesh() && !gMeshRepo.meshRezEnabled())) { continue; } @@ -3923,7 +3997,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) bool rigged = vobj->isAttachment() && vobj->isMesh() && - gMeshRepo.getSkinInfo(vobj->getVolume()->getParams().getSculptID()); + gMeshRepo.getSkinInfo(vobj->getVolume()->getParams().getSculptID(), vobj); bool bake_sunlight = LLPipeline::sBakeSunlight && drawablep->isStatic(); @@ -3965,7 +4039,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) if ( pAvatarVO ) { LLUUID currentId = vobj->getVolume()->getParams().getSculptID(); - const LLMeshSkinInfo* pSkinData = gMeshRepo.getSkinInfo( currentId ); + const LLMeshSkinInfo* pSkinData = gMeshRepo.getSkinInfo( currentId, vobj ); if ( pSkinData ) { @@ -4233,15 +4307,24 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) U32 bump_mask = LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_TEXCOORD1 | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_COLOR; U32 fullbright_mask = LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_COLOR; - if (LLPipeline::sRenderDeferred) + bool batch_textures = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_OBJECT) > 1; + + if (batch_textures) { bump_mask |= LLVertexBuffer::MAP_BINORMAL; + genDrawInfo(group, simple_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, simple_faces, FALSE, TRUE); + genDrawInfo(group, fullbright_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, fullbright_faces, FALSE, TRUE); + genDrawInfo(group, bump_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, bump_faces, FALSE, TRUE); + genDrawInfo(group, alpha_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, alpha_faces, TRUE, TRUE); + } + else + { + genDrawInfo(group, simple_mask, simple_faces); + genDrawInfo(group, fullbright_mask, fullbright_faces); + genDrawInfo(group, bump_mask, bump_faces, FALSE, TRUE); + genDrawInfo(group, alpha_mask, alpha_faces, TRUE); } - genDrawInfo(group, simple_mask, simple_faces); - genDrawInfo(group, bump_mask, bump_faces); - genDrawInfo(group, fullbright_mask, fullbright_faces); - genDrawInfo(group, alpha_mask, alpha_faces, TRUE); if (!LLPipeline::sDelayVBUpdate) { @@ -4297,11 +4380,6 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group) face->getGeometryVolume(*volume, face->getTEOffset(), vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), face->getGeomIndex()); } - - if (!face) - { - llerrs << "WTF?" << llendl; - } } drawablep->clearState(LLDrawable::REBUILD_ALL); @@ -4356,13 +4434,37 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group) group->clearState(LLSpatialGroup::MESH_DIRTY | LLSpatialGroup::NEW_DRAWINFO); } - if (group && group->isState(LLSpatialGroup::NEW_DRAWINFO)) + llassert(!group || !group->isState(LLSpatialGroup::NEW_DRAWINFO)); +} + +struct CompareBatchBreakerModified +{ + bool operator()(const LLFace* const& lhs, const LLFace* const& rhs) { - llerrs << "WTF?" << llendl; + const LLTextureEntry* lte = lhs->getTextureEntry(); + const LLTextureEntry* rte = rhs->getTextureEntry(); + + if (lte->getBumpmap() != rte->getBumpmap()) + { + return lte->getBumpmap() < rte->getBumpmap(); + } + else if (lte->getFullbright() != rte->getFullbright()) + { + return lte->getFullbright() < rte->getFullbright(); + } + else if (lte->getGlow() != rte->getGlow()) + { + return lte->getGlow() < rte->getGlow(); + } + else + { + return lhs->getTexture() < rhs->getTexture(); + } + } -} +}; -void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::vector<LLFace*>& faces, BOOL distance_sort) +void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::vector<LLFace*>& faces, BOOL distance_sort, BOOL batch_textures) { //calculate maximum number of vertices to store in a single buffer U32 max_vertices = (gSavedSettings.getS32("RenderMaxVBOSize")*1024)/LLVertexBuffer::calcVertexSize(group->mSpatialPartition->mVertexDataMask); @@ -4371,7 +4473,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: if (!distance_sort) { //sort faces by things that break batches - std::sort(faces.begin(), faces.end(), LLFace::CompareBatchBreaker()); + std::sort(faces.begin(), faces.end(), CompareBatchBreakerModified()); } else { @@ -4391,6 +4493,16 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: buffer_index = -1; } + S32 texture_index_channels = gGLManager.mNumTextureImageUnits-1; //always reserve one for shiny for now just for simplicity + + if (LLPipeline::sRenderDeferred && distance_sort) + { + texture_index_channels = gDeferredAlphaProgram.mFeatures.mIndexedTextureChannels; + } + + texture_index_channels = llmin(texture_index_channels, (S32) gSavedSettings.getU32("RenderMaxTextureIndex")); + + while (face_iter != faces.end()) { //pull off next face @@ -4421,24 +4533,101 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: std::vector<LLFace*>::iterator i = face_iter; ++i; - while (i != faces.end() && - (LLPipeline::sTextureBindTest || (distance_sort || (*i)->getTexture() == tex))) + std::vector<LLViewerTexture*> texture_list; + + if (batch_textures) { - facep = *i; - - if (geom_count + facep->getGeomCount() > max_vertices) - { //cut batches on geom count too big - break; + U8 cur_tex = 0; + facep->setTextureIndex(cur_tex); + texture_list.push_back(tex); + + //if (can_batch_texture(facep)) + { + while (i != faces.end()) + { + facep = *i; + if (facep->getTexture() != tex) + { + if (distance_sort) + { //textures might be out of order, see if texture exists in current batch + bool found = false; + for (U32 tex_idx = 0; tex_idx < texture_list.size(); ++tex_idx) + { + if (facep->getTexture() == texture_list[tex_idx]) + { + cur_tex = tex_idx; + found = true; + break; + } + } + + if (!found) + { + cur_tex = texture_list.size(); + } + } + else + { + cur_tex++; + } + + if (!can_batch_texture(facep)) + { //face is bump mapped or has an animated texture matrix -- can't + //batch more than 1 texture at a time + break; + } + + if (cur_tex >= texture_index_channels) + { //cut batches when index channels are depleted + break; + } + + tex = facep->getTexture(); + + texture_list.push_back(tex); + } + + if (geom_count + facep->getGeomCount() > max_vertices) + { //cut batches on geom count too big + break; + } + + ++i; + index_count += facep->getIndicesCount(); + geom_count += facep->getGeomCount(); + + facep->setTextureIndex(cur_tex); + } } - ++i; - index_count += facep->getIndicesCount(); - geom_count += facep->getGeomCount(); + tex = texture_list[0]; + } + else + { + while (i != faces.end() && + (LLPipeline::sTextureBindTest || (distance_sort || (*i)->getTexture() == tex))) + { + facep = *i; + + + //face has no texture index + facep->mDrawInfo = NULL; + facep->setTextureIndex(255); + + if (geom_count + facep->getGeomCount() > max_vertices) + { //cut batches on geom count too big + break; + } + + ++i; + index_count += facep->getIndicesCount(); + geom_count += facep->getGeomCount(); + } } //create/delete/resize vertex buffer if needed LLVertexBuffer* buffer = NULL; - LLSpatialGroup::buffer_texture_map_t::iterator found_iter = group->mBufferMap[mask].find(tex); + LLSpatialGroup::buffer_texture_map_t::iterator found_iter = group->mBufferMap[mask].find(*face_iter); if (found_iter != group->mBufferMap[mask].end()) { @@ -4469,7 +4658,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: } } - buffer_map[mask][tex].push_back(buffer); + buffer_map[mask][*face_iter].push_back(buffer); //add face geometry @@ -4483,6 +4672,11 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: facep->setGeomIndex(index_offset); facep->setVertexBuffer(buffer); + if (batch_textures && facep->getTextureIndex() == 255) + { + llerrs << "Invalid texture index." << llendl; + } + { //for debugging, set last time face was updated vs moved facep->updateRebuildFlags(); @@ -4495,12 +4689,8 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: U32 te_idx = facep->getTEOffset(); - if (facep->getGeometryVolume(*volume, te_idx, - vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), index_offset)) - { - buffer->markDirty(facep->getGeomIndex(), facep->getGeomCount(), - facep->getIndicesStart(), facep->getIndicesCount()); - } + facep->getGeometryVolume(*volume, te_idx, + vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), index_offset); } } @@ -4681,7 +4871,7 @@ void LLGeometryManager::addGeometryCount(LLSpatialGroup* group, U32 &vertex_coun { vertex_count += facep->getGeomCount(); index_count += facep->getIndicesCount(); - + llassert(facep->getIndicesCount() < 65536); //remember face (for sorting) mFaceList.push_back(facep); } diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 845a87b8cff49fa020a6f7bcc00f14183c293b0d..e74bf2a6203d46a7ab7470744806d761902e2d47 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -392,6 +392,7 @@ void LLPipeline::init() { LLMemType mt(LLMemType::MTYPE_PIPELINE_INIT); + gOctreeMaxCapacity = gSavedSettings.getU32("OctreeMaxNodeCapacity"); sDynamicLOD = gSavedSettings.getBOOL("RenderDynamicLOD"); sRenderBump = gSavedSettings.getBOOL("RenderObjectBump"); sUseTriStrips = gSavedSettings.getBOOL("RenderUseTriStrips"); @@ -580,11 +581,6 @@ void LLPipeline::allocatePhysicsBuffer() if (mPhysicsDisplay.getWidth() != resX || mPhysicsDisplay.getHeight() != resY) { mPhysicsDisplay.allocate(resX, resY, GL_RGBA, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); - if (mSampleBuffer.getWidth() == mPhysicsDisplay.getWidth() && - mSampleBuffer.getHeight() == mPhysicsDisplay.getHeight()) - { - mPhysicsDisplay.setSampleBuffer(&mSampleBuffer); - } } } @@ -594,8 +590,9 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) mScreenWidth = resX; mScreenHeight = resY; - //never use more than 4 samples for render targets - U32 samples = llmin(gSavedSettings.getU32("RenderFSAASamples"), (U32) 4); + //cap samples at 4 for render targets to avoid out of memory errors + U32 samples = gGLManager.getNumFBOFSAASamples(gSavedSettings.getU32("RenderFSAASamples")); + if (gGLManager.mIsATI) { //disable multisampling of render targets where ATI is involved samples = 0; @@ -621,11 +618,11 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) bool gi = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_DEFERRED); //allocate deferred rendering color buffers - mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE); - mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); + mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples); + mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples); 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, samples); #if LL_DARWIN // As of OS X 10.6.7, Apple doesn't support multiple color formats in a single FBO @@ -636,7 +633,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) if (shadow_detail > 0 || ssao) { //only need mDeferredLight[0] for shadows OR ssao - mDeferredLight[0].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); + mDeferredLight[0].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); } else { @@ -645,7 +642,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) if (ssao) { //only need mDeferredLight[1] for ssao - mDeferredLight[1].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); + mDeferredLight[1].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, false); } else { @@ -654,7 +651,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) if (gi) { //only need mDeferredLight[2] and mGIMapPost for gi - mDeferredLight[2].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); + mDeferredLight[2].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, false); for (U32 i = 0; i < 2; i++) { #if LL_DARWIN @@ -744,35 +741,9 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) mScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE); } - if (LLRenderTarget::sUseFBO && samples > 1) - { - mSampleBuffer.allocate(resX,resY,GL_RGBA,TRUE,TRUE,LLTexUnit::TT_RECT_TEXTURE,FALSE,samples); - if (LLPipeline::sRenderDeferred) - { - addDeferredAttachments(mSampleBuffer); - mDeferredScreen.setSampleBuffer(&mSampleBuffer); - mEdgeMap.setSampleBuffer(&mSampleBuffer); - } - - mScreen.setSampleBuffer(&mSampleBuffer); - - stop_glerror(); - } - else - { - mSampleBuffer.release(); - } - if (LLPipeline::sRenderDeferred) { //share depth buffer between deferred targets mDeferredScreen.shareDepthBuffer(mScreen); - for (U32 i = 0; i < 3; i++) - { //share stencil buffer with screen space lightmap to stencil out sky - if (mDeferredLight[i].getTexture(0)) - { - mDeferredScreen.shareDepthBuffer(mDeferredLight[i]); - } - } } gGL.getTexUnit(0)->disable(); @@ -802,16 +773,7 @@ void LLPipeline::updateRenderDeferred() //static void LLPipeline::refreshRenderDeferred() { - if(gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_PHYSICS_SHAPES)) - { - //turn the deferred rendering and glow off when draw physics shapes. - sRenderDeferred = FALSE ; - sRenderGlow = FALSE ; - } - else - { - updateRenderDeferred() ; - } + updateRenderDeferred(); } void LLPipeline::releaseGLBuffers() @@ -841,7 +803,6 @@ void LLPipeline::releaseGLBuffers() mScreen.release(); mPhysicsDisplay.release(); mUIScreen.release(); - mSampleBuffer.release(); mDeferredScreen.release(); mDeferredDepth.release(); for (U32 i = 0; i < 3; i++) @@ -2550,6 +2511,32 @@ void LLPipeline::markGLRebuild(LLGLUpdate* glu) } } +void LLPipeline::markPartitionMove(LLDrawable* drawable) +{ + if (!drawable->isState(LLDrawable::PARTITION_MOVE) && + !drawable->getPositionGroup().equals3(LLVector4a::getZero())) + { + drawable->setState(LLDrawable::PARTITION_MOVE); + mPartitionQ.push_back(drawable); + } +} + +void LLPipeline::processPartitionQ() +{ + for (LLDrawable::drawable_list_t::iterator iter = mPartitionQ.begin(); iter != mPartitionQ.end(); ++iter) + { + LLDrawable* drawable = *iter; + if (!drawable->isDead()) + { + drawable->updateBinRadius(); + drawable->movePartition(); + } + drawable->clearState(LLDrawable::PARTITION_MOVE); + } + + mPartitionQ.clear(); +} + void LLPipeline::markRebuild(LLSpatialGroup* group, BOOL priority) { LLMemType mt(LLMemType::MTYPE_PIPELINE); @@ -3610,7 +3597,7 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) if (gDebugGL) { check_stack_depth(stack_depth); - std::string msg = llformat("%s pass %d", gPoolNames[cur_type].c_str(), i); + std::string msg = llformat("pass %d", i); LLGLState::checkStates(msg); LLGLState::checkTextureChannels(msg); LLGLState::checkClientArrays(msg); @@ -4085,6 +4072,37 @@ void LLPipeline::renderDebug() bool hud_only = hasRenderType(LLPipeline::RENDER_TYPE_HUD); + if (!hud_only && !mDebugBlips.empty()) + { //render debug blips + glPointSize(8.f); + LLGLDepthTest depth(GL_TRUE, GL_TRUE, GL_ALWAYS); + + gGL.begin(LLRender::POINTS); + for (std::list<DebugBlip>::iterator iter = mDebugBlips.begin(); iter != mDebugBlips.end(); ) + { + DebugBlip& blip = *iter; + + blip.mAge += gFrameIntervalSeconds; + if (blip.mAge > 2.f) + { + mDebugBlips.erase(iter++); + } + else + { + iter++; + } + + blip.mPosition.mV[2] += gFrameIntervalSeconds*2.f; + + gGL.color4fv(blip.mColor.mV); + gGL.vertex3fv(blip.mPosition.mV); + } + gGL.end(); + gGL.flush(); + glPointSize(1.f); + } + + // Debug stuff. for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); iter != LLWorld::getInstance()->getRegionList().end(); ++iter) @@ -5919,7 +5937,6 @@ LLSpatialPartition* LLPipeline::getSpatialPartition(LLViewerObject* vobj) return NULL; } - void LLPipeline::resetVertexBuffers(LLDrawable* drawable) { if (!drawable || drawable->isDead()) @@ -6065,7 +6082,8 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) { LLMemType mt_ru(LLMemType::MTYPE_PIPELINE_RENDER_BLOOM); if (!(gPipeline.canUseVertexShaders() && - sRenderGlow)) + sRenderGlow) || + (!sRenderDeferred && hasRenderDebugMask(LLPipeline::RENDER_DEBUG_PHYSICS_SHAPES))) { return; } @@ -6111,67 +6129,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) gGL.setColorMask(true, true); glClearColor(0,0,0,0); - - /*if (for_snapshot) - { - gGL.getTexUnit(0)->bind(&mGlow[1]); - { - //LLGLEnable stencil(GL_STENCIL_TEST); - //glStencilFunc(GL_NOTEQUAL, 255, 0xFFFFFFFF); - //glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - //LLGLDisable blend(GL_BLEND); - - // If the snapshot is constructed from tiles, calculate which - // tile we're in. - - //from LLViewerCamera::setPerpsective - if (zoom_factor > 1.f) - { - int pos_y = subfield / llceil(zoom_factor); - int pos_x = subfield - (pos_y*llceil(zoom_factor)); - F32 size = 1.f/zoom_factor; - - tc1.set(pos_x*size, pos_y*size); - tc2 = tc1 + LLVector2(size,size); - } - else - { - tc2.set(1,1); - } - - LLGLEnable blend(GL_BLEND); - gGL.setSceneBlendType(LLRender::BT_ADD); - - - gGL.begin(LLRender::TRIANGLE_STRIP); - gGL.color4f(1,1,1,1); - gGL.texCoord2f(tc1.mV[0], tc1.mV[1]); - gGL.vertex2f(-1,-1); - - gGL.texCoord2f(tc1.mV[0], tc2.mV[1]); - gGL.vertex2f(-1,1); - - gGL.texCoord2f(tc2.mV[0], tc1.mV[1]); - gGL.vertex2f(1,-1); - - gGL.texCoord2f(tc2.mV[0], tc2.mV[1]); - gGL.vertex2f(1,1); - - gGL.end(); - - gGL.flush(); - gGL.setSceneBlendType(LLRender::BT_ALPHA); - } - - gGL.flush(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - - return; - }*/ - + { { LLFastTimer ftm(FTM_RENDER_BLOOM_FBO); @@ -6195,11 +6153,8 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA); - gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - gGL.getTexUnit(0)->disable(); - gGL.getTexUnit(0)->enable(LLTexUnit::TT_RECT_TEXTURE); - gGL.getTexUnit(0)->bind(&mScreen); - + mScreen.bindTexture(0, 0); + gGL.color4f(1,1,1,1); gPipeline.enableLightsFullbright(LLColor4(1,1,1,1)); gGL.begin(LLRender::TRIANGLE_STRIP); @@ -6214,7 +6169,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) gGL.end(); - gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE); + gGL.getTexUnit(0)->unbind(mScreen.getUsage()); mGlow[2].flush(); } @@ -6242,7 +6197,6 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) for (S32 i = 0; i < kernel; i++) { - gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); { LLFastTimer ftm(FTM_RENDER_BLOOM_FBO); mGlow[i%2].bindTarget(); @@ -6303,9 +6257,9 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) LLVertexBuffer::unbind(); - if (LLPipeline::sRenderDeferred && !LLViewerCamera::getInstance()->cameraUnderWater()) + if (LLPipeline::sRenderDeferred) { - bool dof_enabled = true; + bool dof_enabled = !LLViewerCamera::getInstance()->cameraUnderWater(); LLGLSLShader* shader = &gDeferredPostProgram; if (LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_DEFERRED) > 2) @@ -6313,7 +6267,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) shader = &gDeferredGIFinalProgram; dof_enabled = false; } - else if (LLToolMgr::getInstance()->inBuildMode() || !gSavedSettings.getBOOL("RenderDepthOfField")) + else if (!dof_enabled || LLToolMgr::getInstance()->inBuildMode() || !gSavedSettings.getBOOL("RenderDepthOfField")) { //squish focal length when in build mode (or if DoF is disabled) so DoF doesn't make editing objects difficult shader = &gDeferredPostNoDoFProgram; dof_enabled = false; @@ -6435,11 +6389,10 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) shader->uniform1f("magnification", magnification); } - S32 channel = shader->enableTexture(LLViewerShaderMgr::DEFERRED_DIFFUSE, LLTexUnit::TT_RECT_TEXTURE); + S32 channel = shader->enableTexture(LLViewerShaderMgr::DEFERRED_DIFFUSE, mScreen.getUsage()); if (channel > -1) { mScreen.bindTexture(0, channel); - gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR); } //channel = shader->enableTexture(LLViewerShaderMgr::DEFERRED_DEPTH, LLTexUnit::TT_RECT_TEXTURE); //if (channel > -1) @@ -6532,6 +6485,8 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_PHYSICS_SHAPES)) { + gGL.setColorMask(true, false); + LLVector2 tc1(0,0); LLVector2 tc2((F32) gViewerWindow->getWorldViewWidthRaw()*2, (F32) gViewerWindow->getWorldViewHeightRaw()*2); @@ -6578,25 +6533,23 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, U32 light_index, LLRen noise_map = mNoiseMap; } - LLGLState::checkTextureChannels(); - shader.bind(); S32 channel = 0; - channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_DIFFUSE, LLTexUnit::TT_RECT_TEXTURE); + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_DIFFUSE, mDeferredScreen.getUsage()); if (channel > -1) { mDeferredScreen.bindTexture(0,channel); gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT); } - channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_SPECULAR, LLTexUnit::TT_RECT_TEXTURE); + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_SPECULAR, mDeferredScreen.getUsage()); if (channel > -1) { mDeferredScreen.bindTexture(1, channel); gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT); } - channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_NORMAL, LLTexUnit::TT_RECT_TEXTURE); + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_NORMAL, mDeferredScreen.getUsage()); if (channel > -1) { mDeferredScreen.bindTexture(2, channel); @@ -6719,22 +6672,16 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, U32 light_index, LLRen shader.uniformMatrix4fv("gi_norm_mat", 1, FALSE, mGINormalMatrix.m); } } - - /*channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_POSITION, LLTexUnit::TT_RECT_TEXTURE); - if (channel > -1) - { - mDeferredScreen.bindTexture(3, channel); - }*/ + stop_glerror(); - channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_DEPTH, LLTexUnit::TT_RECT_TEXTURE); + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_DEPTH, mDeferredDepth.getUsage()); if (channel > -1) { gGL.getTexUnit(channel)->bind(&mDeferredDepth, TRUE); - gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT); stop_glerror(); - glTexParameteri(LLTexUnit::getInternalType(mDeferredDepth.getUsage()), GL_TEXTURE_COMPARE_MODE_ARB, GL_NONE); - glTexParameteri(LLTexUnit::getInternalType(mDeferredDepth.getUsage()), GL_DEPTH_TEXTURE_MODE_ARB, GL_ALPHA); + //glTexParameteri(LLTexUnit::getInternalType(mDeferredDepth.getUsage()), GL_TEXTURE_COMPARE_MODE_ARB, GL_NONE); + //glTexParameteri(LLTexUnit::getInternalType(mDeferredDepth.getUsage()), GL_DEPTH_TEXTURE_MODE_ARB, GL_ALPHA); stop_glerror(); @@ -6763,7 +6710,7 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, U32 light_index, LLRen stop_glerror(); - channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_LIGHT, LLTexUnit::TT_RECT_TEXTURE); + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_LIGHT, mDeferredLight[light_index].getUsage()); if (channel > -1) { mDeferredLight[light_index].bindTexture(0, channel); @@ -6983,9 +6930,9 @@ void LLPipeline::renderDeferredLighting() } //ati doesn't seem to love actually using the stencil buffer on FBO's - LLGLEnable stencil(GL_STENCIL_TEST); - glStencilFunc(GL_EQUAL, 1, 0xFFFFFFFF); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); + LLGLDisable stencil(GL_STENCIL_TEST); + //glStencilFunc(GL_EQUAL, 1, 0xFFFFFFFF); + //glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); gGL.setColorMask(true, true); @@ -7787,33 +7734,41 @@ void LLPipeline::setupSpotLight(LLGLSLShader& shader, LLDrawable* drawablep) LLViewerTexture* img = volume->getLightTexture(); + if (img == NULL) + { + img = LLViewerFetchedTexture::sWhiteImagep; + } + S32 channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_PROJECTION); - if (channel > -1 && img) + if (channel > -1) { - gGL.getTexUnit(channel)->bind(img); + if (img) + { + gGL.getTexUnit(channel)->bind(img); - F32 lod_range = logf(img->getWidth())/logf(2.f); + F32 lod_range = logf(img->getWidth())/logf(2.f); - shader.uniform1f("proj_focus", focus); - shader.uniform1f("proj_lod", lod_range); - shader.uniform1f("proj_ambient_lod", llclamp((proj_range-focus)/proj_range*lod_range, 0.f, 1.f)); + shader.uniform1f("proj_focus", focus); + shader.uniform1f("proj_lod", lod_range); + shader.uniform1f("proj_ambient_lod", llclamp((proj_range-focus)/proj_range*lod_range, 0.f, 1.f)); + } } + } void LLPipeline::unbindDeferredShader(LLGLSLShader &shader) { stop_glerror(); - shader.disableTexture(LLViewerShaderMgr::DEFERRED_POSITION, LLTexUnit::TT_RECT_TEXTURE); - shader.disableTexture(LLViewerShaderMgr::DEFERRED_NORMAL, LLTexUnit::TT_RECT_TEXTURE); - shader.disableTexture(LLViewerShaderMgr::DEFERRED_DIFFUSE, LLTexUnit::TT_RECT_TEXTURE); - shader.disableTexture(LLViewerShaderMgr::DEFERRED_SPECULAR, LLTexUnit::TT_RECT_TEXTURE); - shader.disableTexture(LLViewerShaderMgr::DEFERRED_DEPTH, LLTexUnit::TT_RECT_TEXTURE); - shader.disableTexture(LLViewerShaderMgr::DEFERRED_LIGHT, LLTexUnit::TT_RECT_TEXTURE); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_NORMAL, mDeferredScreen.getUsage()); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_DIFFUSE, mDeferredScreen.getUsage()); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_SPECULAR, mDeferredScreen.getUsage()); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_DEPTH, mDeferredScreen.getUsage()); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_LIGHT, mDeferredLight[0].getUsage()); shader.disableTexture(LLViewerShaderMgr::DEFERRED_GI_LIGHT, LLTexUnit::TT_RECT_TEXTURE); - shader.disableTexture(LLViewerShaderMgr::DEFERRED_EDGE, LLTexUnit::TT_RECT_TEXTURE); - shader.disableTexture(LLViewerShaderMgr::DEFERRED_SUN_LIGHT, LLTexUnit::TT_RECT_TEXTURE); - shader.disableTexture(LLViewerShaderMgr::DEFERRED_LOCAL_LIGHT, LLTexUnit::TT_RECT_TEXTURE); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_EDGE, mEdgeMap.getUsage()); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_SUN_LIGHT, mDeferredLight[1].getUsage()); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_LOCAL_LIGHT, mDeferredLight[2].getUsage()); shader.disableTexture(LLViewerShaderMgr::DEFERRED_LUMINANCE); shader.disableTexture(LLViewerShaderMgr::DIFFUSE_MAP); shader.disableTexture(LLViewerShaderMgr::DEFERRED_GI_MIP); @@ -7860,8 +7815,6 @@ void LLPipeline::unbindDeferredShader(LLGLSLShader &shader) gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); gGL.getTexUnit(0)->activate(); shader.unbind(); - - LLGLState::checkTextureChannels(); } inline float sgn(float a) @@ -9409,6 +9362,11 @@ void LLPipeline::generateSunShadow(LLCamera& camera) mShadow[i+4].flush(); } } + else + { //no spotlight shadows + mShadowSpotLight[0] = mShadowSpotLight[1] = NULL; + } + if (!gSavedSettings.getBOOL("CameraOffset")) { @@ -9831,4 +9789,9 @@ void LLPipeline::clearRenderTypeMask(U32 type, ...) } } +void LLPipeline::addDebugBlip(const LLVector3& position, const LLColor4& color) +{ + DebugBlip blip(position, color); + mDebugBlips.push_back(blip); +} diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index e9a250cd6d7ba3c7a53d81922e1b25ccd61c7557..e9da25e544b93e9d686e5c90300be610b6021a83 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -157,7 +157,8 @@ class LLPipeline void markGLRebuild(LLGLUpdate* glu); void markRebuild(LLSpatialGroup* group, BOOL priority = FALSE); void markRebuild(LLDrawable *drawablep, LLDrawable::EDrawableFlags flag = LLDrawable::REBUILD_ALL, BOOL priority = FALSE); - + void markPartitionMove(LLDrawable* drawablep); + //get the object between start and end that's closest to start. LLViewerObject* lineSegmentIntersectInWorld(const LLVector3& start, const LLVector3& end, BOOL pick_transparent, @@ -211,6 +212,7 @@ class LLPipeline void updateCull(LLCamera& camera, LLCullResult& result, S32 water_clip = 0, LLPlane* plane = NULL); //if water_clip is 0, ignore water plane, 1, cull to above plane, -1, cull to below plane void createObjects(F32 max_dtime); void createObject(LLViewerObject* vobj); + void processPartitionQ(); void updateGeom(F32 max_dtime); void updateGL(); void rebuildPriorityGroups(); @@ -358,6 +360,8 @@ class LLPipeline static void updateRenderDeferred(); static void refreshRenderDeferred(); + void addDebugBlip(const LLVector3& position, const LLColor4& color); + private: void unloadShaders(); void addToQuickLookup( LLDrawPool* new_poolp ); @@ -524,7 +528,6 @@ class LLPipeline LLRenderTarget mEdgeMap; LLRenderTarget mDeferredDepth; LLRenderTarget mDeferredLight[3]; - LLMultisampleBuffer mSampleBuffer; LLRenderTarget mGIMap; LLRenderTarget mGIMapPost[2]; LLRenderTarget mLuminanceMap; @@ -637,6 +640,9 @@ class LLPipeline LLDrawable::drawable_list_t mBuildQ2; // non-priority LLSpatialGroup::sg_vector_t mGroupQ1; //priority LLSpatialGroup::sg_vector_t mGroupQ2; // non-priority + + LLDrawable::drawable_list_t mPartitionQ; //drawables that need to update their spatial partition radius + bool mGroupQ2Locked; bool mGroupQ1Locked; @@ -726,6 +732,20 @@ class LLPipeline protected: std::vector<LLFace*> mSelectedFaces; + class DebugBlip + { + public: + LLColor4 mColor; + LLVector3 mPosition; + F32 mAge; + + DebugBlip(const LLVector3& position, const LLColor4& color) + : mColor(color), mPosition(position), mAge(0.f) + { } + }; + + std::list<DebugBlip> mDebugBlips; + LLPointer<LLViewerFetchedTexture> mFaceSelectImagep; U32 mLightMask; diff --git a/indra/newview/skins/default/xui/da/floater_about.xml b/indra/newview/skins/default/xui/da/floater_about.xml index 9b1df65d1bba9c180987258ec5eb0374a36cbefe..0ccaab73bafb02d312ca3d07dabd073fd8713229 100644 --- a/indra/newview/skins/default/xui/da/floater_about.xml +++ b/indra/newview/skins/default/xui/da/floater_about.xml @@ -56,24 +56,30 @@ Tak til følgende beboere: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Ha <panel label="Licenser" name="licenses_panel"> <text_editor name="credits_editor"> 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion - APR Copyright (C) 2000-2004 The Apache Software Foundation - cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) - DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc. - expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. - FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). - GL Copyright (C) 1999-2004 Brian Paul. - Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. - jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) - jpeglib Copyright (C) 1991-1998, Thomas G. Lane. - ogg/vorbis Copyright (C) 2001, Xiphophorus - OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. - SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga - SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - xmlrpc-epi Copyright (C) 2000 Epinions, Inc. - zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. - google-perftools Copyright (c) 2005, Google Inc. +APR Copyright (C) 2000-2004 The Apache Software Foundation +Collada DOM Copyright 2005 Sony Computer Entertainment Inc. +cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) +DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc. +expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. +FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). +GL Copyright (C) 1999-2004 Brian Paul. +GLOD Copyright (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University and David Luebke, Brenden Schubert, University of Virginia. +google-perftools Copyright (c) 2005, Google Inc. +Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. +jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) +jpeglib Copyright (C) 1991-1998, Thomas G. Lane. +ogg/vorbis Copyright (C) 2001, Xiphophorus +OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. +PCRE Copyright (c) 1997-2008 University of Cambridge +SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga +SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +xmlrpc-epi Copyright (C) 2000 Epinions, Inc. +zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. +google-perftools Copyright (c) 2005, Google Inc. -Alle rettigheder forbeholdes. Se licenses.txt for detaljer. +Second Life Viewer uses Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (and its Licensors). All Rights Reserved. See www.havok.com for details. + +All rights reserved. See licenses.txt for details. Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) </text_editor> diff --git a/indra/newview/skins/default/xui/da/floater_about_land.xml b/indra/newview/skins/default/xui/da/floater_about_land.xml index e78924a1ab50b5457330a808ff16706016198143..5b9e618666e67c47899dc4e14c507f5765fdd418 100644 --- a/indra/newview/skins/default/xui/da/floater_about_land.xml +++ b/indra/newview/skins/default/xui/da/floater_about_land.xml @@ -312,17 +312,17 @@ Kun større parceller kan vises i søgning. </text> <check_box label="Redigere terræn" name="edit land check" tool_tip="Hvis dette er valg, kan enhver redigere dit land. Det er bedst ikke at vælge her, da det altid er muligt for dig som ejer at ændre terræn pÃ¥ dit eget land."/> <check_box label="Flyve" name="check fly" tool_tip="Hvis valgt, kan beboere flyve pÃ¥ dit land. Hvis ikke valgt kan beboere kun flyve ind pÃ¥ dit land og over dit land."/> - <text left="194" name="allow_label2"> + <text name="allow_label2"> Lave objekter: </text> <check_box label="Alle beboere" name="edit objects check"/> <check_box label="Gruppe" name="edit group objects check"/> - <text left="170" name="allow_label3"> + <text name="allow_label3"> Anbringe objekter: </text> <check_box label="Alle beboere" name="all object entry check"/> <check_box label="Gruppe" name="group object entry check"/> - <text left="200" name="allow_label4"> + <text name="allow_label4"> Køre scripts: </text> <check_box label="Alle beboere" name="check other scripts"/> @@ -346,6 +346,7 @@ Kun større parceller kan vises i søgning. <combo_box.item label="Parker & natur" name="item9"/> <combo_box.item label="Beboelse" name="item10"/> <combo_box.item label="Indkøb" name="item11"/> + <combo_box.item label="Leje" name="item13"/> <combo_box.item label="Andet" name="item12"/> </combo_box> <combo_box name="land category"> @@ -360,6 +361,7 @@ Kun større parceller kan vises i søgning. <combo_box.item label="Parker & natur" name="item9"/> <combo_box.item label="Beboelse" name="item10"/> <combo_box.item label="Indkøb" name="item11"/> + <combo_box.item label="Leje" name="item13"/> <combo_box.item label="Andet" name="item12"/> </combo_box> <check_box label="Mature indhold" name="MatureCheck" tool_tip=""/> @@ -426,7 +428,7 @@ Kun større parceller kan vises i søgning. (Defineret via estate) </panel.string> <panel.string name="allow_public_access"> - Tillad adgang for alle ([MATURITY]) + Tillad offentlig adgang ([MATURITY]) (Bemærk: Ellers oprettes blokeringslinier) </panel.string> <panel.string name="estate_override"> En eller flere af disse valg er indstillet pÃ¥ estate niveau diff --git a/indra/newview/skins/default/xui/da/floater_beacons.xml b/indra/newview/skins/default/xui/da/floater_beacons.xml index 8049b072cecb59ef8450a65f70158e0d2f2510a0..5100a6df1fce2bdd2b2bb4eddf94013a9a37310c 100644 --- a/indra/newview/skins/default/xui/da/floater_beacons.xml +++ b/indra/newview/skins/default/xui/da/floater_beacons.xml @@ -17,5 +17,6 @@ <check_box label="Kun berøring" name="touch_only"/> <check_box label="Lydkilder" name="sounds"/> <check_box label="Partikel kilder" name="particles"/> + <check_box label="Medie kilder" name="moapbeacon"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_buy_contents.xml b/indra/newview/skins/default/xui/da/floater_buy_contents.xml index c2b2ccc24468fa3c8a5fd4ac84eeb0f3c60a2cbe..085fa2f9cc7342eb9dbd00671aa21ae4ff4d1707 100644 --- a/indra/newview/skins/default/xui/da/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/da/floater_buy_contents.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_buy_contents" title="KØB INDHOLD"> <text name="contains_text"> - [NAME] indeholder: + <nolink>[NAME]</nolink> contains: </text> <text name="buy_text"> Køb for L$[AMOUNT] fra [NAME]? diff --git a/indra/newview/skins/default/xui/da/floater_buy_currency.xml b/indra/newview/skins/default/xui/da/floater_buy_currency.xml index ec6ac5b2a842309134e2f1a221b4328d4bb0ed2d..ec47b2f445b05f15d040bfee30e99d2a1a58b6df 100644 --- a/indra/newview/skins/default/xui/da/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/da/floater_buy_currency.xml @@ -52,7 +52,8 @@ Indtast beløbet for at se nyeste valutakurs. </text> <text name="purchase_warning_repurchase"> - Bekræftelse af dette køb medfører kun køb af L$, ikke objektet. + Bekræftelse af dette køb medfører kun køb af L$, ikke +objektet. </text> <text name="purchase_warning_notenough"> Du køber ikke nok L$. Forøg venligst beløbet. diff --git a/indra/newview/skins/default/xui/da/floater_env_settings.xml b/indra/newview/skins/default/xui/da/floater_env_settings.xml index 8d9c05500bfc0eb88d723c82249456d61044df77..a6fbc057346844897a029207a3d277ebf20d86a0 100644 --- a/indra/newview/skins/default/xui/da/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/da/floater_env_settings.xml @@ -4,7 +4,8 @@ [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc] </floater.string> <text name="EnvTimeText"> - Tid pÃ¥ dagen + Tid pÃ¥ +dagen </text> <text name="EnvTimeText2"> 00:00 @@ -15,11 +16,13 @@ </text> <slider label="" name="EnvCloudSlider"/> <text name="EnvWaterColorText"> - Farve pÃ¥ vand + Farve pÃ¥ +vand </text> <color_swatch label="" name="EnvWaterColor" tool_tip="Klik for at Ã¥bne farvevælger"/> <text name="EnvWaterFogText"> - TÃ¥ge pÃ¥ vand + TÃ¥ge pÃ¥ +vand </text> <slider label="" name="EnvWaterFogSlider"/> <button label="Benyt tid fra estate" name="EnvUseEstateTimeButton"/> diff --git a/indra/newview/skins/default/xui/da/floater_import_collada.xml b/indra/newview/skins/default/xui/da/floater_import_collada.xml new file mode 100644 index 0000000000000000000000000000000000000000..ebc7c8638873c8d57d1dca5ab36b3715eccbab94 --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_import_collada.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Import Collada" title="Import Scene"> + <text name="mesh count"> + Meshes: [COUNT] + </text> + <text name="texture count"> + Textures: [COUNT] + </text> + <text name="status"> + Status: [STATUS] + </text> + <button label="Cancel" name="cancel"/> + <button label="OK" name="ok"/> + <string name="status_idle"> + Idle + </string> + <string name="status_uploading"> + Uploading [NAME] + </string> + <string name="status_creating"> + Creating object [NAME] + </string> +</floater> diff --git a/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml index af2910fe589690b40dfefa5086675a4ff3be6ee8..655701bb9624b72a890b51aa6a0ca2cb4c4783e7 100644 --- a/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml @@ -1,24 +1,25 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Inventory Finder" title="INVENTORY_RECENT_ITEMS"> - <check_box label="Animation" name="check_animation" /> - <check_box label="Visitkort" name="check_calling_card" /> - <check_box label="Tøj" name="check_clothing" /> - <check_box label="Bevægelser" name="check_gesture" /> - <check_box label="Landemærke" name="check_landmark" /> - <check_box label="Note" name="check_notecard" /> - <check_box label="Objekter" name="check_object" /> - <check_box label="Scripts" name="check_script" /> - <check_box label="Lyde" name="check_sound" /> - <check_box label="Teksturer" name="check_texture" /> - <check_box label="Foto's" name="check_snapshot" /> - <button label="Alle" label_selected="Alle" name="All" /> - <button label="Ingen" label_selected="Ingen" name="None" /> - <check_box label="Vis altid mapper" name="check_show_empty" /> - <check_box label="Siden sidste logoff" name="check_since_logoff" /> + <check_box label="Animation" name="check_animation"/> + <check_box label="Visitkort" name="check_calling_card"/> + <check_box label="Tøj" name="check_clothing"/> + <check_box label="Bevægelser" name="check_gesture"/> + <check_box label="Landemærke" name="check_landmark"/> + <check_box label="Meshes" name="check_mesh"/> + <check_box label="Note" name="check_notecard"/> + <check_box label="Objekter" name="check_object"/> + <check_box label="Scripts" name="check_script"/> + <check_box label="Lyde" name="check_sound"/> + <check_box label="Teksturer" name="check_texture"/> + <check_box label="Foto's" name="check_snapshot"/> + <button label="Alle" label_selected="Alle" name="All"/> + <button label="Ingen" label_selected="Ingen" name="None"/> + <check_box label="Vis altid mapper" name="check_show_empty"/> + <check_box label="Siden sidste logoff" name="check_since_logoff"/> <text name="- OR -"> - ELLER - </text> - <spinner label="Timer siden" name="spin_hours_ago" /> - <spinner label="Dage siden" name="spin_days_ago" /> - <button label="Luk" label_selected="Luk" name="Close" /> + <spinner label="Timer siden" name="spin_hours_ago"/> + <spinner label="Dage siden" name="spin_days_ago"/> + <button label="Luk" label_selected="Luk" name="Close"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_map.xml b/indra/newview/skins/default/xui/da/floater_map.xml index 5df9bb5f6ea5d0bbe3b4c1bc2d25209ddf146f67..4912d73ba050f5efc77f1eb770937aa3c8d0edff 100644 --- a/indra/newview/skins/default/xui/da/floater_map.xml +++ b/indra/newview/skins/default/xui/da/floater_map.xml @@ -3,6 +3,9 @@ <floater.string name="ToolTipMsg"> [REGION](Dobbeltklik for at Ã¥bne kort, klik-og-træk for at panorere) </floater.string> + <floater.string name="AltToolTipMsg"> + [REGION](Dobbeltklik for at teleportere, træk for at panorere) + </floater.string> <floater.string name="mini_map_caption"> MINIKORT </floater.string> diff --git a/indra/newview/skins/default/xui/da/floater_model_preview.xml b/indra/newview/skins/default/xui/da/floater_model_preview.xml new file mode 100644 index 0000000000000000000000000000000000000000..a98c70ff522475bab4576967636bc53846e83f55 --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_model_preview.xml @@ -0,0 +1,231 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Model Preview" title="Upload Model"> + <string name="status_idle"> + Idle + </string> + <string name="status_reading_file"> + Loading... + </string> + <string name="status_generating_meshes"> + Generating Meshes... + </string> + <string name="status_vertex_number_overflow"> + Error: Vertex number is more than 65534, aborted! + </string> + <string name="high"> + High + </string> + <string name="medium"> + Medium + </string> + <string name="low"> + Low + </string> + <string name="lowest"> + Lowest + </string> + <string name="mesh_status_good"> + Ship it! + </string> + <string name="mesh_status_na"> + N/A + </string> + <string name="mesh_status_none"> + None + </string> + <string name="mesh_status_submesh_mismatch"> + Levels of detail have a different number of textureable faces. + </string> + <string name="mesh_status_mesh_mismatch"> + Levels of detail have a different number of mesh instances. + </string> + <string name="mesh_status_too_many_vertices"> + Level of detail has too many vertices. + </string> + <string name="mesh_status_missing_lod"> + Missing required level of detail. + </string> + <string name="layer_all"> + All + </string> + <string name="decomposing"> + Analyzing... + </string> + <string name="simplifying"> + Simplifying... + </string> + <text name="name_label"> + Name: + </text> + <text name="lod_label"> + Preview: + </text> + <combo_box name="preview_lod_combo" tool_tip="LOD to view in preview render"> + <combo_item name="high"> + Level of Detail: High + </combo_item> + <combo_item name="medium"> + Level of Detail: Medium + </combo_item> + <combo_item name="low"> + Level of Detail: Low + </combo_item> + <combo_item name="lowest"> + Level of Detail: Lowest + </combo_item> + </combo_box> + <panel> + <text name="streaming cost"> + Resource Cost: [COST] + </text> + <text name="physics cost"> + Physics Cost: [COST] + </text> + <text name="upload fee"> + Upload Fee: N/A + </text> + </panel> + <text name="status"> + [STATUS] + </text> + <button label="Defaults" name="reset_btn" tool_tip="Reset to defaults"/> + <button label="Upload" name="ok_btn" tool_tip="Upload to simulator"/> + <button label="Cancel" name="cancel_btn"/> + <tab_container name="import_tab"> + <panel label="Level of Detail" name="lod_panel"> + <text name="lod_table_header"> + Select Level of Detail: + </text> + <text name="high_label" value="High"/> + <text name="high_triangles" value="0"/> + <text name="high_vertices" value="0"/> + <text name="medium_label" value="Medium"/> + <text name="medium_triangles" value="0"/> + <text name="medium_vertices" value="0"/> + <text name="low_label" value="Low"/> + <text name="low_triangles" value="0"/> + <text name="low_vertices" value="0"/> + <text name="lowest_label" value="Lowest"/> + <text name="lowest_triangles" value="0"/> + <text name="lowest_vertices" value="0"/> + <text name="lod_table_footer"> + Level of Detail: [DETAIL] + </text> + <radio_group name="lod_file_or_limit" value="lod_from_file"> + <radio_item label="Load from file" name="lod_from_file"/> + <radio_item label="Auto generate" name="lod_auto_generate"/> + <radio_item label="None" name="lod_none"/> + </radio_group> + <button label="Browse..." name="lod_browse"/> + <combo_box name="lod_mode"> + <combo_item name="triangle_limit"> + Triangle Limit + </combo_item> + <combo_item name="error_threshold"> + Error Threshold + </combo_item> + </combo_box> + <text name="build_operator_text"> + Build Operator: + </text> + <text name="queue_mode_text"> + Queue Mode: + </text> + <combo_box name="build_operator"> + <combo_item name="edge_collapse"> + Edge Collapse + </combo_item> + <combo_item name="half_edge_collapse"> + Half Edge Collapse + </combo_item> + </combo_box> + <combo_box name="queue_mode"> + <combo_item name="greedy"> + Greedy + </combo_item> + <combo_item name="lazy"> + Lazy + </combo_item> + <combo_item name="independent"> + Independent + </combo_item> + </combo_box> + <text name="border_mode_text"> + Border Mode: + </text> + <text name="share_tolderance_text"> + Share Tolerance: + </text> + <combo_box name="border_mode"> + <combo_item name="border_unlock"> + Unlock + </combo_item> + <combo_item name="border_lock"> + Lock + </combo_item> + </combo_box> + <text name="crease_label"> + Crease Angle: + </text> + <spinner name="crease_angle" value="75"/> + </panel> + <panel label="Physics" name="physics_panel"> + <panel name="physics geometry"> + <radio_group name="physics_load_radio" value="physics_load_from_file"> + <radio_item label="File:" name="physics_load_from_file"/> + <radio_item label="Use Level of Detail:" name="physics_use_lod"/> + </radio_group> + <combo_box name="physics_lod_combo" tool_tip="LOD to use for physics shape"> + <combo_item name="physics_lowest"> + Lowest + </combo_item> + <combo_item name="physics_low"> + Low + </combo_item> + <combo_item name="physics_medium"> + Medium + </combo_item> + <combo_item name="physics_high"> + High + </combo_item> + </combo_box> + <button label="Browse..." name="physics_browse"/> + </panel> + <panel name="physics analysis"> + <slider label="Smooth:" name="Smooth"/> + <check_box label="Close Holes (slow)" name="Close Holes (Slow)"/> + <button label="Analyze" name="Decompose"/> + <button label="Cancel" name="decompose_cancel"/> + </panel> + <panel name="physics simplification"> + <slider label="Passes:" name="Combine Quality"/> + <slider label="Detail Scale:" name="Detail Scale"/> + <slider label="Retain:" name="Retain%"/> + <button label="Simplify" name="Simplify"/> + <button label="Cancel" name="simplify_cancel"/> + </panel> + <panel name="physics info"> + <slider label="Preview Spread:" name="physics_explode"/> + <text name="physics_triangles"> + Triangles: [TRIANGLES] + </text> + <text name="physics_points"> + Vertices: [POINTS] + </text> + <text name="physics_hulls"> + Hulls: [HULLS] + </text> + </panel> + </panel> + <panel label="Modifiers" name="modifiers_panel"> + <spinner name="import_scale" value="1.0"/> + <text name="import_dimensions"> + [X] x [Y] x [Z] m + </text> + <check_box label="Textures" name="upload_textures"/> + <check_box label="Skin weight" name="upload_skin"/> + <check_box label="Joint positions" name="upload_joints"/> + <spinner name="pelvis_offset" value="0.0"/> + </panel> + </tab_container> +</floater> diff --git a/indra/newview/skins/default/xui/da/floater_model_wizard.xml b/indra/newview/skins/default/xui/da/floater_model_wizard.xml new file mode 100644 index 0000000000000000000000000000000000000000..8ad443581ac6fec32458a258a377392cb3026118 --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_model_wizard.xml @@ -0,0 +1,241 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Model Wizard" title="UPLOAD MODEL WIZARD"> + <button label="5. Upload" name="upload_btn"/> + <button label="4. Review" name="review_btn"/> + <button label="3. Physics" name="physics2_btn"/> + <button label="3. Physics" name="physics_btn"/> + <button label="2. Optimize" name="optimize_btn"/> + <button label="1. Choose File" name="choose_file_btn"/> + <panel name="choose_file_panel"> + <panel name="header_panel"> + <text name="header_text"> + Upload Model + </text> + </panel> + <text name="description"> + This wizard will help you import mesh models to Second Life. First specify a file containing the model you wish to import. Second Life supports COLLADA (.dae) files. + </text> + <panel name="content"> + <text name="Cache location"> + Filename: + </text> + <button label="Browse..." label_selected="Browse..." name="browse"/> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + </panel> + <panel name="optimize_panel"> + <panel name="header_panel"> + <text name="header_text"> + Optimize + </text> + </panel> + <text name="description"> + This wizard has optimized your model to improve performance. You may adjust the results of the optimization process bellow or click Next to continue. + </text> + <panel name="content"> + <text name="high_detail_text"> + Generate Level of Detail: High + </text> + <text name="medium_detail_text"> + Generate Level of Detail: Medium + </text> + <text name="low_detail_text"> + Generate Level of Detail: Low + </text> + <text name="lowest_detail_text"> + Generate Level of Detail: Lowest + </text> + </panel> + <panel name="content2"> + <text name="lod_label"> + Model Preview: + </text> + <combo_box name="preview_lod_combo2" tool_tip="LOD to view in preview render"> + <combo_item name="high"> + High + </combo_item> + <combo_item name="medium"> + Medium + </combo_item> + <combo_item name="low"> + Low + </combo_item> + <combo_item name="lowest"> + Lowest + </combo_item> + </combo_box> + <text name="streaming cost"> + Resource Cost: [COST] + </text> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + </panel> + <panel name="physics_panel"> + <panel name="header_panel"> + <text name="header_text"> + Physics + </text> + </panel> + <text name="description"> + The wizard will create a physical shape, which determines how the object interacts with other objects and avatars. Set the slider to the detail level most appropriate for how your object will be used: + </text> + <panel name="content"> + <text name="streaming cost"> + Resource Cost: [COST] + </text> + </panel> + </panel> + <panel name="physics2_panel"> + <panel name="header_panel"> + <text name="header_text"> + Physics + </text> + </panel> + <text name="description"> + Preview the physics shape below then click Next to continue. To modify the physics shape, click the Back button. + </text> + <panel name="content"> + <text name="lod_label"> + Model Preview: + </text> + <combo_box name="preview_lod_combo3" tool_tip="LOD to view in preview render"> + <combo_item name="high"> + High + </combo_item> + <combo_item name="medium"> + Medium + </combo_item> + <combo_item name="low"> + Low + </combo_item> + <combo_item name="lowest"> + Lowest + </combo_item> + </combo_box> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + <text name="streaming cost"> + Resource Cost: [COST] + </text> + </panel> + </panel> + <panel name="review_panel"> + <panel name="header_panel"> + <text name="header_text"> + Review + </text> + </panel> + <text name="description"> + Review the details below then click. Upload to upload your model. Your L$ balance will be charged when you click Upload. + </text> + <panel name="content"> + <text name="lod_label"> + Model Preview: + </text> + <combo_box name="preview_lod_combo" tool_tip="LOD to view in preview render"> + <combo_item name="high"> + High + </combo_item> + <combo_item name="medium"> + Medium + </combo_item> + <combo_item name="low"> + Low + </combo_item> + <combo_item name="lowest"> + Lowest + </combo_item> + </combo_box> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + <text name="streaming cost"> + Resource Cost: [COST] + </text> + <text name="physics cost"> + Physics Cost: [COST] + </text> + </panel> + <panel name="upload_panel"> + <panel name="header_panel"> + <text name="header_text"> + Upload Complete! + </text> + </panel> + <text name="description"> + Congratulations! Your model has been sucessfully uploaded. You will find the model in the Objects folder in your inventory. + </text> + </panel> + <button label="<< Back" name="back"/> + <button label="Next >>" name="next"/> + <button label="Upload" name="upload" tool_tip="Upload to simulator"/> + <button label="Cancel" name="cancel"/> + <button label="Close" name="close"/> + <spinner name="import_scale" value="1.0"/> + <string name="status_idle"> + Idle + </string> + <string name="status_reading_file"> + Loading... + </string> + <string name="status_generating_meshes"> + Generating Meshes... + </string> + <string name="status_vertex_number_overflow"> + Error: Vertex number is more than 65534, aborted! + </string> + <string name="high"> + High + </string> + <string name="medium"> + Medium + </string> + <string name="low"> + Low + </string> + <string name="lowest"> + Lowest + </string> + <string name="mesh_status_good"> + Ship it! + </string> + <string name="mesh_status_na"> + N/A + </string> + <string name="mesh_status_none"> + None + </string> + <string name="mesh_status_submesh_mismatch"> + Levels of detail have a different number of textureable faces. + </string> + <string name="mesh_status_mesh_mismatch"> + Levels of detail have a different number of mesh instances. + </string> + <string name="mesh_status_too_many_vertices"> + Level of detail has too many vertices. + </string> + <string name="mesh_status_missing_lod"> + Missing required level of detail. + </string> + <string name="layer_all"> + All + </string> +</floater> diff --git a/indra/newview/skins/default/xui/da/floater_price_for_listing.xml b/indra/newview/skins/default/xui/da/floater_price_for_listing.xml new file mode 100644 index 0000000000000000000000000000000000000000..b091fa09b56523723986d63b7b1e481636a8945b --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_price_for_listing.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="price_for_listing" title="PUBLISH CLASSIFIED AD"> + <text name="explanation_text"> + Din annonce vil løbe en uge fra udgivelsesdatoen. + +Placeringen af din annonce i listerne er afhængig af hvor meget du har valgt at betale. + +De annoncer der betales mest for vises øverst i lister og højere i søgeresultater. + </text> + <text name="price_text"> + Pris for annonce: + </text> + <text name="price_symbol"> + L$ + </text> + <button label="OK" name="set_price_btn"/> + <button label="Annullér" name="cancel_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/da/floater_sound_devices.xml b/indra/newview/skins/default/xui/da/floater_sound_devices.xml new file mode 100644 index 0000000000000000000000000000000000000000..cb4cbba57008a431b45bff6b54d96fe97a367ad9 --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_sound_devices.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_sound_devices" title="Lyd enheder"> + <text name="voice_label"> + Stemme chat + </text> + <check_box label="Aktiveret" name="enable_voice"/> +</floater> diff --git a/indra/newview/skins/default/xui/da/floater_tools.xml b/indra/newview/skins/default/xui/da/floater_tools.xml index 9e673d0d5b958d81c727b2a04bc40f6c30e09453..815bde456e36d499f0de9ea46a2dd2082afcba24 100644 --- a/indra/newview/skins/default/xui/da/floater_tools.xml +++ b/indra/newview/skins/default/xui/da/floater_tools.xml @@ -64,6 +64,8 @@ <radio_item label="Vælg overflade" name="radio select face"/> </radio_group> <check_box label="Redigér lænkede" name="checkbox edit linked parts"/> + <button label="Sammenkæd" name="link_btn"/> + <button label="Adskil" name="unlink_btn"/> <text name="RenderingCost" tool_tip="Hvis beregnede rendering omkostninger for dette objekt"> þ: [COUNT] </text> @@ -120,6 +122,18 @@ <text name="prim_count"> Prims: [COUNT] </text> + <text name="linked_set_count"> + Lænkede sæt: [COUNT] + </text> + <text name="linked_set_cost" tool_tip="Pris for nuværende valgte lænkede sæt som [prims] / [physics complexity]"> + Pris: [COST] / [PHYSICS] + </text> + <text name="object_count"> + Objekter: [COUNT] + </text> + <text name="object_cost" tool_tip="Pris for nuværende valgte objekter som [prims] / [physics complexity]"> + Pris: [COST] / [PHYSICS] + </text> <tab_container name="Object Info Tabs"> <panel label="Generelt" name="General"> <panel.string name="text deed continued"> @@ -264,15 +278,6 @@ <combo_box.item label="Ring" name="Ring"/> <combo_box.item label="Sculpted" name="Sculpted"/> </combo_box> - <combo_box name="material"> - <combo_box.item label="Sten" name="Stone"/> - <combo_box.item label="Metal" name="Metal"/> - <combo_box.item label="Glas" name="Glass"/> - <combo_box.item label="Træ" name="Wood"/> - <combo_box.item label="Kød" name="Flesh"/> - <combo_box.item label="Plastik" name="Plastic"/> - <combo_box.item label="Gummi" name="Rubber"/> - </combo_box> <text name="text cut"> Snit Z-akse (start/slut) </text> @@ -345,9 +350,19 @@ <combo_box.item label="Kuglering" name="Torus"/> <combo_box.item label="Plan" name="Plane"/> <combo_box.item label="Cylinder" name="Cylinder"/> + <combo_box.item label="Mesh" name="Mesh"/> </combo_box> </panel> <panel label="Features" name="Features"> + <panel.string name="None"> + Ingen + </panel.string> + <panel.string name="Prim"> + Prim + </panel.string> + <panel.string name="Convex Hull"> + Konveks skrog + </panel.string> <text name="select_single"> Vælg kun én prim for at ændre egenskaber. </text> @@ -372,6 +387,23 @@ <spinner label="Fokus" name="Light Focus"/> <spinner label="Udfasning" name="Light Falloff"/> <spinner label="Omgivelser" name="Light Ambiance"/> + <text name="label physicsshapetype"> + Fysisk form type: + </text> + <combo_box name="Physics Shape Type Combo Ctrl" tool_tip="Vælg fysisk form type"/> + <combo_box name="material"> + <combo_box.item label="Sten" name="Stone"/> + <combo_box.item label="Metal" name="Metal"/> + <combo_box.item label="Glas" name="Glass"/> + <combo_box.item label="Træ" name="Wood"/> + <combo_box.item label="Kød" name="Flesh"/> + <combo_box.item label="Plastik" name="Plastic"/> + <combo_box.item label="Gummi" name="Rubber"/> + </combo_box> + <spinner label="Tyngde" name="Physics Gravity"/> + <spinner label="Friktion" name="Physics Friction"/> + <spinner label="Tæthed" name="Physics Density"/> + <spinner label="Restitution" name="Physics Restitution"/> </panel> <panel label="Tekstur" name="Texture"> <panel.string name="string repeats per meter"> diff --git a/indra/newview/skins/default/xui/da/menu_attachment_self.xml b/indra/newview/skins/default/xui/da/menu_attachment_self.xml index 1c19435f9050793e1aa18635f0e9e9cc96ae9d89..35ba27f9e23c06730764a83a679c426ab6e9498b 100644 --- a/indra/newview/skins/default/xui/da/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/da/menu_attachment_self.xml @@ -5,7 +5,7 @@ <menu_item_call label="Tag af" name="Detach"/> <menu_item_call label="Sid ned" name="Sit Down Here"/> <menu_item_call label="StÃ¥ op" name="Stand Up"/> - <menu_item_call label="Skift sæt" name="Change Outfit"/> + <menu_item_call label="Udseende" name="Change Outfit"/> <menu_item_call label="Redigér mit sæt" name="Edit Outfit"/> <menu_item_call label="Redigér min figur" name="Edit My Shape"/> <menu_item_call label="Venner" name="Friends..."/> diff --git a/indra/newview/skins/default/xui/da/menu_avatar_self.xml b/indra/newview/skins/default/xui/da/menu_avatar_self.xml index 5a05a12b4e166132f301160ccad30fd1886ea2b8..4e6b42a7441937e93e3ce47067c254fcf9de3faa 100644 --- a/indra/newview/skins/default/xui/da/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/da/menu_avatar_self.xml @@ -14,6 +14,7 @@ <menu_item_call label="Undertrøje" name="Self Undershirt"/> <menu_item_call label="Underbukser" name="Self Underpants"/> <menu_item_call label="Tatovering" name="Self Tattoo"/> + <menu_item_call label="Fysik" name="Self Physics"/> <menu_item_call label="Alpha" name="Self Alpha"/> <menu_item_call label="Alt tøj" name="All Clothes"/> </context_menu> @@ -21,7 +22,7 @@ <context_menu label="Tag af" name="Object Detach"/> <menu_item_call label="Tag alt af" name="Detach All"/> </context_menu> - <menu_item_call label="Skift sæt" name="Chenge Outfit"/> + <menu_item_call label="Mit udseende" name="Chenge Outfit"/> <menu_item_call label="Redigér mit sæt" name="Edit Outfit"/> <menu_item_call label="Redigér min form" name="Edit My Shape"/> <menu_item_call label="Venner" name="Friends..."/> diff --git a/indra/newview/skins/default/xui/da/menu_bottomtray.xml b/indra/newview/skins/default/xui/da/menu_bottomtray.xml index e979e35a917916c0d8e13c743b1627e6466030a4..a0d74db36d525feab46d6a65f5941d94b6662eff 100644 --- a/indra/newview/skins/default/xui/da/menu_bottomtray.xml +++ b/indra/newview/skins/default/xui/da/menu_bottomtray.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="hide_camera_move_controls_menu"> + <menu_item_check label="Tal knap" name="EnableVoiceChat"/> <menu_item_check label="Faste bevægelser" name="ShowGestureButton"/> <menu_item_check label="Bevægelse knap" name="ShowMoveButton"/> <menu_item_check label="Vis knap" name="ShowCameraButton"/> <menu_item_check label="Foto knap" name="ShowSnapshotButton"/> - <menu_item_check label="Sidepanel knap" name="ShowSidebarButton"/> <menu_item_check label="Bygge knap" name="ShowBuildButton"/> <menu_item_check label="Søge knap" name="ShowSearchButton"/> <menu_item_check label="Kort knap" name="ShowWorldMapButton"/> diff --git a/indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml index 89111d49f14c3f9e4d3b1053fe07ca7dba876b30..8da35adb1b3a33cf60f901a9917491db7c6daaab 100644 --- a/indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml +++ b/indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<menu name="Gear Menu"> +<toggleable_menu name="Gear Menu"> <menu_item_call label="Profil" name="view_profile"/> <menu_item_call label="Tilføj ven" name="add_friend"/> <menu_item_call label="Besked" name="im"/> @@ -11,9 +11,11 @@ <menu_item_call label="Rapportér" name="report"/> <menu_item_call label="Frys" name="freeze"/> <menu_item_call label="Smid ud" name="eject"/> + <menu_item_call label="Spark" name="kick"/> + <menu_item_call label="CSR" name="csr"/> <menu_item_call label="Debug teksturer" name="debug"/> <menu_item_call label="Find pÃ¥ kort" name="find_on_map"/> <menu_item_call label="Zoom ind" name="zoom_in"/> <menu_item_call label="Betal" name="pay"/> <menu_item_call label="Del" name="share"/> -</menu> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml index a2ddd116a7deeda27434c9eccad404f3013a6470..887c6484bc3b4d2292f5b8ca5c3d4c8167ee7650 100644 --- a/indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml +++ b/indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml @@ -1,10 +1,31 @@ -<?xml version="1.0" encoding="utf-8"?> -<menu name="Gear Menu"> - <menu_item_call label="Sid ned" name="sit_down_here"/> - <menu_item_call label="StÃ¥ op" name="stand_up"/> - <menu_item_call label="Skift sæt" name="change_outfit"/> - <menu_item_call label="Profil" name="my_profile"/> - <menu_item_call label="Venner" name="my_friends"/> - <menu_item_call label="Grupper" name="my_groups"/> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="Gear Menu"> + <menu_item_call label="Sid ned" name="Sit Down Here"/> + <menu_item_call label="StÃ¥ op" name="Stand Up"/> + <context_menu label="Tag af" name="Take Off >"> + <context_menu label="Tøj" name="Clothes >"> + <menu_item_call label="Trøje" name="Shirt"/> + <menu_item_call label="Bukser" name="Pants"/> + <menu_item_call label="Nederdel" name="Skirt"/> + <menu_item_call label="Sko" name="Shoes"/> + <menu_item_call label="Strømper" name="Socks"/> + <menu_item_call label="Jakke" name="Jacket"/> + <menu_item_call label="Handsker" name="Gloves"/> + <menu_item_call label="Undertrøje" name="Self Undershirt"/> + <menu_item_call label="Underbukser" name="Self Underpants"/> + <menu_item_call label="Tatovering" name="Self Tattoo"/> + <menu_item_call label="Alpha" name="Self Alpha"/> + <menu_item_call label="Alt tøj" name="All Clothes"/> + </context_menu> + <context_menu label="HUD" name="Object Detach HUD"/> + <context_menu label="Tag af" name="Object Detach"/> + <menu_item_call label="Tag alt af" name="Detach All"/> + </context_menu> + <menu_item_call label="Skift sæt" name="Chenge Outfit"/> + <menu_item_call label="Redigér sæt" name="Edit Outfit"/> + <menu_item_call label="Redigér min figur" name="Edit My Shape"/> + <menu_item_call label="Mine venner" name="Friends..."/> + <menu_item_call label="Mine grupper" name="Groups..."/> + <menu_item_call label="Min profil" name="Profile..."/> <menu_item_call label="Debug teksturer" name="Debug..."/> -</menu> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/da/menu_inventory.xml b/indra/newview/skins/default/xui/da/menu_inventory.xml index 35551318d170125a5f1dbe39d7f8ebbf2516c3fe..f9bdf36f1fece9c0a9810de07ba92d34e10ca822 100644 --- a/indra/newview/skins/default/xui/da/menu_inventory.xml +++ b/indra/newview/skins/default/xui/da/menu_inventory.xml @@ -25,6 +25,7 @@ <menu_item_call label="Nye underbukser" name="New Underpants"/> <menu_item_call label="Nyt alpha lag" name="New Alpha Mask"/> <menu_item_call label="Ny tatovering" name="New Tattoo"/> + <menu_item_call label="Ny fysik" name="New Physics"/> </menu> <menu label="Nye kropsdele" name="New Body Parts"> <menu_item_call label="Ny figur" name="New Shape"/> diff --git a/indra/newview/skins/default/xui/da/menu_inventory_add.xml b/indra/newview/skins/default/xui/da/menu_inventory_add.xml index 07f70d7190dcf2a6b5f85d711596cf85be3bc28b..eca03d3ee9c6010abd0e53501bfb61cfded4a482 100644 --- a/indra/newview/skins/default/xui/da/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/da/menu_inventory_add.xml @@ -4,6 +4,8 @@ <menu_item_call label="Billede (L$[COST])..." name="Upload Image"/> <menu_item_call label="Lyd (L$[COST])..." name="Upload Sound"/> <menu_item_call label="Animation (L$[COST])..." name="Upload Animation"/> + <menu_item_call label="Model..." name="Upload Model"/> + <menu_item_call label="Model Wizard..." name="Upload Model Wizard"/> <menu_item_call label="Hent mange (L$[COST] pr. fil)..." name="Bulk Upload"/> <menu_item_call label="Sæt standardværdier for upload rettigheder" name="perm prefs"/> </menu> @@ -23,6 +25,7 @@ <menu_item_call label="Nye underbukser" name="New Underpants"/> <menu_item_call label="Nyt alpha lag" name="New Alpha"/> <menu_item_call label="Ny tatovering" name="New Tattoo"/> + <menu_item_call label="Ny fysik" name="New Physics"/> </menu> <menu label="Nye kropsdele" name="New Body Parts"> <menu_item_call label="Ny kropsbygning" name="New Shape"/> diff --git a/indra/newview/skins/default/xui/da/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/da/menu_inventory_gear_default.xml index b359d94f07d2d87e055c7576b4006b5f896b4cb0..4809b2446356463d22dfe64f284a35ee19fe16c8 100644 --- a/indra/newview/skins/default/xui/da/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/da/menu_inventory_gear_default.xml @@ -3,6 +3,7 @@ <menu_item_call label="Nyt vindue" name="new_window"/> <menu_item_check label="Sortér efter navn" name="sort_by_name"/> <menu_item_check label="Sortér efter nyeste" name="sort_by_recent"/> + <menu_item_check label="Sortér altid mapper efter navn" name="sort_folders_by_name"/> <menu_item_check label="Vis System mapper øverst" name="sort_system_folders_to_top"/> <menu_item_call label="Vis filtre" name="show_filters"/> <menu_item_call label="Nulstil filtre" name="reset_filters"/> diff --git a/indra/newview/skins/default/xui/da/menu_media_ctrl.xml b/indra/newview/skins/default/xui/da/menu_media_ctrl.xml new file mode 100644 index 0000000000000000000000000000000000000000..788b1c4b5904545c701f175edc19ccb3eea2988a --- /dev/null +++ b/indra/newview/skins/default/xui/da/menu_media_ctrl.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="media ctrl context menu"> + <menu_item_call label="Klip" name="Cut"/> + <menu_item_call label="Kopier" name="Copy"/> + <menu_item_call label="Sæt ind" name="Paste"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/da/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/da/menu_model_import_gear_default.xml new file mode 100644 index 0000000000000000000000000000000000000000..d9626692d58f0d6e8d778ee0bfa8ea28de7ed518 --- /dev/null +++ b/indra/newview/skins/default/xui/da/menu_model_import_gear_default.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="model_menu_gear_default"> + <menu_item_check label="Show edges" name="show_edges"/> + <menu_item_check label="Show physics" name="show_physics"/> + <menu_item_check label="Show textures" name="show_textures"/> + <menu_item_check label="Show skin weight" name="show_skin_weight"/> + <menu_item_check label="Show joint positions" name="show_joint_positions"/> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/da/menu_object.xml b/indra/newview/skins/default/xui/da/menu_object.xml index bc0cdde86fd868b90d7cfb66db5c548cbda18977..ba62ccf90ce47591ef93d97c37f93f8413a2b37f 100644 --- a/indra/newview/skins/default/xui/da/menu_object.xml +++ b/indra/newview/skins/default/xui/da/menu_object.xml @@ -16,14 +16,14 @@ <context_menu label="Vedhæft" name="Object Attach"/> <context_menu label="Vedhæft HUD" name="Object Attach HUD"/> </context_menu> - <context_menu label="Fjern" name="Remove"> + <context_menu label="Administrér" name="Remove"> <menu_item_call label="Rapportér misbrug" name="Report Abuse..."/> <menu_item_call label="Blokér" name="Object Mute"/> <menu_item_call label="Returnér" name="Return..."/> - <menu_item_call label="Slet" name="Delete"/> </context_menu> <menu_item_call label="Tag" name="Pie Object Take"/> <menu_item_call label="Tag kopi" name="Take Copy"/> <menu_item_call label="Betal" name="Pay..."/> <menu_item_call label="Køb" name="Buy..."/> + <menu_item_call label="Slet" name="Delete"/> </context_menu> diff --git a/indra/newview/skins/default/xui/da/menu_outfit_gear.xml b/indra/newview/skins/default/xui/da/menu_outfit_gear.xml index 8b4c776496f7a549b22bb65c0f1c73804b92cb7d..0b0fff3b937d8d82ac78d7b42c690f97ca14d7da 100644 --- a/indra/newview/skins/default/xui/da/menu_outfit_gear.xml +++ b/indra/newview/skins/default/xui/da/menu_outfit_gear.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="Gear Outfit"> +<toggleable_menu name="Gear Outfit"> <menu_item_call label="Tag pÃ¥ - Erstat nuværende sæt" name="wear"/> <menu_item_call label="Tag pÃ¥ - Tilføj til nuværende sæt" name="wear_add"/> <menu_item_call label="Tag af - Fjern fra nuværende sæt" name="take_off"/> @@ -14,6 +14,7 @@ <menu_item_call label="Ny undertrøje" name="New Undershirt"/> <menu_item_call label="Nye underbukser" name="New Underpants"/> <menu_item_call label="Ny alpha" name="New Alpha"/> + <menu_item_call label="Ny fysik" name="New Physics"/> <menu_item_call label="Ny tatovering" name="New Tattoo"/> </menu> <menu label="Nye kropsdele" name="New Body Parts"> @@ -24,4 +25,4 @@ </menu> <menu_item_call label="Omdøb sæt" name="rename"/> <menu_item_call label="Slet sæt" name="delete_outfit"/> -</menu> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/da/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/da/menu_places_gear_folder.xml index 3ee3c02fb1a2274b00c1aa95b0e31181ebf6cab5..5f573c2363e97e123c149b063b59491165089bb1 100644 --- a/indra/newview/skins/default/xui/da/menu_places_gear_folder.xml +++ b/indra/newview/skins/default/xui/da/menu_places_gear_folder.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_folder_gear"> +<toggleable_menu name="menu_folder_gear"> <menu_item_call label="Tilføj landemærke" name="add_landmark"/> <menu_item_call label="Tilføj mappe" name="add_folder"/> + <menu_item_call label="Gendan genstand" name="restore_item"/> <menu_item_call label="Klip" name="cut"/> <menu_item_call label="Kopiér" name="copy_folder"/> <menu_item_call label="Sæt ind" name="paste"/> @@ -12,4 +13,4 @@ <menu_item_call label="Udvid alle mapper" name="expand_all"/> <menu_item_call label="Luk alle mapper" name="collapse_all"/> <menu_item_check label="Sortér efter dato" name="sort_by_date"/> -</menu> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/da/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/da/menu_places_gear_landmark.xml index 21f425c49d8315f91e1b3756b406b94507af7466..13dbcdd42e2645f8139b129d06c03db340c9b299 100644 --- a/indra/newview/skins/default/xui/da/menu_places_gear_landmark.xml +++ b/indra/newview/skins/default/xui/da/menu_places_gear_landmark.xml @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_ladmark_gear"> +<toggleable_menu name="menu_ladmark_gear"> <menu_item_call label="Teleportér" name="teleport"/> <menu_item_call label="Mere information" name="more_info"/> <menu_item_call label="Vis pÃ¥ kort" name="show_on_map"/> <menu_item_call label="Tilføj landemærke" name="add_landmark"/> <menu_item_call label="Tilføj mappe" name="add_folder"/> + <menu_item_call label="Gendan genstand" name="restore_item"/> <menu_item_call label="Klip" name="cut"/> <menu_item_call label="Kopiér landemærke" name="copy_landmark"/> <menu_item_call label="Kopiér SLurl" name="copy_slurl"/> @@ -15,4 +16,4 @@ <menu_item_call label="Luk alle mapper" name="collapse_all"/> <menu_item_check label="Sortér efter dato" name="sort_by_date"/> <menu_item_call label="Opret favorit" name="create_pick"/> -</menu> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml index fc32be9dc96f5aea3ac9403c1deda6eae7875d81..d352312d1579fe67f817e1822e613169562a552b 100644 --- a/indra/newview/skins/default/xui/da/menu_viewer.xml +++ b/indra/newview/skins/default/xui/da/menu_viewer.xml @@ -5,7 +5,7 @@ <menu_item_call label="Mit instrumentpanel" name="Manage My Account"/> <menu_item_call label="Køb L$" name="Buy and Sell L$"/> <menu_item_call label="Profil" name="Profile"/> - <menu_item_call label="Skift sæt" name="ChangeOutfit"/> + <menu_item_call label="Udseende" name="ChangeOutfit"/> <menu_item_check label="Beholdning" name="Inventory"/> <menu_item_check label="Min beholdning" name="ShowSidetrayInventory"/> <menu_item_check label="Mine bevægelser" name="Gestures"/> @@ -33,6 +33,7 @@ <menu label="Verden" name="World"> <menu_item_check label="Mini-kort" name="Mini-Map"/> <menu_item_check label="Verdenskort" name="World Map"/> + <menu_item_check label="Søg" name="Search"/> <menu_item_call label="Foto" name="Take Snapshot"/> <menu_item_call label="Opret landemærke for dette sted" name="Create Landmark Here"/> <menu label="Profil for sted" name="Land"> @@ -117,6 +118,8 @@ <menu_item_call label="Billede (L$[COST])..." name="Upload Image"/> <menu_item_call label="Lyd (L$[COST])..." name="Upload Sound"/> <menu_item_call label="Animation (L$[COST])..." name="Upload Animation"/> + <menu_item_call label="Model..." name="Upload Model"/> + <menu_item_call label="Model Wizard..." name="Upload Model Wizard"/> <menu_item_call label="Mange (L$[COST] pr. fil)..." name="Bulk Upload"/> </menu> <menu_item_call label="Fortyd" name="Undo"/> @@ -156,7 +159,7 @@ <menu_item_check label="Alpha" name="Alpha"/> <menu_item_check label="Træer" name="Tree"/> <menu_item_check label="Avatarer" name="Character"/> - <menu_item_check label="Overflade" name="SurfacePath"/> + <menu_item_check label="Surface Patch" name="Surface Patch"/> <menu_item_check label="Himmel" name="Sky"/> <menu_item_check label="Vand" name="Water"/> <menu_item_check label="Jord" name="Ground"/> @@ -214,6 +217,7 @@ <menu_item_check label="Konsol med tekstur kategorier" name="Texture Category"/> <menu_item_check label="Hurtig-timere" name="Fast Timers"/> <menu_item_check label="Hukommelse" name="Memory"/> + <menu_item_check label="Scene Statistics" name="Scene Statistics"/> <menu_item_call label="Vis Regionsinfo i debug-konsol" name="Region Info to Debug Console"/> <menu_item_check label="Kamera" name="Camera"/> <menu_item_check label="Vind" name="Wind"/> @@ -221,8 +225,11 @@ </menu> <menu label="Vis info" name="Display Info"> <menu_item_check label="Vis tid" name="Show Time"/> + <menu_item_check label="Show Upload Cost" name="Show Upload Cost"/> <menu_item_check label="Vis gengivelses information" name="Show Render Info"/> + <menu_item_check label="Vis tekstur information" name="Show Texture Info"/> <menu_item_check label="Vis farve under cursor" name="Show Color Under Cursor"/> + <menu_item_check label="Vis memory" name="Show Memory"/> <menu_item_check label="Vis opdateringer pÃ¥ objekter" name="Show Updates"/> </menu> <menu label="Fremtving en fejl" name="Force Errors"> @@ -240,6 +247,14 @@ <menu_item_check label="Tilfældige framerates" name="Randomize Framerate"/> <menu_item_check label="Frame test" name="Frame Test"/> </menu> + <menu label="Render Metadata" name="Render Metadata"> + <menu_item_check label="Normals" name="Normals"/> + <menu_item_check label="Physics Shapes" name="Physics Shapes"/> + <menu_item_check label="Opdatér type" name="Update Type"/> + <menu_item_check label="LOD Info" name="LOD Info"/> + <menu_item_check label="Build Queue" name="Build Queue"/> + <menu_item_check label="Sculpt" name="Sculpt"/> + </menu> <menu label="Gengivelse" name="Rendering"> <menu_item_check label="Akser" name="Axes"/> <menu_item_check label="Wireframe" name="Wireframe"/> @@ -304,6 +319,7 @@ <menu_item_call label="Debug avatar teksturer" name="Debug Avatar Textures"/> </menu> <menu_item_check label="HTTP teksturer" name="HTTP Textures"/> + <menu_item_check label="HTTP Inventory" name="HTTP Inventory"/> <menu_item_check label="Benyt consol vindue ved næste opstart" name="Console Window"/> <menu_item_call label="Anmod om administrator status" name="Request Admin Options"/> <menu_item_call label="Forlad administrationsstatus" name="Leave Admin Options"/> @@ -328,4 +344,9 @@ </menu> <menu_item_call label=""God Tools"" name="God Tools"/> </menu> + <menu label="Admin" name="Deprecated"> + <menu label="Take Off Clothing" name="Take Off Clothing"> + <menu_item_call label="Fysik" name="Physics"/> + </menu> + </menu> </menu_bar> diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml index 30b54d3eb28367360738be839ecaf06b9e181998..4c0fbd280b394d26eb33bb1695ca6853d5c6e27b 100644 --- a/indra/newview/skins/default/xui/da/notifications.xml +++ b/indra/newview/skins/default/xui/da/notifications.xml @@ -72,9 +72,9 @@ Fejl detaljer: Beskeden kaldet '[_NAME]' blev ikke fundet i notificati <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="LoginFailedNoNetwork"> - Kunne ikke oprette forbindelse til [SECOND_LIFE_GRID]. -'[DIAGNOSTIC]' -Make sure your Internet connection is working properly. + Kunne ikke tilslutte til [SECOND_LIFE_GRID]. + '[DIAGNOSTIC]' +Check at Internet forbindelsen fungerer korrekt. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="MessageTemplateNotFound"> @@ -215,13 +215,6 @@ Du skal bruge en konto for at benytte [SECOND_LIFE]. Ønsker du at oprette en ko <notification name="InvalidCredentialFormat"> Du skal indtaste enten dit brugernavn eller bÃ¥de dit fornavn og efternavn for din avatar i brugernavn feltet, derefter log pÃ¥ igen. </notification> - <notification name="AddClassified"> - Annoncer vil vises i 'Annoncer' sektionen i søge biblioteket og pÃ¥ [http://secondlife.com/community/classifieds secondlife.com] i en uge. -Udfyld din annonce og klik pÃ¥ 'Udgiv...' for at tilf'je den til biblioteket. -Du vil blive spurgt om en pris nÃ¥r du klikker pÃ¥ 'Udgiv'. -Jo mere du betaler, jo højere oppe pÃ¥ listen vises annoncen, og den vil ogsÃ¥ optræde højere oppe nÃ¥r personer søger. - <usetemplate ignoretext="Hvordan man opretter en annonce" name="okcancelignore" notext="Cancel" yestext="OK"/> - </notification> <notification name="DeleteMedia"> Du har valgt at slette media tilknyttet denne overflade. Er du sikker pÃ¥ at du vil fortsætte? @@ -1078,6 +1071,12 @@ Det kan pÃ¥virke din indtastning af password. <notification name="RezItemNoPermissions"> Utilstrækkelige tilladelser til at danne genstanden. </notification> + <notification name="IMAcrossParentEstates"> + Ikke muligt at sende IM over forældre estates. + </notification> + <notification name="TransferInventoryAcrossParentEstates"> + Ikke muligt at overføre din beholdning over forældre parceller. + </notification> <notification name="UnableToLoadNotecard"> Ikke muligt at indlæse note. Prøv venligst igen. @@ -1648,6 +1647,10 @@ De vil blive blokeret nogle fÃ¥ sekunder af sikkerhedsmæssige Ã¥rsager. Din stemme er blevet slukket af moderatoren. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="UploadCostConfirmation"> + Dette upload vil koste L$[PRICE], ønsker du at sende? + <usetemplate name="okcancelbuttons" notext="Annullér" yestext="Send"/> + </notification> <notification name="ConfirmClearTeleportHistory"> Er du sikker pÃ¥ at du vil slette teleport historikken? <usetemplate name="okcancelbuttons" notext="Annullér" yestext="OK"/> @@ -1659,12 +1662,15 @@ Knappen vil blive vist nÃ¥r der er nok plads til den. <notification name="ShareNotification"> Vælg beboere at dele med. </notification> + <notification name="MeshUploadError"> + [LABEL] kunne ikke sendes: [MESSAGE] [IDENTIFIER] [INVALIDITY_IDENTIFIER] + </notification> <notification name="ShareItemsConfirmation"> Er du sikker pÃ¥ at du vil dele følgende genstande: <nolink>[ITEMS]</nolink> -Med følgende beboere: +Me følgende beboere: [RESIDENTS] <usetemplate name="okcancelbuttons" notext="Annullér" yestext="Ok"/> @@ -1675,6 +1681,19 @@ Med følgende beboere: <notification name="DeedToGroupFail"> Dedikering til gruppe fejlede. </notification> + <notification name="ReleaseLandThrottled"> + Parcellen [PARCEL_NAME] kan ikke efterlades pÃ¥ nuværende tidspunkt. + </notification> + <notification name="ReleasedLandWithReclaim"> + [AREA] m² parcellen '[PARCEL_NAME]' er blevet frigivet. + +Du har [RECLAIM_PERIOD] timer til at fÃ¥ den tilbage for L$0 før den udbydes til salg til andre beboere. + </notification> + <notification name="ReleasedLandNoReclaim"> + [AREA] m² parcel '[PARCEL_NAME]' er blevet frigivet. + +Parcellen kan nu købes af enhver beboer. + </notification> <notification name="AvatarRezNotification"> ( [EXISTENCE] sekunder i live ) Avatar '[NAME]' var ikke sky mere, efter [TIME] sekunder. @@ -1753,24 +1772,32 @@ Sluk for alles lyd? <notification label="StÃ¥ op" name="HintSit"> For at rejse dig op og forlad siddeposition, tryk pÃ¥ "StÃ¥ op" knappen. </notification> + <notification label="Tal" name="HintSpeak"> + Klik pÃ¥ tal knappen for at tænde og slukke for din mikrofon. + +Klik pÃ¥ den lille pil-op for at se stemme kontrolpanelet. + +Skjules tale knappen, vil stemmechat ikke være mulig. + </notification> <notification label="Undersøg verden" name="HintDestinationGuide"> Destinationsguiden indeholder tusinder af nye steder der kan opleves. Vælg venligst et sted og vælg Teleport for at komme derhen. </notification> - <notification label="Ændre dit udseende" name="HintAvatarPicker"> - Kunne du tænke dig at prøve et nyt udseende? Klik pÃ¥ knappen nedenfor for at se flere avatarer. - </notification> <notification label="Side panel" name="HintSidePanel"> FÃ¥ hurtig tilgang til din beholdning, sæt, profiler og andet i dette side panel. </notification> <notification label="Flyt" name="HintMove"> For at gÃ¥ eller løbe, Ã¥ben Flyt panelet for neden og brug pilene til at navigere. Du kan ogsÃ¥ bruge pile-tasterne pÃ¥ dit tastatur. </notification> + <notification label="" name="HintMoveClick"> + 1. Klik for at gÃ¥ +Klik et hvorsomhelst pÃ¥ jorden for at gÃ¥ til dette sted. + +2. Klik og træk for at rotere visning +Klik hvorsomhelst i verden for at rotere din visning + </notification> <notification label="Visningsnavn" name="HintDisplayName"> Angiv dit konfigurérbare visningsnavn her. Dette er i tillæg til dit unikke brugernavn, som ikke kan ændres. Du kan ændre hvordan du ser andre beboeres navne i dine indstillinger. </notification> - <notification label="Flyt" name="HintMoveArrows"> - For at gÃ¥, brug piletasterne pÃ¥ tastaturet. Du kan løbe ved at trykke to gange pÃ¥ Pil-Op - </notification> <notification label="Se" name="HintView"> For at ændre dit kamera-view, benyt kredsløbs og panoreringskontrollerne. Nulstil view ved at trykke Esc eller ved at gÃ¥. </notification> @@ -1796,6 +1823,54 @@ Sluk for alles lyd? <button name="cancel" text="Annullér"/> </form> </notification> + <notification label="" name="ModeChange"> + For at skifte tilstand skal du genstarte programmet. + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <notification label="" name="NoClassifieds"> + Oprettelse og redigering af annoncer er kun muligt i avanceret tilstand. Ønsker du at logge ud for at skifte tilstand? Valg af tilstand findes pÃ¥ login skærmbilledet. + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <notification label="" name="NoGroupInfo"> + Oprettelse og redigering af grupper er kun muligt i avanceret tilstand. Ønsker du at logge ud for at skifte tilstand? Valg af tilstand findes pÃ¥ login skærmbilledet. + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <notification label="" name="NoPlaceInfo"> + Det er kun muligt at vise profil for stedet i avanceret opsætning. Ønsker du at logge ud for at skifte tilstand? Valg af tilstand findes pÃ¥ login skærmbilledet. + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <notification label="" name="NoPicks"> + Oprettelse og redigering af favoritter er kun mulig i avanceret tilstand. Ønsker du at logge ud for at skifte tilstand? Valg af tilstand findes pÃ¥ login skærmbilledet. + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <notification label="" name="NoWorldMap"> + Det er kun muligt at se verdenskortet i avanceret tilstand.Ønsker du at logge ud for at skifte tilstand? Valg af tilstand findes pÃ¥ login skærmbilledet. + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <notification label="" name="NoVoiceCall"> + Stemme kald kan kun benttes i avanceret tilstand. Ønsker du at logge ud for at skifte tilstand? + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <notification label="" name="NoAvatarShare"> + Det er kun mulig at dele i avanceret tilstand. Ønsker du at logge ud for at skifte tilstand? + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <notification label="" name="NoAvatarPay"> + Det er kun muligt at betale andre beboere i avanceret tilstand. Ønsker du at logge ud for at skifte tilstand? + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <notification label="" name="NoInventory"> + Det er kun muligt at vise beholdning i avanceret tilstand. Ønsker du at logge ud og logge pÃ¥ i avanceret tilstand. + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <notification label="" name="NoAppearance"> + Udseende opsætning er kun tilgængelig i avanceret tilstand. Ønsker du at logge ud og logge pÃ¥ i avanceret tilstand. + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <notification label="" name="NoSearch"> + Søgning er kun mulig i avanceret tilstand. Ønsker du at logge ud og logge pÃ¥ i avanceret tilstand. + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> <global name="UnsupportedGLRequirements"> Det ser ikke ud til at din hardware opfylder minimumskravene til [APP_NAME]. [APP_NAME] kræver et OpenGL grafikkort som understøter 'multitexture'. Check eventuelt om du har de nyeste drivere for grafikkortet, og de nyeste service-packs og patches til dit operativsystem. diff --git a/indra/newview/skins/default/xui/da/panel_edit_physics.xml b/indra/newview/skins/default/xui/da/panel_edit_physics.xml new file mode 100644 index 0000000000000000000000000000000000000000..16c9b16fa31607ed9a685bb251717eb07ab8da3d --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_edit_physics.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_physics_panel"> + <panel label="" name="accordion_panel"> + <accordion name="physics_accordion"> + <accordion_tab name="physics_breasts_updown_tab" title="Bryst fasthed"/> + <accordion_tab name="physics_breasts_inout_tab" title="Kavalergang"/> + <accordion_tab name="physics_breasts_leftright_tab" title="Bryst sving"/> + <accordion_tab name="physics_belly_tab" title="Mave fasthed"/> + <accordion_tab name="physics_butt_tab" title="Bagdel fasthed"/> + <accordion_tab name="physics_butt_leftright_tab" title="Bagdel sving"/> + <accordion_tab name="physics_advanced_tab" title="Avancerede parametre"/> + </accordion> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_edit_wearable.xml b/indra/newview/skins/default/xui/da/panel_edit_wearable.xml index 4b9360f0d1569029626bfbed771c1848a5b1d817..906870e6d9d7862a3f2c7b449bb0597e070424b0 100644 --- a/indra/newview/skins/default/xui/da/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/da/panel_edit_wearable.xml @@ -45,6 +45,9 @@ <string name="edit_tattoo_title"> Redigerer tatovering </string> + <string name="edit_physics_title"> + Redigering af fysik + </string> <string name="shape_desc_text"> Kropsbygning: </string> @@ -90,6 +93,9 @@ <string name="tattoo_desc_text"> Tatovering: </string> + <string name="physics_desc_text"> + Fysik: + </string> <labeled_back_button label="Gem" name="back_btn" tool_tip="Tilbage til redigering"/> <text name="edit_wearable_title" value="Redigerer kropsbygning"/> <panel label="Trøje" name="wearable_type_panel"> diff --git a/indra/newview/skins/default/xui/da/panel_login.xml b/indra/newview/skins/default/xui/da/panel_login.xml index dc8d9bc432bbce55bb7b3305ce35633e6dcab2ee..2e0f726e1abb826ef9a657713da88a19a35afcac 100644 --- a/indra/newview/skins/default/xui/da/panel_login.xml +++ b/indra/newview/skins/default/xui/da/panel_login.xml @@ -17,6 +17,13 @@ </text> <check_box label="Husk password" name="remember_check"/> <button label="Log pÃ¥" name="connect_btn"/> + <text name="mode_selection_text"> + Tilstand: + </text> + <combo_box name="mode_combo" tool_tip="Vælg ønsket tilstand. Vælg basis for hurtig og nem udforskning og chat. Vælg avanceret for at fÃ¥ adgang til flere muligheder."> + <combo_box.item label="Basis" name="Basic"/> + <combo_box.item label="Avanceret" name="Advanced"/> + </combo_box> <text name="start_location_text"> Start ved: </text> diff --git a/indra/newview/skins/default/xui/da/panel_nearby_media.xml b/indra/newview/skins/default/xui/da/panel_nearby_media.xml index b4be70a22a75592a054f16f8f943f0e8b8632f56..ef8ed3ad072bb302721b954a9c7187b1f8afe824 100644 --- a/indra/newview/skins/default/xui/da/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/da/panel_nearby_media.xml @@ -19,7 +19,7 @@ <button label="Stop alt" name="all_nearby_media_disable_btn" tool_tip="Stop al media tæt pÃ¥"/> <button label="Start alt" name="all_nearby_media_enable_btn" tool_tip="Tænd al media tæt pÃ¥"/> <button name="open_prefs_btn" tool_tip="Vis media preferencer"/> - <button label="Mere >>" label_selected="Mindre <<" name="more_btn" tool_tip="Advancerede kontroller"/> + <button label="Mere >>" label_selected="<< Mindre" name="more_btn" tool_tip="Advancerede kontroller"/> <button label="Mere >>" label_selected="Mindre <<" name="less_btn" tool_tip="Advancerede kontroller"/> </panel> <panel name="nearby_media_panel"> diff --git a/indra/newview/skins/default/xui/da/panel_people.xml b/indra/newview/skins/default/xui/da/panel_people.xml index b85a33279aa39a5da001981eb19798a567b01fc1..925492b2d7d3b3077e6576ae39a2ee920be19dba 100644 --- a/indra/newview/skins/default/xui/da/panel_people.xml +++ b/indra/newview/skins/default/xui/da/panel_people.xml @@ -18,6 +18,8 @@ Leder du efter nogen at være sammen med? Prøv [secondlife:///app/worldmap Verd <string name="groups_filter_label" value="Filtrér grupper"/> <string name="no_filtered_groups_msg" value="Fandt du ikke det du søgte? Prøv [secondlife:///app/search/groups/[SEARCH_TERM] Søg]."/> <string name="no_groups_msg" value="Leder du efter grupper at være med i? Prøv [secondlife:///app/search/groups Søg]."/> + <string name="MiniMapToolTipMsg" value="[REGION](Dobbeltklik for at Ã¥bne kort, træk for at panorere)"/> + <string name="AltMiniMapToolTipMsg" value="[REGION](Dobbelt-klik fot at teleportere, træk for at panorere)"/> <filter_editor label="Filtrér" name="filter_input"/> <tab_container name="tabs"> <panel label="TÆT PÃ…" name="nearby_panel"> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml index ed499619f691e1df6f5dc572ba23b8149f5dba99..19c82509cdb2a7ac2a6a8a689e215d05fe77a1ea 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml @@ -30,7 +30,9 @@ <spinner label="Tid før chatvisning forsvinder:" name="nearby_toasts_lifetime"/> <spinner label="Tid før chatvisning forsvinder:" name="nearby_toasts_fadingtime"/> <check_box name="translate_chat_checkbox"/> - <text name="translate_chb_label" >Benyt maskin-oversættelse ved chat (hÃ¥ndteret af Google)</text> + <text name="translate_chb_label"> + Benyt maskinel oversættelse ved chat (hÃ¥ndteret af Google) + </text> <text name="translate_language_text" width="110"> Oversæt chat til : </text> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_colors.xml b/indra/newview/skins/default/xui/da/panel_preferences_colors.xml index b2b00db769c00bb506bc84fb9e46d0b29aec0482..cc3dc480bc8dba39185b0a3e7ff668a58eef95b4 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_colors.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_colors.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Farver" name="colors_panel"> <text name="effects_color_textbox"> - Mine effekter (selektions-strÃ¥le): + Mine effekter (selektions pejlelys): </text> - <color_swatch name="effect_color_swatch" tool_tip="Klik for at Ã¥bne farve-vælger"/> + <color_swatch name="effect_color_swatch" tool_tip="Klik for at Ã¥bne farvevælger"/> <text name="font_colors"> - Chat bogstavsfarver: + Vælg font farver: </text> <text name="text_box1"> Mig @@ -22,6 +22,9 @@ <text name="text_box5"> Fejl </text> + <text name="text_box10"> + Direkte + </text> <text name="text_box7"> Ejer </text> @@ -29,12 +32,12 @@ URL'er </text> <text name="bubble_chat"> - Baggrundsfarve til navne-skilt (berører ogsÃ¥ Bubble Chat): + Navneskilt baggrundsfarve (pÃ¥virker ogsÃ¥ chat talebobler): </text> - <color_swatch name="background" tool_tip="Vælg farve til navne-skilt"/> - <slider label="Uigennemsigtighed:" name="bubble_chat_opacity" tool_tip="Vælg gennemsigtighed for navneskilt"/> + <color_swatch name="background" tool_tip="Vælg navneskilt farve"/> + <slider label="Gennemsigtighed:" name="bubble_chat_opacity" tool_tip="Vælg navneskilt gennemsigtighed"/> <text name="floater_opacity"> - Vindue uigennemsigtighed: + Floater gennemsigtighed: </text> <slider label="Aktiv:" name="active"/> <slider label="Inaktiv:" name="inactive"/> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml index 15da1f9ec5819f13792bb1cc015c1bf679b65815..72200a07ad55fe5a18cf82b131151e6881cec827 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml @@ -28,8 +28,20 @@ </text> <check_box initial_value="sand" label="Gennemsigtig vand" name="TransparentWater"/> <check_box initial_value="true" label="Glatte flader og skin" name="BumpShiny"/> + <check_box initial_value="sand" label="Lokale lys" name="LocalLights"/> <check_box initial_value="true" label="Basale flader" name="BasicShaders" tool_tip="Ved at slÃ¥ dette valg fra, kan det forhindres at visse grafikkort drivere crasher."/> <check_box initial_value="true" label="Atmosfæriske flader" name="WindLightUseAtmosShaders"/> + <check_box initial_value="sand" label="Lys og skygger" name="UseLightShaders"/> + <check_box initial_value="sand" label=""Ambient Occlusion"" name="UseSSAO"/> + <check_box initial_value="sand" label="Skarphedsdybde" name="UseDoF"/> + <text name="shadows_label"> + Skygger: + </text> + <combo_box name="ShadowDetail"> + <combo_box.item label="Ingen" name="0"/> + <combo_box.item label="Sol/MÃ¥ne" name="1"/> + <combo_box.item label="Sol/MÃ¥ne + Projektorer" name="2"/> + </combo_box> <text name="reflection_label"> Reflektioner i vand: </text> @@ -40,6 +52,10 @@ <combo_box.item label="Alle avatarer og objekter" name="3"/> <combo_box.item label="Alt" name="4"/> </combo_box> + <slider label="Avatar fysik:" name="AvatarPhysicsDetail"/> + <text name="AvatarPhysicsDetailText"> + Lav + </text> <slider label="Maks. visnings-afstand:" name="DrawDistance"/> <text name="DrawDistanceMeterText2"> m @@ -78,7 +94,7 @@ Lav </text> <text name="AvatarRenderingText"> - Avatar gengivelse + Avatar rendering: </text> <check_box initial_value="true" label="Mini-figurer pÃ¥ lang afstand" name="AvatarImpostors"/> <check_box initial_value="true" label="Hardware Skinning" name="AvatarVertexProgram"/> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_sound.xml b/indra/newview/skins/default/xui/da/panel_preferences_sound.xml index 067463be02cebd8f012636b66ad7d11ddac1b1b1..26d2ae4abdf8099ea41fb3c5a9926d4a236bfc4d 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_sound.xml @@ -5,7 +5,9 @@ </panel.string> <slider label="Generel" name="System Volume"/> <check_box initial_value="true" name="mute_when_minimized"/> - <text name="mute_chb_label">Sluk lyd nÃ¥r minimeret</text> + <text name="mute_chb_label"> + Sluk for lyd nÃ¥r minimeret + </text> <slider label="Knapper" name="UI Volume"/> <slider label="Omgivelser" name="Wind Volume"/> <slider label="Lyd effekter" name="SFX Volume"/> diff --git a/indra/newview/skins/default/xui/da/panel_profile.xml b/indra/newview/skins/default/xui/da/panel_profile.xml index b8b99a9c21a17a0b9704c01e7c4e72633f0f90d1..db85eb23a840822a0aae5d36b17a9374091cdc8f 100644 --- a/indra/newview/skins/default/xui/da/panel_profile.xml +++ b/indra/newview/skins/default/xui/da/panel_profile.xml @@ -5,6 +5,12 @@ <string name="RegisterDateFormat"> [REG_DATE] ([AGE]) </string> + <string name="name_text_args"> + [NAME] + </string> + <string name="display_name_text_args"> + [DISPLAY_NAME] + </string> <layout_stack name="layout"> <layout_panel name="profile_stack"> <scroll_container name="profile_scroll"> @@ -19,7 +25,7 @@ <text name="title_acc_status_text" value="Konto status:"/> <text name="title_partner_text" value="Partner:"/> <panel name="partner_data_panel"> - <name_box initial_value="(henter)" name="partner_text"/> + <text initial_value="(henter)" name="partner_text"/> </panel> <text name="title_groups_text" value="Grupper:"/> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_region_general.xml b/indra/newview/skins/default/xui/da/panel_region_general.xml index 5b5dd411ac4b347de4b2a39379d90b8ee94893ae..667c88c5b1f494e461cbc863940f55b0e23bce52 100644 --- a/indra/newview/skins/default/xui/da/panel_region_general.xml +++ b/indra/newview/skins/default/xui/da/panel_region_general.xml @@ -25,6 +25,7 @@ <check_box label="Tillad at sælge land" name="allow_land_resell_check"/> <check_box label="Tillad at samle/dele land" name="allow_parcel_changes_check"/> <check_box label="Blokér visning af land i Søgning" name="block_parcel_search_check" tool_tip="Lad beboere se denne region og dens parceller i søgeresultater"/> + <check_box label="Til "mesh" objekter" name="mesh_rez_enabled_check" tool_tip="Lad personer rezze mesh objekter i denne region"/> <spinner label="Max besøgende" name="agent_limit_spin"/> <spinner label="Objekt bonus" name="object_bonus_spin"/> <text label="Indhold" name="access_text"> diff --git a/indra/newview/skins/default/xui/da/panel_script_ed.xml b/indra/newview/skins/default/xui/da/panel_script_ed.xml index 8997cab30ca98593f32c2b8aab265f03c8b6fc89..3dec4bf101b9cc44e8a5dbda6e3beb85db01b94b 100644 --- a/indra/newview/skins/default/xui/da/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/da/panel_script_ed.xml @@ -15,6 +15,9 @@ <panel.string name="Title"> Script: [NAME] </panel.string> + <panel.string name="external_editor_not_set"> + Vælg en editor ved at opsætte miljø-variablen LL_SCRIPT_EDITOR eller opsætning af Ekstern editor. + </panel.string> <menu_bar name="script_menu"> <menu label="Filer" name="File"> <menu_item_call label="Gem" name="Save"/> diff --git a/indra/newview/skins/default/xui/da/panel_scrolling_param_base.xml b/indra/newview/skins/default/xui/da/panel_scrolling_param_base.xml new file mode 100644 index 0000000000000000000000000000000000000000..fa659040eaa57c1c5e325093dcc427058ea160b3 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_scrolling_param_base.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="LLScrollingPanelParamBase"> + <slider label="[DESC]" name="param slider"/> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_sound_devices.xml b/indra/newview/skins/default/xui/da/panel_sound_devices.xml new file mode 100644 index 0000000000000000000000000000000000000000..27b7666a1f50a22ce864dee7b71c5104d84118b2 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_sound_devices.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel label="Opsætning for udstyr" name="device_settings_panel"> + <panel.string name="default_text"> + Standard + </panel.string> + <text name="Input"> + Input + </text> + <text name="My volume label"> + Min lydstyrke: + </text> + <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Ændre lydstyrke med denne skyder"/> + <text name="wait_text"> + Vent venligst + </text> + <text name="Output"> + Output + </text> +</panel> diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml index aa02fc14e5e8eb02e046f7312b08b2f383c907bb..68b861fe924a640126a205a9bdfc9d7287c53238 100644 --- a/indra/newview/skins/default/xui/da/strings.xml +++ b/indra/newview/skins/default/xui/da/strings.xml @@ -115,6 +115,140 @@ <string name="Quit"> Afslut </string> + <string name="LoginFailedViewerNotPermitted"> + Den klient du benytter kan ikke længere fÃ¥ adgang til Second Life. Besøg venligst denne side for at hente en ny klient: +http://secondlife.com/download + +For mere information, se denne FAQ: +http://secondlife.com/viewer-access-faq + </string> + <string name="LoginIntermediateOptionalUpdateAvailable"> + Valgfri klient opdatering tilgængelig: [VERSION] + </string> + <string name="LoginFailedRequiredUpdate"> + PÃ¥krævet opdatering a klient: [VERSION] + </string> + <string name="LoginFailedAlreadyLoggedIn"> + Din avatar er allerede logget pÃ¥. + </string> + <string name="LoginFailedAuthenticationFailed"> + Beklager! vi kunne ikke logge dig pÃ¥. +Undersøg venligst at du har indtastet det rette +Please check to make sure you entered the right + * Brugernavn (like bobsmith12 or steller.sunshine) + * Password +Check ogsÃ¥ at Caps Lock ikke er aktiveret. + </string> + <string name="LoginFailedPasswordChanged"> + Som en sikkerhedsforanstaltning er dit password blevet ændret. +GÃ¥r venligst til din konto-side pÃ¥ http://secondlife.com/password +og besvar sikkerhedsspørgsmÃ¥l for at nulstille dit password. +Vi undskylder besværet. + </string> + <string name="LoginFailedPasswordReset"> + vi har lavet nogle ændringer i vores system og det er nødvendigt at nulstille dit password. +GÃ¥r venligst til din konto-side pÃ¥ http://secondlife.com/password +og besvar sikkerhedsspørgsmÃ¥l for at nulstille dit password. +Vi undskylder besværet. + </string> + <string name="LoginFailedEmployeesOnly"> + Second Life er midlertidig lukket ned for vedligeholdelse. +Kun medarbejdere kan logge pÃ¥ for øjeblikket. +Check www.secondlife.com/status for opdateringer. + </string> + <string name="LoginFailedPremiumOnly"> + Second Life har midlertidig begrænset muligheden for log-in for at sikre, at brugere pÃ¥ systemet ikke fÃ¥r dÃ¥rlige svartider. + + Brugere med gratis-konti vil ikke kunne logge pÃ¥ Second Life pÃ¥ dette tidspunkt. + </string> + <string name="LoginFailedComputerProhibited"> + Second Life kan ikke tilgÃ¥s fra dennecomputer. +Hvis du mener dette er en fejl, kontakt venligst support@secondlife.com. + </string> + <string name="LoginFailedAcountSuspended"> + Din konto vil ikke være tilgængelig før +[TIME] Pacific Time. + </string> + <string name="LoginFailedAccountDisabled"> + Vi kan desværre ikke behandle forespøgsel lige nu. +Kontakt venligst Second Life supper for assitance via http://secondlife.com/support. +Hvis du ikke kan ændre dit password ring venligst +1 (866) 476-9763. + </string> + <string name="LoginFailedTransformError"> + Data inkonsistens registret ved login. +Kontakt venligst support@secondlife.com. + </string> + <string name="LoginFailedAccountMaintenance"> + Der foretages vedligehold pÃ¥ din konto lige nu. +Din konto vil ikke være tilgængelig før +[TIME] Pacific Time. +Hvis du mener dette er en fejl, kontakt venligst support@secondlife.com. + </string> + <string name="LoginFailedPendingLogoutFault"> + Forespøgsel pÃ¥ logout blev besvaret med en fejl fra simulatoren. + </string> + <string name="LoginFailedPendingLogout"> + Systemet er i gang med at logge dig ud netop nu. +Din konto vil ikke være tilgængelig før +[TIME] Pacific Time. + </string> + <string name="LoginFailedUnableToCreateSession"> + Ikke muligt at oprette gyldig session. + </string> + <string name="LoginFailedUnableToConnectToSimulator"> + Ikke muligt at koble til en simulator. + </string> + <string name="LoginFailedRestrictedHours"> + Din konto kan kun tilgÃ¥ Second Life +mellem [START] [END] Pacific Time. +Kom venligst tilbage i dette tidsrum. + +Hvis du mener dette er en fejl, kontakt venligst support@secondlife.com. + </string> + <string name="LoginFailedIncorrectParameters"> + Ugyldig parametre. +Hvis du mener dette er en fejl, kontakt venligst support@secondlife.com. + </string> + <string name="LoginFailedFirstNameNotAlphanumeric"> + Fornavn parameter skal være alfanumerisk +Hvis du mener dette er en fejl, kontakt venligst support@secondlife.com. + </string> + <string name="LoginFailedLastNameNotAlphanumeric"> + Efternavn parameter skal være alfanumerisk +Hvis du mener dette er en fejl, kontakt venligst support@secondlife.com. + </string> + <string name="LogoutFailedRegionGoingOffline"> + Regionen er lukket ned. +Prøv at logge pÃ¥ om lidt igen. + </string> + <string name="LogoutFailedAgentNotInRegion"> + Avatar ikke i en region. +Prøv venligst om lidt igen. + </string> + <string name="LogoutFailedPendingLogin"> + The region was logging in another session. +Please try logging in again in a minute. + </string> + <string name="LogoutFailedLoggingOut"> + Region har lukket sidste session ned. +Prøv venligst om lidt igen. + </string> + <string name="LogoutFailedStillLoggingOut"> + Regionen er stadig ved at lukke forrige session ud. +Prøv venligst om lidt igen. + </string> + <string name="LogoutSucceeded"> + Region har lukket sidste session ned. +Prøv venligst om lidt igen. + </string> + <string name="LogoutFailedLogoutBegun"> + Region er i gang med at logge ud. +Prøv venligst om lidt igen. + </string> + <string name="LoginFailedLoggingOutSession"> + Region er i gang med at lukket sidste session ned. +Prøv venligst om lidt igen. + </string> <string name="AgentLostConnection"> Denne region kan have problemer. Tjek venligst din forbindelse til internettet. </string> @@ -423,6 +557,9 @@ <string name="symbolic folder link"> link til mappe </string> + <string name="mesh"> + mesh + </string> <string name="AvatarAway"> Væk </string> @@ -852,6 +989,9 @@ <string name="tattoo"> Tatovering </string> + <string name="physics"> + Fysik + </string> <string name="invalid"> ugyldig </string> @@ -891,6 +1031,9 @@ <string name="tattoo_not_worn"> Tatovering ikke benyttet </string> + <string name="physics_not_worn"> + Ikke noget fysisk bÃ¥ret + </string> <string name="invalid_not_worn"> ugyldig </string> @@ -939,6 +1082,9 @@ <string name="create_new_tattoo"> Opret ny tatovering </string> + <string name="create_new_physics"> + Opret ny fysik + </string> <string name="create_new_invalid"> ugyldig </string> @@ -1037,7 +1183,7 @@ </string> <string name="WornOnAttachmentPoint" value=" (bÃ¥ret pÃ¥ [ATTACHMENT_POINT])"/> <string name="ActiveGesture" value="[GESLABEL] (aktiv)"/> - <string name="Chat" value=" Chat : "/> + <string name="Chat Message" value="Chat :"/> <string name="Sound" value=" Lyd : "/> <string name="Wait" value=" --- Vent : "/> <string name="AnimFlagStop" value=" Stop Animation : "/> @@ -1141,6 +1287,9 @@ <string name="InvFolder Accessories"> Tilbehør </string> + <string name="InvFolder Meshes"> + Meshes + </string> <string name="InvFolder Friends"> Venner </string> @@ -1455,7 +1604,7 @@ (ukendt) </string> <string name="SummaryForTheWeek" value="Opsummering for denne uge, begyndende med "/> - <string name="NextStipendDay" value="Næste stipendie dag er "/> + <string name="NextStipendDay" value=". Næste stipendie dag er "/> <string name="GroupIndividualShare" value=" Gruppe Individuel Delt"/> <string name="GroupColumn" value="Gruppe"/> <string name="Balance"> @@ -1819,12 +1968,6 @@ Forventet .wav, .tga, .bmp, .jpg, .jpeg, or .bvh <string name="accel-win-shift"> Shift+ </string> - <string name="Esc"> - Esc - </string> - <string name="Home"> - Hjem - </string> <string name="FileSaved"> Fil gemt </string> @@ -1942,6 +2085,9 @@ Forventet .wav, .tga, .bmp, .jpg, .jpeg, or .bvh <string name="Other"> Andet </string> + <string name="Rental"> + Leje + </string> <string name="Any"> Enhver </string> @@ -2178,6 +2324,114 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE]. <string name="Bulbous Nose"> Kartoffelnæse </string> + <string name="Breast Physics Mass"> + Bryst fylde + </string> + <string name="Breast Physics Smoothing"> + Brystudjævning + </string> + <string name="Breast Physics Gravity"> + Bryst tyngde + </string> + <string name="Breast Physics Drag"> + Bryst inerti + </string> + <string name="Breast Physics InOut Max Effect"> + Maks. effekt + </string> + <string name="Breast Physics InOut Spring"> + Fjeder + </string> + <string name="Breast Physics InOut Gain"> + Øg + </string> + <string name="Breast Physics InOut Damping"> + Dæmpning + </string> + <string name="Breast Physics UpDown Max Effect"> + Maks. effekt + </string> + <string name="Breast Physics UpDown Spring"> + Fjeder + </string> + <string name="Breast Physics UpDown Gain"> + Øg + </string> + <string name="Breast Physics UpDown Damping"> + Dæmpning + </string> + <string name="Breast Physics LeftRight Max Effect"> + Maks. effekt + </string> + <string name="Breast Physics LeftRight Spring"> + Fjeder + </string> + <string name="Breast Physics LeftRight Gain"> + Øg + </string> + <string name="Breast Physics LeftRight Damping"> + Dæmpning + </string> + <string name="Belly Physics Mass"> + Mave omfang + </string> + <string name="Belly Physics Smoothing"> + maveudjævning + </string> + <string name="Belly Physics Gravity"> + Mave tyngde + </string> + <string name="Belly Physics Drag"> + Mave inerti + </string> + <string name="Belly Physics UpDown Max Effect"> + Maks. effekt + </string> + <string name="Belly Physics UpDown Spring"> + Fjeder + </string> + <string name="Belly Physics UpDown Gain"> + Øg + </string> + <string name="Belly Physics UpDown Damping"> + Dæmpning + </string> + <string name="Butt Physics Mass"> + Bagdel omfang + </string> + <string name="Butt Physics Smoothing"> + Bagdelsudjævning + </string> + <string name="Butt Physics Gravity"> + Bagdel tyngde + </string> + <string name="Butt Physics Drag"> + Bagdel modstand + </string> + <string name="Butt Physics UpDown Max Effect"> + Maks. effekt + </string> + <string name="Butt Physics UpDown Spring"> + Fjeder + </string> + <string name="Butt Physics UpDown Gain"> + Øg + </string> + <string name="Butt Physics UpDown Damping"> + Dæmpning + </string> + <string name="Butt Physics LeftRight Max Effect"> + Maks. effekt + </string> + <string name="Butt Physics LeftRight Spring"> + Fjeder + </string> + <string name="Butt Physics LeftRight Gain"> + Øg + </string> + <string name="Butt Physics LeftRight Damping"> + Dæmpning + </string> <string name="Bushy Eyebrows"> Buskede øjenbryn </string> @@ -2187,6 +2441,9 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE]. <string name="Butt Size"> Størrelse bagdel </string> + <string name="Butt Gravity"> + Bagdel tyngde + </string> <string name="bustle skirt"> Tournure </string> @@ -3540,6 +3797,9 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE]. <string name="session_initialization_timed_out_error"> Initialisering af session er "timed out" </string> + <string name="Home position set."> + Hjemmeposition sat. + </string> <string name="voice_morphing_url"> http://secondlife.com/landing/voicemorphing </string> @@ -3662,6 +3922,9 @@ Krænkelsesanmeldelse <string name="New Tattoo"> Ny tatovering </string> + <string name="New Physics"> + Ny fysik + </string> <string name="Invalid Wearable"> Kan ikke tages pÃ¥ </string> @@ -3861,7 +4124,7 @@ Krænkelsesanmeldelse <string name="Notices"> Beskeder </string> - <string name="Chat"> + <string name="Chat" value=" Chat : "> Chat </string> <string name="DeleteItems"> @@ -3873,4 +4136,348 @@ Krænkelsesanmeldelse <string name="EmptyOutfitText"> Der er ingen genstande i dette sæt </string> + <string name="ExternalEditorNotSet"> + Vælg en editor via opsætningen for Ekstern editor. + </string> + <string name="ExternalEditorNotFound"> + Kan ikke benytte deb eksterne editor der er angivet. +Prøv at omkrandse stien til editor med anførselstegn. +(f.eks. "/stil til min editor" "%s") + </string> + <string name="ExternalEditorCommandParseError"> + Fejl ved hÃ¥ndtering af kommando til ekstern editor. + </string> + <string name="ExternalEditorFailedToRun"> + Den eksterne editor kunne ikke startes. + </string> + <string name="Esc"> + Esc + </string> + <string name="Space"> + Space + </string> + <string name="Enter"> + Enter + </string> + <string name="Tab"> + Tab + </string> + <string name="Ins"> + Ins + </string> + <string name="Del"> + Del + </string> + <string name="Backsp"> + Backsp + </string> + <string name="Shift"> + Shift + </string> + <string name="Ctrl"> + Ctrl + </string> + <string name="Alt"> + Alt + </string> + <string name="CapsLock"> + CapsLock + </string> + <string name="Home"> + Hjem + </string> + <string name="End"> + End + </string> + <string name="PgUp"> + PgUp + </string> + <string name="PgDn"> + PgDn + </string> + <string name="F1"> + F1 + </string> + <string name="F2"> + F2 + </string> + <string name="F3"> + F3 + </string> + <string name="F4"> + F4 + </string> + <string name="F5"> + F5 + </string> + <string name="F6"> + F6 + </string> + <string name="F7"> + F7 + </string> + <string name="F8"> + F8 + </string> + <string name="F9"> + F9 + </string> + <string name="F10"> + F10 + </string> + <string name="F11"> + F11 + </string> + <string name="F12"> + F12 + </string> + <string name="Add"> + Tilføj + </string> + <string name="Subtract"> + Træk fra + </string> + <string name="Multiply"> + Multiplicer + </string> + <string name="Divide"> + Divider + </string> + <string name="PAD_DIVIDE"> + PAD_DIVIDE + </string> + <string name="PAD_LEFT"> + PAD_LEFT + </string> + <string name="PAD_RIGHT"> + PAD_RIGHT + </string> + <string name="PAD_DOWN"> + PAD_DOWN + </string> + <string name="PAD_UP"> + PAD_UP + </string> + <string name="PAD_HOME"> + PAD_HOME + </string> + <string name="PAD_END"> + PAD_END + </string> + <string name="PAD_PGUP"> + PAD_PGUP + </string> + <string name="PAD_PGDN"> + PAD_PGDN + </string> + <string name="PAD_CENTER"> + PAD_CENTER + </string> + <string name="PAD_INS"> + PAD_INS + </string> + <string name="PAD_DEL"> + PAD_DEL + </string> + <string name="PAD_Enter"> + PAD_Enter + </string> + <string name="PAD_BUTTON0"> + PAD_BUTTON0 + </string> + <string name="PAD_BUTTON1"> + PAD_BUTTON1 + </string> + <string name="PAD_BUTTON2"> + PAD_BUTTON2 + </string> + <string name="PAD_BUTTON3"> + PAD_BUTTON3 + </string> + <string name="PAD_BUTTON4"> + PAD_BUTTON4 + </string> + <string name="PAD_BUTTON5"> + PAD_BUTTON5 + </string> + <string name="PAD_BUTTON6"> + PAD_BUTTON6 + </string> + <string name="PAD_BUTTON7"> + PAD_BUTTON7 + </string> + <string name="PAD_BUTTON8"> + PAD_BUTTON8 + </string> + <string name="PAD_BUTTON9"> + PAD_BUTTON9 + </string> + <string name="PAD_BUTTON10"> + PAD_BUTTON10 + </string> + <string name="PAD_BUTTON11"> + PAD_BUTTON11 + </string> + <string name="PAD_BUTTON12"> + PAD_BUTTON12 + </string> + <string name="PAD_BUTTON13"> + PAD_BUTTON13 + </string> + <string name="PAD_BUTTON14"> + PAD_BUTTON14 + </string> + <string name="PAD_BUTTON15"> + PAD_BUTTON15 + </string> + <string name="-"> + - + </string> + <string name="="> + = + </string> + <string name="`"> + ` + </string> + <string name=";"> + ; + </string> + <string name="["> + [ + </string> + <string name="]"> + ] + </string> + <string name="\"> + \ + </string> + <string name="0"> + 0 + </string> + <string name="1"> + 1 + </string> + <string name="2"> + 2 + </string> + <string name="3"> + 3 + </string> + <string name="4"> + 4 + </string> + <string name="5"> + 5 + </string> + <string name="6"> + 6 + </string> + <string name="7"> + 7 + </string> + <string name="8"> + 8 + </string> + <string name="9"> + 9 + </string> + <string name="A"> + A + </string> + <string name="B"> + B + </string> + <string name="C"> + C + </string> + <string name="D"> + D + </string> + <string name="E"> + E + </string> + <string name="F"> + F + </string> + <string name="G"> + G + </string> + <string name="H"> + H + </string> + <string name="I"> + I + </string> + <string name="J"> + J + </string> + <string name="K"> + K + </string> + <string name="L"> + L + </string> + <string name="M"> + M + </string> + <string name="N"> + N + </string> + <string name="O"> + O + </string> + <string name="P"> + P + </string> + <string name="Q"> + Q + </string> + <string name="R"> + R + </string> + <string name="S"> + S + </string> + <string name="T"> + T + </string> + <string name="U"> + U + </string> + <string name="V"> + V + </string> + <string name="W"> + W + </string> + <string name="X"> + X + </string> + <string name="Y"> + Y + </string> + <string name="Z"> + Z + </string> + <string name="BeaconParticle"> + Viser pejlelys for for partikler (blÃ¥) + </string> + <string name="BeaconPhysical"> + Viser pejlelys for fysiske objekter (grøn) + </string> + <string name="BeaconScripted"> + Viser pejlelys for "scriptede" objekter (rød) + </string> + <string name="BeaconScriptedTouch"> + Viser pejlelys for "scriptede" objekter med berøringsfunktion (rød) + </string> + <string name="BeaconSound"> + Viser pejlelys for lyd (gul) + </string> + <string name="BeaconMedia"> + Viser pejlelys for media (hvid) + </string> + <string name="ParticleHiding"> + Skjuler partikler + </string> </strings> diff --git a/indra/newview/skins/default/xui/de/floater_about.xml b/indra/newview/skins/default/xui/de/floater_about.xml index d15ab105c2aed1a2a56a8fb916e5296c694e31fa..578dcd50e50b765848ac3ed5e4b5f7c7a5ae58d5 100644 --- a/indra/newview/skins/default/xui/de/floater_about.xml +++ b/indra/newview/skins/default/xui/de/floater_about.xml @@ -55,27 +55,33 @@ Wir bedanken uns bei folgenden Einwohnern, die uns geholfen haben, dies zur bish </panel> <panel label="Lizenzen" name="licenses_panel"> <text_editor name="credits_editor"> - 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion -APR Copyright (C) 2000-2004 The Apache Software Foundation -cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) + 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion. +APR Copyright (C) 2000-2004 The Apache Software Foundation. +Collada DOM Copyright 2005 Sony Computer Entertainment Inc. +cURL Copyright (C) 1996-2002, Daniel Stenberg (daniel@haxx.se). +DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc. expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). GL Copyright (C) 1999-2004 Brian Paul. +GLOD Copyright (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University sowie David Luebke, Brenden Schubert, University of Virginia. +google-perftools Copyright (c) 2005, Google Inc. Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. -jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) +jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW). jpeglib Copyright (C) 1991-1998, Thomas G. Lane. -ogg/vorbis Copyright (C) 2001, Xiphophorus +ogg/vorbis Copyright (C) 2001, Xiphophorus. OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. -SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga -SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +PCRE Copyright (c) 1997-2008 University of Cambridge. +SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga. +SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com). xmlrpc-epi Copyright (C) 2000 Epinions, Inc. zlib Copyright (C) 1995-2002 Jean-loup Gailly und Mark Adler. google-perftools Copyright (c) 2005, Google Inc. -Alle Rechte vorbehalten. Details siehe licenses.txt. +Second Life Viewer verwendet Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (und Lizenzgeber). Alle Rechte vorbehalten. Details siehe www.havok.com. + +Alle Rechte vorbehalten. Details siehe licenses.txt. -Voice-Chat-Audiocoding: Polycom(R) Siren14(TM) -(ITU-T Empf.G.722.1 Anhang C) +Audiocodierung für Voice-Chat: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) </text_editor> </panel> </tab_container> diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml index 2d8459479a227a31d62e7a15d143e1c001077964..f1e42232c8f0cccf4a76f51b892e73988a2415da 100644 --- a/indra/newview/skins/default/xui/de/floater_about_land.xml +++ b/indra/newview/skins/default/xui/de/floater_about_land.xml @@ -103,17 +103,17 @@ Preis: [PRICE] L$ ([PRICE_PER_SQM]L$/m²) </text> <text name="SalePending"/> - <button bottom="-222" label="Land verkaufen" label_selected="Land verkaufen..." name="Sell Land..."/> + <button label="Land verkaufen" label_selected="Land verkaufen..." name="Sell Land..."/> <text name="For sale to"> Zum Verkauf an: [BUYER] </text> - <text left_delta="-50" name="Sell with landowners objects in parcel." width="240"> + <text name="Sell with landowners objects in parcel."> Objekte sind im Verkauf eingeschlossen </text> - <text name="Selling with no objects in parcel." width="260"> + <text name="Selling with no objects in parcel."> Objekte sind im Verkauf nicht eingeschlossen </text> - <button bottom="-222" label="Landverkauf abbrechen" label_selected="Landverkauf abbrechen" name="Cancel Land Sale"/> + <button label="Landverkauf abbrechen" label_selected="Landverkauf abbrechen" name="Cancel Land Sale"/> <text name="Claimed:"> Gekauft am: </text> diff --git a/indra/newview/skins/default/xui/de/floater_buy_contents.xml b/indra/newview/skins/default/xui/de/floater_buy_contents.xml index ccafa11cf47246f3e042f45c96de4cc52182297f..bd6ace6bdaa31d7869786e73aab16cc342aef986 100644 --- a/indra/newview/skins/default/xui/de/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/de/floater_buy_contents.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater min_width="300" name="floater_buy_contents" title="INHALT KAUFEN"> <text name="contains_text"> - [NAME] enthält: + <nolink>[NAME]</nolink> enthält: </text> <text name="buy_text"> [AMOUNT] L$ von [NAME] kaufen? diff --git a/indra/newview/skins/default/xui/de/floater_customize.xml b/indra/newview/skins/default/xui/de/floater_customize.xml deleted file mode 100644 index 36515777978d50b9671122bc3c1f4f7e2b360724..0000000000000000000000000000000000000000 --- a/indra/newview/skins/default/xui/de/floater_customize.xml +++ /dev/null @@ -1,529 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="AUSSEHEN"> - <tab_container name="customize tab container"> - <text label="Körperteile" name="body_parts_placeholder"> - Körperteile - </text> - <panel label="Form" name="Shape"> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - <button label="Körper" label_selected="Körper" name="Body"/> - <button label="Kopf" label_selected="Kopf" name="Head"/> - <button label="Augen" label_selected="Augen" name="Eyes"/> - <button label="Ohren" label_selected="Ohren" name="Ears"/> - <button label="Nase" label_selected="Nase" name="Nose"/> - <button label="Mund" label_selected="Mund" name="Mouth"/> - <button label="Kinn" label_selected="Kinn" name="Chin"/> - <button label="Oberkörper" label_selected="Oberkörper" name="Torso"/> - <button label="Beine" label_selected="Beine" name="Legs"/> - <radio_group name="sex radio"> - <radio_item label="Weiblich" name="radio" value="0"/> - <radio_item label="Männlich" name="radio2" value="1"/> - </radio_group> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie eine neue Form aus dem Inventar auf Ihren Avatar, um diese anzulegen. Sie können aber auch eine neue erstellen und diese anlegen. - </text> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label"> - Form: - </text> - <button label="Neue Form/Gestalt" label_selected="Neue Form/Gestalt" name="Create New"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - </panel> - <panel label="Haut" name="Skin"> - <button label="Hautfarbe" label_selected="Hautfarbe" left="2" name="Skin Color" width="92"/> - <button label="Gesichtsdetails" label_selected="Gesichtsdetails" left="2" name="Face Detail" width="92"/> - <button label="Make-Up" label_selected="Make-Up" left="2" name="Makeup" width="92"/> - <button label="Körperdetails" label_selected="Körperdetails" left="2" name="Body Detail" width="92"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie eine neue Skin (Haut) aus dem Inventar auf Ihren Avatar, um diese anzulegen. Sie können aber auch eine neue erstellen und diese anlegen. - </text> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Haut: - </text> - <texture_picker label="Kopftattoo" name="Head Tattoos" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <texture_picker label="Obere Tattoos" name="Upper Tattoos" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <texture_picker label="Untere Tattoos" name="Lower Tattoos" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <button label="Neue Haut" label_selected="Neue Haut" name="Create New"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Haar" name="Hair"> - <button label="Farbe" label_selected="Farbe" name="Color"/> - <button label="Stil" label_selected="Stil" name="Style"/> - <button label="Augenbrauen" label_selected="Augenbrauen" name="Eyebrows"/> - <button label="Gesichtshaar" label_selected="Gesichtshaar" name="Facial"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie Haar aus dem Inventar auf Ihren Avatar, um dieses anzulegen. Sie können aber auch neues Haar erstellen und anlegen. - </text> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Haare: - </text> - <texture_picker label="Textur" name="Texture" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <button label="Neue Haare" label_selected="Neue Haare" name="Create New"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Augen" name="Eyes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie neue Augen aus dem Inventar auf Ihren Avatar, um diese anzulegen. Sie können aber auch neue Augen erstellen und diese anlegen. - </text> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Augen: - </text> - <texture_picker label="Iris" name="Iris" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <button label="Neue Augen" label_selected="Neue Augen" name="Create New"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <text label="Kleidung" name="clothes_placeholder"> - Kleidung - </text> - <panel label="Hemd" name="Shirt"> - <texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/> - <button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button label="Neues Hemd" label_selected="Neues Hemd" name="Create New"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie ein neues Hemd aus dem Inventar auf Ihren Avatar, um dieses anzuziehen. Sie können aber auch ein neues Hemd erstellen und dieses anlegen. - </text> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Hemd: - </text> - </panel> - <panel label="Hose" name="Pants"> - <texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/> - <button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button label="Neue Hose" label_selected="Neue Hose" name="Create New"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie eine neue Hose aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anziehen. - </text> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Hose: - </text> - </panel> - <panel label="Schuhe" name="Shoes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie neue Schuhe aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch neue Schuhe erstellen und diese anlegen. - </text> - <button label="Neue Schuhe" label_selected="Neue Schuhe" name="Create New"/> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Schuhe: - </text> - <texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/> - <button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Socken" name="Socks"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie neue Socken aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch neue erstellen und diese anziehen. - </text> - <button label="Neue Socken" label_selected="Neue Socken" name="Create New"/> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Socken: - </text> - <texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/> - <button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Jacke" name="Jacket"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie eine neue Jacke aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anziehen. - </text> - <button label="Neue Jacke" label_selected="Neue Jacke" name="Create New"/> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Jacke: - </text> - <texture_picker label="Stoff: oben" name="Upper Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <texture_picker label="Stoff: unten" name="Lower Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/> - <button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Handschuhe" name="Gloves"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie neue Handschuhe aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch neue erstellen und diese anziehen. - </text> - <button label="Neue Handschuhe" label_selected="Neue Handschuhe" name="Create New"/> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Handschuhe: - </text> - <texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/> - <button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Unterhemd" name="Undershirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie ein neues Unterhemd aus dem Inventar auf Ihren Avatar, um dieses anzuziehen. Sie können aber auch ein neues Unterhemd erstellen und dieses anziehen. - </text> - <button label="Neues Unterhemd" label_selected="Neues Unterhemd" name="Create New"/> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Unterhemd: - </text> - <texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/> - <button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Unterhose" name="Underpants"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie eine neue Unterhose aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anziehen. - </text> - <button label="Neue Unterhose" label_selected="Neue Unterhose" name="Create New"/> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Unterhose: - </text> - <texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/> - <button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Rock" name="Skirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie einen neuen Rock aus dem Inventar auf Ihren Avatar, um diesen anzuziehen. Sie können aber auch einen neuen Rock erstellen und diesen anziehen. - </text> - <button label="Neuer Rock" label_selected="Neuer Rock" name="Create New"/> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Rock: - </text> - <texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/> - <button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Tätowierung" name="Tattoo"> - <text name="title"> - Tätowierung - </text> - <text name="title_no_modify"> - [BESCHR]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [BESCHR]: wird geladen... - </text> - <text name="title_not_worn"> - [BESCHR]: nicht getragen - </text> - <text name="path"> - Befindet sich in [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie eine neue Tätowierung aus dem Inventar auf Ihren Avatar, um diese anzulegen. Sie können aber auch eine neue erstellen und diese anlegen. - </text> - <button label="Neue Tätowierung erstellen" label_selected="Neue Tätowierung erstellen" name="Create New"/> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label"> - Tätowierung: - </text> - <texture_picker label="Kopftattoo" name="Head Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <texture_picker label="Obere Tattoos" name="Upper Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <texture_picker label="Untere Tattoos" name="Lower Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <button label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button label="Speichern" label_selected="Speichern" name="Save"/> - <button label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Alpha" name="Alpha"> - <text name="title"> - Alpha - </text> - <text name="title_no_modify"> - [BESCHR]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [BESCHR]: wird geladen... - </text> - <text name="title_not_worn"> - [BESCHR]: nicht getragen - </text> - <text name="path"> - Befindet sich in [PATH] - </text> - <text name="not worn instructions"> - Sie können eine neue Alpha-Maske anlegen, indem Sie eine von Ihrem Inventar auf Ihren Avatar ziehen. Sie können aber auch eine neue erstellen und diese anlegen. - </text> - <button label="Neue Alpha erstellen" label_selected="Neue Alpha erstellen" name="Create New"/> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label"> - Alpha: - </text> - <texture_picker label="Alpha: Unten" name="Lower Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <texture_picker label="Alpha: Oben" name="Upper Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <texture_picker label="Kopf: Alpha" name="Head Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <texture_picker label="Alpha: Augen" name="Eye Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <texture_picker label="Alpha: Haare" name="Hair Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <button label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button label="Speichern" label_selected="Speichern" name="Save"/> - <button label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - </tab_container> - <button label="Skriptinfo" label_selected="Skriptinfo" name="script_info" tool_tip="Skripts, die an Ihren Avatar angehängt sind, anzeigen"/> - <button label="Outfit erstellen" label_selected="Outfit erstellen" name="make_outfit_btn"/> - <button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/> - <button label="OK" label_selected="OK" name="Ok"/> -</floater> diff --git a/indra/newview/skins/default/xui/de/floater_import_collada.xml b/indra/newview/skins/default/xui/de/floater_import_collada.xml new file mode 100644 index 0000000000000000000000000000000000000000..8b1313c7b56a28de56dbe96239ec3c89cf972077 --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_import_collada.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Import Collada" title="Szene importieren"> + <text name="mesh count"> + Netze: [COUNT] + </text> + <text name="texture count"> + Texturen: [COUNT] + </text> + <text name="status"> + Status: [STATUS] + </text> + <button label="Abbrechen" name="cancel"/> + <button label="OK" name="ok"/> + <string name="status_idle"> + Inaktiv + </string> + <string name="status_uploading"> + [NAME] wird hochgeladen + </string> + <string name="status_creating"> + Objektname [NAME] wird erstellt + </string> +</floater> diff --git a/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml index 9cc5b92dafc5b95798ca2dd109d0404804ba33d6..d63426d684455550351203013570035a93c8633c 100644 --- a/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml @@ -5,6 +5,7 @@ <check_box label="Kleidung" name="check_clothing"/> <check_box label="Gesten" name="check_gesture"/> <check_box label="Landmarken" name="check_landmark"/> + <check_box label="Netze" name="check_mesh"/> <check_box label="Notizkarten" name="check_notecard"/> <check_box label="Objekte" name="check_object"/> <check_box label="Skripts" name="check_script"/> diff --git a/indra/newview/skins/default/xui/de/floater_model_preview.xml b/indra/newview/skins/default/xui/de/floater_model_preview.xml new file mode 100644 index 0000000000000000000000000000000000000000..83c51132ee2128b18d318bbe05fc60a136fda9af --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_model_preview.xml @@ -0,0 +1,231 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Model Preview" title="Modell hochladen"> + <string name="status_idle"> + Inaktiv + </string> + <string name="status_reading_file"> + Laden... + </string> + <string name="status_generating_meshes"> + Netze werden generiert... + </string> + <string name="status_vertex_number_overflow"> + Fehler: Anzahl von Vertices überschreitet 65534. Operation abgebrochen. + </string> + <string name="high"> + Hoch + </string> + <string name="medium"> + Mittel + </string> + <string name="low"> + Niedrig + </string> + <string name="lowest"> + Niedrigste + </string> + <string name="mesh_status_good"> + Ausliefern + </string> + <string name="mesh_status_na"> + -- + </string> + <string name="mesh_status_none"> + Keine + </string> + <string name="mesh_status_submesh_mismatch"> + Detailstufen haben unterschiedliche Anzahl texturfähiger Flächen. + </string> + <string name="mesh_status_mesh_mismatch"> + Detailstufen haben unterschiedliche Anzahl von Netzinstanzen. + </string> + <string name="mesh_status_too_many_vertices"> + Detailstufe hat zu viele Vertices. + </string> + <string name="mesh_status_missing_lod"> + Erforderliche Detailstufe fehlt. + </string> + <string name="layer_all"> + Alle + </string> + <string name="decomposing"> + Analyse läuft... + </string> + <string name="simplifying"> + Vereinfachung läuft... + </string> + <text name="name_label"> + Name: + </text> + <text name="lod_label"> + Vorschau: + </text> + <combo_box name="preview_lod_combo" tool_tip="Detailstufe zur Anzeige in Vorschaudarstellung"> + <combo_item name="high"> + Detailstufe: Hoch + </combo_item> + <combo_item name="medium"> + Detailstufe: Mittel + </combo_item> + <combo_item name="low"> + Detailstufe: Niedrig + </combo_item> + <combo_item name="lowest"> + Detailstufe: Niedrigste + </combo_item> + </combo_box> + <panel> + <text name="streaming cost"> + Ressourcenkosten: [COST] + </text> + <text name="physics cost"> + Physikkosten: [COST] + </text> + <text name="upload fee"> + Gebühr für Hochladen: -- + </text> + </panel> + <text name="status"> + [STATUS] + </text> + <button label="Standardwerte" name="reset_btn" tool_tip="Standardwerte wiederherstellen"/> + <button label="Hochladen" name="ok_btn" tool_tip="An Simulator hochladen"/> + <button label="Abbrechen" name="cancel_btn"/> + <tab_container name="import_tab"> + <panel label="Detailstufe" name="lod_panel"> + <text name="lod_table_header"> + Detailstufe auswählen + </text> + <text name="high_label" value="Hoch"/> + <text name="high_triangles" value="0"/> + <text name="high_vertices" value="0"/> + <text name="medium_label" value="Mittel"/> + <text name="medium_triangles" value="0"/> + <text name="medium_vertices" value="0"/> + <text name="low_label" value="Niedrig"/> + <text name="low_triangles" value="0"/> + <text name="low_vertices" value="0"/> + <text name="lowest_label" value="Niedrigste"/> + <text name="lowest_triangles" value="0"/> + <text name="lowest_vertices" value="0"/> + <text name="lod_table_footer"> + Detailstufe: [DETAIL] + </text> + <radio_group name="lod_file_or_limit" value="lod_from_file"> + <radio_item label="Aus Datei laden" name="lod_from_file"/> + <radio_item label="Automatisch generieren" name="lod_auto_generate"/> + <radio_item label="Keine" name="lod_none"/> + </radio_group> + <button label="Durchsuchen..." name="lod_browse"/> + <combo_box name="lod_mode"> + <combo_item name="triangle_limit"> + Dreiecklimit + </combo_item> + <combo_item name="error_threshold"> + Fehlerschwelle + </combo_item> + </combo_box> + <text name="build_operator_text"> + Konstruktionsoperator: + </text> + <text name="queue_mode_text"> + Warteschlangenmodus: + </text> + <combo_box name="build_operator"> + <combo_item name="edge_collapse"> + Kantenkollaps + </combo_item> + <combo_item name="half_edge_collapse"> + Halbkantenkollaps + </combo_item> + </combo_box> + <combo_box name="queue_mode"> + <combo_item name="greedy"> + Strikt + </combo_item> + <combo_item name="lazy"> + Locker + </combo_item> + <combo_item name="independent"> + Unabhängig + </combo_item> + </combo_box> + <text name="border_mode_text"> + Grenzenmodus: + </text> + <text name="share_tolderance_text"> + Sharetoleranz: + </text> + <combo_box name="border_mode"> + <combo_item name="border_unlock"> + Freigeben + </combo_item> + <combo_item name="border_lock"> + Sperren + </combo_item> + </combo_box> + <text name="crease_label"> + Knitterwinkel: + </text> + <spinner name="crease_angle" value="75"/> + </panel> + <panel label="Physik" name="physics_panel"> + <panel name="physics geometry"> + <radio_group name="physics_load_radio" value="physics_load_from_file"> + <radio_item label="Datei:" name="physics_load_from_file"/> + <radio_item label="Detailstufe verwenden:" name="physics_use_lod"/> + </radio_group> + <combo_box name="physics_lod_combo" tool_tip="Detailstufe für physische Form"> + <combo_item name="physics_lowest"> + Niedrigste + </combo_item> + <combo_item name="physics_low"> + Niedrig + </combo_item> + <combo_item name="physics_medium"> + Mittel + </combo_item> + <combo_item name="physics_high"> + Hoch + </combo_item> + </combo_box> + <button label="Durchsuchen..." name="physics_browse"/> + </panel> + <panel name="physics analysis"> + <slider label="Glätten:" name="Smooth"/> + <check_box label="Löcher schließen (langsam)" name="Close Holes (Slow)"/> + <button label="Analysieren" name="Decompose"/> + <button label="Abbrechen" name="decompose_cancel"/> + </panel> + <panel name="physics simplification"> + <slider label="Durchläufe:" name="Combine Quality"/> + <slider label="Detailskala:" name="Detail Scale"/> + <slider label="Beibehalten:" name="Retain%"/> + <button label="Vereinfachen" name="Simplify"/> + <button label="Abbrechen" name="simplify_cancel"/> + </panel> + <panel name="physics info"> + <slider label="Vorschaudehnung:" name="physics_explode"/> + <text name="physics_triangles"> + Dreiecke: [TRIANGLES] + </text> + <text name="physics_points"> + Vertices: [POINTS] + </text> + <text name="physics_hulls"> + Hüllen: [HULLS] + </text> + </panel> + </panel> + <panel label="Modifizierer" name="modifiers_panel"> + <spinner name="import_scale" value="1,0"/> + <text name="import_dimensions"> + [X] x [Y] x [Z] m + </text> + <check_box label="Texturen" name="upload_textures"/> + <check_box label="Skingewicht" name="upload_skin"/> + <check_box label="Gelenkpositionen" name="upload_joints"/> + <spinner name="pelvis_offset" value="0,0"/> + </panel> + </tab_container> +</floater> diff --git a/indra/newview/skins/default/xui/de/floater_model_wizard.xml b/indra/newview/skins/default/xui/de/floater_model_wizard.xml new file mode 100644 index 0000000000000000000000000000000000000000..2c7b45906e9353732a930334c7f01091e5752c03 --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_model_wizard.xml @@ -0,0 +1,241 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Model Wizard" title="ASSISTENT ZUM HOCHLADEN VON MODELLEN"> + <button label="5. Hochladen" name="upload_btn"/> + <button label="4. Überprüfen" name="review_btn"/> + <button label="3. Physik" name="physics2_btn"/> + <button label="3. Physik" name="physics_btn"/> + <button label="2. Optimieren" name="optimize_btn"/> + <button label="1. Datei auswählen" name="choose_file_btn"/> + <panel name="choose_file_panel"> + <panel name="header_panel"> + <text name="header_text"> + Modell hochladen + </text> + </panel> + <text name="description"> + Mit diesem Assistenten können Sie Netzmodelle in Second Life hochladen. Geben Sie zuerst die Datei mit dem zu importierenden Modell an. Second Life unterstützt COLLADA-Dateien (.dae). + </text> + <panel name="content"> + <text name="Cache location"> + Dateiname: + </text> + <button label="Durchsuchen..." label_selected="Durchsuchen..." name="browse"/> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + </panel> + <panel name="optimize_panel"> + <panel name="header_panel"> + <text name="header_text"> + Optimieren + </text> + </panel> + <text name="description"> + Dieser Assistent hat Ihr Modell optimiert, um die Leistung zu erhöhen. Sie können die Optimierungsergebnisse unten ändern oder zum Fortfahren auf „Weiter“ klicken. + </text> + <panel name="content"> + <text name="high_detail_text"> + Detailstufe generieren: Hoch + </text> + <text name="medium_detail_text"> + Detailstufe generieren: Mittel + </text> + <text name="low_detail_text"> + Detailstufe generieren: Niedrig + </text> + <text name="lowest_detail_text"> + Detailstufe generieren: Niedrigste + </text> + </panel> + <panel name="content2"> + <text name="lod_label"> + Modellvorschau: + </text> + <combo_box name="preview_lod_combo2" tool_tip="Detailstufe zur Anzeige in Vorschaudarstellung"> + <combo_item name="high"> + Hoch + </combo_item> + <combo_item name="medium"> + Mittel + </combo_item> + <combo_item name="low"> + Niedrig + </combo_item> + <combo_item name="lowest"> + Niedrigste + </combo_item> + </combo_box> + <text name="streaming cost"> + Ressourcenkosten: [COST] + </text> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + </panel> + <panel name="physics_panel"> + <panel name="header_panel"> + <text name="header_text"> + Physik + </text> + </panel> + <text name="description"> + Der Assistent erstellt eine physische Form, die die Interaktionen des Objekts mit anderen Objekten und Avataren bestimmt. Setzen Sie den Schieber auf die Detailstufe, die für Ihr Objekt am besten geeignet ist: + </text> + <panel name="content"> + <text name="streaming cost"> + Ressourcenkosten: [COST] + </text> + </panel> + </panel> + <panel name="physics2_panel"> + <panel name="header_panel"> + <text name="header_text"> + Physik + </text> + </panel> + <text name="description"> + Überprüfen Sie die physische Form unten und klicken Sie dann auf „Weiter“. Um die physische Form zu ändern, klicken Sie auf „Zurück“. + </text> + <panel name="content"> + <text name="lod_label"> + Modellvorschau: + </text> + <combo_box name="preview_lod_combo3" tool_tip="Detailstufe zur Anzeige in Vorschaudarstellung"> + <combo_item name="high"> + Hoch + </combo_item> + <combo_item name="medium"> + Mittel + </combo_item> + <combo_item name="low"> + Niedrig + </combo_item> + <combo_item name="lowest"> + Niedrigste + </combo_item> + </combo_box> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + <text name="streaming cost"> + Ressourcenkosten: [COST] + </text> + </panel> + </panel> + <panel name="review_panel"> + <panel name="header_panel"> + <text name="header_text"> + Überprüfen + </text> + </panel> + <text name="description"> + Überprüfen Sie die Details unten und klicken Sie dann auf „Hochladen“, um das Modell hochzuladen. Die Kosten werden von Ihrem L$-Kontostand abgezogen. + </text> + <panel name="content"> + <text name="lod_label"> + Modellvorschau: + </text> + <combo_box name="preview_lod_combo" tool_tip="Detailstufe zur Anzeige in Vorschaudarstellung"> + <combo_item name="high"> + Hoch + </combo_item> + <combo_item name="medium"> + Mittel + </combo_item> + <combo_item name="low"> + Niedrig + </combo_item> + <combo_item name="lowest"> + Niedrigste + </combo_item> + </combo_box> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + <text name="streaming cost"> + Ressourcenkosten: [COST] + </text> + <text name="physics cost"> + Physikkosten: [COST] + </text> + </panel> + <panel name="upload_panel"> + <panel name="header_panel"> + <text name="header_text"> + Upload abgeschlossen + </text> + </panel> + <text name="description"> + Herzlichen Glückwunsch! Ihr Modell wurde erfolgreich hochgeladen. Sie finden das Modell im Objektordner Ihres Inventars. + </text> + </panel> + <button label="<< Zurück" name="back"/> + <button label="Weiter >>" name="next"/> + <button label="Hochladen" name="upload" tool_tip="An Simulator hochladen"/> + <button label="Abbrechen" name="cancel"/> + <button label="Schließen" name="close"/> + <spinner name="import_scale" value="1,0"/> + <string name="status_idle"> + Inaktiv + </string> + <string name="status_reading_file"> + Laden... + </string> + <string name="status_generating_meshes"> + Netze werden generiert... + </string> + <string name="status_vertex_number_overflow"> + Fehler: Anzahl von Vertices überschreitet 65534. Operation abgebrochen. + </string> + <string name="high"> + Hoch + </string> + <string name="medium"> + Mittel + </string> + <string name="low"> + Niedrig + </string> + <string name="lowest"> + Niedrigste + </string> + <string name="mesh_status_good"> + Ausliefern + </string> + <string name="mesh_status_na"> + -- + </string> + <string name="mesh_status_none"> + Keine + </string> + <string name="mesh_status_submesh_mismatch"> + Detailstufen haben unterschiedliche Anzahl texturfähiger Flächen. + </string> + <string name="mesh_status_mesh_mismatch"> + Detailstufen haben unterschiedliche Anzahl von Netzinstanzen. + </string> + <string name="mesh_status_too_many_vertices"> + Detailstufe hat zu viele Vertices. + </string> + <string name="mesh_status_missing_lod"> + Erforderliche Detailstufe fehlt. + </string> + <string name="layer_all"> + Alle + </string> +</floater> diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture.xml index 6d3635fa8dcba91c7e790b8f368dd36bb61ca6c0..76dc623ca41527e98fec01cce56439531425cbab 100644 --- a/indra/newview/skins/default/xui/de/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/de/floater_preview_gesture.xml @@ -33,7 +33,7 @@ <text name="replace_text" tool_tip="Ersetzt den Auslösertext mit diesem Text. Wenn Sie zum Beispiel den Auslöser „hallo“ durch „wie geht's“ ersetzen, erscheint im Chat anstelle von „Ich wollte nur hallo sagen“ der Text „Ich wollte nur wie geht's sagen“ und die zugehörige Geste wird abgespielt."> Ersetzen mit: </text> - <line_editor left_delta="94" name="replace_editor" tool_tip="Ersetzt den Auslösertext mit diesem Text. Wenn Sie zum Beispiel den Auslöser „hallo“ durch „wie geht's“ ersetzen, erscheint im Chat anstelle von „Ich wollte nur hallo sagen“ der Text „Ich wollte nur wie geht's sagen“ und die zugehörige Geste wird abgespielt." width="160"/> + <line_editor name="replace_editor" tool_tip="Ersetzt den Auslösertext mit diesem Text. Wenn Sie zum Beispiel den Auslöser „hallo“ durch „wie geht's“ ersetzen, erscheint im Chat anstelle von „Ich wollte nur hallo sagen“ der Text „Ich wollte nur wie geht's sagen“ und die zugehörige Geste wird abgespielt."/> <text name="key_label"> Tastenkürzel: </text> diff --git a/indra/newview/skins/default/xui/de/floater_price_for_listing.xml b/indra/newview/skins/default/xui/de/floater_price_for_listing.xml new file mode 100644 index 0000000000000000000000000000000000000000..bdd772a9c2aea374ee0a5d563ce1743fcd5d3ea6 --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_price_for_listing.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="price_for_listing" title="ANZEIGE VERÖFFENTLICHEN"> + <text name="explanation_text"> + Ihre Anzeige wird für eine Woche veröffentlicht. + +Die Position Ihrer Anzeige hängt davon ab, wie viel Sie dafür bezahlen möchten. + +Die Anzeigen, für die am meisten bezahlt wird, werden am Anfang der Liste angezeigt und erscheinen in Suchergebnissen weiter oben. + </text> + <text name="price_text"> + Anzeigenpreis: + </text> + <text name="price_symbol"> + L$ + </text> + <button label="OK" name="set_price_btn"/> + <button label="Abbrechen" name="cancel_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/de/floater_sound_devices.xml b/indra/newview/skins/default/xui/de/floater_sound_devices.xml new file mode 100644 index 0000000000000000000000000000000000000000..7575ad9e2aaf32a82446e18261df576b81e34684 --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_sound_devices.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_sound_devices" title="Audiogeräte"> + <text name="voice_label"> + Voice-Chat + </text> + <check_box label="Aktiviert" name="enable_voice"/> +</floater> diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml index d95d674df2d5bc255d7d863e68a005e24703234f..258e67a1386a4188a56edd1d7dbe7ca55ccd04c3 100644 --- a/indra/newview/skins/default/xui/de/floater_tools.xml +++ b/indra/newview/skins/default/xui/de/floater_tools.xml @@ -125,6 +125,18 @@ <text name="prim_count"> Primitive: [COUNT] </text> + <text name="linked_set_count"> + Verknüpfte Sätze: [COUNT] + </text> + <text name="linked_set_cost" tool_tip="Kosten der gegenwärtig ausgewählten verknüpften Sätze als [Prims],[Komplexität der Physik]"> + Kosten: [COST] / [PHYSICS] + </text> + <text name="object_count"> + Objekte: [COUNT] + </text> + <text name="object_cost" tool_tip="Kosten der gegenwärtig ausgewählten Objekte als [Prims] / [Komplexität der Physik]"> + Kosten: [COST] / [PHYSICS] + </text> <tab_container name="Object Info Tabs"> <panel label="Allgemein" name="General"> <panel.string name="text deed continued"> @@ -269,15 +281,6 @@ <combo_box.item label="Ring" name="Ring"/> <combo_box.item label="Geformt" name="Sculpted"/> </combo_box> - <combo_box name="material"> - <combo_box.item label="Stein" name="Stone"/> - <combo_box.item label="Metall" name="Metal"/> - <combo_box.item label="Glas" name="Glass"/> - <combo_box.item label="Holz" name="Wood"/> - <combo_box.item label="Fleisch" name="Flesh"/> - <combo_box.item label="Kunststoff" name="Plastic"/> - <combo_box.item label="Gummi" name="Rubber"/> - </combo_box> <text name="text cut"> Pfadschnitt (Anfang/Ende) </text> @@ -353,9 +356,19 @@ <combo_box.item label="Torus" name="Torus"/> <combo_box.item label="Fläche" name="Plane"/> <combo_box.item label="Zylinder" name="Cylinder"/> + <combo_box.item label="Netz" name="Mesh"/> </combo_box> </panel> <panel label="Eigenschaften" name="Features"> + <panel.string name="None"> + Keine + </panel.string> + <panel.string name="Prim"> + Prim + </panel.string> + <panel.string name="Convex Hull"> + Konvexe Hülle + </panel.string> <text name="select_single"> Wählen Sie nur einen einzelnen Baustein aus, um Eigenschaften zu bearbeiten. </text> @@ -380,6 +393,23 @@ <spinner label="Fokus" name="Light Focus"/> <spinner label="Abnehmend" name="Light Falloff"/> <spinner label="Ambiente" name="Light Ambiance"/> + <text name="label physicsshapetype"> + Art der physischen Form: + </text> + <combo_box name="Physics Shape Type Combo Ctrl" tool_tip="Art der physischen Form auswählen"/> + <combo_box name="material"> + <combo_box.item label="Stein" name="Stone"/> + <combo_box.item label="Metall" name="Metal"/> + <combo_box.item label="Glas" name="Glass"/> + <combo_box.item label="Holz" name="Wood"/> + <combo_box.item label="Fleisch" name="Flesh"/> + <combo_box.item label="Plastik" name="Plastic"/> + <combo_box.item label="Gummi" name="Rubber"/> + </combo_box> + <spinner label="Schwerkraft" name="Physics Gravity"/> + <spinner label="Reibung" name="Physics Friction"/> + <spinner label="Dichte" name="Physics Density"/> + <spinner label="Restitution" name="Physics Restitution"/> </panel> <panel label="Textur" name="Texture"> <panel.string name="string repeats per meter"> diff --git a/indra/newview/skins/default/xui/de/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/de/floater_wearable_save_as.xml deleted file mode 100644 index f9b3552e8b04e23268dae65b6f622c3e6ec9f1b5..0000000000000000000000000000000000000000 --- a/indra/newview/skins/default/xui/de/floater_wearable_save_as.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title=" "> - <button label="Speichern" label_selected="Speichern" name="Save"/> - <button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/> - <text name="Save item as:"> - Objekt in meinem Inventar speichern als: - </text> - <line_editor name="name ed"> - Neu [DESC] - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/de/menu_inventory_add.xml b/indra/newview/skins/default/xui/de/menu_inventory_add.xml index 165e9a9264eb32d2fe00e857d0455bfdd8d701a7..af70c08ba17479399b54112ccdbc04bf8ec5ca28 100644 --- a/indra/newview/skins/default/xui/de/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/de/menu_inventory_add.xml @@ -4,6 +4,8 @@ <menu_item_call label="Bild ([COST] L$)..." name="Upload Image"/> <menu_item_call label="Sound ([COST] L$)..." name="Upload Sound"/> <menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/> + <menu_item_call label="Modell..." name="Upload Model"/> + <menu_item_call label="Modellassistent..." name="Upload Model Wizard"/> <menu_item_call label="Mehrfach-Upload ([COST] L$ pro Datei)..." name="Bulk Upload"/> <menu_item_call label="Hochlade-Berechtigungen (Standard) festlegen" name="perm prefs"/> </menu> diff --git a/indra/newview/skins/default/xui/de/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/de/menu_model_import_gear_default.xml new file mode 100644 index 0000000000000000000000000000000000000000..e1faeedcdedd9460b1e3fee5558401db0542b824 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_model_import_gear_default.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="model_menu_gear_default"> + <menu_item_check label="Kanten anzeigen" name="show_edges"/> + <menu_item_check label="Physik anzeigen" name="show_physics"/> + <menu_item_check label="Texturen anzeigen" name="show_textures"/> + <menu_item_check label="Skingewicht anzeigen" name="show_skin_weight"/> + <menu_item_check label="Gelenkpositionen anzeigen" name="show_joint_positions"/> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml index 9d5a69105d8374291ab86eef03fdea1877a4776f..05f9f94c8af7f57667340b53ed0a9a3d892b122f 100644 --- a/indra/newview/skins/default/xui/de/menu_viewer.xml +++ b/indra/newview/skins/default/xui/de/menu_viewer.xml @@ -120,6 +120,8 @@ <menu_item_call label="Bild ([COST] L$)..." name="Upload Image"/> <menu_item_call label="Sound ([COST] L$)..." name="Upload Sound"/> <menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/> + <menu_item_call label="Modell..." name="Upload Model"/> + <menu_item_call label="Modellassistent..." name="Upload Model Wizard"/> <menu_item_call label="Mehrfach-Upload ([COST] L$ pro Datei)..." name="Bulk Upload"/> </menu> <menu_item_call label="Rückgängig" name="Undo"/> @@ -159,7 +161,7 @@ <menu_item_check label="Alpha" name="Alpha"/> <menu_item_check label="Baum" name="Tree"/> <menu_item_check label="Avatare" name="Character"/> - <menu_item_check label="SurfacePath" name="SurfacePath"/> + <menu_item_check label="Flächenpatch" name="Surface Patch"/> <menu_item_check label="Himmel" name="Sky"/> <menu_item_check label="Wasser" name="Water"/> <menu_item_check label="Boden" name="Ground"/> @@ -218,6 +220,7 @@ <menu_item_check label="Texture-Kategorie" name="Texture Category"/> <menu_item_check label="Schnelle Timer" name="Fast Timers"/> <menu_item_check label="Speicher" name="Memory"/> + <menu_item_check label="Szenestatistiken" name="Scene Statistics"/> <menu_item_call label="Info zu Region in Fenster Fehler beseitigen" name="Region Info to Debug Console"/> <menu_item_call label="Gruppeninfo in Fenster Fehler beseitigen" name="Group Info to Debug Console"/> <menu_item_call label="Info zu Fähigkeiten in Fenster Fehler beseitigen" name="Capabilities Info to Debug Console"/> @@ -228,6 +231,7 @@ </menu> <menu label="Info anzeigen" name="Display Info"> <menu_item_check label="Zeit anzeigen" name="Show Time"/> + <menu_item_check label="Kosten für Hochladen anzeigen" name="Show Upload Cost"/> <menu_item_check label="Render-Info anzeigen" name="Show Render Info"/> <menu_item_check label="Texturinfos anzeigen" name="Show Texture Info"/> <menu_item_check label="Matrizen anzeigen" name="Show Matrices"/> @@ -253,8 +257,10 @@ </menu> <menu label="Metadaten darstellen" name="Render Metadata"> <menu_item_check label="Bonding Boxes" name="Bounding Boxes"/> + <menu_item_check label="Normalen" name="Normals"/> <menu_item_check label="Octree" name="Octree"/> <menu_item_check label="Shadow Frusta" name="Shadow Frusta"/> + <menu_item_check label="Physische Formen" name="Physics Shapes"/> <menu_item_check label="Okklusion" name="Occlusion"/> <menu_item_check label="Bündel rendern" name="Render Batches"/> <menu_item_check label="Typ aktualisieren" name="Update Type"/> @@ -262,9 +268,12 @@ <menu_item_check label="Textur-Priorität" name="Texture Priority"/> <menu_item_check label="Texturbereich" name="Texture Area"/> <menu_item_check label="Oberflächenbereich" name="Face Area"/> + <menu_item_check label="Detailstufeninfos" name="LOD Info"/> + <menu_item_check label="Konstruktionswarteschlange" name="Build Queue"/> <menu_item_check label="Lichter" name="Lights"/> <menu_item_check label="Gelenkpunkte" name="Collision Skeleton"/> <menu_item_check label="Raycast" name="Raycast"/> + <menu_item_check label="Formen" name="Sculpt"/> </menu> <menu label="Rendering" name="Rendering"> <menu_item_check label="Achsen" name="Axes"/> @@ -272,7 +281,6 @@ <menu_item_call label="Texturinfo für ausgewähltes Objekt" name="Selected Texture Info Basis"/> <menu_item_check label="Wireframe" name="Wireframe"/> <menu_item_check label="Objekt-Objekt Okklusion" name="Object-Object Occlusion"/> - <menu_item_check label="Framebuffer-Objekte" name="Framebuffer Objects"/> <menu_item_check label="Licht und Schatten" name="Lighting and Shadows"/> <menu_item_check label="Schatten von Sonne-/Mond-Projektoren" name="Shadows from Sun/Moon/Projectors"/> <menu_item_check label="SSAO und Schattenglättung" name="SSAO and Shadow Smoothing"/> @@ -371,6 +379,7 @@ <menu_item_call label="Lokale Texturen ausgeben" name="Dump Local Textures"/> </menu> <menu_item_check label="HTTP-Texturen" name="HTTP Textures"/> + <menu_item_check label="HTTP-Inventar" name="HTTP Inventory"/> <menu_item_call label="Bilder komprimieren" name="Compress Images"/> <menu_item_check label="Ausgabe Fehlerbeseitigung ausgeben" name="Output Debug Minidump"/> <menu_item_check label="Bei nächster Ausführung Fenster öffnen" name="Console Window"/> diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index c172f7ea2dbc363d4086b81764c1d41e3837082b..75f26c6990a246dc364cf850b81076ee9a5f3009 100644 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -2172,6 +2172,12 @@ Dies kann die Eingabe Ihres Passworts beeinflussen. <notification name="RezItemNoPermissions"> Keine Berechtigung zum Rezzen von Objekten. </notification> + <notification name="IMAcrossParentEstates"> + Senden von IMs über übergeordnete Grundbesitze hinweg nicht möglich. + </notification> + <notification name="TransferInventoryAcrossParentEstates"> + Inventarübertragung über übergeordnete Grundbesitze hinweg nicht möglich. + </notification> <notification name="UnableToLoadNotecard"> Notizkarten-Asset konnte nicht geladen werden. </notification> @@ -2749,6 +2755,10 @@ Diese werden für ein paar Sekunden sicherheitshalber gesperrt. Sie wurden vom Moderator stummgeschaltet. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="UploadCostConfirmation"> + Das Hochladen kostet [PRICE] L$. Möchten Sie fortfahren? + <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Hochladen"/> + </notification> <notification name="ConfirmClearTeleportHistory"> Möchten Sie Ihre Teleport-Liste löschen? <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> @@ -2760,6 +2770,9 @@ Die Schaltfläche wird angezeigt, wenn genügend Platz vorhanden ist. <notification name="ShareNotification"> Wählen Sie Einwohner aus, für die Sie das Objekt freigeben möchten. </notification> + <notification name="MeshUploadError"> + [LABEL] konnte nicht hochgeladen werden: [MESSAGE] [IDENTIFIER] [INVALIDITY_IDENTIFIER] + </notification> <notification name="ShareItemsConfirmation"> Möchten Sie wirklich die folgenden Objekte: @@ -2776,6 +2789,19 @@ für folgende Einwohner freigeben: <notification name="DeedToGroupFail"> Übertragung an Gruppe ist fehlgeschlagen. </notification> + <notification name="ReleaseLandThrottled"> + Die Parzelle [PARCEL_NAME] kann zurzeit nicht aufgegeben werden. + </notification> + <notification name="ReleasedLandWithReclaim"> + Die [AREA] m² große Parzelle „[PARCEL_NAME]“ wurde freigegeben. + +Sie haben [RECLAIM_PERIOD] Stunden, um die Parzelle für 0 L$ zurückzufordern, bevor sie zum Verkauf an alle freigegeben wird. + </notification> + <notification name="ReleasedLandNoReclaim"> + Die [AREA] m² große Parzelle „[PARCEL_NAME]“ wurde freigegeben. + +Sie steht jetzt zum Verkauf an alle zur Verfügung. + </notification> <notification name="AvatarRezNotification"> (Seit [EXISTENCE] Sekunden inworld ) Avatar '[NAME]' wurde in [TIME] Sekunden gerezzt. @@ -2914,6 +2940,10 @@ Durch Ausblenden der Schaltfläche „Sprechen“ wird die Sprechfunktion deakti Die Erstellung und Bearbeitung von Gruppen ist nur im Modus „Erweitert“ möglich. Möchten Sie das Programm beenden und den Modus wechseln? Die Modusauswahl ist auf dem Anmeldebildschirm zu finden. <usetemplate name="okcancelbuttons" notext="Nicht beenden" yestext="Beenden"/> </notification> + <notification label="" name="NoPlaceInfo"> + Die Anzeige des Ortsprofils ist nur im Modus „Erweitert“ möglich. Möchten Sie das Programm beenden und den Modus wechseln? Die Modusauswahl ist auf dem Anmeldebildschirm zu finden. + <usetemplate name="okcancelbuttons" notext="Nicht beenden" yestext="Beenden"/> + </notification> <notification label="" name="NoPicks"> Die Erstellung und Bearbeitung von Auswahlen ist nur im Modus „Erweitert“ möglich. Möchten Sie das Programm beenden und den Modus wechseln? Die Modusauswahl ist auf dem Anmeldebildschirm zu finden. <usetemplate name="okcancelbuttons" notext="Nicht beenden" yestext="Beenden"/> @@ -2934,9 +2964,18 @@ Durch Ausblenden der Schaltfläche „Sprechen“ wird die Sprechfunktion deakti Die Bezahlung anderer Einwohner ist nur im Modus „Erweitert“ möglich. Möchten Sie sich abmelden und den Modus wechseln? <usetemplate name="okcancelbuttons" notext="Nicht beenden" yestext="Beenden"/> </notification> - <global name="UnsupportedCPU"> - - Ihre CPU-Geschwindigkeit entspricht nicht den Mindestanforderungen. - </global> + <notification label="" name="NoInventory"> + Die Inventaranzeige ist nur im Modus „Erweitert“ möglich. Möchten Sie sich abmelden und den Modus wechseln? + <usetemplate name="okcancelbuttons" notext="Nicht beenden" yestext="Beenden"/> + </notification> + <notification label="" name="NoAppearance"> + Das Fenster zum Bearbeiten des Aussehens ist nur im Modus „Erweitert“ verfügbar. Möchten Sie sich abmelden und den Modus wechseln? + <usetemplate name="okcancelbuttons" notext="Nicht beenden" yestext="Beenden"/> + </notification> + <notification label="" name="NoSearch"> + Die Suche ist nur im Modus „Erweitert“ möglich. Möchten Sie sich abmelden und den Modus wechseln? + <usetemplate name="okcancelbuttons" notext="Nicht beenden" yestext="Beenden"/> + </notification> <global name="UnsupportedGLRequirements"> Ihr Computer entspricht nicht den Hardwareanforderungen von [APP_NAME]. [APP_NAME] setzt eine OpenGL-Grafikkarte mit Multitextur-Unterstützung voraus. Falls Ihre Grafikkarte diese Funktion unterstützt, installieren Sie die neuesten Treiber sowie die aktuellen Service Packs und Patches für Ihr Betriebssystem. diff --git a/indra/newview/skins/default/xui/de/panel_friends.xml b/indra/newview/skins/default/xui/de/panel_friends.xml deleted file mode 100644 index 50013a2b240c0adb6de9e3a47748b678236004a3..0000000000000000000000000000000000000000 --- a/indra/newview/skins/default/xui/de/panel_friends.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="friends"> - <string name="Multiple"> - Mehrere Freunde - </string> - <scroll_list name="friend_list" tool_tip="Halten Sie die Tasten „Umschalt“ oder „Strg“ gedrückt, um durch Klicken mehrere Freunde auszuwählen."> - <column name="icon_online_status" tool_tip="Online-Status"/> - <column label="Name" name="friend_name" tool_tip="Name"/> - <column name="icon_visible_online" tool_tip="Freund kann sehen, wenn Sie online sind"/> - <column name="icon_visible_map" tool_tip="Freund kann Sie auf der Karte finden"/> - <column name="icon_edit_mine" tool_tip="Freunde können Objekte bearbeiten, löschen und an sich nehmen"/> - <column name="icon_edit_theirs" tool_tip="Sie können die Objekte dieses Freunds bearbeiten"/> - </scroll_list> - <panel name="rights_container"> - <text name="friend_name_label"> - Wählen Sie den/die Freund(e) aus, dessen/deren Rechte Sie ändern möchten... - </text> - <check_box label="Kann meinen Online-Status sehen" name="online_status_cb" tool_tip="Festlegen, ob dieser Freund meinen Online-Status auf seiner Freundesliste oder Visitenkarte einsehen kann"/> - <check_box label="Kann mich auf der Weltkarte sehen" name="map_status_cb" tool_tip="Festlegen, ob dieser Freund auf seiner Karte meinen Standort sehen kann"/> - <check_box label="Kann meine Objekte verändern" name="modify_status_cb" tool_tip="Festlegen, ob dieser Freund meine Objekte verändern kann"/> - <text name="process_rights_label"> - Rechte werden geändert... - </text> - </panel> - <button label="IM/Anruf" name="im_btn" tool_tip="Beginnt eine Instant Message-Sitzung"/> - <button label="Profil" name="profile_btn" tool_tip="Bilder, Gruppen und andere Informationen anzeigen"/> - <button label="Teleportieren" name="offer_teleport_btn" tool_tip="Bieten Sie diesem Freund einen Teleport an Ihre Position an"/> - <button label="Bezahlen" name="pay_btn" tool_tip="Diesem Freund Linden-Dollar (L$) geben"/> - <button label="Entfernen" name="remove_btn" tool_tip="Diese Person von Ihrer Freundesliste entfernen"/> - <button label="Hinzufügen" name="add_btn" tool_tip="Bieten Sie einem Einwohner die Freundschaft an"/> -</panel> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_colors.xml b/indra/newview/skins/default/xui/de/panel_preferences_colors.xml index 22681ffdf230b7dc6d87a7f61e88a6e4e24ba53b..19c5efcb052e4c9fd2820945012c86cbc5366165 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_colors.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_colors.xml @@ -22,6 +22,9 @@ <text name="text_box5"> Fehler </text> + <text name="text_box10"> + Direkt + </text> <text name="text_box7"> Eigentümer </text> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml index 78cb03a50a0b11ca1756bf8a7c15b61c13c01b71..b874074c792b70c25334f2cd8dd98c0ddc4e5af6 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml @@ -27,8 +27,20 @@ </text> <check_box initial_value="true" label="Transparentes Wasser" name="TransparentWater"/> <check_box initial_value="true" label="Bumpmapping und Glanz" name="BumpShiny"/> + <check_box initial_value="true" label="Lokale Lichtquellen" name="LocalLights"/> <check_box initial_value="true" label="Einfache Shader" name="BasicShaders" tool_tip="Deaktivieren Sie diese Option, wenn der Grafikkartentreiber Abstürze verursacht"/> <check_box initial_value="true" label="Atmosphären-Shader" name="WindLightUseAtmosShaders"/> + <check_box initial_value="true" label="Licht und Schatten" name="UseLightShaders"/> + <check_box initial_value="true" label="Ambient Occlusion" name="UseSSAO"/> + <check_box initial_value="true" label="Schärfentiefe" name="UseDoF"/> + <text name="shadows_label"> + Schatten: + </text> + <combo_box name="ShadowDetail"> + <combo_box.item label="Keine" name="0"/> + <combo_box.item label="Sonne/Mond" name="1"/> + <combo_box.item label="Sonne/Mond + Projektoren" name="2"/> + </combo_box> <text name="reflection_label"> Wasserreflexionen: </text> diff --git a/indra/newview/skins/default/xui/de/panel_region_general.xml b/indra/newview/skins/default/xui/de/panel_region_general.xml index be8507ebbdab2883b1c9352334bad614bf4ca01c..f383be992b92123761bdaa5e8355a9d048b4d4f4 100644 --- a/indra/newview/skins/default/xui/de/panel_region_general.xml +++ b/indra/newview/skins/default/xui/de/panel_region_general.xml @@ -25,6 +25,7 @@ <check_box label="Landwiederverkauf zulassen" name="allow_land_resell_check"/> <check_box label="Landumverteilung zulassen" name="allow_parcel_changes_check"/> <check_box label="Landanzeige in Suche blockieren" name="block_parcel_search_check" tool_tip="Diese Region und ihre Parzellen in Suchergebnissen anzeigen"/> + <check_box label="Netzobjekte zulassen" name="mesh_rez_enabled_check" tool_tip="Anderen das Rezzen von Netzobjekten in dieser Region gestatten"/> <spinner label="Avatar-Limit" name="agent_limit_spin"/> <spinner label="Objektbonus" name="object_bonus_spin"/> <text label="Inhaltseinstufung" name="access_text"> diff --git a/indra/newview/skins/default/xui/de/panel_sound_devices.xml b/indra/newview/skins/default/xui/de/panel_sound_devices.xml new file mode 100644 index 0000000000000000000000000000000000000000..da20f7e21406c1e44778d06f802613879536b69b --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_sound_devices.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel label="Geräteeinstellungen" name="device_settings_panel"> + <panel.string name="default_text"> + Standard + </panel.string> + <text name="Input"> + Eingabe + </text> + <text name="My volume label"> + Meine Lautstärke: + </text> + <slider_bar initial_value="1,0" name="mic_volume_slider" tool_tip="Lautstärke mit diesem Regler ändern"/> + <text name="wait_text"> + Bitte warten + </text> + <text name="Output"> + Ausgabe + </text> +</panel> diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index f32eb21dd3dff1f01f70068f8f13c55507e87556..d77b4a1e444f78441d85647078314499ebdce5ee 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -130,6 +130,139 @@ <string name="create_account_url"> http://join.secondlife.com/index.php?lang=de-DE </string> + <string name="LoginFailedViewerNotPermitted"> + Mit dem von Ihnen verwendeten Viewer ist der Zugriff auf Second Life nicht mehr möglich. Laden Sie von den folgenden Seite einen neuen Viewer herunter: +http://secondlife.com/download + +Weitere Informationen finden Sie auf der folgenden FAQ-Seite: +http://secondlife.com/viewer-access-faq + </string> + <string name="LoginIntermediateOptionalUpdateAvailable"> + Optionales Viewer-Update verfügbar: [VERSION] + </string> + <string name="LoginFailedRequiredUpdate"> + Erforderliches Viewer-Update: [VERSION] + </string> + <string name="LoginFailedAlreadyLoggedIn"> + Dieser Agent ist bereits angemeldet. + </string> + <string name="LoginFailedAuthenticationFailed"> + Wir bitten um Entschuldigung! Wir konnten Sie nicht anmelden. +Stellen Sie sicher, dass Sie die richtigen Informationen eingegeben haben: + * Benutzername (wie robertschmidt12 oder warme.sonne) + * Kennwort +Stellen Sie außerdem sicher, dass die Umschaltsperre deaktiviert ist. + </string> + <string name="LoginFailedPasswordChanged"> + Ihr Kennwort wurde aus Sicherheitsgründen geändert. +Gehen Sie zur Seite „Mein Account“ unter http://secondlife.com/password +und beantworten Sie die Sicherheitsfrage, um Ihr Kennwort zurückzusetzen. +Wir entschuldigen uns für eventuell enstandene Unannehmlichkeiten. + </string> + <string name="LoginFailedPasswordReset"> + Aufgrund von Systemänderungen müssen Sie Ihr Kennwort zurücksetzen. +Gehen Sie zur Seite „Mein Account“ unter http://secondlife.com/password +und beantworten Sie die Sicherheitsfrage, um Ihr Kennwort zurückzusetzen. +Wir entschuldigen uns für eventuell enstandene Unannehmlichkeiten. + </string> + <string name="LoginFailedEmployeesOnly"> + Second Life ist vorübergehend wegen Wartung geschlossen. +Nur Mitarbeiter können sich anmelden. +Aktuelle Informationen finden Sie unter www.secondlife.com/status. + </string> + <string name="LoginFailedPremiumOnly"> + Die Anmeldung bei Second Life ist vorübergehend eingeschränkt, um sicherzustellen, dass Einwohner, die sich bereits inworld aufhalten, das bestmögliche Erlebnis haben. + +Benutzer mit kostenlosen Konten können sich während dieses Zeitraums nicht bei Second Life anmelden, damit die Kapazität den Benutzern zur Verfügung steht, die ein gebührenpflichtiges Premium-Konto besitzen. + </string> + <string name="LoginFailedComputerProhibited"> + Der Zugriff auf Second Life ist von diesem Computer aus nicht möglich. +Wenn Sie der Ansicht sind, dass Sie diese Meldung fälschlicherweise erhalten haben, wenden Sie sich an +support@secondlife.com. + </string> + <string name="LoginFailedAcountSuspended"> + Ihr Konto ist erst ab +[TIME] Pacific Time wieder verfügbar. + </string> + <string name="LoginFailedAccountDisabled"> + Ihre Anfrage kann derzeit nicht bearbeitet werden. +Wenden Sie sich unter http://secondlife.com/support an den Second Life-Support. +Wenn Sie Ihr Kennwort nicht ändern können, rufen Sie die US-Nummer (866) 476-9763 an. + </string> + <string name="LoginFailedTransformError"> + Nicht übereinstimmende Daten bei der Anmeldung festgestellt. +Wenden Sie sich an support@secondlife.com. + </string> + <string name="LoginFailedAccountMaintenance"> + An Ihrem Konto werden gerade kleinere Wartungsarbeiten durchgeführt. +Ihr Konto ist erst ab +[TIME] Pacific Time wieder verfügbar. +Wenn Sie der Ansicht sind, dass Sie diese Meldung fälschlicherweise erhalten haben, wenden Sie sich an support@secondlife.com. + </string> + <string name="LoginFailedPendingLogoutFault"> + Abmeldeanforderung führte zu einem Simulatorfehler. + </string> + <string name="LoginFailedPendingLogout"> + Das System meldet Sie gerade ab. +Ihr Konto ist erst ab +[TIME] Pacific Time wieder verfügbar. + </string> + <string name="LoginFailedUnableToCreateSession"> + Es kann keine gültige Sitzung erstellt werden. + </string> + <string name="LoginFailedUnableToConnectToSimulator"> + Es kann keine Simulatorverbindung hergestellt werden. + </string> + <string name="LoginFailedRestrictedHours"> + Mit Ihrem Konto ist der Zugriff auf Second Life +nur zwischen [START] und [END] Pacific Time möglich. +Schauen Sie während dieses Zeitraums vorbei. +Wenn Sie der Ansicht sind, dass Sie diese Meldung fälschlicherweise erhalten haben, wenden Sie sich an support@secondlife.com. + </string> + <string name="LoginFailedIncorrectParameters"> + Falsche Parameter. +Wenn Sie der Ansicht sind, dass Sie diese Meldung fälschlicherweise erhalten haben, wenden Sie sich an support@secondlife.com. + </string> + <string name="LoginFailedFirstNameNotAlphanumeric"> + Vorname muss alphanumerisch sein. +Wenn Sie der Ansicht sind, dass Sie diese Meldung fälschlicherweise erhalten haben, wenden Sie sich an support@secondlife.com. + </string> + <string name="LoginFailedLastNameNotAlphanumeric"> + Nachname muss alphanumerisch sein. +Wenn Sie der Ansicht sind, dass Sie diese Meldung fälschlicherweise erhalten haben, wenden Sie sich an support@secondlife.com. + </string> + <string name="LogoutFailedRegionGoingOffline"> + Die Region wird gerade offline geschaltet. +Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. + </string> + <string name="LogoutFailedAgentNotInRegion"> + Agent nicht in Region. +Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. + </string> + <string name="LogoutFailedPendingLogin"> + Die Region war gerade dabei, eine andere Sitzung anzumelden. +Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. + </string> + <string name="LogoutFailedLoggingOut"> + Die Region war gerade dabei, die vorherige Sitzung abzumelden. +Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. + </string> + <string name="LogoutFailedStillLoggingOut"> + Die Region ist noch immer dabei, die vorherige Sitzung abzumelden. +Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. + </string> + <string name="LogoutSucceeded"> + Die Region hat soeben die letzte Sitzung abgemeldet. +Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. + </string> + <string name="LogoutFailedLogoutBegun"> + Die Region hat den Abmeldevorgang gestartet. +Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. + </string> + <string name="LoginFailedLoggingOutSession"> + Das System hat begonnen, Ihre letzte Sitzung abzumelden. +Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. + </string> <string name="AgentLostConnection"> In dieser Region kann es zu Problemen kommen. Bitte überprüfen Sie Ihre Internetverbindung. </string> @@ -441,6 +574,9 @@ <string name="symbolic folder link"> Link zu Ordner </string> + <string name="mesh"> + mesh + </string> <string name="AvatarEditingAppearance"> (Aussehen wird bearbeitet) </string> @@ -1180,6 +1316,9 @@ <string name="InvFolder Accessories"> Zubehör </string> + <string name="InvFolder Meshes"> + Netze + </string> <string name="InvFolder Friends"> Freunde </string> @@ -3762,6 +3901,9 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_ <string name="session_initialization_timed_out_error"> Die Initialisierung der Sitzung ist fehlgeschlagen </string> + <string name="Home position set."> + Position für Zuhause festgelegt. + </string> <string name="voice_morphing_url"> http://secondlife.com/landing/voicemorphing </string> diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency.xml b/indra/newview/skins/default/xui/en/floater_buy_currency.xml index 9f6eac198b0b38f8f5deddcba4eafb6e35e71bb5..49ca6cc8baebd253a00c474212b8d9872475641e 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_currency.xml @@ -247,10 +247,10 @@ Re-enter amount to see the latest exchange rate. follows="top|left" layout="topleft" halign="right" - top="213" + top="208" left="10" width="310" - height="30" + height="35" name="purchase_warning_repurchase"> Confirming this purchase only buys L$, not the object. </text> diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml index dce55dae128654190cb8b7d343def0d9f80f59f3..f58595b3c57246ce86a918f1f1b570477b9bc2f3 100644 --- a/indra/newview/skins/default/xui/en/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml @@ -4,9 +4,11 @@ name="Model Preview" title="Upload Model" width="620"> <string name="status_idle">Idle</string> + <string name="status_parse_error">Dae parsing issue - see log for details.</string> <string name="status_reading_file">Loading...</string> <string name="status_generating_meshes">Generating Meshes...</string> <string name="status_vertex_number_overflow">Error: Vertex number is more than 65534, aborted!</string> + <string name="bad_element">Error: element is invalid</string> <string name="high">High</string> <string name="medium">Medium</string> <string name="low">Low</string> @@ -83,6 +85,20 @@ </text> </panel> + <check_box + height="16" + left_delta="0" + name="confirm_checkbox" + top_pad="15" + follows="bottom|left" + width="16" /> + + <text + height="30" + width="570" + word_wrap="true" + left_delta="25" + top_delta="0">I confirm that I have the appropriate rights to the material contained in this model. [secondlife:///app/floater/learn_more Learn more]</text> <text left="10" bottom="540" width="290" height="15" follows="bottom|left|right" name="status">[STATUS]</text> diff --git a/indra/newview/skins/default/xui/en/floater_model_wizard.xml b/indra/newview/skins/default/xui/en/floater_model_wizard.xml index 47b2e5fd79e468da3acc016ab02fb3c7c61ce6e2..8603682e3ab3129124513131c3d4bd0f2621325d 100644 --- a/indra/newview/skins/default/xui/en/floater_model_wizard.xml +++ b/indra/newview/skins/default/xui/en/floater_model_wizard.xml @@ -1019,9 +1019,11 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se <spinner visible="false" left="10" height="20" follows="top|left" width="80" top_pad="-50" value="1.0" min_val="0.01" max_val="64.0" name="import_scale"/> <string name="status_idle">Idle</string> + <string name="status_parse_error">Dae parsing issue - see log for details.</string> <string name="status_reading_file">Loading...</string> <string name="status_generating_meshes">Generating Meshes...</string> - <string name="status_vertex_number_overflow">Error: Vertex number is more than 65534, aborted!</string> + <string name="status_vertex_number_overflow">Error: Vertex number is more than 65534, aborted!</string> + <string name="bad_element">Error: element is invalid</string> <string name="high">High</string> <string name="medium">Medium</string> <string name="low">Low</string> diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml index 9f6199fada89cbe46f99c26e869e42a2eaaca8eb..478ae5f53f0fa2a3de68bfb83236c2fc1c4a01d3 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml @@ -50,17 +50,17 @@ name="desc_label" top_pad="25" font.style="BOLD" - width="100"> + width="105"> Description: </text> <line_editor follows="left|top" height="20" layout="topleft" - left_delta="89" + left_delta="94" name="desc" top_delta="-4" - width="175" /> + width="170" /> <text type="string" length="1" @@ -96,19 +96,19 @@ name="replace_text" tool_tip="Replace the trigger word(s) with these words. For example, trigger 'hello' replace with 'howdy' will turn the chat 'I wanted to say hello' into 'I wanted to say howdy' as well as playing the gesture!" top_pad="10" - width="210"> + width="215"> Replace with: </text> <line_editor follows="left|top" height="20" layout="topleft" - left_delta="99" + left_delta="104" max_length_bytes="31" name="replace_editor" tool_tip="Replace the trigger word(s) with these words. For example, trigger 'hello' replace with 'howdy' will turn the chat 'I wanted to say hello' into 'I wanted to say howdy' as well as playing the gesture" top_delta="-4" - width="165" /> + width="160" /> <text type="string" length="1" diff --git a/indra/newview/skins/default/xui/en/floater_sell_land.xml b/indra/newview/skins/default/xui/en/floater_sell_land.xml index 38b305db7eec3c15c6921cd6fcc85952e5eea710..52de9ddd4730be22c7cd71b034f252c721829ed9 100644 --- a/indra/newview/skins/default/xui/en/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/en/floater_sell_land.xml @@ -177,7 +177,8 @@ font="SansSerif" height="16" left="30" - name="sell_objects_label"> + name="sell_objects_label" + width="266"> 3. Sell the objects with the land? </text> <text diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 40bf7bfed75608d4530c6cceabfd1d709f9f4eef..7441b2cd9caabe8f020483b1789a6ce0b273b235 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -2098,11 +2098,7 @@ even though the user gets a free copy. label="Cylinder" name="Cylinder" value="Cylinder" /> - <combo_box.item - label="Mesh" - name="Mesh" - value="Mesh" /> - </combo_box> + </combo_box> </panel> <panel border="false" @@ -2461,8 +2457,9 @@ even though the user gets a free copy. height="19" increment="0.1" initial_value="0" - label="Density" + label="Density in 100 kg/m^3" label_width="70" + label_wrap="true" layout="topleft" left_delta="0" max_val="22587" @@ -2483,7 +2480,7 @@ even though the user gets a free copy. max_val="1" min_val="0" name="Physics Restitution" - top_pad="4" + top_pad="8" width="132" /> </panel> <panel diff --git a/indra/newview/skins/default/xui/en/floater_windlight_options.xml b/indra/newview/skins/default/xui/en/floater_windlight_options.xml index 249ad95c41d1fc97630427f85315aae98999cdfc..7923dd87fac0d041819d1c10bde6594d6745c143 100644 --- a/indra/newview/skins/default/xui/en/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/en/floater_windlight_options.xml @@ -22,13 +22,13 @@ left="10" name="KeyFramePresetsText" top="34" - width="85"> + width="135"> Sky Presets: </text> <combo_box height="23" layout="topleft" - left_delta="85" + left_delta="135" name="WLPresetsCombo" top_delta="-4" width="150" /> diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml index f9db64b5241f6e19603a0a6f55d23befcaf02f57..65bd2793b606b6b9366bb78a1844d1ac80d73708 100644 --- a/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml +++ b/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml @@ -42,6 +42,14 @@ function="CheckControl" parameter="NearbyListShowIcons" /> </menu_item_check> + <menu_item_check name ="view_map" label="View Map"> + <menu_item_check.on_check + function="CheckControl" + parameter="NearbyListShowMap" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="NearbyListShowMap" /> + </menu_item_check> <menu_item_separator layout="topleft" /> <menu_item_call name="show_blocked_list" label="Show Blocked Residents & Objects"> <menu_item_call.on_click function="SideTray.ShowPanel" userdata="panel_block_list_sidetray" /> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml old mode 100644 new mode 100755 index 815e8f96ab4a70578b0f265594fb0c4af300737a..06a9baf8c8beaa362be1a72b237ba09d0a9d1a30 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -6823,7 +6823,9 @@ Select residents to share with. name="MeshUploadError" icon="alert.tga" type="alert"> - [LABEL] failed to upload: [MESSAGE] [IDENTIFIER] [INVALIDITY_IDENTIFIER] + [LABEL] failed to upload: [MESSAGE] [IDENTIFIER] + +See the log file for details. </notification> <notification diff --git a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml index f438e3d42d3f8bf2c0ce99a034529effa330e703..bbeb592e962b75fa04372bd4a4e8b6db389504b1 100644 --- a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml +++ b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml @@ -53,9 +53,6 @@ name="list_attachments" top="0" width="311"> - <flat_list_view.no_items_text - value="No attachments worn" /> - </flat_list_view> </accordion_tab> <accordion_tab layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 1a00416b2a487a0e903f9058f8435c5c8b1fb4ca..775805ad2e751b3517bc3fd95c5ca8c566ab3ce0 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -87,7 +87,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M width="319"> <panel background_opaque="true" - background_visible="true" + background_visible="true" bg_alpha_color="DkGray" bg_opaque_color="DkGray" follows="all" @@ -99,28 +99,54 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M name="nearby_panel" top="0" width="313"> - <net_map - bg_color="NetMapBackgroundColor" - follows="top|left|right" - layout="topleft" - left="3" - mouse_opaque="false" - name="Net Map" - width="305" - height="140" - top="5"/> - <avatar_list - allow_select="true" - follows="top|left|bottom|right" - height="211" - ignore_online_status="true" + <layout_stack + clip="false" + follows="all" + height="355" + layout="topleft" + mouse_opaque="false" + orientation="vertical" + width="313"> + <layout_panel + height="142" layout="topleft" - left="3" - multi_select="true" - name="avatar_list" - top="145" - width="306" /> - <panel + mouse_opaque="false" + user_resize="false" + visibility_control="NearbyListShowMap" + width="313"> + <net_map + bg_color="NetMapBackgroundColor" + follows="all" + height="140" + layout="topleft" + left="3" + mouse_opaque="false" + name="Net Map" + top="4" + width="305"/> + </layout_panel> + <layout_panel + height="213" + layout="topleft" + min_height="100" + mouse_opaque="false" + user_resize="false" + width="313"> + <avatar_list + allow_select="true" + follows="all" + height="211" + ignore_online_status="true" + layout="topleft" + left="3" + keep_one_selected="false" + multi_select="true" + name="avatar_list" + top="2" + width="306" /> + </layout_panel> + </layout_stack> + <panel background_visible="true" follows="left|right|bottom" height="27" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml index 91fe6f544c3e9dab81c8e4c6a8ac581e900e07e1..1745c1e4b0e2f8b0fe862e697bfc0dcae47c743c 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml @@ -123,8 +123,8 @@ function="Pref.setControlFalse" parameter="MuteAmbient" /> </slider> - <button - control_name="MuteAmbient" + <button + control_name="MuteAmbient" disabled_control="MuteAudio" follows="top|left" height="16" @@ -157,7 +157,7 @@ function="Pref.setControlFalse" parameter="MuteSounds" /> </slider> - <button + <button control_name="MuteSounds" disabled_control="MuteAudio" follows="top|left" @@ -169,7 +169,10 @@ left_pad="5" name="mute_audio" tab_stop="false" - width="16" /> + width="16"> + <button.commit_callback + function="Pref.SetSounds"/> + </button> <slider control_name="AudioLevelMusic" disabled_control="MuteAudio" @@ -332,7 +335,17 @@ label="Play media attached to other avatars" left="25" width="230"/> - + <check_box + name="gesture_audio_play_btn" + control_name="EnableGestureSounds" + disabled_control="MuteAudio" + value="true" + follows="left|bottom|right" + height="15" + tool_tip="Check this to hear sounds from gestures" + label="Play sounds from gestures" + top_pad="1" + left="25"/> <text type="string" length="1" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 339f14eacbc80571524920886cb3add7c2d9525d..71f48c833d9ad6c75bf22bfe4d0c88b92398cf02 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2101,6 +2101,8 @@ Returns a string with the requested data about the region <string name="InvFolder Friends">Friends</string> <string name="InvFolder All">All</string> + <string name="no_attachments">No attachments worn</string> + <!-- inventory FVBridge --> <!-- This is used in llpanelinventory.cpp when constructing a context menu for an item for Sale --> <string name="Buy">Buy</string> diff --git a/indra/newview/skins/default/xui/es/floater_about.xml b/indra/newview/skins/default/xui/es/floater_about.xml index bb845e1ee04cfd97389c6d707695de9c05417d70..125eb79d0495082cbc37bd594c4355a1a6fc74e9 100644 --- a/indra/newview/skins/default/xui/es/floater_about.xml +++ b/indra/newview/skins/default/xui/es/floater_about.xml @@ -56,26 +56,32 @@ Gracias a estos Residentes por ayudarnos a estar seguros de que, con todo, esta <panel label="Licencias" name="licenses_panel"> <text_editor name="credits_editor"> 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion - APR Copyright (C) 2000-2004 The Apache Software Foundation - cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) - DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc. - expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. - FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). - GL Copyright (C) 1999-2004 Brian Paul. - Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. - jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) - jpeglib Copyright (C) 1991-1998, Thomas G. Lane. - ogg/vorbis Copyright (C) 2001, Xiphophorus - OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. - SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga - SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - xmlrpc-epi Copyright (C) 2000 Epinions, Inc. - zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. - google-perftools Copyright (c) 2005, Google Inc. - - All rights reserved. See licenses.txt for details. +APR Copyright (C) 2000-2004 The Apache Software Foundation +Collada DOM Copyright 2005 Sony Computer Entertainment Inc. +cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) +DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc. +expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. +FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). +GL Copyright (C) 1999-2004 Brian Paul. +GLOD Copyright (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University y David Luebke, Brenden Schubert, University of Virginia. +google-perftools Copyright (c) 2005, Google Inc. +Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. +jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) +jpeglib Copyright (C) 1991-1998, Thomas G. Lane. +ogg/vorbis Copyright (C) 2001, Xiphophorus +OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. +PCRE Copyright (c) 1997-2008 University of Cambridge +SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga +SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +xmlrpc-epi Copyright (C) 2000 Epinions, Inc. +zlib Copyright (C) 1995-2002 Jean-loup Gailly y Mark Adler. +google-perftools Copyright (c) 2005, Google Inc. - Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) +El visor de Second Life utiliza Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (y los propietarios de las licencias). Reservados todos los derechos. Consulta www.havok.com si deseas obtener más información. + +Reservados todos los derechos. Consulta las licencias en .txt si deseas obtener más información. + +Codificación de sonido del chat de voz: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) </text_editor> </panel> </tab_container> diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml index c3f431010382166f45377e6ed87baddaccd8930f..1c4b965f4694c805a02c2fdc10f6774a7ae197c5 100644 --- a/indra/newview/skins/default/xui/es/floater_about_land.xml +++ b/indra/newview/skins/default/xui/es/floater_about_land.xml @@ -107,13 +107,13 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s <text name="For sale to"> En venta a: [BUYER] </text> - <text name="Sell with landowners objects in parcel." width="216"> - Los objetos se incluyen en la venta. + <text name="Sell with landowners objects in parcel."> + Objetos incluidos en la venta </text> - <text name="Selling with no objects in parcel." width="216"> + <text name="Selling with no objects in parcel."> Los objetos no se incluyen en la venta. </text> - <button bottom="-245" font="SansSerifSmall" label="Cancelar la venta del terreno" label_selected="Cancelar la venta del terreno" left="275" name="Cancel Land Sale"/> + <button label="Cancelar la venta del terreno" label_selected="Cancelar la venta del terreno" name="Cancel Land Sale"/> <text name="Claimed:"> Reclamada: </text> @@ -133,7 +133,7 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s 0 </text> <button label="Comprar terreno" left="130" name="Buy Land..." width="125"/> - <button label="Información del script" name="Scripts..."/> + <button label="Información de scripts" name="Scripts..."/> <button label="Comprar para el grupo" name="Buy For Group..."/> <button label="Comprar un pase" left="130" name="Buy Pass..." tool_tip="Un pase le da acceso temporal a este terreno." width="125"/> <button label="Abandonar el terreno" name="Abandon Land..."/> diff --git a/indra/newview/skins/default/xui/es/floater_buy_contents.xml b/indra/newview/skins/default/xui/es/floater_buy_contents.xml index 98604ad5f4de95a7f07b48a5218d0aea5fd07d6a..3563d4bd0f59b7fe0a5ce5be86452d865fc924f0 100644 --- a/indra/newview/skins/default/xui/es/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/es/floater_buy_contents.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_buy_contents" title="COMPRAR LOS CONTENIDOS"> <text name="contains_text"> - [NAME] contiene: + <nolink>[NOMBRE]</nolink> contiene: </text> <text name="buy_text"> ¿Comprar por [AMOUNT] L$ a [NAME]? diff --git a/indra/newview/skins/default/xui/es/floater_buy_currency.xml b/indra/newview/skins/default/xui/es/floater_buy_currency.xml index a8fa03084692cd3623cb5b6f0e056cd5ac7d9288..2f92cb55ebc8be255450db8db1a44b4a733dc76a 100644 --- a/indra/newview/skins/default/xui/es/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/es/floater_buy_currency.xml @@ -51,8 +51,9 @@ <text name="exchange_rate_note"> Vuelve a escribir la cantidad para ver el tipo de cambio más reciente. </text> - <text name="purchase_warning_repurchase" right="-10"> - Confirmando que con esta compra sólo se compran L$, no el objeto. + <text name="purchase_warning_repurchase"> + Confirmando que con esta compra sólo se compran L$, +no el objeto. </text> <text name="purchase_warning_notenough"> No estás comprando suficientes L$. Por favor, aumenta la cantidad. diff --git a/indra/newview/skins/default/xui/es/floater_camera.xml b/indra/newview/skins/default/xui/es/floater_camera.xml index 87177e285c96db6054971f4204e6074c24e5b887..04f743b6590b04c6c0d2ab19d2f719ca1aa96265 100644 --- a/indra/newview/skins/default/xui/es/floater_camera.xml +++ b/indra/newview/skins/default/xui/es/floater_camera.xml @@ -42,7 +42,7 @@ <panel name="camera_modes_list"> <panel_camera_item name="object_view"> <panel_camera_item.text name="object_view_text"> - Vista de objeto + Vista objetiva </panel_camera_item.text> </panel_camera_item> <panel_camera_item name="mouselook_view"> diff --git a/indra/newview/skins/default/xui/es/floater_customize.xml b/indra/newview/skins/default/xui/es/floater_customize.xml deleted file mode 100644 index 77b670d5f0c98b719eed42ad1799b513a47f94d1..0000000000000000000000000000000000000000 --- a/indra/newview/skins/default/xui/es/floater_customize.xml +++ /dev/null @@ -1,530 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="APARIENCIA"> - <tab_container name="customize tab container"> - <text label="Partes del cuerpo" name="body_parts_placeholder"> - Partes del cuerpo - </text> - <panel label="Forma" name="Shape"> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - <button label="Cuerpo" label_selected="Cuerpo" name="Body"/> - <button label="Cabeza" label_selected="Cabeza" name="Head"/> - <button label="Ojos" label_selected="Ojos" name="Eyes"/> - <button label="Orejas" label_selected="Orejas" name="Ears"/> - <button label="Nariz" label_selected="Nariz" name="Nose"/> - <button label="Boca" label_selected="Boca" name="Mouth"/> - <button label="Barbilla" label_selected="Barbilla" name="Chin"/> - <button label="Torso" label_selected="Torso" name="Torso"/> - <button label="Piernas" label_selected="Piernas" name="Legs"/> - <radio_group name="sex radio"> - <radio_item label="Mujer" name="radio" value="0"/> - <radio_item label="Varón" name="radio2" value="1"/> - </radio_group> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situada en [PATH] - </text> - <text name="not worn instructions"> - Ponte una anatomÃa nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero. - </text> - <text name="no modify instructions"> - No tiene permiso para modificar este Ãtem. - </text> - <text name="Item Action Label"> - Forma: - </text> - <button label="Crear una forma nueva" label_selected="Crear una forma nueva" name="Create New"/> - <button label="Guardar" label_selected="Guardar" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - </panel> - <panel label="Piel" name="Skin"> - <button label="Color de piel" label_selected="Color de piel" name="Skin Color" width="115"/> - <button label="Detalles faciales" label_selected="Detalles faciales" name="Face Detail" width="115"/> - <button label="Maquillaje" label_selected="Maquillaje" name="Makeup" width="115"/> - <button label="Detalles del cuerpo" label_selected="Detalles del cuerpo" name="Body Detail" width="115"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situada en [PATH] - </text> - <text name="not worn instructions"> - Ponte una piel nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero. - </text> - <text name="no modify instructions"> - No tiene permiso para modificar este Ãtem. - </text> - <text name="Item Action Label" right="107"> - Piel: - </text> - <texture_picker label="Tatuaje: cabeza" name="Head Tattoos" tool_tip="Pulse para elegir una imagen" width="90"/> - <texture_picker label="Tatuaje: superior" name="Upper Tattoos" tool_tip="Pulse para elegir una imagen" width="90"/> - <texture_picker label="Tatuaje: inferior" name="Lower Tattoos" tool_tip="Pulse para elegir una imagen" width="90"/> - <button label="Crear una piel nueva" label_selected="Crear una piel nueva" name="Create New"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <panel label="Pelo" name="Hair"> - <button label="Color" label_selected="Color" name="Color"/> - <button label="Peinado" label_selected="Peinado" name="Style"/> - <button label="Cejas" label_selected="Cejas" name="Eyebrows"/> - <button label="Facial" label_selected="Facial" name="Facial"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situado en [PATH] - </text> - <text name="not worn instructions"> - Ponte un pelo nuevo arrastrándolo desde tu inventario hasta tu avatar. O bien puedes crear uno nuevo partiendo de cero. - </text> - <text name="no modify instructions"> - No tiene permiso para modificar este Ãtem. - </text> - <text name="Item Action Label" right="107"> - Pelo: - </text> - <texture_picker label="Textura" name="Texture" tool_tip="Pulse para elegir una imagen"/> - <button label="Crear un pelo nuevo" label_selected="Crear un pelo nuevo" name="Create New"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <panel label="Ojos" name="Eyes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificables - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situados en [PATH] - </text> - <text name="not worn instructions"> - Ponte unos ojos nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero. - </text> - <text name="no modify instructions"> - No tiene permiso para modificar este Ãtem. - </text> - <text name="Item Action Label" right="107"> - Ojos: - </text> - <texture_picker label="Iris" name="Iris" tool_tip="Pulse para elegir una imagen"/> - <button label="Crear unos ojos nuevos" label_selected="Crear unos ojos nuevos" name="Create New"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <text label="Ropa" name="clothes_placeholder"> - Ropas - </text> - <panel label="Camisa" name="Shirt"> - <texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/> - <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> - <button label="Quitarla" label_selected="Quitarla" name="Take Off"/> - <button label="Crear una falda nueva" label_selected="Crear una falda nueva" name="Create New"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situada en [PATH] - </text> - <text name="not worn instructions"> - Ponte una camisa nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero. - </text> - <text name="no modify instructions"> - No tiene permiso para modificar este Ãtem. - </text> - <text name="Item Action Label" right="107"> - Camisa: - </text> - </panel> - <panel label="Pantalones" name="Pants"> - <texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/> - <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> - <button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/> - <button label="Crear unos pantalones nuevos" label_selected="Crear unos pantalones nuevos" name="Create New" width="185"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificables - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situados en [PATH] - </text> - <text name="not worn instructions"> - Ponte unos pantalones nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero. - </text> - <text name="no modify instructions"> - No tiene permiso para modificar este Ãtem. - </text> - <text name="Item Action Label" right="107"> - Pantalones: - </text> - </panel> - <panel label="Zapatos" name="Shoes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificables - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situados en [PATH] - </text> - <text name="not worn instructions"> - Ponte unos zapatos nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero. - </text> - <button label="Crear unos zapatos nuevos" label_selected="Crear unos zapatos nuevos" name="Create New"/> - <text name="no modify instructions"> - No tiene permiso para modificar este Ãtem. - </text> - <text name="Item Action Label" right="107"> - Zapatos: - </text> - <texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/> - <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> - <button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <panel label="Calcetines" name="Socks"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificables - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situados en [PATH] - </text> - <text name="not worn instructions"> - Ponte unos calcetines nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero. - </text> - <button label="Crear unos calcetines nuevos" label_selected="Crear unos calcetines nuevos" name="Create New" width="185"/> - <text name="no modify instructions"> - No tiene permiso para modificar este Ãtem. - </text> - <text name="Item Action Label" right="107"> - Calcetines: - </text> - <texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/> - <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> - <button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <panel label="Chaqueta" name="Jacket"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situada en [PATH] - </text> - <text name="not worn instructions"> - Ponte una chaqueta nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero. - </text> - <button label="Crear una chaqueta nueva" label_selected="Crear una chaqueta nueva" name="Create New"/> - <text name="no modify instructions"> - No tiene permiso para modificar este Ãtem. - </text> - <text name="Item Action Label" right="107"> - Chaqueta: - </text> - <texture_picker label="Tela superior" name="Upper Fabric" tool_tip="Pulse para elegir una imagen"/> - <texture_picker label="Tela inferior" name="Lower Fabric" tool_tip="Pulse para elegir una imagen"/> - <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> - <button label="Quitarla" label_selected="Quitarla" name="Take Off"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <panel label="Guantes" name="Gloves"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificables - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situados en [PATH] - </text> - <text name="not worn instructions"> - Ponte unos guantes nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero. - </text> - <button label="Crear unos guantes nuevos" label_selected="Crear unos guantes nuevos" name="Create New"/> - <text name="no modify instructions"> - No tiene permiso para modificar este Ãtem. - </text> - <text name="Item Action Label" right="107"> - Guantes: - </text> - <texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/> - <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> - <button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <panel label="Camiseta" name="Undershirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situada en [PATH] - </text> - <text name="not worn instructions"> - Ponte una camiseta nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero. - </text> - <button label="Crear una camiseta nueva" label_selected="Crear una camiseta nueva" name="Create New"/> - <text name="no modify instructions"> - No tiene permiso para modificar este Ãtem. - </text> - <text name="Item Action Label" right="107"> - Camiseta: - </text> - <texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/> - <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> - <button label="Quitarla" label_selected="Quitarla" name="Take Off"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <panel label="Ropa interior" name="Underpants"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situada en [PATH] - </text> - <text name="not worn instructions"> - Ponte una ropa interior nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero. - </text> - <button label="Crear una ropa interior nueva" label_selected="Crear una ropa interior nueva" name="Create New" width="185"/> - <text name="no modify instructions"> - No tiene permiso para modificar este Ãtem. - </text> - <text name="Item Action Label" right="107"> - Ropa interior: - </text> - <texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/> - <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> - <button label="Quitarla" label_selected="Quitarla" name="Take Off"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <panel label="Falda" name="Skirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situada en [PATH] - </text> - <text name="not worn instructions"> - Ponte una falda nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero. - </text> - <button label="Crear una falda nueva" label_selected="Crear una falda nueva" name="Create New"/> - <text name="no modify instructions"> - No tiene permiso para modificar este Ãtem. - </text> - <text name="Item Action Label" right="107"> - Falda: - </text> - <texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/> - <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> - <button label="Quitarla" label_selected="Quitarla" name="Take Off"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <panel label="Tatuaje" name="Tattoo"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no puesto - </text> - <text name="path"> - Situado en [PATH] - </text> - <text name="not worn instructions"> - Pon un tatuaje nuevo arrastrándolo desde tu inventario a tu avatar. O bien puedes crear uno nuevo partiendo de cero. - </text> - <button label="Crear un tatuaje nuevo" label_selected="Crear un tatuaje nuevo" name="Create New"/> - <text name="no modify instructions"> - No tienes permiso para modificar este artÃculo. - </text> - <text name="Item Action Label"> - Tatuaje: - </text> - <texture_picker label="Tatuaje de la cabeza" name="Head Tattoo" tool_tip="Pulsa para elegir una imagen"/> - <texture_picker label="Tatuaje superior" name="Upper Tattoo" tool_tip="Pulsa para elegir una imagen"/> - <texture_picker label="Tatuaje inferior" name="Lower Tattoo" tool_tip="Pulsa para elegir una imagen"/> - <button label="Quitarme" label_selected="Quitarme" name="Take Off"/> - <button label="Guardar" label_selected="Guardar" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Revertir" label_selected="Revertir" name="Revert"/> - </panel> - <panel label="Alfa" name="Alpha"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no puesto - </text> - <text name="path"> - Situado en [PATH] - </text> - <text name="not worn instructions"> - Pon una capa Alfa nueva arrastrándola desde tu inventario a tu avatar. O bien puedes crear una nueva partiendo de cero. - </text> - <button label="Crear una capa Alfa nueva" label_selected="Crear una capa Alfa nueva" name="Create New"/> - <text name="no modify instructions"> - No tienes permiso para modificar este artÃculo. - </text> - <text name="Item Action Label"> - Alfa: - </text> - <texture_picker label="Alfa inferior" name="Lower Alpha" tool_tip="Pulsa para elegir una imagen"/> - <texture_picker label="Alfa superior" name="Upper Alpha" tool_tip="Pulsa para elegir una imagen"/> - <texture_picker label="Alfa de la cabeza" name="Head Alpha" tool_tip="Pulsa para elegir una imagen"/> - <texture_picker label="Alfa de los ojos" name="Eye Alpha" tool_tip="Pulsa para elegir una imagen"/> - <texture_picker label="Alfa del pelo" name="Hair Alpha" tool_tip="Pulsa para elegir una imagen"/> - <button label="Quitarme" label_selected="Quitarme" name="Take Off"/> - <button label="Guardar" label_selected="Guardar" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Revertir" label_selected="Revertir" name="Revert"/> - </panel> - </tab_container> - <scroll_container name="panel_container"/> - <button label="Información del script" label_selected="Información del script" name="script_info" tool_tip="Mostrar los scripts anexados a tu avatar"/> - <button label="Hacer un vestuario" label_selected="Hacer un vestuario" name="make_outfit_btn"/> - <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> - <button label="OK" label_selected="OK" name="Ok"/> -</floater> diff --git a/indra/newview/skins/default/xui/es/floater_import_collada.xml b/indra/newview/skins/default/xui/es/floater_import_collada.xml new file mode 100644 index 0000000000000000000000000000000000000000..7e9a00797a897670ef77f0a7f46eb5053c1d277c --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_import_collada.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Import Collada" title="Importar escena"> + <text name="mesh count"> + Redes: [RECUENTO] + </text> + <text name="texture count"> + Texturas: [RECUENTO] + </text> + <text name="status"> + Estado: [ESTADO] + </text> + <button label="Cancelar" name="cancel"/> + <button label="OK" name="ok"/> + <string name="status_idle"> + Inactivo + </string> + <string name="status_uploading"> + Cargando [NOMBRE] + </string> + <string name="status_creating"> + Creando objeto [NOMBRE] + </string> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml index c9d639d8cf630fa33124b26049afa94097aefbd7..600403450401966a1cc71969c526fda765056fa2 100644 --- a/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml @@ -5,6 +5,7 @@ <check_box label="Ropa" name="check_clothing"/> <check_box label="Gestos" name="check_gesture"/> <check_box label="Hitos" name="check_landmark"/> + <check_box label="Redes" name="check_mesh"/> <check_box label="Notas" name="check_notecard"/> <check_box label="Objetos" name="check_object"/> <check_box label="Scripts" name="check_script"/> @@ -14,11 +15,11 @@ <button label="Todos" label_selected="Todo" name="All"/> <button label="Ninguno" label_selected="Nada" name="None"/> <check_box label="Mostrar siempre las carpetas" name="check_show_empty"/> - <check_box label="Desde el fin de sesión" name="check_since_logoff" bottom_delta="-36"/> + <check_box bottom_delta="-36" label="Desde el fin de sesión" name="check_since_logoff"/> <text name="- OR -"> - o - </text> <spinner label="horas atrás" name="spin_hours_ago"/> <spinner label="dÃas atrás" name="spin_days_ago"/> - <button label="Cerrar" label_selected="Cerrar" name="Close" bottom_delta="-30"/> + <button bottom_delta="-30" label="Cerrar" label_selected="Cerrar" name="Close"/> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_model_preview.xml b/indra/newview/skins/default/xui/es/floater_model_preview.xml new file mode 100644 index 0000000000000000000000000000000000000000..6208db75f93fe0205edb8be99079262edff78eff --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_model_preview.xml @@ -0,0 +1,231 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Model Preview" title="Cargar modelo"> + <string name="status_idle"> + Inactivo + </string> + <string name="status_reading_file"> + Cargando... + </string> + <string name="status_generating_meshes"> + Generando redes... + </string> + <string name="status_vertex_number_overflow"> + Error: El número de intersección es superior a 65534. Cancelado. + </string> + <string name="high"> + Alto + </string> + <string name="medium"> + Media + </string> + <string name="low"> + Bajo + </string> + <string name="lowest"> + MÃnimo + </string> + <string name="mesh_status_good"> + Factúralo. + </string> + <string name="mesh_status_na"> + N/A + </string> + <string name="mesh_status_none"> + Ninguno + </string> + <string name="mesh_status_submesh_mismatch"> + Los niveles de detalle poseen un número distinto de caras a las que se pueden aplicar texturas. + </string> + <string name="mesh_status_mesh_mismatch"> + Los niveles de detalle poseen un número distinto de ejemplos de red. + </string> + <string name="mesh_status_too_many_vertices"> + El nivel de detalle posee demasiadas intersecciones. + </string> + <string name="mesh_status_missing_lod"> + Falta un nivel de detalle requerido. + </string> + <string name="layer_all"> + Todo + </string> + <string name="decomposing"> + Analizando... + </string> + <string name="simplifying"> + Simplificando... + </string> + <text name="name_label"> + Nombre: + </text> + <text name="lod_label"> + Vista previa: + </text> + <combo_box name="preview_lod_combo" tool_tip="Nivel de detalle disponible en la vista previa"> + <combo_item name="high"> + Nivel de detalle: Alto + </combo_item> + <combo_item name="medium"> + Nivel de detalle: Media + </combo_item> + <combo_item name="low"> + Nivel de detalle: Bajo + </combo_item> + <combo_item name="lowest"> + Nivel de detalle: MÃnimo + </combo_item> + </combo_box> + <panel> + <text name="streaming cost"> + Coste de recursos: [COSTE] + </text> + <text name="physics cost"> + Coste fÃsico: [COSTE] + </text> + <text name="upload fee"> + Cuota de carga: N/A + </text> + </panel> + <text name="status"> + [ESTADO] + </text> + <button label="Valores predeterminados" name="reset_btn" tool_tip="Restablecer valores predeterminados"/> + <button label="Subir" name="ok_btn" tool_tip="Cargar al simulador"/> + <button label="Cancelar" name="cancel_btn"/> + <tab_container name="import_tab"> + <panel label="Nivel de detalle" name="lod_panel"> + <text name="lod_table_header"> + Seleccionar nivel de detalle: + </text> + <text name="high_label" value="Alto"/> + <text name="high_triangles" value="0"/> + <text name="high_vertices" value="0"/> + <text name="medium_label" value="Media"/> + <text name="medium_triangles" value="0"/> + <text name="medium_vertices" value="0"/> + <text name="low_label" value="Bajo"/> + <text name="low_triangles" value="0"/> + <text name="low_vertices" value="0"/> + <text name="lowest_label" value="MÃnimo"/> + <text name="lowest_triangles" value="0"/> + <text name="lowest_vertices" value="0"/> + <text name="lod_table_footer"> + Nivel de detalle: [DETALLE] + </text> + <radio_group name="lod_file_or_limit" value="lod_from_file"> + <radio_item label="Cargar desde el archivo" name="lod_from_file"/> + <radio_item label="Generar automáticamente" name="lod_auto_generate"/> + <radio_item label="Ninguno" name="lod_none"/> + </radio_group> + <button label="Examinar..." name="lod_browse"/> + <combo_box name="lod_mode"> + <combo_item name="triangle_limit"> + LÃmite de triángulo + </combo_item> + <combo_item name="error_threshold"> + Margen de error + </combo_item> + </combo_box> + <text name="build_operator_text"> + Crear operador: + </text> + <text name="queue_mode_text"> + Modo de cola: + </text> + <combo_box name="build_operator"> + <combo_item name="edge_collapse"> + Cerrar bordes + </combo_item> + <combo_item name="half_edge_collapse"> + Cerrar la mitad de los bordes + </combo_item> + </combo_box> + <combo_box name="queue_mode"> + <combo_item name="greedy"> + EgoÃsta + </combo_item> + <combo_item name="lazy"> + Vago + </combo_item> + <combo_item name="independent"> + Independiente + </combo_item> + </combo_box> + <text name="border_mode_text"> + Modo de borde: + </text> + <text name="share_tolderance_text"> + Tolerancia de uso compartido: + </text> + <combo_box name="border_mode"> + <combo_item name="border_unlock"> + Desbloquear + </combo_item> + <combo_item name="border_lock"> + Lock + </combo_item> + </combo_box> + <text name="crease_label"> + Ãngulo de marca: + </text> + <spinner name="crease_angle" value="75"/> + </panel> + <panel label="FÃsica" name="physics_panel"> + <panel name="physics geometry"> + <radio_group name="physics_load_radio" value="physics_load_from_file"> + <radio_item label="Archivo:" name="physics_load_from_file"/> + <radio_item label="Utilizar nivel de detalle:" name="physics_use_lod"/> + </radio_group> + <combo_box name="physics_lod_combo" tool_tip="Nivel de detalle para forma fÃsica"> + <combo_item name="physics_lowest"> + MÃnimo + </combo_item> + <combo_item name="physics_low"> + Bajo + </combo_item> + <combo_item name="physics_medium"> + Media + </combo_item> + <combo_item name="physics_high"> + Alto + </combo_item> + </combo_box> + <button label="Examinar..." name="physics_browse"/> + </panel> + <panel name="physics analysis"> + <slider label="Leve:" name="Smooth"/> + <check_box label="Cerrar agujeros (lento)" name="Close Holes (Slow)"/> + <button label="Analizar" name="Decompose"/> + <button label="Cancelar" name="decompose_cancel"/> + </panel> + <panel name="physics simplification"> + <slider label="Pases:" name="Combine Quality"/> + <slider label="Escala de detalle:" name="Detail Scale"/> + <slider label="Retener:" name="Retain%"/> + <button label="Simplificar" name="Simplify"/> + <button label="Cancelar" name="simplify_cancel"/> + </panel> + <panel name="physics info"> + <slider label="Ampliación de vista previa:" name="physics_explode"/> + <text name="physics_triangles"> + Triángulos: [TRIÃNGULOS] + </text> + <text name="physics_points"> + Intersecciones: [PUNTOS] + </text> + <text name="physics_hulls"> + Aspecto exterior: [ASPECTO EXTERIOR] + </text> + </panel> + </panel> + <panel label="Modificadores" name="modifiers_panel"> + <spinner name="import_scale" value="1.0"/> + <text name="import_dimensions"> + [X] x [Y] x [Z] m + </text> + <check_box label="Texturas" name="upload_textures"/> + <check_box label="Peso de la piel" name="upload_skin"/> + <check_box label="Posturas de las articulaciones" name="upload_joints"/> + <spinner name="pelvis_offset" value="0.0"/> + </panel> + </tab_container> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_model_wizard.xml b/indra/newview/skins/default/xui/es/floater_model_wizard.xml new file mode 100644 index 0000000000000000000000000000000000000000..019c2d382909c33c12dea09eaf58a772fe4d7b79 --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_model_wizard.xml @@ -0,0 +1,241 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Model Wizard" title="CARGAR ASISTENTE DE MODELO"> + <button label="5. Subir" name="upload_btn"/> + <button label="4. Revisar" name="review_btn"/> + <button label="3. FÃsica" name="physics2_btn"/> + <button label="3. FÃsica" name="physics_btn"/> + <button label="2. Optimizar" name="optimize_btn"/> + <button label="1. Seleccionar archivo" name="choose_file_btn"/> + <panel name="choose_file_panel"> + <panel name="header_panel"> + <text name="header_text"> + Cargar modelo + </text> + </panel> + <text name="description"> + Este asistente te ayudará a importar modelos de redes en Second Life. En primer lugar, especifica un archivo que contenga el modelo que desees importar. Second Life es compatible con los archivos de COLLADA (.dae). + </text> + <panel name="content"> + <text name="Cache location"> + Nombre del archivo: + </text> + <button label="Examinar..." label_selected="Examinar..." name="browse"/> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + </panel> + <panel name="optimize_panel"> + <panel name="header_panel"> + <text name="header_text"> + Optimizar + </text> + </panel> + <text name="description"> + Este asistente ha optimizado tu modelo con el fin de mejorar el rendimiento. Puedes ajustar los resultados del proceso de optimización a continuación o hacer clic en Siguiente para continuar. + </text> + <panel name="content"> + <text name="high_detail_text"> + Generar nivel de detalle: Alto + </text> + <text name="medium_detail_text"> + Generar nivel de detalle: Media + </text> + <text name="low_detail_text"> + Generar nivel de detalle: Bajo + </text> + <text name="lowest_detail_text"> + Generar nivel de detalle: MÃnimo + </text> + </panel> + <panel name="content2"> + <text name="lod_label"> + Vista previa de modelo: + </text> + <combo_box name="preview_lod_combo2" tool_tip="Nivel de detalle disponible en la vista previa"> + <combo_item name="high"> + Alto + </combo_item> + <combo_item name="medium"> + Media + </combo_item> + <combo_item name="low"> + Bajo + </combo_item> + <combo_item name="lowest"> + MÃnimo + </combo_item> + </combo_box> + <text name="streaming cost"> + Coste de recursos: [COSTE] + </text> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + </panel> + <panel name="physics_panel"> + <panel name="header_panel"> + <text name="header_text"> + FÃsica + </text> + </panel> + <text name="description"> + El asistente creará una forma fÃsica, que determinará la manera en la que el objeto interactúa con otros objetos y avatares. Selecciona con el controlador deslizante el nivel de detalle más adecuado en función del uso del objeto: + </text> + <panel name="content"> + <text name="streaming cost"> + Coste de recursos: [COSTE] + </text> + </panel> + </panel> + <panel name="physics2_panel"> + <panel name="header_panel"> + <text name="header_text"> + FÃsica + </text> + </panel> + <text name="description"> + Obtén una vista previa de la forma fÃsica a continuación y haz clic en Siguiente para continuar. Para modificar la forma fÃsica, haz clic en el botón Atrás. + </text> + <panel name="content"> + <text name="lod_label"> + Vista previa de modelo: + </text> + <combo_box name="preview_lod_combo3" tool_tip="Nivel de detalle disponible en la vista previa"> + <combo_item name="high"> + Alto + </combo_item> + <combo_item name="medium"> + Media + </combo_item> + <combo_item name="low"> + Bajo + </combo_item> + <combo_item name="lowest"> + MÃnimo + </combo_item> + </combo_box> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + <text name="streaming cost"> + Coste de recursos: [COSTE] + </text> + </panel> + </panel> + <panel name="review_panel"> + <panel name="header_panel"> + <text name="header_text"> + Revisar + </text> + </panel> + <text name="description"> + Revisa los detalles que aparecen más abajo y, a continuación, haz clic. Selecciona la opción de carga para cargar el modelo. Se realizará el cargo en tu saldo de L$ cuando hagas clic en Cargar. + </text> + <panel name="content"> + <text name="lod_label"> + Vista previa de modelo: + </text> + <combo_box name="preview_lod_combo" tool_tip="Nivel de detalle disponible en la vista previa"> + <combo_item name="high"> + Alto + </combo_item> + <combo_item name="medium"> + Media + </combo_item> + <combo_item name="low"> + Bajo + </combo_item> + <combo_item name="lowest"> + MÃnimo + </combo_item> + </combo_box> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + <text name="streaming cost"> + Coste de recursos: [COSTE] + </text> + <text name="physics cost"> + Coste fÃsico: [COSTE] + </text> + </panel> + <panel name="upload_panel"> + <panel name="header_panel"> + <text name="header_text"> + Carga completa. + </text> + </panel> + <text name="description"> + ¡Felicidades! Tu modelo se ha cargado correctamente. Encontrarás el modelo en la carpeta Objetos del inventario. + </text> + </panel> + <button label="<< Atrás" name="back"/> + <button label="Siguiente >>" name="next"/> + <button label="Subir" name="upload" tool_tip="Cargar al simulador"/> + <button label="Cancelar" name="cancel"/> + <button label="Cerrar" name="close"/> + <spinner name="import_scale" value="1.0"/> + <string name="status_idle"> + Inactivo + </string> + <string name="status_reading_file"> + Cargando... + </string> + <string name="status_generating_meshes"> + Generando redes... + </string> + <string name="status_vertex_number_overflow"> + Error: El número de intersección es superior a 65534. Cancelado. + </string> + <string name="high"> + Alto + </string> + <string name="medium"> + Media + </string> + <string name="low"> + Bajo + </string> + <string name="lowest"> + MÃnimo + </string> + <string name="mesh_status_good"> + Factúralo. + </string> + <string name="mesh_status_na"> + N/A + </string> + <string name="mesh_status_none"> + Ninguno + </string> + <string name="mesh_status_submesh_mismatch"> + Los niveles de detalle poseen un número distinto de caras a las que se pueden aplicar texturas. + </string> + <string name="mesh_status_mesh_mismatch"> + Los niveles de detalle poseen un número distinto de ejemplos de red. + </string> + <string name="mesh_status_too_many_vertices"> + El nivel de detalle posee demasiadas intersecciones. + </string> + <string name="mesh_status_missing_lod"> + Falta un nivel de detalle requerido. + </string> + <string name="layer_all"> + Todo + </string> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_preview_classified.xml b/indra/newview/skins/default/xui/es/floater_preview_classified.xml deleted file mode 100644 index d9c9c51ba8d647a98b6a4df46384ec054865b63e..0000000000000000000000000000000000000000 --- a/indra/newview/skins/default/xui/es/floater_preview_classified.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="classified_preview" title="INFORMACIÓN DEL CLASIFICADO"> - <floater.string name="Title"> - Clasificado: [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/es/floater_preview_event.xml b/indra/newview/skins/default/xui/es/floater_preview_event.xml deleted file mode 100644 index 7edd4f9e3fdc08abe68d03c91a4515eebf8803e8..0000000000000000000000000000000000000000 --- a/indra/newview/skins/default/xui/es/floater_preview_event.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="event_preview" title="INFORMACIÓN DEL EVENTO"> - <floater.string name="Title"> - Evento: [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/es/floater_price_for_listing.xml b/indra/newview/skins/default/xui/es/floater_price_for_listing.xml new file mode 100644 index 0000000000000000000000000000000000000000..8d6cdc86c0bb0ec5c33bd51e54fd27e47ca54fe1 --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_price_for_listing.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="price_for_listing" title="PUBLICAR UN ANUNCIO CLASIFICADO"> + <text name="explanation_text"> + Tu anuncio clasificado se mostrará durante una semana a partir del dÃa en que se publicó. + +La posición de tu anuncio en la lista de clasificados depende de cuánto elijas pagar. + +Los anuncios mejor pagados van al principio de la lista, y aparecen más arriba en las búsquedas. + </text> + <text name="price_text"> + Precio por el anuncio: + </text> + <text name="price_symbol"> + L$ + </text> + <button label="OK" name="set_price_btn"/> + <button label="Cancelar" name="cancel_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_sound_devices.xml b/indra/newview/skins/default/xui/es/floater_sound_devices.xml new file mode 100644 index 0000000000000000000000000000000000000000..a5ffbd517a1b22996a615d70b98d96b2946ba952 --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_sound_devices.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_sound_devices" title="Dispositivos de sonido"> + <text name="voice_label"> + Chat de voz + </text> + <check_box label="Activados" name="enable_voice"/> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml index 13be47f700bb0f6377726e34dab307f60f88c4e9..9d29bc40bfa0adb047430487c506fc0bcb8dab21 100644 --- a/indra/newview/skins/default/xui/es/floater_tools.xml +++ b/indra/newview/skins/default/xui/es/floater_tools.xml @@ -125,6 +125,18 @@ <text left="134" name="prim_count"> Primitivas: [COUNT] </text> + <text name="linked_set_count"> + Conjuntos con enlaces: [RECUENTO] + </text> + <text name="linked_set_cost" tool_tip="Coste de los conjuntos con enlaces actualmente seleccionados como [prims], [complejidad fÃsica]"> + Coste: [COSTE] / [FÃSICO] + </text> + <text name="object_count"> + Objetos: [RECUENTO] + </text> + <text name="object_cost" tool_tip="Coste de los objetos actualmente seleccionados como [prims] / [complejidad fÃsica]"> + Coste: [COSTE] / [FÃSICO] + </text> <tab_container name="Object Info Tabs" tab_max_width="62" tab_min_width="30" width="288"> <panel label="General" name="General"> <panel.string name="text deed continued"> @@ -269,15 +281,6 @@ <combo_box.item label="Cono truncado" name="Ring"/> <combo_box.item label="Sculpted" name="Sculpted"/> </combo_box> - <combo_box name="material"> - <combo_box.item label="Piedra" name="Stone"/> - <combo_box.item label="Metal" name="Metal"/> - <combo_box.item label="Vidrio" name="Glass"/> - <combo_box.item label="Madera" name="Wood"/> - <combo_box.item label="Carne" name="Flesh"/> - <combo_box.item label="Plástico" name="Plastic"/> - <combo_box.item label="Goma" name="Rubber"/> - </combo_box> <text name="text cut"> Corte (inicio/fin) </text> @@ -350,9 +353,19 @@ <combo_box.item label="Toroide" name="Torus"/> <combo_box.item label="Plano" name="Plane"/> <combo_box.item label="Cilindro" name="Cylinder"/> + <combo_box.item label="Red" name="Mesh"/> </combo_box> </panel> <panel label="Caracter." name="Features"> + <panel.string name="None"> + Ninguno + </panel.string> + <panel.string name="Prim"> + Prim + </panel.string> + <panel.string name="Convex Hull"> + Apariencia convexa + </panel.string> <text name="select_single"> Selecciona un sólo prim para editarlo. </text> @@ -377,6 +390,23 @@ <spinner label="Visión" name="Light Focus"/> <spinner label="Atenuación" name="Light Falloff"/> <spinner label="Ambiental" name="Light Ambiance"/> + <text name="label physicsshapetype"> + Tipo de forma fÃsica: + </text> + <combo_box name="Physics Shape Type Combo Ctrl" tool_tip="Selecciona el tipo de forma fÃsica"/> + <combo_box name="material"> + <combo_box.item label="Piedra" name="Stone"/> + <combo_box.item label="Metal" name="Metal"/> + <combo_box.item label="Cristal" name="Glass"/> + <combo_box.item label="Madera" name="Wood"/> + <combo_box.item label="Carne" name="Flesh"/> + <combo_box.item label="Plástico" name="Plastic"/> + <combo_box.item label="Goma" name="Rubber"/> + </combo_box> + <spinner label="Gravedad" name="Physics Gravity"/> + <spinner label="Fricción" name="Physics Friction"/> + <spinner label="Densidad" name="Physics Density"/> + <spinner label="Reemplazo" name="Physics Restitution"/> </panel> <panel label="Textura" name="Texture"> <panel.string name="string repeats per meter"> diff --git a/indra/newview/skins/default/xui/es/menu_inventory_add.xml b/indra/newview/skins/default/xui/es/menu_inventory_add.xml index 615a1a09b7e61728a128749460a8c83b945d03c7..f17cfe4ceb8b2801e90f80c04572cadbc2d8234f 100644 --- a/indra/newview/skins/default/xui/es/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/es/menu_inventory_add.xml @@ -4,6 +4,8 @@ <menu_item_call label="Imagen ([COST] L$)..." name="Upload Image"/> <menu_item_call label="Sonido ([COST] L$)..." name="Upload Sound"/> <menu_item_call label="Animación ([COST] L$)..." name="Upload Animation"/> + <menu_item_call label="Modelo..." name="Upload Model"/> + <menu_item_call label="Asistente de modelo..." name="Upload Model Wizard"/> <menu_item_call label="Masivo ([COST] L$ por archivo)..." name="Bulk Upload"/> <menu_item_call label="Configurar los permisos por defecto de subida" name="perm prefs"/> </menu> diff --git a/indra/newview/skins/default/xui/es/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/es/menu_model_import_gear_default.xml new file mode 100644 index 0000000000000000000000000000000000000000..0d4f1314c968a6f2c1453bc73f74bc8f0241f19c --- /dev/null +++ b/indra/newview/skins/default/xui/es/menu_model_import_gear_default.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="model_menu_gear_default"> + <menu_item_check label="Mostrar bordes" name="show_edges"/> + <menu_item_check label="Mostrar aspectos fÃsicos" name="show_physics"/> + <menu_item_check label="Mostrar texturas" name="show_textures"/> + <menu_item_check label="Mostrar peso de la piel" name="show_skin_weight"/> + <menu_item_check label="Mostrar posturas de las articulaciones" name="show_joint_positions"/> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml index 1c45d368138e1ebe12e2bc3b70c26696771f62bf..0824e386d5f125a5f85450d1dabdef75a754c446 100644 --- a/indra/newview/skins/default/xui/es/menu_viewer.xml +++ b/indra/newview/skins/default/xui/es/menu_viewer.xml @@ -120,6 +120,8 @@ <menu_item_call label="Imagen ([COST] L$)..." name="Upload Image"/> <menu_item_call label="Sonido ([COST] L$)..." name="Upload Sound"/> <menu_item_call label="Animación ([COST] L$)..." name="Upload Animation"/> + <menu_item_call label="Modelo..." name="Upload Model"/> + <menu_item_call label="Asistente de modelo..." name="Upload Model Wizard"/> <menu_item_call label="Masivo ([COST] L$ por archivo)..." name="Bulk Upload"/> </menu> <menu_item_call label="Deshacer" name="Undo"/> @@ -159,7 +161,7 @@ <menu_item_check label="Alfa" name="Alpha"/> <menu_item_check label="Ãrbol" name="Tree"/> <menu_item_check label="Avatares" name="Character"/> - <menu_item_check label="Superficie del terreno" name="SurfacePath"/> + <menu_item_check label="Parche de superficie" name="Surface Patch"/> <menu_item_check label="Cielo" name="Sky"/> <menu_item_check label="Agua" name="Water"/> <menu_item_check label="Terreno" name="Ground"/> @@ -217,6 +219,7 @@ <menu_item_check label="Texture Category Console" name="Texture Category"/> <menu_item_check label="Fast Timers" name="Fast Timers"/> <menu_item_check label="Memory" name="Memory"/> + <menu_item_check label="Datos de la escena" name="Scene Statistics"/> <menu_item_call label="Region Info to Debug Console" name="Region Info to Debug Console"/> <menu_item_check label="Camera" name="Camera"/> <menu_item_check label="Wind" name="Wind"/> @@ -224,6 +227,7 @@ </menu> <menu label="Show Info" name="Display Info"> <menu_item_check label="Show Time" name="Show Time"/> + <menu_item_check label="Mostrar coste de carga" name="Show Upload Cost"/> <menu_item_check label="Show Render Info" name="Show Render Info"/> <menu_item_check label="Mostrar información de textura" name="Show Texture Info"/> <menu_item_check label="Show Color Under Cursor" name="Show Color Under Cursor"/> @@ -246,7 +250,12 @@ <menu_item_check label="Frame Test" name="Frame Test"/> </menu> <menu label="Render Metadata" name="Render Metadata"> + <menu_item_check label="Normales" name="Normals"/> + <menu_item_check label="Formas del fÃsico" name="Physics Shapes"/> <menu_item_check label="Actualizar el tipo" name="Update Type"/> + <menu_item_check label="Información sobre el nivel de detalle" name="LOD Info"/> + <menu_item_check label="Crear cola" name="Build Queue"/> + <menu_item_check label="Esculpir" name="Sculpt"/> </menu> <menu label="Rendering" name="Rendering"> <menu_item_check label="Axes" name="Axes"/> @@ -312,6 +321,7 @@ <menu_item_call label="Debug Avatar Textures" name="Debug Avatar Textures"/> </menu> <menu_item_check label="HTTP Textures" name="HTTP Textures"/> + <menu_item_check label="Inventario HTTP" name="HTTP Inventory"/> <menu_item_check label="Console Window on next Run" name="Console Window"/> <menu_item_call label="Request Admin Status" name="Request Admin Options"/> <menu_item_call label="Leave Admin Status" name="Leave Admin Options"/> diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml index ce9273ab5000c6ac58a890d3d19ea9c4e85a16bb..b2131fc038af04ea8fbdaef97a52eb87a4072fd3 100644 --- a/indra/newview/skins/default/xui/es/notifications.xml +++ b/indra/newview/skins/default/xui/es/notifications.xml @@ -2166,6 +2166,12 @@ Esto puede influir en tu contraseña. <notification name="RezItemNoPermissions"> No tienes permisos suficientes para renderizar el objeto. </notification> + <notification name="IMAcrossParentEstates"> + No se pueden enviar mensajes instantáneos entre propiedades principales. + </notification> + <notification name="TransferInventoryAcrossParentEstates"> + No se puede transferir el inventario entre propiedades principales. + </notification> <notification name="UnableToLoadNotecard"> En este momento no se puede cargar la nota. </notification> @@ -2359,6 +2365,9 @@ Por favor, dirÃgete a la Base de Conocimientos para más detalles sobre el acce <notification name="ImproperPaymentStatus"> No tienes el estado de pago adecuado para entrar a esta región. </notification> + <notification name="MustGetAgeRgion"> + Debes tener verificada la edad para entrar a esta región + </notification> <notification name="MustGetAgeParcel"> Debes haber verificado tu edad para entrar a esta parcela. </notification> @@ -2738,6 +2747,10 @@ Por tu seguridad, serán bloqueadas durante unos segundos. Un moderador ha silenciado tu voz. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="UploadCostConfirmation"> + Esta carga te costará [PRECIO] L$. ¿Deseas continuar? + <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Subir"/> + </notification> <notification name="ConfirmClearTeleportHistory"> ¿Estás seguro de que quieres borrar tu historial de teleportes? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> @@ -2749,6 +2762,9 @@ Se mostrará cuando haya suficiente espacio. <notification name="ShareNotification"> Selecciona los residentes con quienes deseas compartir. </notification> + <notification name="MeshUploadError"> + No se ha cargado [ETIQUETA]: [MENSAJE] [IDENTIFICADOR] [IDENTIFICADOR_FALTA_VALIDEZ] + </notification> <notification name="ShareItemsConfirmation"> ¿Estás seguro de que quieres compartir los elementos siguientes? @@ -2765,6 +2781,19 @@ Con los siguientes residentes: <notification name="DeedToGroupFail"> Error de transferencia a grupo. </notification> + <notification name="ReleaseLandThrottled"> + La parcela [NOMBRE_PARCELA] no se puede abandonar en este momento. + </notification> + <notification name="ReleasedLandWithReclaim"> + Ya está disponible la parcela [NOMBRE_PARCELA] de [ÃREA] m². + +Dispondrás de [PERÃODO_DE_RECLAMACIÓN] horas para reclamar la cantidad de 0 L$ antes de que se ponga en venta. + </notification> + <notification name="ReleasedLandNoReclaim"> + Ya está disponible la parcela [NOMBRE_PARCELA] de [ÃREA] m². + +Ya está en venta. + </notification> <notification name="AvatarRezNotification"> ( [EXISTENCE] segundos vivo) El avatar '[NAME]' tardó [TIME] segundos en dejar de aparecer como nube. @@ -2902,6 +2931,10 @@ Al ocultar el botón Hablar se desactiva la función de voz. La creación y edición de grupos sólo está disponible en el modo Avanzado. ¿Quieres salir y cambiar de modo? El selector de modo se encuentra en la pantalla de inicio de sesión. <usetemplate name="okcancelbuttons" notext="No salir" yestext="Salir"/> </notification> + <notification label="" name="NoPlaceInfo"> + La opción de consulta del perfil del lugar solo está disponible en el modo Avanzado. ¿Quieres salir y cambiar de modo? El selector de modo se encuentra en la pantalla de inicio de sesión. + <usetemplate name="okcancelbuttons" notext="No salir" yestext="Salir"/> + </notification> <notification label="" name="NoPicks"> La creación y edición de Destacados sólo está disponible en el modo Avanzado. ¿Quieres salir y cambiar de modo? El selector de modo se encuentra en la pantalla de inicio de sesión. <usetemplate name="okcancelbuttons" notext="No salir" yestext="Salir"/> @@ -2922,9 +2955,18 @@ Al ocultar el botón Hablar se desactiva la función de voz. El pago a otros residentes sólo está disponible en el modo Avanzado. ¿Quieres cerrar sesión y cambiar de modo? <usetemplate name="okcancelbuttons" notext="No salir" yestext="Salir"/> </notification> - <global name="UnsupportedCPU"> - - La velocidad de tu CPU no cumple los requerimientos mÃnimos. - </global> + <notification label="" name="NoInventory"> + La opción de consulta del inventario solo está disponible en el modo Avanzado. ¿Quieres cerrar sesión y cambiar de modo? + <usetemplate name="okcancelbuttons" notext="No salir" yestext="Salir"/> + </notification> + <notification label="" name="NoAppearance"> + El editor de apariencia solo está disponible en el modo Avanzado. ¿Quieres cerrar sesión y cambiar de modo? + <usetemplate name="okcancelbuttons" notext="No salir" yestext="Salir"/> + </notification> + <notification label="" name="NoSearch"> + Las búsquedas solo están disponibles en el modo Avanzado. ¿Quieres cerrar sesión y cambiar de modo? + <usetemplate name="okcancelbuttons" notext="No salir" yestext="Salir"/> + </notification> <global name="UnsupportedGLRequirements"> Parece que no tienes el hardware apropiado para [APP_NAME]. [APP_NAME] requiere una tarjeta gráfica OpenGL que admita texturas múltiples ('multitexture support'). Si la tienes, comprueba que tienes los últimos 'drivers' para tu tarjeta gráfica, asà como los últimos parches y 'service packs' para tu sistema operativo. diff --git a/indra/newview/skins/default/xui/es/panel_friends.xml b/indra/newview/skins/default/xui/es/panel_friends.xml deleted file mode 100644 index e1cac7c2c364f8cfbe8ccb8962cf2e0239122b7b..0000000000000000000000000000000000000000 --- a/indra/newview/skins/default/xui/es/panel_friends.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="friends"> - <string name="Multiple"> - Varios amigos - </string> - <scroll_list name="friend_list" tool_tip="Para seleccionar a varios amigos, mantenga pulsado Ctrl o Mays. mientras les va pulsando."> - <column name="icon_online_status" tool_tip="Estado de conexión"/> - <column label="Nombre" name="friend_name" tool_tip="Nombre"/> - <column name="icon_visible_online" tool_tip="El amigo puede ver cuándo está conectado"/> - <column name="icon_visible_map" tool_tip="El amigo puede localizarle en el mapa"/> - <column name="icon_edit_mine" tool_tip="El amigo puede editar, borrar o tomar sus objetos"/> - <column name="icon_edit_theirs" tool_tip="Puede editar los objetos de este amigo"/> - </scroll_list> - <button label="MI/Llamada" name="im_btn" tool_tip="Abrir sesión de mensajes instantáneos"/> - <button label="Perfil" name="profile_btn" tool_tip="Mostrar la imagen, los grupos, y otra información"/> - <button label="Teleporte" name="offer_teleport_btn" tool_tip="Ofrecer a este amigo teleportarle hasta su posición"/> - <button label="Pagar" name="pay_btn" tool_tip="Dar dólares Linden (L$) a este amigo"/> - <button label="Quitar" name="remove_btn" tool_tip="Quitar a esta persona de su lista de amigos"/> - <button label="Añadir" name="add_btn" tool_tip="Ofrecer amistad a un Residente"/> -</panel> diff --git a/indra/newview/skins/default/xui/es/panel_media_settings_general.xml b/indra/newview/skins/default/xui/es/panel_media_settings_general.xml index 46326d1e8bd8c76408cf62b9c0222a7a95591a75..afc11a42506e311f7d8b98cf5b8fd2160bf0dab5 100644 --- a/indra/newview/skins/default/xui/es/panel_media_settings_general.xml +++ b/indra/newview/skins/default/xui/es/panel_media_settings_general.xml @@ -20,7 +20,8 @@ <check_box initial_value="false" label="Zoom automático" name="auto_zoom"/> <check_box initial_value="false" label="Ejecutar automáticamente los media" name="auto_play"/> <text name="media_setting_note"> - Nota: los residentes pueden elegir una configuración distinta de ésta + Nota: los residentes pueden elegir una configuración distinta +de ésta </text> <check_box initial_value="false" label="Ajustar automáticamente los media en la cara del objeto" name="auto_scale"/> <text name="size_label"> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml index 7c2c9f505e619ef9eb9a086a47937e58eef8ba97..96e63e6fa027c0827485e295b726d67f4b27a4a0 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml @@ -14,5 +14,5 @@ <check_box label="Permitir el acceso de varios usuarios" name="allow_multiple_viewer_check"/> <check_box label="Mostrar la selección de cuadrÃcula al iniciar sesión" name="show_grid_selection_check"/> <check_box label="Mostrar el menú Avanzado" name="show_advanced_menu_check"/> - <check_box label="Mostrar el menú Desarrollador" name="show_develop_menu_check"/> + <check_box label="Mostrar el menú Develop" name="show_develop_menu_check"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml index f7bc1f6aadc0675afd8f19d2155d388e6628a339..d8fd43469d42c93ed10047440ea210fcf9ce2fb2 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml @@ -31,7 +31,7 @@ <spinner label="Tiempo de los otros interlocutores:" name="nearby_toasts_fadingtime"/> <check_box name="translate_chat_checkbox"/> <text name="translate_chb_label"> - Utiliza la herramienta de traducción automática mientras utilizas el chat (mediante Google) + Usar en el chat el traductor automático de Google </text> <text name="translate_language_text"> Traducir el chat al: diff --git a/indra/newview/skins/default/xui/es/panel_preferences_colors.xml b/indra/newview/skins/default/xui/es/panel_preferences_colors.xml index a7fb2d9af858d00003d2d6561ab9eb22280fd1a5..e6e4c132038c654f95d5be28a9cd283ae923db15 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_colors.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_colors.xml @@ -22,6 +22,9 @@ <text name="text_box5"> Errores </text> + <text name="text_box10"> + Directo + </text> <text name="text_box7"> Propietario </text> @@ -29,7 +32,7 @@ URLs </text> <text name="bubble_chat"> - Color de fondo de las etiquetas de nombre (también se aplica a los bocadillos del chat): + Color de fondo de la etiqueta del nombre (afectará también a los bocadillos del chat): </text> <color_swatch name="background" tool_tip="Elige el color de las etiquetas de nombre"/> <slider label="Opacidad:" name="bubble_chat_opacity" tool_tip="Elige la opacidad de las etiquetas de nombre"/> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml index ac405870332d989eebbf635b66dbdff0414ea4b5..281b871fed155c43c6a3ac3ce227e52ea81a1217 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml @@ -27,8 +27,20 @@ </text> <check_box initial_value="verdadero" label="Agua transparente" name="TransparentWater"/> <check_box initial_value="true" label="Efecto de relieve y brillo" name="BumpShiny"/> + <check_box initial_value="verdadero" label="Luces locales" name="LocalLights"/> <check_box initial_value="true" label="Shaders básicos" name="BasicShaders" tool_tip="Desactivando esta opción puede prevenir fallos en algunos controladores de la tarjeta gráfica."/> <check_box initial_value="true" label="Shaders de la atmósfera" name="WindLightUseAtmosShaders"/> + <check_box initial_value="verdadero" label="Luces y sombras" name="UseLightShaders"/> + <check_box initial_value="verdadero" label="Oclusión del ambiente" name="UseSSAO"/> + <check_box initial_value="verdadero" label="Profundidad del campo" name="UseDoF"/> + <text name="shadows_label"> + Sombras: + </text> + <combo_box name="ShadowDetail"> + <combo_box.item label="Ninguno" name="0"/> + <combo_box.item label="Sol/luna" name="1"/> + <combo_box.item label="Sol/luna + proyectores" name="2"/> + </combo_box> <text name="reflection_label"> Reflejos en el agua: </text> @@ -86,7 +98,7 @@ <check_box initial_value="true" label="Avatares simulados" name="AvatarImpostors"/> <check_box initial_value="true" label="Renderizado por hardware" name="AvatarVertexProgram"/> <check_box initial_value="true" label="Ropas del avatar" name="AvatarCloth"/> - <text name="TerrainDetailText" left="402"> + <text left="402" name="TerrainDetailText"> Detalle del terreno: </text> <radio_group name="TerrainDetailRadio"> diff --git a/indra/newview/skins/default/xui/es/panel_region_general.xml b/indra/newview/skins/default/xui/es/panel_region_general.xml index fe7f51c74e822b24675c508be55788140cbfe866..453d1fe43c8fe44a047b4a54098629259848e674 100644 --- a/indra/newview/skins/default/xui/es/panel_region_general.xml +++ b/indra/newview/skins/default/xui/es/panel_region_general.xml @@ -25,6 +25,7 @@ <check_box label="Permitir la reventa del terreno" name="allow_land_resell_check"/> <check_box label="Permitir unir/dividir el terreno" name="allow_parcel_changes_check"/> <check_box label="Bloquear el mostrar el terreno en la búsqueda" name="block_parcel_search_check" tool_tip="Permitir que la gente vea esta región y sus parcelas en los resultados de la búsqueda."/> + <check_box label="Permitir objetos de red" name="mesh_rez_enabled_check" tool_tip="Permitir que los usuarios creen objetos de red en esta región"/> <spinner label="Nº máximo de avatares" label_width="120" name="agent_limit_spin" width="180"/> <spinner label="Plus de objetos" label_width="120" name="object_bonus_spin" width="180"/> <text label="Calificación" name="access_text"> diff --git a/indra/newview/skins/default/xui/es/panel_sound_devices.xml b/indra/newview/skins/default/xui/es/panel_sound_devices.xml new file mode 100644 index 0000000000000000000000000000000000000000..acf5c68cdadc46215bda49a7b8a571560abeeeb0 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_sound_devices.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel label="Configuración del dispositivo" name="device_settings_panel"> + <panel.string name="default_text"> + Por defecto + </panel.string> + <text name="Input"> + Entrada + </text> + <text name="My volume label"> + Mi volumen: + </text> + <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Cambia el volumen usando este deslizable"/> + <text name="wait_text"> + Por favor, espera + </text> + <text name="Output"> + Salida + </text> +</panel> diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index 27ca0e3bbb25338cb4f615b3affd14dec0ac14ec..3731b6b57c54dd235c56665a67b268c99f0c20da 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -118,6 +118,139 @@ <string name="create_account_url"> http://join.secondlife.com/index.php?lang=es-ES </string> + <string name="LoginFailedViewerNotPermitted"> + Ya no puedes acceder a Second Life con el visor que estás utilizando. Visita la siguiente página para descargar un nuevo visor: +http://secondlife.com/download. + +Si deseas obtener más información, consulta las preguntas frecuentes que aparecen a continuación: +http://secondlife.com/viewer-access-faq + </string> + <string name="LoginIntermediateOptionalUpdateAvailable"> + Actualización opcional del visor disponible: [VERSIÓN] + </string> + <string name="LoginFailedRequiredUpdate"> + Actualización necesaria del visor: [VERSIÓN] + </string> + <string name="LoginFailedAlreadyLoggedIn"> + El agente ya ha iniciado sesión. + </string> + <string name="LoginFailedAuthenticationFailed"> + Lo sentimos. No ha sido posible iniciar sesión. +Comprueba si has introducido correctamente + * El nombre de usuario (como juangarcia12 o estrella.polar) + * Contraseña +Asimismo, asegúrate de que la tecla Mayús esté desactivada. + </string> + <string name="LoginFailedPasswordChanged"> + Como precaución de seguridad, se ha modificado tu contraseña. +DirÃgete a la página de tu cuenta en http://secondlife.com/password +y responde a la pregunta de seguridad para restablecer la contraseña. +Lamentamos las molestias. + </string> + <string name="LoginFailedPasswordReset"> + Hemos realizado unos cambios en nuestro sistema, por lo que deberás restablecer la contraseña. +DirÃgete a la página de tu cuenta en http://secondlife.com/password +y responde a la pregunta de seguridad para restablecer la contraseña. +Lamentamos las molestias. + </string> + <string name="LoginFailedEmployeesOnly"> + Second Life no está disponible temporalmente debido a tareas de mantenimiento. +Actualmente, solo se permite iniciar sesión a los empleados. +Consulta www.secondlife.com/status si deseas obtener actualizaciones. + </string> + <string name="LoginFailedPremiumOnly"> + Se ha restringido de manera temporal el inicio de sesión en Second Life con el fin de garantizar una experiencia óptima a nuestros residentes. + +Aquellos usuarios que dispongan de cuentas gratuitas no podrán acceder a Second Life durante este perÃodo de tiempo, ya que el propósito de esta medida es obtener espacio suficiente para los residentes que hayan pagado por acceder a Second Life. + </string> + <string name="LoginFailedComputerProhibited"> + No se puede acceder a Second Life desde este ordenador. +Si crees que se trata de un error, ponte en contacto con +support@secondlife.com. + </string> + <string name="LoginFailedAcountSuspended"> + No se podrá acceder a tu cuenta hasta las +[HORA] (horario de la costa del PacÃfico). + </string> + <string name="LoginFailedAccountDisabled"> + En este momento no podemos completar la solicitud. +Si deseas obtener asistencia, ponte en contacto con el departamento de soporte de Second Life a través de la página http://secondlife.com/support. +Si no puedes cambiar la contraseña, llama al número (866) 476-9763. + </string> + <string name="LoginFailedTransformError"> + Se han detectado datos incorrectos en el inicio de sesión. +Ponte en contacto con support@secondlife.com. + </string> + <string name="LoginFailedAccountMaintenance"> + Se están realizando tareas rutinarias de mantenimiento en tu cuenta. +No se podrá acceder a tu cuenta hasta las +[HORA] (horario de la costa del PacÃfico). +Si crees que se trata de un error, ponte en contacto con support@secondlife.com. + </string> + <string name="LoginFailedPendingLogoutFault"> + La solicitud de cierre de sesión ha obtenido como resultado un error del simulador. + </string> + <string name="LoginFailedPendingLogout"> + El sistema está cerrando tu sesión en estos momentos. +Tu cuenta no estará disponible hasta las +[HORA] (horario de la costa del PacÃfico). + </string> + <string name="LoginFailedUnableToCreateSession"> + No se ha podido crear una sesión válida. + </string> + <string name="LoginFailedUnableToConnectToSimulator"> + No se ha podido establecer la conexión con un simulador. + </string> + <string name="LoginFailedRestrictedHours"> + Tu cuenta solo puede acceder a Second Life +entre las [INICIO] y las [FIN] (horario de la costa del PacÃfico). +Inténtalo de nuevo durante ese horario. +Si crees que se trata de un error, ponte en contacto con support@secondlife.com. + </string> + <string name="LoginFailedIncorrectParameters"> + Parámetros incorrectos. +Si crees que se trata de un error, ponte en contacto con support@secondlife.com. + </string> + <string name="LoginFailedFirstNameNotAlphanumeric"> + El parámetro correspondiente al nombre debe contener caracteres alfanuméricos. +Si crees que se trata de un error, ponte en contacto con support@secondlife.com. + </string> + <string name="LoginFailedLastNameNotAlphanumeric"> + El parámetro correspondiente al apellido debe contener caracteres alfanuméricos. +Si crees que se trata de un error, ponte en contacto con support@secondlife.com. + </string> + <string name="LogoutFailedRegionGoingOffline"> + La región se está desconectando. +Intenta iniciar sesión de nuevo en unos instantes. + </string> + <string name="LogoutFailedAgentNotInRegion"> + El agente no se encuentra en la región. +Intenta iniciar sesión de nuevo en unos instantes. + </string> + <string name="LogoutFailedPendingLogin"> + A esta región ya se ha accedido en otra sesión. +Intenta iniciar sesión de nuevo en unos instantes. + </string> + <string name="LogoutFailedLoggingOut"> + Se ha salido de la región en la sesión anterior. +Intenta iniciar sesión de nuevo en unos instantes. + </string> + <string name="LogoutFailedStillLoggingOut"> + La región aún está cerrando la sesión anterior. +Intenta iniciar sesión de nuevo en unos instantes. + </string> + <string name="LogoutSucceeded"> + Se ha salido de la región en la última sesión. +Intenta iniciar sesión de nuevo en unos instantes. + </string> + <string name="LogoutFailedLogoutBegun"> + La región ha comenzado el proceso de cierre de sesión. +Intenta iniciar sesión de nuevo en unos instantes. + </string> + <string name="LoginFailedLoggingOutSession"> + El sistema ha comenzado a cerrar la última sesión. +Intenta iniciar sesión de nuevo en unos instantes. + </string> <string name="AgentLostConnection"> Esta región puede estar teniendo problemas. Por favor, comprueba tu conexión a Internet. </string> @@ -426,6 +559,9 @@ <string name="symbolic folder link"> enlace de la carpeta </string> + <string name="mesh"> + red + </string> <string name="AvatarAway"> Ausente </string> @@ -1153,6 +1289,9 @@ <string name="InvFolder Accessories"> Accesorios </string> + <string name="InvFolder Meshes"> + Redes + </string> <string name="InvFolder Friends"> Amigos </string> @@ -1466,8 +1605,8 @@ <string name="Unknown"> (Desconocido) </string> - <string name="SummaryForTheWeek" value="Resumen de esta semana, empezando el"/> - <string name="NextStipendDay" value="El próximo dÃa de pago es el"/> + <string name="SummaryForTheWeek" value="Resumen de esta semana, empezando el "/> + <string name="NextStipendDay" value=". El próximo dÃa de pago es el "/> <string name="GroupIndividualShare" value="Grupo Aportaciones individuales"/> <string name="GroupColumn" value="Grupo"/> <string name="Balance"> @@ -3663,6 +3802,9 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE]. <string name="session_initialization_timed_out_error"> Se ha agotado el tiempo del inicio de sesión </string> + <string name="Home position set."> + Posición inicial establecida. + </string> <string name="voice_morphing_url"> http://secondlife.com/landing/voicemorphing </string> diff --git a/indra/newview/skins/default/xui/fr/floater_about.xml b/indra/newview/skins/default/xui/fr/floater_about.xml index f963a40cd31f48ef768d8ec964eb48aff55a0705..e3e3169161fee717b64a1016a4cabb6a14286e3e 100644 --- a/indra/newview/skins/default/xui/fr/floater_about.xml +++ b/indra/newview/skins/default/xui/fr/floater_about.xml @@ -56,27 +56,32 @@ Tous nos remerciements aux résidents suivants pour avoir testé cette version ( <panel label="Licences" name="licenses_panel"> <text_editor name="credits_editor"> 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion - APR Copyright (C) 2000-2004 The Apache Software Foundation - cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) - expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. - FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). - GL Copyright (C) 1999-2004 Brian Paul. - Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. - jpeg2000 Copyright (C) 2001, David Taubman, The University of New South - Wales (UNSW) - jpeglib Copyright (C) 1991-1998, Thomas G. Lane. - ogg/vorbis Copyright (C) 2001, Xiphophorus - OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. - SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga - SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - xmlrpc-epi Copyright (C) 2000 Epinions, Inc. - zlib Copyright (C) 1995-2002 Jean-loup Gailly et Mark Adler. - google-perftools Copyright (c) 2005, Google Inc. - - Tous droits réservés. Voir licenses.txt pour plus de détails. +APR Copyright (C) 2000-2004 The Apache Software Foundation +Collada DOM Copyright 2005 Sony Computer Entertainment Inc. +cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) +DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc. +expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. +FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). +GL Copyright (C) 1999-2004 Brian Paul. +GLOD Copyright (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University et David Luebke, Brenden Schubert, University of Virginia. +google-perftools Copyright (c) 2005, Google Inc. +Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. +jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) +jpeglib Copyright (C) 1991-1998, Thomas G. Lane. +ogg/vorbis Copyright (C) 2001, Xiphophorus +OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. +PCRE Copyright (c) 1997-2008 University of Cambridge +SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga +SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +xmlrpc-epi Copyright (C) 2000 Epinions, Inc. +zlib Copyright (C) 1995-2002 Jean-loup Gailly et Mark Adler. +google-perftools Copyright (c) 2005, Google Inc. - Codage Audio du chat vocal : Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 - Annex C) +Le client Second Life utilise Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (et ses concédants de licence). Tous droits réservés. Pour plus de détails, consultez le site Web www.havok.com. + +Tous droits réservés. Voir licenses.txt pour plus d'informations. + +Codage audio du chat vocal : Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) </text_editor> </panel> </tab_container> diff --git a/indra/newview/skins/default/xui/fr/floater_buy_contents.xml b/indra/newview/skins/default/xui/fr/floater_buy_contents.xml index 7aa142b13e7ade4a0576c3a6aff56d1765682f0b..0436dc8a91e0fdba86713074a90bb01a45cc0434 100644 --- a/indra/newview/skins/default/xui/fr/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/fr/floater_buy_contents.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_buy_contents" title="ACHETER DES CONTENUS"> <text name="contains_text"> - [NAME] contient : + <nolink>[NAME]</nolink> contient : </text> <text name="buy_text"> Acheter [AMOUNT] L$ à [NAME] ? diff --git a/indra/newview/skins/default/xui/fr/floater_customize.xml b/indra/newview/skins/default/xui/fr/floater_customize.xml deleted file mode 100644 index ff407b25c1657e0e62bb952892540104b05c04d6..0000000000000000000000000000000000000000 --- a/indra/newview/skins/default/xui/fr/floater_customize.xml +++ /dev/null @@ -1,530 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="APPARENCE"> - <tab_container name="customize tab container" tab_min_width="150"> - <text label="Parties du corps" name="body_parts_placeholder"> - Parties du corps - </text> - <panel label="Silhouette" left="154" name="Shape" width="389"> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - <button label="Corps" label_selected="Corps" name="Body"/> - <button label="Tête" label_selected="Tête" name="Head"/> - <button label="Yeux" label_selected="Yeux" name="Eyes"/> - <button label="Oreilles" label_selected="Oreilles" name="Ears"/> - <button label="Nez" label_selected="Nez" name="Nose"/> - <button label="Bouche" label_selected="Bouche" name="Mouth"/> - <button label="Menton" label_selected="Menton" name="Chin"/> - <button label="Torse" label_selected="Torse" name="Torso"/> - <button label="Jambes" label_selected="Jambes" name="Legs"/> - <radio_group name="sex radio"> - <radio_item label="Femme" name="radio" value="0"/> - <radio_item label="Homme" name="radio2" value="1"/> - </radio_group> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portée - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de silhouette, faites-en glisser une de votre inventaire à votre avatar. Vous pouvez aussi en créer une nouvelle et la porter. - </text> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Silhouette : - </text> - <button label="Créer une silhouette" label_selected="Créer une silhouette" name="Create New"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - </panel> - <panel label="Peau" name="Skin"> - <button label="Couleur" label_selected="Couleur" name="Skin Color" width="84"/> - <button label="Détails visage" label_selected="Détails visage" name="Face Detail" width="84"/> - <button label="Maquillage" label_selected="Maquillage" name="Makeup" width="84"/> - <button label="Détails corps" label_selected="Détails corps" name="Body Detail" width="84"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portée - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de peau, faites-en glisser une à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle et la porter. - </text> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Peau : - </text> - <texture_picker label="Tatouages tête" name="Head Tattoos" tool_tip="Cliquez pour sélectionner une image" width="78"/> - <texture_picker label="Tatouages haut" name="Upper Tattoos" tool_tip="Cliquez pour sélectionner une image" width="78"/> - <texture_picker label="Tatouages bas" name="Lower Tattoos" tool_tip="Cliquez pour sélectionner une image" width="78"/> - <button label="Créer une peau" label_selected="Créer une peau" name="Create New"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Cheveux" name="Hair"> - <button label="Couleur" label_selected="Couleur" name="Color"/> - <button label="Style" label_selected="Style" name="Style"/> - <button label="Sourcils" label_selected="Sourcils" name="Eyebrows"/> - <button label="Pilosité" label_selected="Pilosité" name="Facial"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portés - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de cheveux, faites-en glisser à partir de votre inventaire. Vous pouvez aussi en créer de nouveaux et les porter. - </text> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Cheveux : - </text> - <texture_picker label="Texture" name="Texture" tool_tip="Cliquez pour sélectionner une image"/> - <button label="Créer des cheveux" label_selected="Créer des cheveux" name="Create New"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Yeux" name="Eyes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portés - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer d'yeux, faites-en glisser une paire de votre inventaire à votre avatar. Vous pouvez aussi en créer de nouveaux et les porter. - </text> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Yeux : - </text> - <texture_picker label="Iris" name="Iris" tool_tip="Cliquez pour sélectionner une image"/> - <button label="Créer des yeux" label_selected="Créer des yeux" name="Create New"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <text label="Habits" name="clothes_placeholder"> - Habits - </text> - <panel label="Chemise" name="Shirt"> - <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> - <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> - <button label="Créer une chemise" label_selected="Créer une chemise" name="Create New"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portée - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de chemise, faites-en glisser une à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle et la porter. - </text> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Chemise : - </text> - </panel> - <panel label="Pantalon" name="Pants"> - <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> - <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> - <button label="Créer un pantalon" label_selected="Créer un pantalon" name="Create New"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non porté - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de pantalon, faites-en glisser un à partir de votre inventaire. Vous pouvez aussi en créer un nouveau et le porter. - </text> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Pantalon : - </text> - </panel> - <panel label="Chaussures" name="Shoes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portées - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de chaussures, faites-en glisser une paire de votre inventaire à votre avatar. Vous pouvez aussi en créer des nouvelles et les porter. - </text> - <button label="Créer des chaussures" label_selected="Créer des chaussures" name="Create New"/> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Chaussures : - </text> - <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> - <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Chaussettes" name="Socks"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portées - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de chaussettes, faites-en glisser une paire à partir de votre inventaire. Vous pouvez aussi en créer des nouvelles et les porter. - </text> - <button label="Créer des chaussettes" label_selected="Créer des chaussettes" name="Create New"/> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Chaussettes : - </text> - <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> - <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Veste" name="Jacket"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portée - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de veste, faites-en glisser une à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle et la porter. - </text> - <button label="Créer une veste" label_selected="Créer une veste" name="Create New"/> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Veste : - </text> - <texture_picker label="Tissu (dessus)" name="Upper Fabric" tool_tip="Cliquez pour sélectionner une image" width="81"/> - <texture_picker label="Tissu (dessous)" name="Lower Fabric" tool_tip="Cliquez pour sélectionner une image" width="81"/> - <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="81"/> - <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Gants" name="Gloves"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portés - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de gants, faites-en glisser une paire à partir de votre inventaire. Vous pouvez aussi en créer de nouveaux et les porter. - </text> - <button label="Créer des gants" label_selected="Créer des gants" name="Create New"/> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Gants : - </text> - <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> - <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Débardeur" name="Undershirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non porté - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de débardeur, faites-en glisser un à partir de votre inventaire. Vous pouvez aussi en créer un nouveau et le porter. - </text> - <button label="Créer un débardeur" label_selected="Créer un débardeur" name="Create New"/> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label"> - Débardeur : - </text> - <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> - <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Caleçon" name="Underpants"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non porté - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de caleçon, faites-en glisser un à partir de votre inventaire. Vous pouvez aussi en créer un nouveau et le porter. - </text> - <button label="Créer un caleçon" label_selected="Créer un caleçon" name="Create New"/> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label"> - Caleçon : - </text> - <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> - <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Jupe" name="Skirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portée - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de jupe, faites-en glisser une à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle et la porter. - </text> - <button label="Créer une jupe" label_selected="Créer une jupe" name="Create New"/> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Jupe : - </text> - <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> - <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Tatouage" name="Tattoo"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non porté - </text> - <text name="path"> - Dans [PATH] - </text> - <text name="not worn instructions"> - Pour changer de tatouage, faites-en glisser un de votre inventaire à votre avatar. Vous pouvez aussi en créer un nouveau et le porter. - </text> - <button label="Créer un nouveau tatouage" label_selected="Créer un nouveau tatouage" name="Create New"/> - <text name="no modify instructions"> - Vous n'avez pas le droit de modifier cet objet. - </text> - <text name="Item Action Label"> - Tatouage : - </text> - <texture_picker label="Tatouage tête" name="Head Tattoo" tool_tip="Cliquez pour sélectionner une image"/> - <texture_picker label="Tatouage haut" name="Upper Tattoo" tool_tip="Cliquez pour sélectionner une image"/> - <texture_picker label="Tatouage bas" name="Lower Tattoo" tool_tip="Cliquez pour sélectionner une image"/> - <button label="Enlever" label_selected="Enlever" name="Take Off"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Alpha" name="Alpha"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non porté - </text> - <text name="path"> - Dans [PATH] - </text> - <text name="not worn instructions"> - Pour changer de masque alpha, faites-en glisser un de votre inventaire à votre avatar. Vous pouvez aussi en créer un nouveau et le porter. - </text> - <button label="Créer un nouvel alpha" label_selected="Créer un nouvel alpha" name="Create New"/> - <text name="no modify instructions"> - Vous n'avez pas le droit de modifier cet objet. - </text> - <text name="Item Action Label"> - Alpha : - </text> - <texture_picker label="Alpha bas" name="Lower Alpha" tool_tip="Cliquez pour sélectionner une image"/> - <texture_picker label="Alpha haut" name="Upper Alpha" tool_tip="Cliquez pour sélectionner une image"/> - <texture_picker label="Alpha tête" name="Head Alpha" tool_tip="Cliquez pour sélectionner une image"/> - <texture_picker label="Alpha yeux" name="Eye Alpha" tool_tip="Cliquez pour sélectionner une image"/> - <texture_picker label="Alpha cheveux" name="Hair Alpha" tool_tip="Cliquez pour sélectionner une image"/> - <button label="Enlever" label_selected="Enlever" name="Take Off"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - </tab_container> - <scroll_container left="251" name="panel_container"/> - <button label="Infos scripts" label_selected="Infos scripts" name="script_info" tool_tip="Afficher les scripts attachés à votre avatar"/> - <button label="Créer tenue" label_selected="Créer une tenue..." name="make_outfit_btn"/> - <button label="Annuler" label_selected="Annuler" name="Cancel"/> - <button label="OK" label_selected="OK" name="Ok"/> -</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_import_collada.xml b/indra/newview/skins/default/xui/fr/floater_import_collada.xml new file mode 100644 index 0000000000000000000000000000000000000000..03804c4bd5fe1717bd23f418f0134e3252d6bd2b --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_import_collada.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Import Collada" title="Importation de scène"> + <text name="mesh count"> + Maillages : [COUNT] + </text> + <text name="texture count"> + Textures : [COUNT] + </text> + <text name="status"> + État : [STATUS] + </text> + <button label="Annuler" name="cancel"/> + <button label="OK" name="ok"/> + <string name="status_idle"> + Inactif + </string> + <string name="status_uploading"> + Chargement de [NAME] + </string> + <string name="status_creating"> + Création de l'objet [NAME] + </string> +</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml index 1ee85a77ce686d50782c5b24adaae0d2f982753c..7567817f3a8084a8a3d64a08f8a15cf5f1aabe1d 100644 --- a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml @@ -5,6 +5,7 @@ <check_box label="Habits" name="check_clothing"/> <check_box label="Gestes" name="check_gesture"/> <check_box label="Repères" name="check_landmark"/> + <check_box label="Maillages" name="check_mesh"/> <check_box label="Notes" name="check_notecard"/> <check_box label="Objets" name="check_object"/> <check_box label="Scripts" name="check_script"/> diff --git a/indra/newview/skins/default/xui/fr/floater_model_preview.xml b/indra/newview/skins/default/xui/fr/floater_model_preview.xml new file mode 100644 index 0000000000000000000000000000000000000000..213847bbd0b0153fb7bf965a474972d4938fd662 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_model_preview.xml @@ -0,0 +1,231 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Model Preview" title="Chargement du modèle"> + <string name="status_idle"> + Inactif + </string> + <string name="status_reading_file"> + Chargement... + </string> + <string name="status_generating_meshes"> + Génération des maillages... + </string> + <string name="status_vertex_number_overflow"> + Erreur : valeur de sommet supérieure à 65534. Opération abandonnée. + </string> + <string name="high"> + Élevé + </string> + <string name="medium"> + Moyen + </string> + <string name="low"> + Faible + </string> + <string name="lowest"> + Le plus faible + </string> + <string name="mesh_status_good"> + Bon à publier ! + </string> + <string name="mesh_status_na"> + N/A + </string> + <string name="mesh_status_none"> + Aucun + </string> + <string name="mesh_status_submesh_mismatch"> + Un nombre différent de faces d'application de texture est associé aux niveaux de détail. + </string> + <string name="mesh_status_mesh_mismatch"> + Un nombre différent d'instances de maillage est associé aux niveaux de détail. + </string> + <string name="mesh_status_too_many_vertices"> + Trop de sommets pour le niveau de détail. + </string> + <string name="mesh_status_missing_lod"> + Niveau de détail requis manquant. + </string> + <string name="layer_all"> + Tout + </string> + <string name="decomposing"> + Analyse... + </string> + <string name="simplifying"> + Simplification... + </string> + <text name="name_label"> + Nom : + </text> + <text name="lod_label"> + Aperçu : + </text> + <combo_box name="preview_lod_combo" tool_tip="Niveau de détail à afficher en rendu d'aperçu."> + <combo_item name="high"> + Niveau de détail : Élevé + </combo_item> + <combo_item name="medium"> + Niveau de détail : Moyen + </combo_item> + <combo_item name="low"> + Niveau de détail : Faible + </combo_item> + <combo_item name="lowest"> + Niveau de détail : Le plus faible + </combo_item> + </combo_box> + <panel> + <text name="streaming cost"> + Coût de la ressource : [COST] + </text> + <text name="physics cost"> + Coût des propriétés physiques : [COST] + </text> + <text name="upload fee"> + Frais de chargement : N/A + </text> + </panel> + <text name="status"> + [STATUS] + </text> + <button label="Valeurs par défaut" name="reset_btn" tool_tip="Rétablir les valeurs par défaut."/> + <button label="Charger" name="ok_btn" tool_tip="Charger dans le simulateur."/> + <button label="Annuler" name="cancel_btn"/> + <tab_container name="import_tab"> + <panel label="Niveau de détail" name="lod_panel"> + <text name="lod_table_header"> + Sélectionner le niveau de détail : + </text> + <text name="high_label" value="Élevé"/> + <text name="high_triangles" value="0"/> + <text name="high_vertices" value="0"/> + <text name="medium_label" value="Moyen"/> + <text name="medium_triangles" value="0"/> + <text name="medium_vertices" value="0"/> + <text name="low_label" value="Faible"/> + <text name="low_triangles" value="0"/> + <text name="low_vertices" value="0"/> + <text name="lowest_label" value="Le plus faible"/> + <text name="lowest_triangles" value="0"/> + <text name="lowest_vertices" value="0"/> + <text name="lod_table_footer"> + Niveau de détail : [DETAIL] + </text> + <radio_group name="lod_file_or_limit" value="lod_from_file"> + <radio_item label="Charger depuis un fichier" name="lod_from_file"/> + <radio_item label="Générer automatiquement" name="lod_auto_generate"/> + <radio_item label="Aucun" name="lod_none"/> + </radio_group> + <button label="Parcourir..." name="lod_browse"/> + <combo_box name="lod_mode"> + <combo_item name="triangle_limit"> + Limite du triangle + </combo_item> + <combo_item name="error_threshold"> + Seuil d'erreur + </combo_item> + </combo_box> + <text name="build_operator_text"> + Opér. construction : + </text> + <text name="queue_mode_text"> + Mode fil d'attente : + </text> + <combo_box name="build_operator"> + <combo_item name="edge_collapse"> + Fusion (nouveau sommet) + </combo_item> + <combo_item name="half_edge_collapse"> + Fusion (un des sommets) + </combo_item> + </combo_box> + <combo_box name="queue_mode"> + <combo_item name="greedy"> + Glouton + </combo_item> + <combo_item name="lazy"> + Paresseux + </combo_item> + <combo_item name="independent"> + Indépendant + </combo_item> + </combo_box> + <text name="border_mode_text"> + Mode bord : + </text> + <text name="share_tolderance_text"> + Tolérance partage : + </text> + <combo_box name="border_mode"> + <combo_item name="border_unlock"> + Déverrouiller + </combo_item> + <combo_item name="border_lock"> + Verrouiller + </combo_item> + </combo_box> + <text name="crease_label"> + Angle pli : + </text> + <spinner name="crease_angle" value="75"/> + </panel> + <panel label="Propriétés physiques" name="physics_panel"> + <panel name="physics geometry"> + <radio_group name="physics_load_radio" value="physics_load_from_file"> + <radio_item label="Fichier :" name="physics_load_from_file"/> + <radio_item label="Utiliser le niveau de détail :" name="physics_use_lod"/> + </radio_group> + <combo_box name="physics_lod_combo" tool_tip="Niveau de détail à utiliser pour la forme physique."> + <combo_item name="physics_lowest"> + Le plus faible + </combo_item> + <combo_item name="physics_low"> + Faible + </combo_item> + <combo_item name="physics_medium"> + Moyen + </combo_item> + <combo_item name="physics_high"> + Élevé + </combo_item> + </combo_box> + <button label="Parcourir..." name="physics_browse"/> + </panel> + <panel name="physics analysis"> + <slider label="Lissage :" name="Smooth"/> + <check_box label="Fermer les trous (lent)" name="Close Holes (Slow)"/> + <button label="Analyser" name="Decompose"/> + <button label="Annuler" name="decompose_cancel"/> + </panel> + <panel name="physics simplification"> + <slider label="Passes :" name="Combine Quality"/> + <slider label="Échelle de détail :" name="Detail Scale"/> + <slider label="Retenue :" name="Retain%"/> + <button label="Simplifier" name="Simplify"/> + <button label="Annuler" name="simplify_cancel"/> + </panel> + <panel name="physics info"> + <slider label="Décomposition de l'aperçu :" name="physics_explode"/> + <text name="physics_triangles"> + Triangles : [TRIANGLES] + </text> + <text name="physics_points"> + Sommets : [POINTS] + </text> + <text name="physics_hulls"> + Enveloppes : [HULLS] + </text> + </panel> + </panel> + <panel label="Modificateurs" name="modifiers_panel"> + <spinner name="import_scale" value="1.0"/> + <text name="import_dimensions"> + [X] x [Y] x [Z] m + </text> + <check_box label="Textures" name="upload_textures"/> + <check_box label="Pondération de la peau" name="upload_skin"/> + <check_box label="Position des articulations" name="upload_joints"/> + <spinner name="pelvis_offset" value="0.0"/> + </panel> + </tab_container> +</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_model_wizard.xml b/indra/newview/skins/default/xui/fr/floater_model_wizard.xml new file mode 100644 index 0000000000000000000000000000000000000000..bb64361959928686fe178feb4b2756258e345a6b --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_model_wizard.xml @@ -0,0 +1,241 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Model Wizard" title="ASSISTANT DE CHARGEMENT DE MODÈLE"> + <button label="5. Chargement" name="upload_btn"/> + <button label="4. Vérification" name="review_btn"/> + <button label="3. Propriétés physiques" name="physics2_btn"/> + <button label="3. Propriétés physiques" name="physics_btn"/> + <button label="2. Optimisation" name="optimize_btn"/> + <button label="1. Sélection du fichier" name="choose_file_btn"/> + <panel name="choose_file_panel"> + <panel name="header_panel"> + <text name="header_text"> + Charger le modèle + </text> + </panel> + <text name="description"> + Cet Assistant vous aidera à importer des modèles de maillage dans Second Life. Commencez par spécifier un fichier contenant le modèle à importer. Second Life prend en charge les fichiers COLLADA (.dae). + </text> + <panel name="content"> + <text name="Cache location"> + Nom du fichier : + </text> + <button label="Parcourir..." label_selected="Parcourir..." name="browse"/> + <text name="dimensions"> + X : Y : Z : + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + </panel> + <panel name="optimize_panel"> + <panel name="header_panel"> + <text name="header_text"> + Optimisation + </text> + </panel> + <text name="description"> + Cet Assistant a optimisé votre modèle afin d'améliorer les performances. Vous pouvez ajuster les résultats du processus d'optimisation ci-dessous ou cliquer sur Suiv. pour continuer. + </text> + <panel name="content"> + <text name="high_detail_text"> + Générer le niveau de détail : Élevé + </text> + <text name="medium_detail_text"> + Générer le niveau de détail : Moyen + </text> + <text name="low_detail_text"> + Générer le niveau de détail : Faible + </text> + <text name="lowest_detail_text"> + Générer le niveau de détail : Le plus faible + </text> + </panel> + <panel name="content2"> + <text name="lod_label"> + Aperçu du modèle : + </text> + <combo_box name="preview_lod_combo2" tool_tip="Niveau de détail à afficher en rendu d'aperçu."> + <combo_item name="high"> + Élevé + </combo_item> + <combo_item name="medium"> + Moyen + </combo_item> + <combo_item name="low"> + Faible + </combo_item> + <combo_item name="lowest"> + Le plus faible + </combo_item> + </combo_box> + <text name="streaming cost"> + Coût de la ressource : [COST] + </text> + <text name="dimensions"> + X : Y : Z : + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + </panel> + <panel name="physics_panel"> + <panel name="header_panel"> + <text name="header_text"> + Propriétés physiques + </text> + </panel> + <text name="description"> + Cet Assistant créera une forme physique déterminant le mode d'interaction de l'objet avec les autres objets et avatars. Réglez le curseur sur le niveau de détail le plus approprié à l'utilisation de l'objet : + </text> + <panel name="content"> + <text name="streaming cost"> + Coût de la ressource : [COST] + </text> + </panel> + </panel> + <panel name="physics2_panel"> + <panel name="header_panel"> + <text name="header_text"> + Propriétés physiques + </text> + </panel> + <text name="description"> + Prévisualisez la forme physique ci-dessous, puis cliquez sur Suiv. pour continuer. Le bouton Préc. permet de modifier cette forme, le cas échéant. + </text> + <panel name="content"> + <text name="lod_label"> + Aperçu du modèle : + </text> + <combo_box name="preview_lod_combo3" tool_tip="Niveau de détail à afficher en rendu d'aperçu."> + <combo_item name="high"> + Élevé + </combo_item> + <combo_item name="medium"> + Moyen + </combo_item> + <combo_item name="low"> + Faible + </combo_item> + <combo_item name="lowest"> + Le plus faible + </combo_item> + </combo_box> + <text name="dimensions"> + X : Y : Z : + </text> + <text name="dimension_dividers"> + | | + </text> + <text name="streaming cost"> + Coût de la ressource : [COST] + </text> + </panel> + </panel> + <panel name="review_panel"> + <panel name="header_panel"> + <text name="header_text"> + Vérification + </text> + </panel> + <text name="description"> + Vérifiez les détails ci-dessous, puis cliquez sur Charger pour charger le modèle. Votre solde en L$ sera alors débité. + </text> + <panel name="content"> + <text name="lod_label"> + Aperçu du modèle : + </text> + <combo_box name="preview_lod_combo" tool_tip="Niveau de détail à afficher en rendu d'aperçu."> + <combo_item name="high"> + Élevé + </combo_item> + <combo_item name="medium"> + Moyen + </combo_item> + <combo_item name="low"> + Faible + </combo_item> + <combo_item name="lowest"> + Le plus faible + </combo_item> + </combo_box> + <text name="dimensions"> + X : Y : Z : + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + <text name="streaming cost"> + Coût de la ressource : [COST] + </text> + <text name="physics cost"> + Coût des propriétés physiques : [COST] + </text> + </panel> + <panel name="upload_panel"> + <panel name="header_panel"> + <text name="header_text"> + Chargement terminé ! + </text> + </panel> + <text name="description"> + Félicitations ! Votre modèle a été chargé. Il se trouve dans le dossier Objets de votre inventaire. + </text> + </panel> + <button label="<< Préc." name="back"/> + <button label="Suiv. >>" name="next"/> + <button label="Charger" name="upload" tool_tip="Charger dans le simulateur."/> + <button label="Annuler" name="cancel"/> + <button label="Fermer" name="close"/> + <spinner name="import_scale" value="1.0"/> + <string name="status_idle"> + Inactif + </string> + <string name="status_reading_file"> + Chargement... + </string> + <string name="status_generating_meshes"> + Génération des maillages... + </string> + <string name="status_vertex_number_overflow"> + Erreur : valeur de sommet supérieure à 65534. Opération abandonnée. + </string> + <string name="high"> + Élevé + </string> + <string name="medium"> + Moyen + </string> + <string name="low"> + Faible + </string> + <string name="lowest"> + Le plus faible + </string> + <string name="mesh_status_good"> + Bon à publier ! + </string> + <string name="mesh_status_na"> + N/A + </string> + <string name="mesh_status_none"> + Aucun + </string> + <string name="mesh_status_submesh_mismatch"> + Un nombre différent de faces d'application de texture est associé aux niveaux de détail. + </string> + <string name="mesh_status_mesh_mismatch"> + Un nombre différent d'instances de maillage est associé aux niveaux de détail. + </string> + <string name="mesh_status_too_many_vertices"> + Trop de sommets pour le niveau de détail. + </string> + <string name="mesh_status_missing_lod"> + Niveau de détail requis manquant. + </string> + <string name="layer_all"> + Tout + </string> +</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_price_for_listing.xml b/indra/newview/skins/default/xui/fr/floater_price_for_listing.xml new file mode 100644 index 0000000000000000000000000000000000000000..a6e598dd2b97cbfc31505c513f81198a5018bbfb --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_price_for_listing.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="price_for_listing" title="PUBLIER UNE PETITE ANNONCE"> + <text name="explanation_text"> + Votre petite annonce sera visible pendant une semaine à partir du jour de sa publication. + +La position de votre annonce dans les listes dépend du montant que vous décidez de payer. + +Si vous choisissez de payer plus cher, votre publicité sera plus visible dans les résultats de recherche. + </text> + <text name="price_text"> + Coût de l'annonce : + </text> + <text name="price_symbol"> + L$ + </text> + <button label="OK" name="set_price_btn"/> + <button label="Annuler" name="cancel_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_sell_land.xml b/indra/newview/skins/default/xui/fr/floater_sell_land.xml index b835cc6d87c4f443c5bf3baa3b6e773619615183..c5fb0ea0d46a6a1a756ff83949f253c840745137 100644 --- a/indra/newview/skins/default/xui/fr/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/fr/floater_sell_land.xml @@ -14,7 +14,7 @@ <text name="info_size"> [AREA] m² </text> - <text bottom_delta="-60" name="info_action"> + <text name="info_action"> Pour vendre cette parcelle : </text> <text name="price_label"> diff --git a/indra/newview/skins/default/xui/fr/floater_sound_devices.xml b/indra/newview/skins/default/xui/fr/floater_sound_devices.xml new file mode 100644 index 0000000000000000000000000000000000000000..9e2e4333aa090180bb4ebacd72a82d5a6903f0bb --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_sound_devices.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_sound_devices" title="Périphériques audio"> + <text name="voice_label"> + Chat vocal + </text> + <check_box label="Activé" name="enable_voice"/> +</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml index fd72e6ac1531c137063257fb68f0df3f1cec53ef..09d77a8d34ca757309e5d12d4690334d36b39861 100644 --- a/indra/newview/skins/default/xui/fr/floater_tools.xml +++ b/indra/newview/skins/default/xui/fr/floater_tools.xml @@ -125,6 +125,18 @@ <text name="prim_count"> Prims : [COUNT] </text> + <text name="linked_set_count"> + Groupes liés : [COUNT] + </text> + <text name="linked_set_cost" tool_tip="Coût des groupes liés actuellement sélectionnés en tant que [prims],[physics complexity]."> + Coût : [COST] / [PHYSICS] + </text> + <text name="object_count"> + Objets : [COUNT] + </text> + <text name="object_cost" tool_tip="Coût des objets actuellement sélectionnés en tant que [prims] / [physics complexity]."> + Coût : [COST] / [PHYSICS] + </text> <tab_container name="Object Info Tabs"> <panel label="Général" name="General"> <panel.string name="text deed continued"> @@ -269,15 +281,6 @@ <combo_box.item label="Anneau" name="Ring"/> <combo_box.item label="Sculptie" name="Sculpted"/> </combo_box> - <combo_box name="material"> - <combo_box.item label="Pierre" name="Stone"/> - <combo_box.item label="Métal" name="Metal"/> - <combo_box.item label="Verre" name="Glass"/> - <combo_box.item label="Bois" name="Wood"/> - <combo_box.item label="Chair" name="Flesh"/> - <combo_box.item label="Plastique" name="Plastic"/> - <combo_box.item label="Caoutchouc" name="Rubber"/> - </combo_box> <text name="text cut"> Découpe du tracé (déb./fin) </text> @@ -350,9 +353,19 @@ <combo_box.item label="Tore" name="Torus"/> <combo_box.item label="Plan" name="Plane"/> <combo_box.item label="Cylindre" name="Cylinder"/> + <combo_box.item label="Maillage" name="Mesh"/> </combo_box> </panel> <panel label="Attributs" name="Features"> + <panel.string name="None"> + Aucun + </panel.string> + <panel.string name="Prim"> + Prim + </panel.string> + <panel.string name="Convex Hull"> + Enveloppe convexe + </panel.string> <text name="select_single"> Choisir une prim pour changer les attributs. </text> @@ -377,6 +390,23 @@ <spinner label="Point central" name="Light Focus"/> <spinner label="Atténuation" name="Light Falloff"/> <spinner label="Ambiance" name="Light Ambiance"/> + <text name="label physicsshapetype"> + Type de forme physique : + </text> + <combo_box name="Physics Shape Type Combo Ctrl" tool_tip="Choisir un type de forme physique."/> + <combo_box name="material"> + <combo_box.item label="Pierre" name="Stone"/> + <combo_box.item label="Métal" name="Metal"/> + <combo_box.item label="Verre" name="Glass"/> + <combo_box.item label="Bois" name="Wood"/> + <combo_box.item label="Chair" name="Flesh"/> + <combo_box.item label="Plastique" name="Plastic"/> + <combo_box.item label="Caoutchouc" name="Rubber"/> + </combo_box> + <spinner label="Gravité" name="Physics Gravity"/> + <spinner label="Friction" name="Physics Friction"/> + <spinner label="Densité" name="Physics Density"/> + <spinner label="Restitution" name="Physics Restitution"/> </panel> <panel label="Texture" name="Texture"> <panel.string name="string repeats per meter"> diff --git a/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml deleted file mode 100644 index 5dda347fcfbddcab62c247300ed09ed401d2931f..0000000000000000000000000000000000000000 --- a/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container"> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Annuler" label_selected="Annuler" name="Cancel"/> - <text name="Save item as:"> - Enregistrer l'objet dans mon inventaire comme : - </text> - <line_editor name="name ed"> - Nouveau [DESC] - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/fr/menu_inventory_add.xml b/indra/newview/skins/default/xui/fr/menu_inventory_add.xml index 5d2b554dc352f89394bf96a5034e15ebba246224..1076af44d996908324c8771a53649cc444144fc3 100644 --- a/indra/newview/skins/default/xui/fr/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/fr/menu_inventory_add.xml @@ -4,6 +4,8 @@ <menu_item_call label="Image ([COST] L$)..." name="Upload Image"/> <menu_item_call label="Son ([COST] L$)..." name="Upload Sound"/> <menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/> + <menu_item_call label="Modèle..." name="Upload Model"/> + <menu_item_call label="Assistant Modèle..." name="Upload Model Wizard"/> <menu_item_call label="Lot ([COST] L$ par fichier)..." name="Bulk Upload"/> <menu_item_call label="Définir les droits de chargement par défaut" name="perm prefs"/> </menu> diff --git a/indra/newview/skins/default/xui/fr/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/fr/menu_model_import_gear_default.xml new file mode 100644 index 0000000000000000000000000000000000000000..af6bfcd028fece6d98e46516ac59a0d4a6b87a1f --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_model_import_gear_default.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="model_menu_gear_default"> + <menu_item_check label="Afficher les arêtes" name="show_edges"/> + <menu_item_check label="Afficher les propriétés physiques" name="show_physics"/> + <menu_item_check label="Afficher les textures" name="show_textures"/> + <menu_item_check label="Afficher la pondération de la peau" name="show_skin_weight"/> + <menu_item_check label="Afficher la position des articulations" name="show_joint_positions"/> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml index 1dd6da9d6fe4c3df8e4b3ca529ce7aa68c4bf502..d614cfe00c2f69113b31d73f55a6aaf3522b8071 100644 --- a/indra/newview/skins/default/xui/fr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml @@ -120,6 +120,8 @@ <menu_item_call label="Image ([COST] L$)..." name="Upload Image"/> <menu_item_call label="Son ([COST] L$)..." name="Upload Sound"/> <menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/> + <menu_item_call label="Modèle..." name="Upload Model"/> + <menu_item_call label="Assistant Modèle..." name="Upload Model Wizard"/> <menu_item_call label="Lot ([COST] L$ par fichier)..." name="Bulk Upload"/> </menu> <menu_item_call label="Annuler" name="Undo"/> @@ -159,6 +161,7 @@ <menu_item_check label="Alpha" name="Alpha"/> <menu_item_check label="Arbre" name="Tree"/> <menu_item_check label="Avatars" name="Character"/> + <menu_item_check label="Patch de surface" name="Surface Patch"/> <menu_item_check label="Ciel" name="Sky"/> <menu_item_check label="Eau" name="Water"/> <menu_item_check label="Sol" name="Ground"/> @@ -217,6 +220,7 @@ <menu_item_check label="Console des catégories de textures" name="Texture Category"/> <menu_item_check label="Chronos" name="Fast Timers"/> <menu_item_check label="Mémoire" name="Memory"/> + <menu_item_check label="Statistiques de la scène" name="Scene Statistics"/> <menu_item_call label="Infos de région vers la console de débogage" name="Region Info to Debug Console"/> <menu_item_call label="Infos de groupe vers la console de débogage" name="Group Info to Debug Console"/> <menu_item_call label="Infos de capacités vers la console de débogage" name="Capabilities Info to Debug Console"/> @@ -227,6 +231,7 @@ </menu> <menu label="Afficher les infos" name="Display Info"> <menu_item_check label="Afficher l'heure" name="Show Time"/> + <menu_item_check label="Afficher le coût du chargement" name="Show Upload Cost"/> <menu_item_check label="Afficher les infos de rendu" name="Show Render Info"/> <menu_item_check label="Afficher les infos de texture" name="Show Texture Info"/> <menu_item_check label="Afficher les matrices" name="Show Matrices"/> @@ -252,8 +257,10 @@ </menu> <menu label="Métadonnées de rendu" name="Render Metadata"> <menu_item_check label="Cadres" name="Bounding Boxes"/> + <menu_item_check label="Normales" name="Normals"/> <menu_item_check label="Octree" name="Octree"/> <menu_item_check label="Shadow Frusta" name="Shadow Frusta"/> + <menu_item_check label="Formes physiques" name="Physics Shapes"/> <menu_item_check label="Occlusion" name="Occlusion"/> <menu_item_check label="Lots de rendu" name="Render Batches"/> <menu_item_check label="Type de mise à jour" name="Update Type"/> @@ -261,9 +268,12 @@ <menu_item_check label="Priorité de la texture" name="Texture Priority"/> <menu_item_check label="Zone de texture" name="Texture Area"/> <menu_item_check label="Zone de face" name="Face Area"/> + <menu_item_check label="Infos sur le niveau de détail" name="LOD Info"/> + <menu_item_check label="File d'attente pour la construction" name="Build Queue"/> <menu_item_check label="Lumières" name="Lights"/> <menu_item_check label="Squelette de collision" name="Collision Skeleton"/> <menu_item_check label="Rayons" name="Raycast"/> + <menu_item_check label="Sculpture" name="Sculpt"/> </menu> <menu label="Rendu" name="Rendering"> <menu_item_check label="Axes" name="Axes"/> @@ -271,7 +281,6 @@ <menu_item_call label="Base des infos de la texture sélectionnée" name="Selected Texture Info Basis"/> <menu_item_check label="Filaire" name="Wireframe"/> <menu_item_check label="Occlusion objet-objet" name="Object-Object Occlusion"/> - <menu_item_check label="Objets de mémoire vidéo" name="Framebuffer Objects"/> <menu_item_check label="Éclairage et ombres" name="Lighting and Shadows"/> <menu_item_check label="Ombres du soleil/de la lune/des projecteurs" name="Shadows from Sun/Moon/Projectors"/> <menu_item_check label="SSAO et lissage des ombres" name="SSAO and Shadow Smoothing"/> @@ -370,6 +379,7 @@ <menu_item_call label="Dump Local Textures" name="Dump Local Textures"/> </menu> <menu_item_check label="Textures HTTP" name="HTTP Textures"/> + <menu_item_check label="Inventaire HTTP" name="HTTP Inventory"/> <menu_item_call label="Compresser les images" name="Compress Images"/> <menu_item_check label="Output Debug Minidump" name="Output Debug Minidump"/> <menu_item_check label="Console Window on next Run" name="Console Window"/> diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index 78890caabb1baacd2a9693261c160373a8a4e1ac..6bfab25087a177f65f7051083b3d8e78cbb9b2ae 100644 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -2157,6 +2157,12 @@ Cela risque d'impacter votre mot de passe. <notification name="RezItemNoPermissions"> Droits insuffisants pour rezzer l'objet. </notification> + <notification name="IMAcrossParentEstates"> + Impossible d'envoyer d'IM entre domaines parents. + </notification> + <notification name="TransferInventoryAcrossParentEstates"> + Impossible de transférer l'inventaire entre domaines parents. + </notification> <notification name="UnableToLoadNotecard"> Impossible de lire les données de la note actuellement. </notification> @@ -2734,6 +2740,10 @@ Elles vont être bloquées pendant quelques secondes pour votre sécurité. Le modérateur ignore vos paroles. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="UploadCostConfirmation"> + Ce chargement coûtera [PRICE] L$. Continuer ? + <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Charger"/> + </notification> <notification name="ConfirmClearTeleportHistory"> Voulez-vous vraiment supprimer votre historique des téléportations ? <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> @@ -2745,6 +2755,9 @@ Le bouton sera affiché quand il y aura suffisamment de place. <notification name="ShareNotification"> Sélectionnez les résidents avec lesquels partager l'élément. </notification> + <notification name="MeshUploadError"> + Échec de chargement de [LABEL] : [MESSAGE] [IDENTIFIER] [INVALIDITY_IDENTIFIER] + </notification> <notification name="ShareItemsConfirmation"> Voulez-vous vraiment partager les articles suivants : @@ -2761,6 +2774,19 @@ avec les résidents suivants : <notification name="DeedToGroupFail"> Échec de cession au groupe. </notification> + <notification name="ReleaseLandThrottled"> + Impossible d'abandonner la parcelle [PARCEL_NAME] actuellement. + </notification> + <notification name="ReleasedLandWithReclaim"> + La parcelle [PARCEL_NAME] de [AREA] m² a été libérée. + +Vous disposerez d'un délai de récupération à 0 L$ de [RECLAIM_PERIOD] heures avant qu'elle soit mise en vente pour tous. + </notification> + <notification name="ReleasedLandNoReclaim"> + La parcelle [PARCEL_NAME] de [AREA] m² a été libérée. + +Elle est désormais disponible à l'achat auprès de tous. + </notification> <notification name="AvatarRezNotification"> ([EXISTENCE] secondes d'existence) Nuage de l'avatar [NAME] disparu au bout de [TIME] secondes. @@ -2901,6 +2927,10 @@ Cliquez sur un point dans le monde et faites glisser votre souris pour faire tou Pour créer et modifier des groupes, vous devez utiliser le mode Avancé. Voulez-vous quitter l'application afin de changer de mode ? Le sélecteur de mode se trouve sur l'écran de connexion. <usetemplate name="okcancelbuttons" notext="Ne pas quitter" yestext="Quitter"/> </notification> + <notification label="" name="NoPlaceInfo"> + L'affichage du profil du lieu est uniquement disponible en mode Avancé. Voulez-vous quitter l'application afin de changer de mode ? Le sélecteur de mode se trouve sur l'écran de connexion. + <usetemplate name="okcancelbuttons" notext="Ne pas quitter" yestext="Quitter"/> + </notification> <notification label="" name="NoPicks"> Pour créer et modifier des favoris, vous devez utiliser le mode Avancé. Voulez-vous quitter l'application afin de changer de mode ? Le sélecteur de mode se trouve sur l'écran de connexion. <usetemplate name="okcancelbuttons" notext="Ne pas quitter" yestext="Quitter"/> @@ -2921,9 +2951,18 @@ Cliquez sur un point dans le monde et faites glisser votre souris pour faire tou Pour pouvoir payer d'autres résidents, vous devez utiliser le mode Avancé. Voulez-vous quitter l'application afin de changer de mode ? <usetemplate name="okcancelbuttons" notext="Ne pas quitter" yestext="Quitter"/> </notification> - <global name="UnsupportedCPU"> - - Votre processeur ne remplit pas les conditions minimum requises. - </global> + <notification label="" name="NoInventory"> + L'affichage de l'inventaire est uniquement disponible en mode Avancé. Voulez-vous quitter l'application afin de changer de mode ? + <usetemplate name="okcancelbuttons" notext="Ne pas quitter" yestext="Quitter"/> + </notification> + <notification label="" name="NoAppearance"> + L'Éditeur d'apparence est uniquement disponible en mode Avancé. Voulez-vous quitter l'application afin de changer de mode ? + <usetemplate name="okcancelbuttons" notext="Ne pas quitter" yestext="Quitter"/> + </notification> + <notification label="" name="NoSearch"> + La recherche est uniquement disponible en mode Avancé. Voulez-vous quitter l'application afin de changer de mode ? + <usetemplate name="okcancelbuttons" notext="Ne pas quitter" yestext="Quitter"/> + </notification> <global name="UnsupportedGLRequirements"> Vous semblez ne pas avoir le matériel requis pour utiliser [APP_NAME]. [APP_NAME] requiert une carte graphique OpenGL avec une prise en charge du multitexturing. Si vous avez une telle carte, assurez-vous que vous avez aussi les pilotes les plus récents pour la carte, ainsi que les service packs et les patchs pour votre système d'exploitation. diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_colors.xml b/indra/newview/skins/default/xui/fr/panel_preferences_colors.xml index abdffd232a3531ee8fb8617a0724b03ee55a464c..e50fd2b6f3efa5834f96e7e9e13c17562a9a1d21 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_colors.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_colors.xml @@ -22,6 +22,9 @@ <text name="text_box5"> Erreurs </text> + <text name="text_box10"> + Direct + </text> <text name="text_box7"> Propriétaire </text> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml index 025a72a1d21454f6459620edc45c74d28f1d407d..5bf2ef72f557eb74148355dd9bd0d43bd2aea069 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml @@ -27,8 +27,20 @@ </text> <check_box initial_value="true" label="Eau transparente" name="TransparentWater"/> <check_box initial_value="true" label="Placage de relief et brillance" name="BumpShiny"/> + <check_box initial_value="true" label="Lumières locales" name="LocalLights"/> <check_box initial_value="true" label="Effets de base" name="BasicShaders" tool_tip="La désactivation de cette option peut éviter le plantage de certains pilotes de cartes graphiques"/> <check_box initial_value="true" label="Effets atmosphériques" name="WindLightUseAtmosShaders"/> + <check_box initial_value="true" label="Éclairage et ombres" name="UseLightShaders"/> + <check_box initial_value="true" label="Occlusion ambiante" name="UseSSAO"/> + <check_box initial_value="true" label="Profondeur de champ" name="UseDoF"/> + <text name="shadows_label"> + Ombres : + </text> + <combo_box name="ShadowDetail"> + <combo_box.item label="Aucune" name="0"/> + <combo_box.item label="Soleil/Lune" name="1"/> + <combo_box.item label="Soleil/Lune + Projecteurs" name="2"/> + </combo_box> <text name="reflection_label"> Reflets dans l'eau : </text> diff --git a/indra/newview/skins/default/xui/fr/panel_region_general.xml b/indra/newview/skins/default/xui/fr/panel_region_general.xml index ada45836486765a3ec7ca72b0c01c0dcd55e374b..b5795bebe2917c4d3f50f026cdf8511ece15f7d2 100644 --- a/indra/newview/skins/default/xui/fr/panel_region_general.xml +++ b/indra/newview/skins/default/xui/fr/panel_region_general.xml @@ -25,6 +25,7 @@ <check_box label="Autoriser la revente" name="allow_land_resell_check"/> <check_box label="Autoriser la fusion/division" name="allow_parcel_changes_check"/> <check_box label="Ne pas afficher dans la recherche" name="block_parcel_search_check" tool_tip="Afficher cette région et ses parcelles dans les résultats de recherche"/> + <check_box label="Autoriser les objets de maillage" name="mesh_rez_enabled_check" tool_tip="Laisser les gens rezzer des objets de maillage dans cette région."/> <spinner label="Nombre maximum d'avatars" label_width="160" name="agent_limit_spin" width="240"/> <spinner label="Bonus objet" label_width="160" name="object_bonus_spin" width="240"/> <text label="Maturité" name="access_text"> diff --git a/indra/newview/skins/default/xui/fr/panel_sound_devices.xml b/indra/newview/skins/default/xui/fr/panel_sound_devices.xml new file mode 100644 index 0000000000000000000000000000000000000000..a9802312dc4242dc86a2f8e34d5f2704edb7b2b2 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_sound_devices.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel label="Paramètres du périphérique" name="device_settings_panel"> + <panel.string name="default_text"> + Valeur par défaut + </panel.string> + <text name="Input"> + Entrée + </text> + <text name="My volume label"> + Mon volume : + </text> + <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Régler le volume avec le curseur."/> + <text name="wait_text"> + Veuillez patienter + </text> + <text name="Output"> + Sortie + </text> +</panel> diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index a3369e6730fbde0c4bff6f02e8bf686a8337a2e9..3ec85551da755cbecb32024873d2dd866c247e4f 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -130,6 +130,139 @@ <string name="create_account_url"> http://join.secondlife.com/index.php?lang=fr-FR </string> + <string name="LoginFailedViewerNotPermitted"> + Le client que vous utilisez ne permet plus d'accéder à Second Life. Téléchargez un nouveau client à la page suivante : +http://secondlife.com/download + +Pour plus d'informations, consultez la page FAQ ci-dessous : +http://secondlife.com/viewer-access-faq + </string> + <string name="LoginIntermediateOptionalUpdateAvailable"> + Mise à jour facultative du client disponible : [VERSION] + </string> + <string name="LoginFailedRequiredUpdate"> + Mise à jour du client requise : [VERSION] + </string> + <string name="LoginFailedAlreadyLoggedIn"> + L'agent est déjà connecté. + </string> + <string name="LoginFailedAuthenticationFailed"> + Désolé ! La connexion a échoué. +Veuillez vérifier que les éléments ci-dessous ont été correctement saisis : + * Nom d'utilisateur (par exemple, bobsmith12 ou steller.sunshine) + * Mot de passe +Assurez-vous également que la touche Verr. maj n'est pas activée. + </string> + <string name="LoginFailedPasswordChanged"> + Votre mot de passe a été modifié pour des raisons de sécurité. +Veuillez accéder à votre compte à la page http://secondlife.com/password +et répondre à la question de sécurité afin de réinitialiser votre mot de passe. +Nous vous prions de nous excuser pour la gêne occasionnée. + </string> + <string name="LoginFailedPasswordReset"> + Vous allez devoir réinitialiser votre mot de passe suite à quelques changements effectués sur notre système. +Pour cela, accédez à votre compte à la page http://secondlife.com/password +et répondez à la question de sécurité. Votre mot de passe sera réinitialisé. +Nous vous prions de nous excuser pour la gêne occasionnée. + </string> + <string name="LoginFailedEmployeesOnly"> + Second Life est temporairement fermé pour des raisons de maintenance. +Seuls les employés peuvent actuellement y accéder. +Consultez la page www.secondlife.com/status pour plus d'informations. + </string> + <string name="LoginFailedPremiumOnly"> + Les connexions à Second Life sont temporairement limitées afin de s'assurer que l'expérience des utilisateurs présents dans le monde virtuel soit optimale. + +Les personnes disposant de comptes gratuits ne pourront pas accéder à Second Life pendant ce temps afin de permettre à celles qui ont payé pour pouvoir utiliser Second Life puissent le faire. + </string> + <string name="LoginFailedComputerProhibited"> + Impossible d'accéder à Second Life depuis cet ordinateur. +Si vous pensez qu'il s'agit d'une erreur, contactez +l'Assistance à l'adresse suivante : support@secondlife.com. + </string> + <string name="LoginFailedAcountSuspended"> + Votre compte est inaccessible jusqu'à +[TIME], heure du Pacifique. + </string> + <string name="LoginFailedAccountDisabled"> + Nous n'avons pas réussi à traiter votre demande. +Pour obtenir de l'aide, veuillez contacter l'Assistance Second Life à la page suivante : http://secondlife.com/support. +Si vous ne parvenez pas à changer de mot de passe, veuillez appeler le (866) 476-9763. + </string> + <string name="LoginFailedTransformError"> + Incohérence des données lors de la connexion. +Veuillez contacter support@secondlife.com. + </string> + <string name="LoginFailedAccountMaintenance"> + Des opérations de maintenance mineures sont actuellement effectuées sur votre compte. +Votre compte est inaccessible jusqu'à +[TIME], heure du Pacifique. +Si vous pensez qu'il s'agit d'une erreur, contactez l'Assistance à l'adresse suivante : support@secondlife.com + </string> + <string name="LoginFailedPendingLogoutFault"> + Le simulateur a renvoyé une erreur en réponse à la demande de déconnexion. + </string> + <string name="LoginFailedPendingLogout"> + Le système est en train de vous déconnecter. +Votre compte sera indisponible jusqu'à +[TIME], heure du Pacifique. + </string> + <string name="LoginFailedUnableToCreateSession"> + Impossible de créer de session valide. + </string> + <string name="LoginFailedUnableToConnectToSimulator"> + Impossible de se connecter à un simulateur. + </string> + <string name="LoginFailedRestrictedHours"> + Votre compte permet uniquement d'accéder à Second Life +entre [START] et [END], heure du Pacifique. +Veuillez réessayer au cours de la période indiquée. +Si vous pensez qu'il s'agit d'une erreur, contactez l'Assistance à l'adresse suivante : support@secondlife.com + </string> + <string name="LoginFailedIncorrectParameters"> + Paramètres incorrects. +Si vous pensez qu'il s'agit d'une erreur, contactez l'Assistance à l'adresse suivante : support@secondlife.com + </string> + <string name="LoginFailedFirstNameNotAlphanumeric"> + Le paramètre Prénom doit être alphanumérique. +Si vous pensez qu'il s'agit d'une erreur, contactez l'Assistance à l'adresse suivante : support@secondlife.com + </string> + <string name="LoginFailedLastNameNotAlphanumeric"> + Le paramètre Nom doit être alphanumérique. +Si vous pensez qu'il s'agit d'une erreur, contactez l'Assistance à l'adresse suivante : support@secondlife.com + </string> + <string name="LogoutFailedRegionGoingOffline"> + La région est en train d'être mise hors ligne. +Veuillez réessayer de vous connecter dans une minute. + </string> + <string name="LogoutFailedAgentNotInRegion"> + Agent absent de la région. +Veuillez réessayer de vous connecter dans une minute. + </string> + <string name="LogoutFailedPendingLogin"> + Une autre session était en cours d'ouverture au sein de la région. +Veuillez réessayer de vous connecter dans une minute. + </string> + <string name="LogoutFailedLoggingOut"> + La session précédente était en cours de fermeture au sein de la région. +Veuillez réessayer de vous connecter dans une minute. + </string> + <string name="LogoutFailedStillLoggingOut"> + Fermeture de la session précédente toujours en cours pour la région. +Veuillez réessayer de vous connecter dans une minute. + </string> + <string name="LogoutSucceeded"> + Dernière session fermée au sein de la région. +Veuillez réessayer de vous connecter dans une minute. + </string> + <string name="LogoutFailedLogoutBegun"> + Processus de déconnexion commencé pour la région. +Veuillez réessayer de vous connecter dans une minute. + </string> + <string name="LoginFailedLoggingOutSession"> + Le système a commencé à fermer votre dernière session. +Veuillez réessayer de vous connecter dans une minute. + </string> <string name="AgentLostConnection"> Il y a peut-être des problèmes techniques dans cette région. Veuillez vérifier votre connexion Internet. </string> @@ -441,6 +574,9 @@ <string name="symbolic folder link"> lien du dossier </string> + <string name="mesh"> + maillage + </string> <string name="AvatarEditingAppearance"> (Apparence en cours de modification) </string> @@ -1180,6 +1316,9 @@ <string name="InvFolder Accessories"> Accessoires </string> + <string name="InvFolder Meshes"> + Maillages + </string> <string name="InvFolder Friends"> Amis </string> @@ -1494,7 +1633,7 @@ (Inconnu) </string> <string name="SummaryForTheWeek" value="Récapitulatif de la semaine, début le "/> - <string name="NextStipendDay" value="Prochaine prime le "/> + <string name="NextStipendDay" value=". Prochaine prime le "/> <string name="GroupIndividualShare" value=" Groupe Part individuelle"/> <string name="GroupColumn" value="Groupe"/> <string name="Balance"> @@ -3762,6 +3901,9 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE]. <string name="session_initialization_timed_out_error"> Expiration du délai d'initialisation de la session </string> + <string name="Home position set."> + Emplacement du domicile défini. + </string> <string name="voice_morphing_url"> http://secondlife.com/landing/voicemorphing </string> diff --git a/indra/newview/skins/default/xui/it/floater_about.xml b/indra/newview/skins/default/xui/it/floater_about.xml index 140f7bdc145802f9d2c069971a5360de2b801ab1..214ae96373648d513854f3302136cceac13526be 100644 --- a/indra/newview/skins/default/xui/it/floater_about.xml +++ b/indra/newview/skins/default/xui/it/floater_about.xml @@ -56,26 +56,32 @@ Si ringraziano i seguenti residenti per aver contribuito a rendere questa versio <panel label="Licenze" name="licenses_panel"> <text_editor name="credits_editor"> 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion - APR Copyright (C) 2000-2004 The Apache Software Foundation - cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) - DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc. - expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. - FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). - GL Copyright (C) 1999-2004 Brian Paul. - Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. - jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) - jpeglib Copyright (C) 1991-1998, Thomas G. Lane. - ogg/vorbis Copyright (C) 2001, Xiphophorus - OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. - SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga - SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - xmlrpc-epi Copyright (C) 2000 Epinions, Inc. - zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. - google-perftools Copyright (c) 2005, Google Inc. - - Tutti i diritti riservati. Leggi licenses.txt per maggiori dettagli. +APR Copyright (C) 2000-2004 The Apache Software Foundation +Collada DOM Copyright 2005 Sony Computer Entertainment Inc. +cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) +DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc. +expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. +FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). +GL Copyright (C) 1999-2004 Brian Paul. +GLOD Copyright (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University and David Luebke, Brenden Schubert, University of Virginia. +google-perftools Copyright (c) 2005, Google Inc. +Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. +jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) +jpeglib Copyright (C) 1991-1998, Thomas G. Lane. +ogg/vorbis Copyright (C) 2001, Xiphophorus +OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. +PCRE Copyright (c) 1997-2008 University of Cambridge +SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga +SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +xmlrpc-epi Copyright (C) 2000 Epinions, Inc. +zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. +google-perftools Copyright (c) 2005, Google Inc. - Chat vocale Codifica audio: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) +Il Viewer Second Life utilizza Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (e licenziatari). Tutti i diritti riservati. Per informazioni dettagliate, vedere www.havok.com. + +Tutti i diritti riservati. Per informazioni dettagliate, vedere licenses.txt. + +Codifica audio chat vocale: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) </text_editor> </panel> </tab_container> diff --git a/indra/newview/skins/default/xui/it/floater_about_land.xml b/indra/newview/skins/default/xui/it/floater_about_land.xml index b713bb8143ebdd6ac12ff51ddd415d4afbf37c80..a96433d7aa97c71aca13d063e554e417369d1c3e 100644 --- a/indra/newview/skins/default/xui/it/floater_about_land.xml +++ b/indra/newview/skins/default/xui/it/floater_about_land.xml @@ -75,64 +75,64 @@ Vai al menu Mondo > Informazioni sul terreno oppure seleziona un altro appezz <text name="LandType"> Tipo: </text> - <text left="119" name="LandTypeText"> + <text name="LandTypeText"> Mainland / Homestead </text> <text name="ContentRating" width="115"> Categoria di accesso: </text> - <text left="119" name="ContentRatingText"> + <text name="ContentRatingText"> Adulti </text> <text name="Owner:"> Proprietario: </text> - <text left="119" name="OwnerText" width="227"/> + <text name="OwnerText" width="227"/> <text name="Group:"> Gruppo: </text> - <text left="119" name="GroupText" width="227"/> + <text name="GroupText" width="227"/> <button label="Imposta" name="Set..."/> - <check_box label="Permetti cessione al gruppo" left="119" name="check deed" tool_tip="Un funzionario del gruppo può cedere questa terra al gruppo stesso cosicchè essa sarà  supportata dalle terre del gruppo."/> + <check_box label="Permetti cessione al gruppo" name="check deed" tool_tip="Un funzionario del gruppo può cedere questa terra al gruppo stesso cosicchè essa sarà  supportata dalle terre del gruppo."/> <button label="Cedi" name="Deed..." tool_tip="Puoi solo offrire terra se sei un funzionario del gruppo selezionato."/> - <check_box label="Il proprietario fa un contributo con la cessione" left="119" name="check contrib" tool_tip="Quando la terra è ceduta al gruppo, il proprietario precedente contribuisce con abbastanza allocazione di terra per supportarlo."/> + <check_box label="Il proprietario fa un contributo con la cessione" name="check contrib" tool_tip="Quando la terra è ceduta al gruppo, il proprietario precedente contribuisce con abbastanza allocazione di terra per supportarlo."/> <text name="For Sale:"> In vendita: </text> - <text left="119" name="Not for sale."> + <text name="Not for sale."> Non in vendita. </text> - <text left="119" name="For Sale: Price L$[PRICE]."> + <text name="For Sale: Price L$[PRICE]."> Prezzo: [PRICE]L$ ([PRICE_PER_SQM]L$/m²). </text> - <text left="119" name="SalePending" width="321"/> + <text name="SalePending" width="321"/> <button bottom="-242" label="Vendi la terra..." label_selected="Vendi la terra..." name="Sell Land..."/> - <text left="119" name="For sale to"> + <text name="For sale to"> In vendita a: [BUYER] </text> - <text left="119" name="Sell with landowners objects in parcel." width="240"> + <text name="Sell with landowners objects in parcel."> Gli oggetti sono inclusi nella vendita. </text> - <text left="119" name="Selling with no objects in parcel." width="240"> + <text name="Selling with no objects in parcel."> Gli oggetti non sono inclusi nella vendita. </text> - <button bottom="-242" font="SansSerifSmall" label="Annulla la vendita del terreno" label_selected="Annulla la vendita del terreno" left="275" name="Cancel Land Sale" width="165"/> + <button font="SansSerifSmall" label="Annulla la vendita del terreno" label_selected="Annulla la vendita del terreno" name="Cancel Land Sale"/> <text name="Claimed:" width="115"> Presa in possesso il: </text> - <text left="119" name="DateClaimText"> + <text name="DateClaimText"> Tue Aug 15 13:47:25 2006 </text> <text name="PriceLabel"> Area: </text> - <text left="119" name="PriceText" width="140"> + <text name="PriceText" width="140"> 4048 m² </text> <text name="Traffic:"> Traffico: </text> - <text left="119" name="DwellText" width="140"> + <text name="DwellText" width="140"> 0 </text> <button label="Acquista il terreno..." label_selected="Acquista il terreno..." left="130" name="Buy Land..." width="125"/> diff --git a/indra/newview/skins/default/xui/it/floater_buy_contents.xml b/indra/newview/skins/default/xui/it/floater_buy_contents.xml index a54751e6290f256e4050a829c691b49a3e2793bd..84ed85e362bfb0744fa196d8ba2a7d96d39d8d78 100644 --- a/indra/newview/skins/default/xui/it/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/it/floater_buy_contents.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_buy_contents" title="COMPRA I CONTENUTI"> <text name="contains_text"> - [NAME] contiene: + <nolink>[NAME]</nolink> contiene: </text> <text name="buy_text"> Compra per [AMOUNT]L$ da [NAME]? diff --git a/indra/newview/skins/default/xui/it/floater_buy_currency.xml b/indra/newview/skins/default/xui/it/floater_buy_currency.xml index 0a499a6c44faa3046252204bf65a5b9c15b32599..635b56d37a2ec2c028fe52ff0c6ebd06b07687b9 100644 --- a/indra/newview/skins/default/xui/it/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/it/floater_buy_currency.xml @@ -52,7 +52,8 @@ Riscrivi l'importo per vedere l'ultimo tasso al cambio. </text> <text name="purchase_warning_repurchase"> - La conferma di questo acquisto compra solo L$, non l'oggetto. + La conferma di questo acquisto compra solo L$, non +l'oggetto. </text> <text bottom_delta="16" name="purchase_warning_notenough"> Non stai acquistando abbastanza L$. Aumenta l'importo. diff --git a/indra/newview/skins/default/xui/it/floater_import_collada.xml b/indra/newview/skins/default/xui/it/floater_import_collada.xml new file mode 100644 index 0000000000000000000000000000000000000000..eb4d0c0fdbf787a8855120a6be51ad53564189b4 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_import_collada.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Import Collada" title="Importa scena"> + <text name="mesh count"> + Reticoli: [COUNT] + </text> + <text name="texture count"> + Texture: [COUNT] + </text> + <text name="status"> + Stato: [STATUS] + </text> + <button label="Annulla" name="cancel"/> + <button label="OK" name="ok"/> + <string name="status_idle"> + Pausa + </string> + <string name="status_uploading"> + Caricamento in corso [NAME] + </string> + <string name="status_creating"> + Creazione oggetto [NAME] + </string> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml index 49130285f2adc5340e09c59ef95e9659fcb5e4dd..cf790ee62e746e3cad25502f2eb4a6f3c1cc6001 100644 --- a/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml @@ -5,6 +5,7 @@ <check_box label="Abiti" name="check_clothing"/> <check_box label="Gesture" name="check_gesture"/> <check_box label="Landmark" name="check_landmark"/> + <check_box label="Reticoli" name="check_mesh"/> <check_box label="Notecard" name="check_notecard"/> <check_box label="Oggetti" name="check_object"/> <check_box label="Script" name="check_script"/> diff --git a/indra/newview/skins/default/xui/it/floater_model_preview.xml b/indra/newview/skins/default/xui/it/floater_model_preview.xml new file mode 100644 index 0000000000000000000000000000000000000000..a17b8b36c2674a97231122addae15a4c39986558 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_model_preview.xml @@ -0,0 +1,231 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Model Preview" title="Carica modello"> + <string name="status_idle"> + Pausa + </string> + <string name="status_reading_file"> + Caricamento in corso... + </string> + <string name="status_generating_meshes"> + Generazione reticoli... + </string> + <string name="status_vertex_number_overflow"> + Errore: numero di vertici maggiore di 65534, annullato. + </string> + <string name="high"> + Alto + </string> + <string name="medium"> + Medio + </string> + <string name="low"> + Basso + </string> + <string name="lowest"> + Bassissimo + </string> + <string name="mesh_status_good"> + Invia! + </string> + <string name="mesh_status_na"> + N/D + </string> + <string name="mesh_status_none"> + Nessuno + </string> + <string name="mesh_status_submesh_mismatch"> + Ai vari livelli del dettaglio corrispondono numeri diversi di faccette con texture. + </string> + <string name="mesh_status_mesh_mismatch"> + Ai vari livelli del dettaglio corrispondono numeri diversi istanze di reticoli. + </string> + <string name="mesh_status_too_many_vertices"> + Troppi vertici per il livello di dettaglio. + </string> + <string name="mesh_status_missing_lod"> + Livello di dettaglio minimo mancante. + </string> + <string name="layer_all"> + Tutto + </string> + <string name="decomposing"> + Analisi in corso... + </string> + <string name="simplifying"> + Semplificazione in corso... + </string> + <text name="name_label"> + Nome: + </text> + <text name="lod_label"> + Anteprima: + </text> + <combo_box name="preview_lod_combo" tool_tip="Livello di dettaglio per anteprima rendering"> + <combo_item name="high"> + Livello di dettaglio: Alto + </combo_item> + <combo_item name="medium"> + Livello di dettaglio: Medio + </combo_item> + <combo_item name="low"> + Livello di dettaglio: Basso + </combo_item> + <combo_item name="lowest"> + Livello di dettaglio: Bassissimo + </combo_item> + </combo_box> + <panel> + <text name="streaming cost"> + Costo risorsa: [COST] + </text> + <text name="physics cost"> + Costo fisica: [COST] + </text> + <text name="upload fee"> + Costo caricamento: N/D + </text> + </panel> + <text name="status"> + [STATUS] + </text> + <button label="Predefiniti" name="reset_btn" tool_tip="Ripristina predefiniti"/> + <button label="Carica sul server" name="ok_btn" tool_tip="Carica al simulatore"/> + <button label="Annulla" name="cancel_btn"/> + <tab_container name="import_tab"> + <panel label="Livello di dettaglio" name="lod_panel"> + <text name="lod_table_header"> + Seleziona livello di dettaglio: + </text> + <text name="high_label" value="Alto"/> + <text name="high_triangles" value="0"/> + <text name="high_vertices" value="0"/> + <text name="medium_label" value="Medio"/> + <text name="medium_triangles" value="0"/> + <text name="medium_vertices" value="0"/> + <text name="low_label" value="Basso"/> + <text name="low_triangles" value="0"/> + <text name="low_vertices" value="0"/> + <text name="lowest_label" value="Bassissimo"/> + <text name="lowest_triangles" value="0"/> + <text name="lowest_vertices" value="0"/> + <text name="lod_table_footer"> + Livello di dettaglio: [DETAIL] + </text> + <radio_group name="lod_file_or_limit" value="lod_from_file"> + <radio_item label="Carica da file" name="lod_from_file"/> + <radio_item label="Genera automaticamente" name="lod_auto_generate"/> + <radio_item label="Nessuno" name="lod_none"/> + </radio_group> + <button label="Sfoglia..." name="lod_browse"/> + <combo_box name="lod_mode"> + <combo_item name="triangle_limit"> + Limite triangoli + </combo_item> + <combo_item name="error_threshold"> + Limite errori + </combo_item> + </combo_box> + <text name="build_operator_text"> + Operatore costruzione: + </text> + <text name="queue_mode_text"> + Modalità di coda: + </text> + <combo_box name="build_operator"> + <combo_item name="edge_collapse"> + Collassa bordo + </combo_item> + <combo_item name="half_edge_collapse"> + Collassa mezzo bordo + </combo_item> + </combo_box> + <combo_box name="queue_mode"> + <combo_item name="greedy"> + Ingordo + </combo_item> + <combo_item name="lazy"> + Pigro + </combo_item> + <combo_item name="independent"> + Indipendente + </combo_item> + </combo_box> + <text name="border_mode_text"> + Modalità bordo: + </text> + <text name="share_tolderance_text"> + Tolleranza condivisione: + </text> + <combo_box name="border_mode"> + <combo_item name="border_unlock"> + Sblocca + </combo_item> + <combo_item name="border_lock"> + Blocca + </combo_item> + </combo_box> + <text name="crease_label"> + Angolo piega: + </text> + <spinner name="crease_angle" value="75"/> + </panel> + <panel label="Fisica" name="physics_panel"> + <panel name="physics geometry"> + <radio_group name="physics_load_radio" value="physics_load_from_file"> + <radio_item label="File:" name="physics_load_from_file"/> + <radio_item label="Usa livello di dettaglio:" name="physics_use_lod"/> + </radio_group> + <combo_box name="physics_lod_combo" tool_tip="Livello di dettaglio per forma fisica"> + <combo_item name="physics_lowest"> + Bassissimo + </combo_item> + <combo_item name="physics_low"> + Basso + </combo_item> + <combo_item name="physics_medium"> + Medio + </combo_item> + <combo_item name="physics_high"> + Alto + </combo_item> + </combo_box> + <button label="Sfoglia..." name="physics_browse"/> + </panel> + <panel name="physics analysis"> + <slider label="Liscia:" name="Smooth"/> + <check_box label="Chiudi fori (lento)" name="Close Holes (Slow)"/> + <button label="Analizza" name="Decompose"/> + <button label="Annulla" name="decompose_cancel"/> + </panel> + <panel name="physics simplification"> + <slider label="Passaggi:" name="Combine Quality"/> + <slider label="Scala dettagli:" name="Detail Scale"/> + <slider label="Mantieni:" name="Retain%"/> + <button label="Semplifica" name="Simplify"/> + <button label="Annulla" name="simplify_cancel"/> + </panel> + <panel name="physics info"> + <slider label="Ampiezza anteprima:" name="physics_explode"/> + <text name="physics_triangles"> + Triangoli: [TRIANGLES] + </text> + <text name="physics_points"> + Vertici: [POINTS] + </text> + <text name="physics_hulls"> + Inviluppi: [HULLS] + </text> + </panel> + </panel> + <panel label="Modificatori" name="modifiers_panel"> + <spinner name="import_scale" value="1.0"/> + <text name="import_dimensions"> + [X] x [Y] x [Z] m + </text> + <check_box label="Texture" name="upload_textures"/> + <check_box label="Peso pelle" name="upload_skin"/> + <check_box label="Posizioni giunti" name="upload_joints"/> + <spinner name="pelvis_offset" value="0.0"/> + </panel> + </tab_container> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_model_wizard.xml b/indra/newview/skins/default/xui/it/floater_model_wizard.xml new file mode 100644 index 0000000000000000000000000000000000000000..b17f731089d85e3b2a6d566b77daca912a56982d --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_model_wizard.xml @@ -0,0 +1,241 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Model Wizard" title="PROCEDURA GUIDATA CARICA MODELLO"> + <button label="5. Carica sul server" name="upload_btn"/> + <button label="4. Rivedi" name="review_btn"/> + <button label="3. Fisica" name="physics2_btn"/> + <button label="3. Fisica" name="physics_btn"/> + <button label="2. Ottimizza" name="optimize_btn"/> + <button label="1. Seleziona file" name="choose_file_btn"/> + <panel name="choose_file_panel"> + <panel name="header_panel"> + <text name="header_text"> + Carica modello + </text> + </panel> + <text name="description"> + Questa procedura guidata permette di importare modelli di reticoli in Second Life. Specificare prima un file che contiene il modello da importare. Second Life supporta file COLLADA (.dae). + </text> + <panel name="content"> + <text name="Cache location"> + Nome file: + </text> + <button label="Sfoglia..." label_selected="Sfoglia..." name="browse"/> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + </panel> + <panel name="optimize_panel"> + <panel name="header_panel"> + <text name="header_text"> + Ottimizza + </text> + </panel> + <text name="description"> + Questa procedura guidata ha ottimizzato il modello per migliorare le prestazioni. Si possono variare i risultati dell'ottimizzazione in basso o fare clic su Avanti per continuare. + </text> + <panel name="content"> + <text name="high_detail_text"> + Genera livello di dettaglio: Alto + </text> + <text name="medium_detail_text"> + Genera livello di dettaglio: Medio + </text> + <text name="low_detail_text"> + Genera livello di dettaglio: Basso + </text> + <text name="lowest_detail_text"> + Genera livello di dettaglio: Bassissimo + </text> + </panel> + <panel name="content2"> + <text name="lod_label"> + Anteprima modello: + </text> + <combo_box name="preview_lod_combo2" tool_tip="Livello di dettaglio per anteprima rendering"> + <combo_item name="high"> + Alto + </combo_item> + <combo_item name="medium"> + Medio + </combo_item> + <combo_item name="low"> + Basso + </combo_item> + <combo_item name="lowest"> + Bassissimo + </combo_item> + </combo_box> + <text name="streaming cost"> + Costo risorsa: [COST] + </text> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + </panel> + <panel name="physics_panel"> + <panel name="header_panel"> + <text name="header_text"> + Fisica + </text> + </panel> + <text name="description"> + La procedura guidata permette di creare una forma fisica che determina come l'oggetto interagisce con altri oggetti e avatar. Impostare il comando a scorrimento sul livello di dettaglio appropriato per l'uso dell'oggetto: + </text> + <panel name="content"> + <text name="streaming cost"> + Costo risorsa: [COST] + </text> + </panel> + </panel> + <panel name="physics2_panel"> + <panel name="header_panel"> + <text name="header_text"> + Fisica + </text> + </panel> + <text name="description"> + Visualizza in anteprima la forma fisica in basso, quindi fai clic su Avanti per continuare. Per modificare la forma fisica, fare clic su Indietro. + </text> + <panel name="content"> + <text name="lod_label"> + Anteprima modello: + </text> + <combo_box name="preview_lod_combo3" tool_tip="Livello di dettaglio per anteprima rendering"> + <combo_item name="high"> + Alto + </combo_item> + <combo_item name="medium"> + Medio + </combo_item> + <combo_item name="low"> + Basso + </combo_item> + <combo_item name="lowest"> + Bassissimo + </combo_item> + </combo_box> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + <text name="streaming cost"> + Costo risorsa: [COST] + </text> + </panel> + </panel> + <panel name="review_panel"> + <panel name="header_panel"> + <text name="header_text"> + Rivedi + </text> + </panel> + <text name="description"> + Rivedere i dettagli in basso, quindi fare clic su Carica per caricare il modello. Il tuo saldo in L$ verrà addebitato quando fai clic su Carica. + </text> + <panel name="content"> + <text name="lod_label"> + Anteprima modello: + </text> + <combo_box name="preview_lod_combo" tool_tip="Livello di dettaglio per anteprima rendering"> + <combo_item name="high"> + Alto + </combo_item> + <combo_item name="medium"> + Medio + </combo_item> + <combo_item name="low"> + Basso + </combo_item> + <combo_item name="lowest"> + Bassissimo + </combo_item> + </combo_box> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + <text name="streaming cost"> + Costo risorsa: [COST] + </text> + <text name="physics cost"> + Costo fisica: [COST] + </text> + </panel> + <panel name="upload_panel"> + <panel name="header_panel"> + <text name="header_text"> + Caricamento completato. + </text> + </panel> + <text name="description"> + Congratulazioni. Il modello è stato caricato correttamente e ora puoi trovarlo nella cartella Oggetti nel tuo inventario. + </text> + </panel> + <button label="<< Indietro" name="back"/> + <button label="Avanti >>" name="next"/> + <button label="Carica" name="upload" tool_tip="Carica al simulatore"/> + <button label="Annulla" name="cancel"/> + <button label="Chiudi" name="close"/> + <spinner name="import_scale" value="1.0"/> + <string name="status_idle"> + Pausa + </string> + <string name="status_reading_file"> + Caricamento in corso... + </string> + <string name="status_generating_meshes"> + Generazione reticoli... + </string> + <string name="status_vertex_number_overflow"> + Errore: numero di vertici maggiore di 65534, annullato. + </string> + <string name="high"> + Alto + </string> + <string name="medium"> + Medio + </string> + <string name="low"> + Basso + </string> + <string name="lowest"> + Bassissimo + </string> + <string name="mesh_status_good"> + Invia! + </string> + <string name="mesh_status_na"> + N/D + </string> + <string name="mesh_status_none"> + Nessuno + </string> + <string name="mesh_status_submesh_mismatch"> + Ai vari livelli del dettaglio corrispondono numeri diversi di faccette con texture. + </string> + <string name="mesh_status_mesh_mismatch"> + Ai vari livelli del dettaglio corrispondono numeri diversi istanze di reticoli. + </string> + <string name="mesh_status_too_many_vertices"> + Troppi vertici per il livello di dettaglio. + </string> + <string name="mesh_status_missing_lod"> + Livello di dettaglio minimo mancante. + </string> + <string name="layer_all"> + Tutto + </string> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_price_for_listing.xml b/indra/newview/skins/default/xui/it/floater_price_for_listing.xml new file mode 100644 index 0000000000000000000000000000000000000000..06c838a981d4553735c732f38f30f73b2487e233 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_price_for_listing.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="price_for_listing" title="PUBBLICA L'ANNUNCIO PUBBLICITARIO"> + <text name="explanation_text"> + La tua inserzione sarà visibile per una settimana dal giorno della sua pubblicazione. + +La posizione del tuo annuncio nella lista delle inserzioni è determinata dalla somma pagata. + +Le inserzioni con un pagamento più alto saranno più visibili nella lista dei risultati della ricerca. + </text> + <text name="price_text"> + Prezzo per inserzione: + </text> + <text name="price_symbol"> + L$ + </text> + <button label="OK" name="set_price_btn"/> + <button label="Annulla" name="cancel_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_sound_devices.xml b/indra/newview/skins/default/xui/it/floater_sound_devices.xml new file mode 100644 index 0000000000000000000000000000000000000000..df4b8f4878a55852f2bebf1c5e4cd89b053a0a02 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_sound_devices.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_sound_devices" title="Dispositivi sonori"> + <text name="voice_label"> + Chat vocale + </text> + <check_box label="Abilitato" name="enable_voice"/> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml index 52b5566006bcd9a6b961124915d6ddf19b9f1315..23e01a3943d8d4ed218636f0f5a037d7e9a1bfb4 100644 --- a/indra/newview/skins/default/xui/it/floater_tools.xml +++ b/indra/newview/skins/default/xui/it/floater_tools.xml @@ -126,6 +126,18 @@ <text name="prim_count"> Prim: [COUNT] </text> + <text name="linked_set_count"> + Set collegati: [COUNT] + </text> + <text name="linked_set_cost" tool_tip="Costo dei set collegati attualmente selezionati come [prim],[complessità fisica]"> + Costo: [COST] / [PHYSICS] + </text> + <text name="object_count"> + Oggetti: [COUNT] + </text> + <text name="object_cost" tool_tip="Costo degli oggetti attualmente selezionati come [prim] / [complessità fisica]"> + Costo: [COST] / [PHYSICS] + </text> <tab_container name="Object Info Tabs"> <panel label="Generale" name="General"> <panel.string name="text deed continued"> @@ -276,15 +288,6 @@ <combo_box.item label="Anello" name="Ring"/> <combo_box.item label="Sculpted" name="Sculpted"/> </combo_box> - <combo_box name="material"> - <combo_box.item label="Pietra" name="Stone"/> - <combo_box.item label="Metallo" name="Metal"/> - <combo_box.item label="Vetro" name="Glass"/> - <combo_box.item label="Legno" name="Wood"/> - <combo_box.item label="Carne" name="Flesh"/> - <combo_box.item label="Plastica" name="Plastic"/> - <combo_box.item label="Gomma" name="Rubber"/> - </combo_box> <text left_delta="-10" name="text cut" width="170"> Riduci una sezione (inizio/fine) </text> @@ -357,9 +360,19 @@ <combo_box.item label="Toroidale" name="Torus"/> <combo_box.item label="Piana" name="Plane"/> <combo_box.item label="Cilindrica" name="Cylinder"/> + <combo_box.item label="Reticolo" name="Mesh"/> </combo_box> </panel> <panel label="Caratteristiche" name="Features"> + <panel.string name="None"> + Nessuno + </panel.string> + <panel.string name="Prim"> + Prim + </panel.string> + <panel.string name="Convex Hull"> + Inviluppo convesso + </panel.string> <text name="select_single"> Seleziona solo un prim per modificarne le caratteristiche. </text> @@ -384,6 +397,23 @@ <spinner label="Centro focale" name="Light Focus"/> <spinner label="Attenuazione" name="Light Falloff"/> <spinner label="Atmosfera" name="Light Ambiance"/> + <text name="label physicsshapetype"> + Tipo di forma fisica: + </text> + <combo_box name="Physics Shape Type Combo Ctrl" tool_tip="Selezionare il tipo di forma fisica"/> + <combo_box name="material"> + <combo_box.item label="Pietra" name="Stone"/> + <combo_box.item label="Metallo" name="Metal"/> + <combo_box.item label="Vetro" name="Glass"/> + <combo_box.item label="Legno" name="Wood"/> + <combo_box.item label="Carne" name="Flesh"/> + <combo_box.item label="Plastica" name="Plastic"/> + <combo_box.item label="Gomma" name="Rubber"/> + </combo_box> + <spinner label="Gravità " name="Physics Gravity"/> + <spinner label="Frizione" name="Physics Friction"/> + <spinner label="Densità " name="Physics Density"/> + <spinner label="Restituzione" name="Physics Restitution"/> </panel> <panel label="Texture" name="Texture"> <panel.string name="string repeats per meter"> diff --git a/indra/newview/skins/default/xui/it/menu_inventory_add.xml b/indra/newview/skins/default/xui/it/menu_inventory_add.xml index a2535ce48de789195f9144ec14fd77bd4b0632a8..62da61cd6b5efd0890e3b425ee1ac65339ccbeca 100644 --- a/indra/newview/skins/default/xui/it/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/it/menu_inventory_add.xml @@ -4,6 +4,8 @@ <menu_item_call label="Immagine ([COST]L$)..." name="Upload Image"/> <menu_item_call label="Suono ([COST]L$)..." name="Upload Sound"/> <menu_item_call label="Animazione ([COST]L$)..." name="Upload Animation"/> + <menu_item_call label="Modella..." name="Upload Model"/> + <menu_item_call label="Procedura guidata modellazione..." name="Upload Model Wizard"/> <menu_item_call label="In blocco ([COST]L$ per file)..." name="Bulk Upload"/> <menu_item_call label="Definisci diritti di caricamento predefiniti" name="perm prefs"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/it/menu_model_import_gear_default.xml new file mode 100644 index 0000000000000000000000000000000000000000..5012e6450f27952c6ea85eb1862b4904d2e1c91a --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_model_import_gear_default.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="model_menu_gear_default"> + <menu_item_check label="Mostra bordi" name="show_edges"/> + <menu_item_check label="Mostra fisica" name="show_physics"/> + <menu_item_check label="Mostra texture" name="show_textures"/> + <menu_item_check label="Mostra peso pelle" name="show_skin_weight"/> + <menu_item_check label="Mostra posizioni giunti" name="show_joint_positions"/> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml index 6599810a671f03e355e5211f29f4074d9be453aa..e4df0630d927001dbd7c4cd34dcd244c90ebe9d5 100644 --- a/indra/newview/skins/default/xui/it/menu_viewer.xml +++ b/indra/newview/skins/default/xui/it/menu_viewer.xml @@ -120,6 +120,8 @@ <menu_item_call label="Immagine ([COST] L$)..." name="Upload Image"/> <menu_item_call label="Suono ([COST] L$)..." name="Upload Sound"/> <menu_item_call label="Animazione ([COST] L$)..." name="Upload Animation"/> + <menu_item_call label="Modella..." name="Upload Model"/> + <menu_item_call label="Procedura guidata modellazione..." name="Upload Model Wizard"/> <menu_item_call label="In blocco ([COST] L$ per file)..." name="Bulk Upload"/> </menu> <menu_item_call label="Annulla" name="Undo"/> @@ -159,7 +161,7 @@ <menu_item_check label="Alpha (Trasparenza)" name="Alpha"/> <menu_item_check label="Albero" name="Tree"/> <menu_item_check label="Avatar" name="Character"/> - <menu_item_check label="Superficie" name="SurfacePath"/> + <menu_item_check label="Superficie chiusa" name="Surface Patch"/> <menu_item_check label="Cielo" name="Sky"/> <menu_item_check label="Acqua" name="Water"/> <menu_item_check label="Suolo" name="Ground"/> @@ -217,6 +219,7 @@ <menu_item_check label="Console categoria texture" name="Texture Category"/> <menu_item_check label="Timer veloci" name="Fast Timers"/> <menu_item_check label="Memoria" name="Memory"/> + <menu_item_check label="Statistiche scena" name="Scene Statistics"/> <menu_item_call label="Informazioni regione sulla console di debug" name="Region Info to Debug Console"/> <menu_item_check label="Fotocamera" name="Camera"/> <menu_item_check label="Vento" name="Wind"/> @@ -224,6 +227,7 @@ </menu> <menu label="Mostra informazioni" name="Display Info"> <menu_item_check label="Mostra orario" name="Show Time"/> + <menu_item_check label="Mostra costo di caricamento" name="Show Upload Cost"/> <menu_item_check label="Mostra informazioni di rendering" name="Show Render Info"/> <menu_item_check label="Mostra info sulla texture" name="Show Texture Info"/> <menu_item_check label="Mostra colore sotto il cursore" name="Show Color Under Cursor"/> @@ -246,7 +250,12 @@ <menu_item_check label="Test frame" name="Frame Test"/> </menu> <menu label="Render Metadata" name="Render Metadata"> + <menu_item_check label="Normali" name="Normals"/> + <menu_item_check label="Forme fisica" name="Physics Shapes"/> <menu_item_check label="Aggiorna tipo" name="Update Type"/> + <menu_item_check label="Info livello dettaglio" name="LOD Info"/> + <menu_item_check label="Crea coda" name="Build Queue"/> + <menu_item_check label="Scolpisci" name="Sculpt"/> </menu> <menu label="Rendering" name="Rendering"> <menu_item_check label="Assi" name="Axes"/> @@ -312,6 +321,7 @@ <menu_item_call label="Debug texture dell'avatar" name="Debug Avatar Textures"/> </menu> <menu_item_check label="Texture HTTP" name="HTTP Textures"/> + <menu_item_check label="Inventario HTTP" name="HTTP Inventory"/> <menu_item_check label="Finestra Console al prossimo lancio" name="Console Window"/> <menu_item_call label="Richiedi diritti Admin" name="Request Admin Options"/> <menu_item_call label="Lascia stato Admin" name="Leave Admin Options"/> diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml index 6619260670c7d2881021e0ded4c5d6a94946bcdd..f50051c00449daa3f1248da182e682c92d4404d8 100644 --- a/indra/newview/skins/default/xui/it/notifications.xml +++ b/indra/newview/skins/default/xui/it/notifications.xml @@ -2163,6 +2163,12 @@ Questo potrebbe incidere sulla tua password. <notification name="RezItemNoPermissions"> Permessi insufficienti per creare un oggetto. </notification> + <notification name="IMAcrossParentEstates"> + Impossibile inviare IM tra proprietà principali diverse. + </notification> + <notification name="TransferInventoryAcrossParentEstates"> + Impossibile trasferire l'inventario tra proprietà principali diverse. + </notification> <notification name="UnableToLoadNotecard"> Impossibile caricare la notecard in questo momento. </notification> @@ -2736,6 +2742,10 @@ Per sicurezza, verranno bloccati per alcuni secondi. La tua voce è stata interrotta dal moderatore. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="UploadCostConfirmation"> + Questo caricamento costerà L$[PRICE]. Continuare con il caricamento? + <usetemplate name="okcancelbuttons" notext="Annulla" yestext="Carica"/> + </notification> <notification name="ConfirmClearTeleportHistory"> Sei sicuro di volere cancellare la cronologia dei tuoi teleport? <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/> @@ -2747,6 +2757,9 @@ Il pulsante verrà visualizzato quando lo spazio sarà sufficiente. <notification name="ShareNotification"> Scegli i residenti con i quali condividere. </notification> + <notification name="MeshUploadError"> + [LABEL] non è stato caricato: [MESSAGE] [IDENTIFIER] [INVALIDITY_IDENTIFIER] + </notification> <notification name="ShareItemsConfirmation"> Sei sicuro di volere condividere gli oggetti @@ -2763,6 +2776,19 @@ Con i seguenti residenti? <notification name="DeedToGroupFail"> Cessione al gruppo non riuscita. </notification> + <notification name="ReleaseLandThrottled"> + Il lotto [PARCEL_NAME] non può essere abbandonato in questo momento. + </notification> + <notification name="ReleasedLandWithReclaim"> + Il lotto di [AREA] m² '[PARCEL_NAME]' è stato rilasciato. + +Hai [RECLAIM_PERIOD] ore per riprendere possesso per L$0 prima che venga messo in vendita a chiunque altro. + </notification> + <notification name="ReleasedLandNoReclaim"> + Il lotto di [AREA] m² '[PARCEL_NAME]' è stato rilasciato. + +Ora è disponibile per l'acquisto da parte di chiunque. + </notification> <notification name="AvatarRezNotification"> ( in esistenza da [EXISTENCE] secondi ) Nuvola avatar '[NAME]' dileguata dopo [TIME] secondi. @@ -2903,6 +2929,10 @@ Clicca e trascina dovunque nel mondo per ruotare la visuale La creazione e la modifica dei gruppi sono disponibili solo in modalità Avanzata. Uscire e cambiare la modalità ? Sulla schermata di accesso si può selezionare la modalità . <usetemplate name="okcancelbuttons" notext="Non uscire" yestext="Esci"/> </notification> + <notification label="" name="NoPlaceInfo"> + La visualizzazione del profilo del luogo è disponibile solo in modalità Avanzata. Uscire e cambiare la modalità ? Sulla schermata di accesso si può selezionare la modalità . + <usetemplate name="okcancelbuttons" notext="Non uscire" yestext="Esci"/> + </notification> <notification label="" name="NoPicks"> La creazione e la modifica dei luoghi preferiti sono disponibili solo in modalità Avanzata. Uscire e cambiare la modalità ? Sulla schermata di accesso si può selezionare la modalità . <usetemplate name="okcancelbuttons" notext="Non uscire" yestext="Esci"/> @@ -2923,9 +2953,18 @@ Clicca e trascina dovunque nel mondo per ruotare la visuale Il pagamento ad altri residenti è disponibile solo in modalità Avanzata. Eseguire il logout e cambiare la modalità ? <usetemplate name="okcancelbuttons" notext="Non uscire" yestext="Esci"/> </notification> - <global name="UnsupportedCPU"> - - La velocità della tua CPU non soddisfa i requisiti minimi. - </global> + <notification label="" name="NoInventory"> + La visualizzazione dell'inventario è disponibile solo in modalità Avanzata. Eseguire il logout e cambiare la modalità ? + <usetemplate name="okcancelbuttons" notext="Non uscire" yestext="Esci"/> + </notification> + <notification label="" name="NoAppearance"> + L'editor dell'aspetto è disponibile solo in modalità Avanzata. Eseguire il logout e cambiare la modalità ? + <usetemplate name="okcancelbuttons" notext="Non uscire" yestext="Esci"/> + </notification> + <notification label="" name="NoSearch"> + La ricerca è disponibile solo in modalità Avanzata. Eseguire il logout e cambiare la modalità ? + <usetemplate name="okcancelbuttons" notext="Non uscire" yestext="Esci"/> + </notification> <global name="UnsupportedGLRequirements"> Non sembra che tu abbia i requisiti hardware adeguati per [APP_NAME]. [APP_NAME] richiede una scheda grafica OpenGL con supporto multitexture. Se ne hai una in dotazione, accertati di avere i driver, i service pack e i patch più recenti per la scheda grafica e per il sistema operativo. diff --git a/indra/newview/skins/default/xui/it/panel_preferences_colors.xml b/indra/newview/skins/default/xui/it/panel_preferences_colors.xml index 167de5d028311c91caf13faa6638489d70a1cf8a..016970d9a31c8b366f3bbdd4610be225a9a6896f 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_colors.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_colors.xml @@ -22,6 +22,9 @@ <text name="text_box5"> Errori </text> + <text name="text_box10"> + Diretto + </text> <text name="text_box7"> Proprietario </text> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml index 7d21b8ccc70a3fa72f8bf6c2bb9236b88435f0e3..1f2b97af45003962a62feac2e817705948608846 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml @@ -27,8 +27,20 @@ </text> <check_box initial_value="vero" label="Acqua trasparente" name="TransparentWater"/> <check_box initial_value="true" label="Piccoli rilievi e scintillii" name="BumpShiny"/> + <check_box initial_value="true" label="Luci locali" name="LocalLights"/> <check_box initial_value="true" label="Effetti grafici base" name="BasicShaders" tool_tip="Disabilitare questa opzione può evitare che qualche scheda grafica vada in crash."/> <check_box initial_value="true" label="Effetti grafici atmosferici" name="WindLightUseAtmosShaders"/> + <check_box initial_value="true" label="Luci e ombre" name="UseLightShaders"/> + <check_box initial_value="true" label="Occlusione ambientale" name="UseSSAO"/> + <check_box initial_value="true" label="Profondità di campo" name="UseDoF"/> + <text name="shadows_label"> + Ombre: + </text> + <combo_box name="ShadowDetail"> + <combo_box.item label="Nessuno" name="0"/> + <combo_box.item label="Sole/Luna" name="1"/> + <combo_box.item label="Sole/Luna + Proiettori" name="2"/> + </combo_box> <text name="reflection_label"> Riflessi nell’acqua: </text> diff --git a/indra/newview/skins/default/xui/it/panel_region_general.xml b/indra/newview/skins/default/xui/it/panel_region_general.xml index 6ca5dd878ef384e61bae764b136a18b8c1e72eb9..c550e005ae97fee0b38e324372c83be2aa53ba79 100644 --- a/indra/newview/skins/default/xui/it/panel_region_general.xml +++ b/indra/newview/skins/default/xui/it/panel_region_general.xml @@ -25,6 +25,7 @@ <check_box label="Abilita la rivendita del terreno" name="allow_land_resell_check"/> <check_box label="Abilita unione/suddivisione del terreno" name="allow_parcel_changes_check"/> <check_box label="Proibisci che il terreno appaia nelle ricerche" name="block_parcel_search_check" tool_tip="Permetti che le persone vedano questa regione e le sue suddivisioni nei risultati delle ricerche"/> + <check_box label="Consenti oggetti con reticolo" name="mesh_rez_enabled_check" tool_tip="Permetti alle persone di rezzare oggetti con reticolo su questa regione"/> <spinner label="Limite massimo di avatar" label_width="135" name="agent_limit_spin" width="190"/> <spinner label="Bonus di oggetti" label_width="135" name="object_bonus_spin" width="190"/> <text label="Maturità " name="access_text" width="120"> diff --git a/indra/newview/skins/default/xui/it/panel_sound_devices.xml b/indra/newview/skins/default/xui/it/panel_sound_devices.xml new file mode 100644 index 0000000000000000000000000000000000000000..8e7f0c8dc55034e889d1f1f2abcd63c680b7bbf7 --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_sound_devices.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel label="Impostazioni dispositivo" name="device_settings_panel"> + <panel.string name="default_text"> + Predefinito + </panel.string> + <text name="Input"> + Input + </text> + <text name="My volume label"> + Il mio volume: + </text> + <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Cambia il volume utilizzando questa barra"/> + <text name="wait_text"> + Attendi + </text> + <text name="Output"> + Output + </text> +</panel> diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index aa23eef438428d716fd828782bf83e9030c38d6a..cbe8ef24c44e6c112e511a9135f898e6dd9f1c5e 100644 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -124,6 +124,139 @@ <string name="create_account_url"> http://join.secondlife.com/index.php?lang=it-IT </string> + <string name="LoginFailedViewerNotPermitted"> + Il viewer utilizzato non è più in grado di accedere a Second Life. Visita la parina seguente per scaricare un nuovo viewer: +http://secondlife.com/download. + +Per maggiori informazioni, consulta le domande frequenti alla pagina seguente: +http://secondlife.com/viewer-access-faq + </string> + <string name="LoginIntermediateOptionalUpdateAvailable"> + Disponibile aggiornamento facoltativo viewer: [VERSION] + </string> + <string name="LoginFailedRequiredUpdate"> + Aggernamento viewer richiesto: [VERSION] + </string> + <string name="LoginFailedAlreadyLoggedIn"> + Questo agente ha già eseguito il login. + </string> + <string name="LoginFailedAuthenticationFailed"> + Siamo spiacenti. Il tentativo di accesso non è riuscito. +Verifica di avere inserito correttamente + * Nome utente (come robby12 o Stella Soleggiato) + * Password +Verifica anche che il blocco delle maiuscole non sia attivato. + </string> + <string name="LoginFailedPasswordChanged"> + Come misura precauzionale, la tua password è stata cambiata. +Visita la pagina del tuo account a http://secondlife.com/password +e rispondi alla domanda di sicurezza per reimpostare la password. +Ci scusiamo per l'inconveniente. + </string> + <string name="LoginFailedPasswordReset"> + Abbiamo effettuato delle modifiche al sistema che richiedono di reimpostare la password. +Visita la pagina del tuo account a http://secondlife.com/password +e rispondi alla domanda di sicurezza per reimpostare la password. +Ci scusiamo per l'inconveniente. + </string> + <string name="LoginFailedEmployeesOnly"> + Second Life è chiuso temporaneamente per manutenzione. +Al momento, solo i dipendenti possono eseguire l'accesso. +Visita www.secondlife.com/status per aggiornamenti. + </string> + <string name="LoginFailedPremiumOnly"> + L'accesso a Second Life è temporaneamente limitato per garantire che chi è nel mondo virtuale abbia la migliore esperienza possibile. + +Le persona con account gratuiti non potrenno accedere a Second Life durante questo periodo, per lasciare spazio alle persone che hanno pagato per Second Life. + </string> + <string name="LoginFailedComputerProhibited"> + Non si può accedere a Second Life da questo computer. +Se ritieni che si tratta di un errore, contatta +support@secondlife.com. + </string> + <string name="LoginFailedAcountSuspended"> + Il tuo account non è accessibile fino alle +[TIME] fuso orario del Pacifico. + </string> + <string name="LoginFailedAccountDisabled"> + Non siamo attualmente in grado di completare la tua richiesta. +Contatta l'assistenza Second Life alla pagina http://secondlife.com/support. +Se non sei in grado di cambiare la password, chiama (866) 476-9763. + </string> + <string name="LoginFailedTransformError"> + Dati incompatibili rilevati durante l'accesso. +Contattare support@secondlife.com. + </string> + <string name="LoginFailedAccountMaintenance"> + Il tuo account è in fase di leggera manutenzione. +Il tuo account non è accessibile fino alle +[TIME] fuso orario del Pacifico. +Se ritieni che si tratta di un errore, contatta support@secondlife.com. + </string> + <string name="LoginFailedPendingLogoutFault"> + Errore del simulatore in seguito alla richiesta di logout. + </string> + <string name="LoginFailedPendingLogout"> + Il sistema sta eseguendo il logout in questo momento. +Il tuo account non sarà disponibile fino alle +[TIME] fuso orario del Pacifico. + </string> + <string name="LoginFailedUnableToCreateSession"> + Non è possibile creare una sessione valida. + </string> + <string name="LoginFailedUnableToConnectToSimulator"> + Non è possibile collegarsi a un simulatore. + </string> + <string name="LoginFailedRestrictedHours"> + Il tuo account può accedere a Second Life solo +tra le [START] e le [END] fuso orario del Pacifico. +Torna durante quell'orario. +Se ritieni che si tratta di un errore, contatta support@secondlife.com. + </string> + <string name="LoginFailedIncorrectParameters"> + Parametri errati. +Se ritieni che si tratta di un errore, contatta support@secondlife.com. + </string> + <string name="LoginFailedFirstNameNotAlphanumeric"> + Il parametro Nome deve includere solo caratteri alfanumerici. +Se ritieni che si tratta di un errore, contatta support@secondlife.com. + </string> + <string name="LoginFailedLastNameNotAlphanumeric"> + Il parametro Cognome deve includere solo caratteri alfanumerici. +Se ritieni che si tratta di un errore, contatta support@secondlife.com. + </string> + <string name="LogoutFailedRegionGoingOffline"> + La regione sta passando allo stato non in linea. +Prova ad accedere nuovamente tra un minuto. + </string> + <string name="LogoutFailedAgentNotInRegion"> + L'agente non è nella regione. +Prova ad accedere nuovamente tra un minuto. + </string> + <string name="LogoutFailedPendingLogin"> + La regione ha eseguito l'accesso in un'altre sessione. +Prova ad accedere nuovamente tra un minuto. + </string> + <string name="LogoutFailedLoggingOut"> + La regione stava eseguendo il logout della sessione precedente. +Prova ad accedere nuovamente tra un minuto. + </string> + <string name="LogoutFailedStillLoggingOut"> + La regione sta ancora eseguendo il logout della sessione precedente. +Prova ad accedere nuovamente tra un minuto. + </string> + <string name="LogoutSucceeded"> + La regione ha eseguito il logout dell'ultima sessione. +Prova ad accedere nuovamente tra un minuto. + </string> + <string name="LogoutFailedLogoutBegun"> + La regione ha iniziato la procedura di logout. +Prova ad accedere nuovamente tra un minuto. + </string> + <string name="LoginFailedLoggingOutSession"> + Il sistema ha iniziato il logout dell'ultima sessione. +Prova ad accedere nuovamente tra un minuto. + </string> <string name="AgentLostConnection"> Questa regione sta avendo problemi. Verifica la tua connessione a Internet. </string> @@ -432,6 +565,9 @@ <string name="symbolic folder link"> link alla cartella </string> + <string name="mesh"> + reticolo + </string> <string name="AvatarAway"> Assente </string> @@ -1159,6 +1295,9 @@ <string name="InvFolder Accessories"> Accessori </string> + <string name="InvFolder Meshes"> + Reticoli + </string> <string name="InvFolder Friends"> Amici </string> @@ -1472,8 +1611,8 @@ <string name="Unknown"> (Sconosciuto) </string> - <string name="SummaryForTheWeek" value="Riassunto della settimana, partendo dal"/> - <string name="NextStipendDay" value="Il prossimo giorno di stipendio è"/> + <string name="SummaryForTheWeek" value="Riassunto della settimana, partendo dal "/> + <string name="NextStipendDay" value=". Il prossimo giorno di stipendio è "/> <string name="GroupIndividualShare" value="Gruppo Dividendi individuali"/> <string name="GroupColumn" value="Gruppo"/> <string name="Balance"> @@ -3666,6 +3805,9 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="session_initialization_timed_out_error"> Sessione di inizializzazione scaduta </string> + <string name="Home position set."> + Posizione di base impostata. + </string> <string name="voice_morphing_url"> http://secondlife.com/landing/voicemorphing </string> diff --git a/indra/newview/skins/default/xui/ja/floater_about.xml b/indra/newview/skins/default/xui/ja/floater_about.xml index 61fedede3526e3a8092de507b15904bd1ba07e71..56708001c2fbac9e8a1ab273b51855a55863a343 100644 --- a/indra/newview/skins/default/xui/ja/floater_about.xml +++ b/indra/newview/skins/default/xui/ja/floater_about.xml @@ -56,26 +56,32 @@ Qt Webkit ãƒãƒ¼ã‚¸ãƒ§ãƒ³ï¼š [QT_WEBKIT_VERSION] <panel label="ライセンス" name="licenses_panel"> <text_editor name="credits_editor"> 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion - APR Copyright (C) 2000-2004 The Apache Software Foundation - cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) - expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. - FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). - GL Copyright (C) 1999-2004 Brian Paul. - Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. - jpeg2000 Copyright (C) 2001, David Taubman, The University of New South - Wales (UNSW) - jpeglib Copyright (C) 1991-1998, Thomas G. Lane. - ogg/vorbis Copyright (C) 2001, Xiphophorus - OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. - SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga - SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - xmlrpc-epi Copyright (C) 2000 Epinions, Inc. - zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. - google-perftools Copyright (c) 2005, Google Inc. - - ç„¡æ–転写ã€è¤‡è£½ã€è»¢è¼‰ã‚’ç¦ã˜ã¾ã™ã€‚ 詳細ã¯licenses.txtã‚’å‚ç…§ã—ã¦ãã ã•ã„。 +APR Copyright (C) 2000-2004 The Apache Software Foundation +Collada DOM Copyright 2005 Sony Computer Entertainment Inc. +cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) +DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc. +expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. +FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). +GL Copyright (C) 1999-2004 Brian Paul. +GLOD Copyright (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University and David Luebke, Brenden Schubert, University of Virginia. +google-perftools Copyright (c) 2005, Google Inc. +Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. +jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) +jpeglib Copyright (C) 1991-1998, Thomas G. Lane. +ogg/vorbis Copyright (C) 2001, Xiphophorus +OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. +PCRE Copyright (c) 1997-2008 University of Cambridge +SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga +SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +xmlrpc-epi Copyright (C) 2000 Epinions, Inc. +zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. +google-perftools Copyright (c) 2005, Google Inc. - Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) +Second Life ビューワã§ã¯ Havok (TM) Physics ãŒä½¿ç”¨ã•れã¦ã„ã¾ã™ã€‚(c)Copyright 1999-2010 Havok.com Inc. (and its Licensors).ç„¡æ–複写・複製・転載をç¦ã˜ã¾ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ www.havok.com ã‚’ã”å‚ç…§ãã ã•ã„。 + +ç„¡æ–複写・複製・転載をç¦ã˜ã¾ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ licenses.txt ã‚’ã”å‚ç…§ãã ã•ã„。 + +ボイスãƒãƒ£ãƒƒãƒˆã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ï¼šPolycom(R) Siren14(TM) (ITU-T Rec.G.722.1 Annex C) </text_editor> </panel> </tab_container> diff --git a/indra/newview/skins/default/xui/ja/floater_buy_contents.xml b/indra/newview/skins/default/xui/ja/floater_buy_contents.xml index ed17736eb383e71ec8ab1199271e26fe97f80895..7e4932c78fe62e5cf60402e73b788d67f82c9e7a 100644 --- a/indra/newview/skins/default/xui/ja/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/ja/floater_buy_contents.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater min_width="340" name="floater_buy_contents" title="ä¸èº«ã®è³¼å…¥" width="340"> <text name="contains_text" width="320"> - [NAME] ã®ä¸èº«ï¼š + <nolink>[NAME]</nolink> ã«å«ã¾ã‚Œã‚‹ã‚‚ã®ï¼š </text> <scroll_list name="item_list" width="310"/> <text name="buy_text" width="320"> diff --git a/indra/newview/skins/default/xui/ja/floater_customize.xml b/indra/newview/skins/default/xui/ja/floater_customize.xml deleted file mode 100644 index cc0032e1ab037237d9e94f7afcec1bcef81280b0..0000000000000000000000000000000000000000 --- a/indra/newview/skins/default/xui/ja/floater_customize.xml +++ /dev/null @@ -1,529 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="容姿"> - <tab_container name="customize tab container"> - <text label="身体部ä½" name="body_parts_placeholder"> - èº«ä½“éƒ¨ä½ - </text> - <panel label="シェイプ" name="Shape"> - <button label="戻ã™" label_selected="戻ã™" name="Revert"/> - <button label="身体" label_selected="身体" name="Body"/> - <button label="é " label_selected="é " name="Head"/> - <button label="眼" label_selected="眼" name="Eyes"/> - <button label="耳" label_selected="耳" name="Ears"/> - <button label="é¼»" label_selected="é¼»" name="Nose"/> - <button label="å£" label_selected="å£" name="Mouth"/> - <button label="ã‚ã”" label_selected="ã‚ã”" name="Chin"/> - <button label="胴体" label_selected="胴体" name="Torso"/> - <button label="両脚" label_selected="両脚" name="Legs"/> - <radio_group name="sex radio"> - <radio_item label="女性" name="radio" value="0"/> - <radio_item label="男性" name="radio2" value="1"/> - </radio_group> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。 - </text> - <text name="title_loading"> - [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž - </text> - <text name="title_not_worn"> - [DESC]: 未装ç€ã€‚ - </text> - <text name="path"> - [PATH] ã«æ‰€åœ¨ - </text> - <text name="not worn instructions"> - æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã« 1 ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„シェイプをã¤ã‘ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - </text> - <text name="no modify instructions"> - ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•れã¦ã„ã¾ã›ã‚“。 - </text> - <text name="Item Action Label"> - シェイプ: - </text> - <button label="æ–°ã—ã„シェイプ(体型)を作æˆ" label_selected="æ–°ã—ã„シェイプ(体型)を作æˆ" name="Create New"/> - <button label="ä¿å˜" label_selected="ä¿å˜" name="Save"/> - <button label="別åã§ä¿å˜..." label_selected="別åã§ä¿å˜..." name="Save As"/> - </panel> - <panel label="スã‚ン" name="Skin"> - <button label="スã‚ンã®è‰²" label_selected="スã‚ンã®è‰²" name="Skin Color"/> - <button label="é¡”ã®ç´°éƒ¨" label_selected="é¡”ã®ç´°éƒ¨" name="Face Detail"/> - <button label="メイク" label_selected="メイク" name="Makeup"/> - <button label="身体細部" label_selected="身体細部" name="Body Detail"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。 - </text> - <text name="title_loading"> - [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž - </text> - <text name="title_not_worn"> - [DESC]: 未装ç€ã€‚ - </text> - <text name="path"> - [PATH] ã«æ‰€åœ¨ - </text> - <text name="not worn instructions"> - æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã« 1 ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„スã‚ンをã¤ã‘ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - </text> - <text name="no modify instructions"> - ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•れã¦ã„ã¾ã›ã‚“。 - </text> - <text name="Item Action Label"> - スã‚ン: - </text> - <texture_picker label="é 部ã®ã‚¿ãƒˆã‚¥ãƒ¼" name="Head Tattoos" tool_tip="写真をクリックã—ã¦é¸æŠž"/> - <texture_picker label="上åŠèº«ã®ã‚¿ãƒˆã‚¥ãƒ¼" name="Upper Tattoos" tool_tip="写真をクリックã—ã¦é¸æŠž"/> - <texture_picker label="下部ã®ã‚¿ãƒˆã‚¥ãƒ¼" name="Lower Tattoos" tool_tip="写真をクリックã—ã¦é¸æŠž"/> - <button label="æ–°ã—ã„スã‚ンを作æˆ" label_selected="æ–°ã—ã„スã‚ンを作æˆ" name="Create New"/> - <button label="ä¿å˜" label_selected="ä¿å˜" name="Save"/> - <button label="別åã§ä¿å˜..." label_selected="別åã§ä¿å˜..." name="Save As"/> - <button label="戻ã™" label_selected="戻ã™" name="Revert"/> - </panel> - <panel label="髪" name="Hair"> - <button label="色" label_selected="色" name="Color"/> - <button label="スタイル" label_selected="スタイル" name="Style"/> - <button label="眉毛" label_selected="眉毛" name="Eyebrows"/> - <button label="é¡”" label_selected="é¡”" name="Facial"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。 - </text> - <text name="title_loading"> - [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž - </text> - <text name="title_not_worn"> - [DESC]: 未装ç€ã€‚ - </text> - <text name="path"> - [PATH] ã«æ‰€åœ¨ - </text> - <text name="not worn instructions"> - æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã« 1 ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„髪をã¤ã‘ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - </text> - <text name="no modify instructions"> - ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•れã¦ã„ã¾ã›ã‚“。 - </text> - <text name="Item Action Label"> - 髪型: - </text> - <texture_picker label="テクスãƒãƒ£" name="Texture" tool_tip="写真をクリックã—ã¦é¸æŠž"/> - <button label="æ–°ã—ã„髪を作æˆ" label_selected="æ–°ã—ã„髪を作æˆ" name="Create New"/> - <button label="ä¿å˜" label_selected="ä¿å˜" name="Save"/> - <button label="別åã§ä¿å˜..." label_selected="別åã§ä¿å˜..." name="Save As"/> - <button label="戻ã™" label_selected="戻ã™" name="Revert"/> - </panel> - <panel label="眼" name="Eyes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。 - </text> - <text name="title_loading"> - [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž - </text> - <text name="title_not_worn"> - [DESC]: 未装ç€ã€‚ - </text> - <text name="path"> - [PATH] ã«æ‰€åœ¨ - </text> - <text name="not worn instructions"> - ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„目をã¤ã‘ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - </text> - <text name="no modify instructions"> - ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•れã¦ã„ã¾ã›ã‚“。 - </text> - <text name="Item Action Label"> - 目: - </text> - <texture_picker label="虹彩" name="Iris" tool_tip="写真をクリックã—ã¦é¸æŠž"/> - <button label="æ–°ã—ã„眼を作æˆ" label_selected="æ–°ã—ã„眼を作æˆ" name="Create New"/> - <button label="ä¿å˜" label_selected="ä¿å˜" name="Save"/> - <button label="別åã§ä¿å˜..." label_selected="別åã§ä¿å˜..." name="Save As"/> - <button label="戻ã™" label_selected="戻ã™" name="Revert"/> - </panel> - <text label="æœ" name="clothes_placeholder"> - 衣類 - </text> - <panel label="シャツ" name="Shirt"> - <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックã—ã¦é¸æŠž"/> - <color_swatch label="è‰²ï¼æ˜Žæš—" name="Color/Tint" tool_tip="クリックã—ã¦ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/> - <button label="å–り外ã™" label_selected="å–り外ã™" name="Take Off"/> - <button label="æ–°ã—ã„シャツを作æˆ" label_selected="æ–°ã—ã„シャツを作æˆ" name="Create New"/> - <button label="ä¿å˜" label_selected="ä¿å˜" name="Save"/> - <button label="別åã§ä¿å˜..." label_selected="別åã§ä¿å˜..." name="Save As"/> - <button label="戻ã™" label_selected="戻ã™" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。 - </text> - <text name="title_loading"> - [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž - </text> - <text name="title_not_worn"> - [DESC]: 未装ç€ã€‚ - </text> - <text name="path"> - [PATH] ã«æ‰€åœ¨ - </text> - <text name="not worn instructions"> - æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã« 1 ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„シャツをç€ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - </text> - <text name="no modify instructions"> - ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•れã¦ã„ã¾ã›ã‚“。 - </text> - <text name="Item Action Label"> - シャツ: - </text> - </panel> - <panel label="パンツ" name="Pants"> - <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックã—ã¦é¸æŠž"/> - <color_swatch label="è‰²ï¼æ˜Žæš—" name="Color/Tint" tool_tip="クリックã—ã¦ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/> - <button label="å–り外ã™" label_selected="å–り外ã™" name="Take Off"/> - <button label="æ–°ã—ã„パンツを作æˆ" label_selected="æ–°ã—ã„パンツを作æˆ" name="Create New"/> - <button label="ä¿å˜" label_selected="ä¿å˜" name="Save"/> - <button label="別åã§ä¿å˜..." label_selected="別åã§ä¿å˜..." name="Save As"/> - <button label="戻ã™" label_selected="戻ã™" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。 - </text> - <text name="title_loading"> - [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž - </text> - <text name="title_not_worn"> - [DESC]: 未装ç€ã€‚ - </text> - <text name="path"> - [PATH] ã«æ‰€åœ¨ - </text> - <text name="not worn instructions"> - ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„パンツを履ãã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - </text> - <text name="no modify instructions"> - ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•れã¦ã„ã¾ã›ã‚“。 - </text> - <text name="Item Action Label"> - パンツ: - </text> - </panel> - <panel label="é´" name="Shoes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。 - </text> - <text name="title_loading"> - [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž - </text> - <text name="title_not_worn"> - [DESC]: 未装ç€ã€‚ - </text> - <text name="path"> - [PATH] ã«æ‰€åœ¨ - </text> - <text name="not worn instructions"> - ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„é´ã‚’å±¥ãã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - </text> - <button label="æ–°ã—ã„é´ã‚’作æˆ" label_selected="æ–°ã—ã„é´ã‚’作æˆ" name="Create New"/> - <text name="no modify instructions"> - ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•れã¦ã„ã¾ã›ã‚“。 - </text> - <text name="Item Action Label"> - é´ï¼š - </text> - <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックã—ã¦é¸æŠž"/> - <color_swatch label="è‰²ï¼æ˜Žæš—" name="Color/Tint" tool_tip="クリックã—ã¦ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/> - <button label="å–り外ã™" label_selected="å–り外ã™" name="Take Off"/> - <button label="ä¿å˜" label_selected="ä¿å˜" name="Save"/> - <button label="別åã§ä¿å˜..." label_selected="別åã§ä¿å˜..." name="Save As"/> - <button label="戻ã™" label_selected="戻ã™" name="Revert"/> - </panel> - <panel label="é´ä¸‹" name="Socks"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。 - </text> - <text name="title_loading"> - [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž - </text> - <text name="title_not_worn"> - [DESC]: 未装ç€ã€‚ - </text> - <text name="path"> - [PATH] ã«æ‰€åœ¨ - </text> - <text name="not worn instructions"> - ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„é´ä¸‹ã‚’å±¥ãã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - </text> - <button label="æ–°ã—ã„é´ä¸‹ã‚’作æˆ" label_selected="æ–°ã—ã„é´ä¸‹ã‚’作æˆ" name="Create New"/> - <text name="no modify instructions"> - ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•れã¦ã„ã¾ã›ã‚“。 - </text> - <text name="Item Action Label"> - é´ä¸‹ï¼š - </text> - <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックã—ã¦é¸æŠž"/> - <color_swatch label="è‰²ï¼æ˜Žæš—" name="Color/Tint" tool_tip="クリックã—ã¦ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/> - <button label="å–り外ã™" label_selected="å–り外ã™" name="Take Off"/> - <button label="ä¿å˜" label_selected="ä¿å˜" name="Save"/> - <button label="別åã§ä¿å˜..." label_selected="別åã§ä¿å˜..." name="Save As"/> - <button label="戻ã™" label_selected="戻ã™" name="Revert"/> - </panel> - <panel label="上ç€" name="Jacket"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。 - </text> - <text name="title_loading"> - [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž - </text> - <text name="title_not_worn"> - [DESC]: 未装ç€ã€‚ - </text> - <text name="path"> - [PATH] ã«æ‰€åœ¨ - </text> - <text name="not worn instructions"> - æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã« 1 ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„ジャケットをç€ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - </text> - <button label="æ–°ã—ã„上ç€ã‚’作æˆ" label_selected="æ–°ã—ã„上ç€ã‚’作æˆ" name="Create New"/> - <text name="no modify instructions"> - ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•れã¦ã„ã¾ã›ã‚“。 - </text> - <text name="Item Action Label"> - 上ç€ï¼š - </text> - <texture_picker label="上åŠèº«ã®ç”Ÿåœ°" name="Upper Fabric" tool_tip="写真をクリックã—ã¦é¸æŠž"/> - <texture_picker label="下層生地" name="Lower Fabric" tool_tip="写真をクリックã—ã¦é¸æŠž"/> - <color_swatch label="è‰²ï¼æ˜Žæš—" name="Color/Tint" tool_tip="クリックã—ã¦ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/> - <button label="å–り外ã™" label_selected="å–り外ã™" name="Take Off"/> - <button label="ä¿å˜" label_selected="ä¿å˜" name="Save"/> - <button label="別åã§ä¿å˜..." label_selected="別åã§ä¿å˜..." name="Save As"/> - <button label="戻ã™" label_selected="戻ã™" name="Revert"/> - </panel> - <panel label="手袋" name="Gloves"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。 - </text> - <text name="title_loading"> - [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž - </text> - <text name="title_not_worn"> - [DESC]: 未装ç€ã€‚ - </text> - <text name="path"> - [PATH] ã«æ‰€åœ¨ - </text> - <text name="not worn instructions"> - ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„æ‰‹è¢‹ã‚’ã¤ã‘ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - </text> - <button label="æ–°ã—ã„æ‰‹è¢‹ã‚’作æˆ" label_selected="æ–°ã—ã„æ‰‹è¢‹ã‚’作æˆ" name="Create New"/> - <text name="no modify instructions"> - ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•れã¦ã„ã¾ã›ã‚“。 - </text> - <text name="Item Action Label"> - 手袋: - </text> - <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックã—ã¦é¸æŠž"/> - <color_swatch label="è‰²ï¼æ˜Žæš—" name="Color/Tint" tool_tip="クリックã—ã¦ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/> - <button label="å–り外ã™" label_selected="å–り外ã™" name="Take Off"/> - <button label="ä¿å˜" label_selected="ä¿å˜" name="Save"/> - <button label="別åã§ä¿å˜..." label_selected="別åã§ä¿å˜..." name="Save As"/> - <button label="戻ã™" label_selected="戻ã™" name="Revert"/> - </panel> - <panel label="下ç€ã‚·ãƒ£ãƒ„" name="Undershirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。 - </text> - <text name="title_loading"> - [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž - </text> - <text name="title_not_worn"> - [DESC]: 未装ç€ã€‚ - </text> - <text name="path"> - [PATH] ã«æ‰€åœ¨ - </text> - <text name="not worn instructions"> - æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã«1ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„下ç€ï¼ˆä¸Šï¼‰ã‚’ç€ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - </text> - <button label="æ–°ã—ã„下ç€ã‚·ãƒ£ãƒ„を作æˆ" label_selected="æ–°ã—ã„下ç€ã‚·ãƒ£ãƒ„を作æˆ" name="Create New"/> - <text name="no modify instructions"> - ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•れã¦ã„ã¾ã›ã‚“。 - </text> - <text name="Item Action Label"> - 下ç€ã‚·ãƒ£ãƒ„: - </text> - <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックã—ã¦é¸æŠž"/> - <color_swatch label="è‰²ï¼æ˜Žæš—" name="Color/Tint" tool_tip="クリックã—ã¦ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/> - <button label="å–り外ã™" label_selected="å–り外ã™" name="Take Off"/> - <button label="ä¿å˜" label_selected="ä¿å˜" name="Save"/> - <button label="別åã§ä¿å˜..." label_selected="別åã§ä¿å˜..." name="Save As"/> - <button label="戻ã™" label_selected="戻ã™" name="Revert"/> - </panel> - <panel label="下ç€ãƒ‘ンツ" name="Underpants"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。 - </text> - <text name="title_loading"> - [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž - </text> - <text name="title_not_worn"> - [DESC]: 未装ç€ã€‚ - </text> - <text name="path"> - [PATH] ã«æ‰€åœ¨ - </text> - <text name="not worn instructions"> - ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„下ç€ï¼ˆä¸‹ï¼‰ã‚’å±¥ãã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - </text> - <button label="æ–°ã—ã„パンツを作æˆ" label_selected="æ–°ã—ã„パンツを作æˆ" name="Create New"/> - <text name="no modify instructions"> - ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•れã¦ã„ã¾ã›ã‚“。 - </text> - <text name="Item Action Label"> - 下ç€ãƒ‘ンツ: - </text> - <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックã—ã¦é¸æŠž"/> - <color_swatch label="è‰²ï¼æ˜Žæš—" name="Color/Tint" tool_tip="クリックã—ã¦ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/> - <button label="å–り外ã™" label_selected="å–り外ã™" name="Take Off"/> - <button label="ä¿å˜" label_selected="ä¿å˜" name="Save"/> - <button label="別åã§ä¿å˜..." label_selected="別åã§ä¿å˜..." name="Save As"/> - <button label="戻ã™" label_selected="戻ã™" name="Revert"/> - </panel> - <panel label="スカート" name="Skirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。 - </text> - <text name="title_loading"> - [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž - </text> - <text name="title_not_worn"> - [DESC]: 未装ç€ã€‚ - </text> - <text name="path"> - [PATH] ã«æ‰€åœ¨ - </text> - <text name="not worn instructions"> - æŒã¡ç‰©ã‹ã‚‰ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã« 1 ã¤ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„スカートを履ãã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - </text> - <button label="スカートを作æˆ" label_selected="スカートを作æˆ" name="Create New"/> - <text name="no modify instructions"> - ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•れã¦ã„ã¾ã›ã‚“。 - </text> - <text name="Item Action Label"> - スカート: - </text> - <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックã—ã¦é¸æŠž"/> - <color_swatch label="è‰²ï¼æ˜Žæš—" name="Color/Tint" tool_tip="クリックã—ã¦ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/> - <button label="å–り外ã™" label_selected="å–り外ã™" name="Take Off"/> - <button label="ä¿å˜" label_selected="ä¿å˜" name="Save"/> - <button label="別åã§ä¿å˜..." label_selected="別åã§ä¿å˜..." name="Save As"/> - <button label="戻ã™" label_selected="戻ã™" name="Revert"/> - </panel> - <panel label="タトゥ" name="Tattoo"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: ä¿®æ£ä¸å¯ - </text> - <text name="title_loading"> - [DESC]: ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°... - </text> - <text name="title_not_worn"> - [DESC]: 未ç€ç”¨ - </text> - <text name="path"> - å‚ç…§ [PATH] - </text> - <text name="not worn instructions"> - ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„タトゥをã¤ã‘ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - </text> - <button label="æ–°ã—ã„タトゥを作æˆ" label_selected="æ–°ã—ã„タトゥを作æˆ" name="Create New"/> - <text name="no modify instructions"> - ã“ã®ç€ç”¨ç‰©ã‚’ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚りã¾ã›ã‚“。 - </text> - <text name="Item Action Label"> - タトゥ: - </text> - <texture_picker label="é 部ã®ã‚¿ãƒˆã‚¥ãƒ¼" name="Head Tattoo" tool_tip="クリックã—ã¦å†™çœŸã‚’é¸æŠžã—ã¾ã™"/> - <texture_picker label="上部ã®ã‚¿ãƒˆã‚¥ãƒ¼" name="Upper Tattoo" tool_tip="クリックã—ã¦å†™çœŸã‚’é¸æŠžã—ã¾ã™"/> - <texture_picker label="下部ã®ã‚¿ãƒˆã‚¥ãƒ¼" name="Lower Tattoo" tool_tip="クリックã—ã¦å†™çœŸã‚’é¸æŠžã—ã¾ã™"/> - <button label="å–り外ã™" label_selected="å–り外ã™" name="Take Off"/> - <button label="ä¿å˜" label_selected="ä¿å˜" name="Save"/> - <button label="別åã§ä¿å˜..." label_selected="別åã§ä¿å˜..." name="Save As"/> - <button label="å…ƒã«æˆ»ã™" label_selected="å…ƒã«æˆ»ã™" name="Revert"/> - </panel> - <panel label="アルファ" name="Alpha"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: ä¿®æ£ä¸å¯ - </text> - <text name="title_loading"> - [DESC]: ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°... - </text> - <text name="title_not_worn"> - [DESC]: 未ç€ç”¨ - </text> - <text name="path"> - å‚ç…§ [PATH] - </text> - <text name="not worn instructions"> - ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€æ–°ã—ã„アルファマスクをã¤ã‘ã¾ã™ã€‚ 代ã‚りã«ã€ã¯ã˜ã‚ã‹ã‚‰æ–°ã—ã作æˆã—ã¦ç€ç”¨ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - </text> - <button label="æ–°ã—ã„アルファを作æˆ" label_selected="æ–°ã—ã„アルファを作æˆ" name="Create New"/> - <text name="no modify instructions"> - ã“ã®ç€ç”¨ç‰©ã‚’ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚りã¾ã›ã‚“。 - </text> - <text name="Item Action Label"> - アルファ: - </text> - <texture_picker label="アルファ(下)" name="Lower Alpha" tool_tip="クリックã—ã¦å†™çœŸã‚’é¸æŠžã—ã¾ã™"/> - <texture_picker label="アルファ(上)" name="Upper Alpha" tool_tip="クリックã—ã¦å†™çœŸã‚’é¸æŠžã—ã¾ã™"/> - <texture_picker label="é 部ã®ã‚¢ãƒ«ãƒ•ã‚¡" name="Head Alpha" tool_tip="クリックã—ã¦å†™çœŸã‚’é¸æŠžã—ã¾ã™"/> - <texture_picker label="ç›®ã®ã‚¢ãƒ«ãƒ•ã‚¡" name="Eye Alpha" tool_tip="クリックã—ã¦å†™çœŸã‚’é¸æŠžã—ã¾ã™"/> - <texture_picker label="髪ã®ã‚¢ãƒ«ãƒ•ã‚¡" name="Hair Alpha" tool_tip="クリックã—ã¦å†™çœŸã‚’é¸æŠžã—ã¾ã™"/> - <button label="å–り外ã™" label_selected="å–り外ã™" name="Take Off"/> - <button label="ä¿å˜" label_selected="ä¿å˜" name="Save"/> - <button label="別åã§ä¿å˜..." label_selected="別åã§ä¿å˜..." name="Save As"/> - <button label="å…ƒã«æˆ»ã™" label_selected="å…ƒã«æˆ»ã™" name="Revert"/> - </panel> - </tab_container> - <button label="ã‚¹ã‚¯ãƒªãƒ—ãƒˆæƒ…å ±" label_selected="ã‚¹ã‚¯ãƒªãƒ—ãƒˆæƒ…å ±" name="script_info" tool_tip="ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã«ä»˜ã„ã¦ã„るスクリプトを表示ã—ã¾ã™"/> - <button label="アウトフィット作æˆ" label_selected="アウトフィット作æˆ" name="make_outfit_btn"/> - <button label="ã‚ャンセル" label_selected="ã‚ャンセル" name="Cancel"/> - <button label="OK" label_selected="OK" name="Ok"/> -</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_import_collada.xml b/indra/newview/skins/default/xui/ja/floater_import_collada.xml new file mode 100644 index 0000000000000000000000000000000000000000..65edafb1697520aab60d2ece8d46a54fcb6caf48 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_import_collada.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Import Collada" title="風景ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ"> + <text name="mesh count"> + メッシュ: [COUNT] + </text> + <text name="texture count"> + テクスãƒãƒ£ï¼š [COUNT] + </text> + <text name="status"> + ステータス: [STATUS] + </text> + <button label="å–り消ã—" name="cancel"/> + <button label="OK" name="ok"/> + <string name="status_idle"> + 待機状態 + </string> + <string name="status_uploading"> + [NAME]をアップãƒãƒ¼ãƒ‰ä¸ + </string> + <string name="status_creating"> + オブジェクト[NAME]を作æˆä¸ + </string> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml index 47a63e5e2025478750da7b4c2e66b8f7c774184e..47d57da0310451c1888e0e7a9762d2263f09d522 100644 --- a/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml @@ -5,6 +5,7 @@ <check_box label="æœ" name="check_clothing"/> <check_box label="ジェスãƒãƒ£ãƒ¼" name="check_gesture"/> <check_box label="ランドマーク" name="check_landmark"/> + <check_box label="メッシュ" name="check_mesh"/> <check_box label="ノートカード" name="check_notecard"/> <check_box label="オブジェクト" name="check_object"/> <check_box label="スクリプト" name="check_script"/> diff --git a/indra/newview/skins/default/xui/ja/floater_model_preview.xml b/indra/newview/skins/default/xui/ja/floater_model_preview.xml new file mode 100644 index 0000000000000000000000000000000000000000..5eb141a28cf994e219e1b7c583f2bb36e3087d98 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_model_preview.xml @@ -0,0 +1,231 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Model Preview" title="モデルをアップãƒãƒ¼ãƒ‰"> + <string name="status_idle"> + 待機状態 + </string> + <string name="status_reading_file"> + ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°... + </string> + <string name="status_generating_meshes"> + メッシュを作æˆä¸ + </string> + <string name="status_vertex_number_overflow"> + ã‚¨ãƒ©ãƒ¼ï¼šé ‚ç‚¹ã®æ•°ãŒ65534ã‚’è¶…éŽã—ãŸã®ã§ä¸æ¢ã•れã¾ã—ãŸã€‚ + </string> + <string name="high"> + 高 + </string> + <string name="medium"> + ä¸ + </string> + <string name="low"> + 低 + </string> + <string name="lowest"> + 最低 + </string> + <string name="mesh_status_good"> + ç™ºé€ + </string> + <string name="mesh_status_na"> + 該当ãªã— + </string> + <string name="mesh_status_none"> + ãªã— + </string> + <string name="mesh_status_submesh_mismatch"> + テクスãƒãƒ£ç·¨é›†å¯èƒ½ãªé¢ã®æ•°ã¯æç”»è©³ç´°åº¦ã«å¿œã˜ã¦ç•°ãªã‚Šã¾ã™ã€‚ + </string> + <string name="mesh_status_mesh_mismatch"> + ãƒ¡ãƒƒã‚·ãƒ¥ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã®æ•°ã¯æç”»è©³ç´°åº¦ã«å¿œã˜ã¦ç•°ãªã‚Šã¾ã™ã€‚ + </string> + <string name="mesh_status_too_many_vertices"> + æç”»è©³ç´°åº¦ã«å¯¾ã—ã¦é ‚ç‚¹ã®æ•°ãŒå¤šã™ãŽã¾ã™ã€‚ + </string> + <string name="mesh_status_missing_lod"> + å¿…è¦ãªæç”»è©³ç´°åº¦ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 + </string> + <string name="layer_all"> + 全㦠+ </string> + <string name="decomposing"> + 分æžä¸ + </string> + <string name="simplifying"> + å˜ç´”化 + </string> + <text name="name_label"> + åå‰ï¼š + </text> + <text name="lod_label"> + プレビュー: + </text> + <combo_box name="preview_lod_combo" tool_tip="プレビュー表示ã®LODè¨å®š"> + <combo_item name="high"> + æç”»è©³ç´°åº¦ï¼šé«˜ + </combo_item> + <combo_item name="medium"> + æç”»è©³ç´°åº¦ï¼šä¸ + </combo_item> + <combo_item name="low"> + æç”»è©³ç´°åº¦ï¼šä½Ž + </combo_item> + <combo_item name="lowest"> + æç”»è©³ç´°åº¦ï¼šæœ€ä½Ž + </combo_item> + </combo_box> + <panel> + <text name="streaming cost"> + リソース料金: [COST] + </text> + <text name="physics cost"> + 物ç†åŠ¹æžœæ–™é‡‘ï¼š [COST] + </text> + <text name="upload fee"> + アップãƒãƒ¼ãƒ‰æ‰‹æ•°æ–™ï¼šè©²å½“ãªã— + </text> + </panel> + <text name="status"> + [STATUS] + </text> + <button label="デフォルト" name="reset_btn" tool_tip="デフォルトã«ãƒªã‚»ãƒƒãƒˆ"/> + <button label="アップãƒãƒ¼ãƒ‰" name="ok_btn" tool_tip="シミュレーターã«ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰"/> + <button label="å–り消ã—" name="cancel_btn"/> + <tab_container name="import_tab"> + <panel label="æç”»è©³ç´°åº¦" name="lod_panel"> + <text name="lod_table_header"> + æç”»è©³ç´°åº¦ã‚’é¸æŠžï¼š + </text> + <text name="high_label" value="高"/> + <text name="high_triangles" value="0"/> + <text name="high_vertices" value="0"/> + <text name="medium_label" value="ä¸"/> + <text name="medium_triangles" value="0"/> + <text name="medium_vertices" value="0"/> + <text name="low_label" value="低"/> + <text name="low_triangles" value="0"/> + <text name="low_vertices" value="0"/> + <text name="lowest_label" value="最低"/> + <text name="lowest_triangles" value="0"/> + <text name="lowest_vertices" value="0"/> + <text name="lod_table_footer"> + æç”»è©³ç´°åº¦ï¼š [DETAIL] + </text> + <radio_group name="lod_file_or_limit" value="lod_from_file"> + <radio_item label="ファイルã‹ã‚‰ãƒãƒ¼ãƒ‰" name="lod_from_file"/> + <radio_item label="自動作æˆ" name="lod_auto_generate"/> + <radio_item label="ãªã—" name="lod_none"/> + </radio_group> + <button label="å‚ç…§" name="lod_browse"/> + <combo_box name="lod_mode"> + <combo_item name="triangle_limit"> + 三角形ã®é™åº¦æ•° + </combo_item> + <combo_item name="error_threshold"> + エラーã—ãã„値 + </combo_item> + </combo_box> + <text name="build_operator_text"> + 制作演算å: + </text> + <text name="queue_mode_text"> + ã‚ューモード: + </text> + <combo_box name="build_operator"> + <combo_item name="edge_collapse"> + 稜ã®å®Œå…¨è¤‡åˆ + </combo_item> + <combo_item name="half_edge_collapse"> + 稜ã®åŠè¤‡åˆ + </combo_item> + </combo_box> + <combo_box name="queue_mode"> + <combo_item name="greedy"> + グリーディ + </combo_item> + <combo_item name="lazy"> + レイジー + </combo_item> + <combo_item name="independent"> + インディペンデント + </combo_item> + </combo_box> + <text name="border_mode_text"> + 境界線モード: + </text> + <text name="share_tolderance_text"> + 共有誤差: + </text> + <combo_box name="border_mode"> + <combo_item name="border_unlock"> + ãƒãƒƒã‚¯è§£é™¤ + </combo_item> + <combo_item name="border_lock"> + ãƒãƒƒã‚¯ + </combo_item> + </combo_box> + <text name="crease_label"> + 折れ角度: + </text> + <spinner name="crease_angle" value="75"/> + </panel> + <panel label="物ç†åŠ¹æžœ" name="physics_panel"> + <panel name="physics geometry"> + <radio_group name="physics_load_radio" value="physics_load_from_file"> + <radio_item label="ファイル:" name="physics_load_from_file"/> + <radio_item label="æ¬¡ã®æç”»è©³ç´°åº¦ã‚’ä½¿ç”¨ï¼š" name="physics_use_lod"/> + </radio_group> + <combo_box name="physics_lod_combo" tool_tip="実åƒã«é©ç”¨ã™ã‚‹LOD"> + <combo_item name="physics_lowest"> + 最低 + </combo_item> + <combo_item name="physics_low"> + 低 + </combo_item> + <combo_item name="physics_medium"> + ä¸ + </combo_item> + <combo_item name="physics_high"> + 高 + </combo_item> + </combo_box> + <button label="å‚ç…§" name="physics_browse"/> + </panel> + <panel name="physics analysis"> + <slider label="滑らã‹ã•:" name="Smooth"/> + <check_box label="ç©´ã‚’é–‰ã˜ã‚‹ï¼ˆã‚¹ãƒãƒ¼ï¼‰" name="Close Holes (Slow)"/> + <button label="分æž" name="Decompose"/> + <button label="å–り消ã—" name="decompose_cancel"/> + </panel> + <panel name="physics simplification"> + <slider label="パス:" name="Combine Quality"/> + <slider label="詳細度:" name="Detail Scale"/> + <slider label="ç¶æŒçŽ‡ï¼š" name="Retain%"/> + <button label="å˜ç´”化" name="Simplify"/> + <button label="å–り消ã—" name="simplify_cancel"/> + </panel> + <panel name="physics info"> + <slider label="プレビュースプレッド:" name="physics_explode"/> + <text name="physics_triangles"> + 三角形: [TRIANGLES] + </text> + <text name="physics_points"> + é ‚ç‚¹ï¼š [POINTS] + </text> + <text name="physics_hulls"> + å¤–æ®»æ§‹é€ ï¼š [HULLS] + </text> + </panel> + </panel> + <panel label="修飾å" name="modifiers_panel"> + <spinner name="import_scale" value="1.0"/> + <text name="import_dimensions"> + [X] x [Y] x [Z] m + </text> + <check_box label="テクスãƒãƒ£" name="upload_textures"/> + <check_box label="スã‚ンã®é‡ã•" name="upload_skin"/> + <check_box label="ジョイントãƒã‚¸ã‚·ãƒ§ãƒ³" name="upload_joints"/> + <spinner name="pelvis_offset" value="0.0"/> + </panel> + </tab_container> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_model_wizard.xml b/indra/newview/skins/default/xui/ja/floater_model_wizard.xml new file mode 100644 index 0000000000000000000000000000000000000000..a785172f20c064fd0e52bc2e03351cee652d4c1b --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_model_wizard.xml @@ -0,0 +1,241 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Model Wizard" title="モデルウィザードをアップãƒãƒ¼ãƒ‰"> + <button label="5. アップãƒãƒ¼ãƒ‰" name="upload_btn"/> + <button label="4. 確èª" name="review_btn"/> + <button label="3. 物ç†åŠ¹æžœ" name="physics2_btn"/> + <button label="3. 物ç†åŠ¹æžœ" name="physics_btn"/> + <button label="2. 最é©åŒ–" name="optimize_btn"/> + <button label="1. ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž" name="choose_file_btn"/> + <panel name="choose_file_panel"> + <panel name="header_panel"> + <text name="header_text"> + モデルをアップãƒãƒ¼ãƒ‰ + </text> + </panel> + <text name="description"> + ã“ã®ã‚¦ã‚£ã‚¶ãƒ¼ãƒ‰ã‚’使ã†ã¨ã€ãƒ¡ãƒƒã‚·ãƒ¥ãƒ¢ãƒ‡ãƒ«ã‚’ç°¡å˜ã«Second Lifeã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã§ãã¾ã™ã€‚ã¾ãšã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ãƒ¢ãƒ‡ãƒ«ã‚’å«ã‚€ãƒ•ァイルを指定ã—ã¾ã™ã€‚Second Life 㯠COLLADA (.dae) ファイルをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ + </text> + <panel name="content"> + <text name="Cache location"> + ファイルå: + </text> + <button label="å‚ç…§" label_selected="å‚ç…§" name="browse"/> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + </panel> + <panel name="optimize_panel"> + <panel name="header_panel"> + <text name="header_text"> + 最é©åŒ– + </text> + </panel> + <text name="description"> + ウィザードãŒãƒ¢ãƒ‡ãƒ«ã‚’最é©åŒ–ã—ã€ãƒ‘フォーマンスを改善ã—ã¾ã—ãŸã€‚ä»¥ä¸‹ã§æœ€é©åŒ–プãƒã‚»ã‚¹ã®çµæžœã‚’変更ã™ã‚‹ã‹ã€ã€Œæ¬¡ã¸ã€ã‚’クリックã—ã¦ç¶šã‘ã¾ã™ã€‚ + </text> + <panel name="content"> + <text name="high_detail_text"> + æ¬¡ã®æç”»è©³ç´°åº¦ã‚’ä½œæˆï¼šé«˜ + </text> + <text name="medium_detail_text"> + æ¬¡ã®æç”»è©³ç´°åº¦ã‚’ä½œæˆï¼šä¸ + </text> + <text name="low_detail_text"> + æ¬¡ã®æç”»è©³ç´°åº¦ã‚’ä½œæˆï¼šä½Ž + </text> + <text name="lowest_detail_text"> + æ¬¡ã®æç”»è©³ç´°åº¦ã‚’ä½œæˆï¼šæœ€ä½Ž + </text> + </panel> + <panel name="content2"> + <text name="lod_label"> + モデルã®ãƒ—レビュー: + </text> + <combo_box name="preview_lod_combo2" tool_tip="プレビュー表示ã®LODè¨å®š"> + <combo_item name="high"> + 高 + </combo_item> + <combo_item name="medium"> + ä¸ + </combo_item> + <combo_item name="low"> + 低 + </combo_item> + <combo_item name="lowest"> + 最低 + </combo_item> + </combo_box> + <text name="streaming cost"> + リソース料金: [COST] + </text> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + </panel> + <panel name="physics_panel"> + <panel name="header_panel"> + <text name="header_text"> + 物ç†åŠ¹æžœ + </text> + </panel> + <text name="description"> + ウィザードãŒä½œæˆã™ã‚‹å®Ÿåƒã«ã‚ˆã£ã¦ã€ã‚ªãƒ–ジェクトãŒä»–ã®ã‚ªãƒ–ジェクトやアãƒã‚¿ãƒ¼ã¨ã©ã®ã‚ˆã†ã«ã‚¤ãƒ³ã‚¿ãƒ©ã‚¯ã‚·ãƒ§ãƒ³ã™ã‚‹ã‹ãŒæ±ºã¾ã‚Šã¾ã™ã€‚オブジェクトã®ç”¨é€”ã«æœ€é©ãªæç”»è©³ç´°åº¦ã«ã‚¹ãƒ©ã‚¤ãƒ€ãƒ¼ã‚’è¨å®šã—ã¦ãã ã•ã„: + </text> + <panel name="content"> + <text name="streaming cost"> + リソース料金: [COST] + </text> + </panel> + </panel> + <panel name="physics2_panel"> + <panel name="header_panel"> + <text name="header_text"> + 物ç†åŠ¹æžœ + </text> + </panel> + <text name="description"> + 下ã®å®Ÿåƒã‚’プレビューã—ã€ã€Œæ¬¡ã¸ã€ã‚’クリックã—ã¦ç¶šã‘ã¾ã™ã€‚実åƒã‚’ä¿®æ£ã™ã‚‹ã«ã¯ã€Œæˆ»ã‚‹ã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã¾ã™ã€‚ + </text> + <panel name="content"> + <text name="lod_label"> + モデルã®ãƒ—レビュー: + </text> + <combo_box name="preview_lod_combo3" tool_tip="プレビュー表示ã®LODè¨å®š"> + <combo_item name="high"> + 高 + </combo_item> + <combo_item name="medium"> + ä¸ + </combo_item> + <combo_item name="low"> + 低 + </combo_item> + <combo_item name="lowest"> + 最低 + </combo_item> + </combo_box> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + <text name="streaming cost"> + リソース料金: [COST] + </text> + </panel> + </panel> + <panel name="review_panel"> + <panel name="header_panel"> + <text name="header_text"> + ç¢ºèª + </text> + </panel> + <text name="description"> + 以下ã®è©³ç´°ã‚’確èªã—ã¦ã‹ã‚‰ã€ã€Œã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã€ã‚’クリックã™ã‚‹ã¨ãƒ¢ãƒ‡ãƒ«ãŒã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã•れã¾ã™ã€‚「アップãƒãƒ¼ãƒ‰ã€ã‚’クリックã—ãŸéš›ã«ã€æ–™é‡‘ãŒã‚ãªãŸã® L$ 残高ã‹ã‚‰å·®ã—引ã‹ã‚Œã¾ã™ã€‚ + </text> + <panel name="content"> + <text name="lod_label"> + モデルã®ãƒ—レビュー: + </text> + <combo_box name="preview_lod_combo" tool_tip="プレビュー表示ã®LODè¨å®š"> + <combo_item name="high"> + 高 + </combo_item> + <combo_item name="medium"> + ä¸ + </combo_item> + <combo_item name="low"> + 低 + </combo_item> + <combo_item name="lowest"> + 最低 + </combo_item> + </combo_box> + <text name="dimensions"> + X: Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + <text name="streaming cost"> + リソース料金: [COST] + </text> + <text name="physics cost"> + 物ç†åŠ¹æžœæ–™é‡‘ï¼š [COST] + </text> + </panel> + <panel name="upload_panel"> + <panel name="header_panel"> + <text name="header_text"> + アップãƒãƒ¼ãƒ‰å®Œäº†ï¼ + </text> + </panel> + <text name="description"> + ãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™ï¼ãƒ¢ãƒ‡ãƒ«ãŒã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã•れã¾ã—ãŸã€‚アップãƒãƒ¼ãƒ‰ã•れãŸãƒ¢ãƒ‡ãƒ«ã¯ã€æŒã¡ç‰©ã®ã€Œã‚ªãƒ–ジェクトã€ãƒ•ォルダã«ã‚りã¾ã™ã€‚ + </text> + </panel> + <button label="<< 戻る" name="back"/> + <button label="次ã¸>>" name="next"/> + <button label="アップãƒãƒ¼ãƒ‰" name="upload" tool_tip="シミュレーターã«ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰"/> + <button label="å–り消ã—" name="cancel"/> + <button label="é–‰ã˜ã‚‹" name="close"/> + <spinner name="import_scale" value="1.0"/> + <string name="status_idle"> + 待機状態 + </string> + <string name="status_reading_file"> + ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°... + </string> + <string name="status_generating_meshes"> + メッシュを作æˆä¸ + </string> + <string name="status_vertex_number_overflow"> + ã‚¨ãƒ©ãƒ¼ï¼šé ‚ç‚¹ã®æ•°ãŒ65534ã‚’è¶…éŽã—ãŸã®ã§ä¸æ¢ã•れã¾ã—ãŸã€‚ + </string> + <string name="high"> + 高 + </string> + <string name="medium"> + ä¸ + </string> + <string name="low"> + 低 + </string> + <string name="lowest"> + 最低 + </string> + <string name="mesh_status_good"> + ç™ºé€ + </string> + <string name="mesh_status_na"> + 該当ãªã— + </string> + <string name="mesh_status_none"> + ãªã— + </string> + <string name="mesh_status_submesh_mismatch"> + テクスãƒãƒ£ç·¨é›†å¯èƒ½ãªé¢ã®æ•°ã¯æç”»è©³ç´°åº¦ã«å¿œã˜ã¦ç•°ãªã‚Šã¾ã™ã€‚ + </string> + <string name="mesh_status_mesh_mismatch"> + ãƒ¡ãƒƒã‚·ãƒ¥ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã®æ•°ã¯æç”»è©³ç´°åº¦ã«å¿œã˜ã¦ç•°ãªã‚Šã¾ã™ã€‚ + </string> + <string name="mesh_status_too_many_vertices"> + æç”»è©³ç´°åº¦ã«å¯¾ã—ã¦é ‚ç‚¹ã®æ•°ãŒå¤šã™ãŽã¾ã™ã€‚ + </string> + <string name="mesh_status_missing_lod"> + å¿…è¦ãªæç”»è©³ç´°åº¦ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 + </string> + <string name="layer_all"> + 全㦠+ </string> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_price_for_listing.xml b/indra/newview/skins/default/xui/ja/floater_price_for_listing.xml new file mode 100644 index 0000000000000000000000000000000000000000..10a46247a70f7e74dcec86d954a7022a73512edd --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_price_for_listing.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="price_for_listing" title="ã‚¯ãƒ©ã‚·ãƒ•ã‚¡ã‚¤ãƒ‰åºƒå‘Šã®æŽ²è¼‰"> + <text name="explanation_text"> + ã‚ãªãŸã®ã‚¯ãƒ©ã‚·ãƒ•ァイド広告ã¯ã€å…¬é–‹ã•ã‚ŒãŸæ—¥ã‹ã‚‰1週間有効ã§ã™ã€‚ + +クラシファイドリストã®ã‚ãªãŸã®åºƒå‘Šã®ä½ç½®ã¯ã€åºƒå‘Šè²»ã‚’ã„ãら支払ã†ã‹ã§æ±ºã¾ã‚Šã¾ã™ã€‚ + +最高金é¡ã‚’支払ã£ãŸåºƒå‘ŠãŒãƒªã‚¹ãƒˆã®ãƒˆãƒƒãƒ—ã«è¼‰ã‚Šã€æ¤œç´¢ã§ä¸Šä½ã«è¡¨ç¤ºã•れã¾ã™ã€‚ + </text> + <text name="price_text"> + 広告費: + </text> + <text name="price_symbol"> + L$ + </text> + <button label="OK" name="set_price_btn"/> + <button label="å–り消ã—" name="cancel_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_sell_land.xml b/indra/newview/skins/default/xui/ja/floater_sell_land.xml index 1e884af5f2d8644132329b9eb30239fac083a9ca..aa368eef113fd4f95cdf6137a6d0a210eb78630f 100644 --- a/indra/newview/skins/default/xui/ja/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/ja/floater_sell_land.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater height="496" min_height="496" name="sell land" title="土地ã®è²©å£²"> +<floater name="sell land" title="土地ã®è²©å£²"> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> <text name="info_parcel_label"> @@ -14,7 +14,7 @@ <text name="info_size"> [AREA] 平方メートル </text> - <text bottom_delta="-57" name="info_action"> + <text name="info_action"> ã“ã®åŒºç”»ã‚’販売: </text> <text name="price_label"> @@ -29,13 +29,13 @@ <line_editor name="price"> 0 </line_editor> - <text left_delta="106" name="price_per_m" width="230"> + <text name="price_per_m"> (1平方メートルã‚ãŸã‚Š L$[PER_METER]) </text> <text name="sell_to_label"> 2. 特定ã®äººã«è²©å£²ï¼š </text> - <text name="sell_to_text" right="-6"> + <text name="sell_to_text"> è²©å£²å…ˆã®æŒ‡å®šãªã—ã‹ã€ç‰¹å®šã®äººã«è²©å£²ã™ã‚‹ã‹ã‚’é¸æŠžã—ã¦ãã ã•ã„。 </text> <combo_box name="sell_to"> @@ -50,15 +50,15 @@ <text name="sell_objects_text"> 区画上ã«ã‚ã‚‹ã€åœŸåœ°æ‰€æœ‰è€…ã®è²æ¸¡å¯èƒ½ãªã‚ªãƒ–ジェクトã¯ã€æ‰€æœ‰æ¨©ãŒå¤‰æ›´ã•れã¾ã™ã€‚ </text> - <radio_group bottom_delta="-76" height="72" name="sell_objects"> + <radio_group name="sell_objects"> <radio_item label="ã„ã„ãˆã€ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®æ‰€æœ‰æ¨©ã‚’ä¿æŒã—ã¾ã™" name="no"/> - <radio_item bottom="-56" label="ã¯ã„ã€ã‚ªãƒ–ジェクトã¨åœŸåœ°ã‚’一緒ã«è²©å£²ã—ã¾ã™" name="yes"/> + <radio_item label="ã¯ã„ã€ã‚ªãƒ–ジェクトã¨åœŸåœ°ã‚’一緒ã«è²©å£²ã—ã¾ã™" name="yes"/> </radio_group> - <button label="オブジェクトを表示" name="show_objects" width="138"/> + <button label="オブジェクトを表示" name="show_objects"/> <text name="nag_message_label"> 注æ„: è¿”å“・交æ›ã¯ã§ãã¾ã›ã‚“。 </text> - <button bottom="-489" label="土地を販売" name="sell_btn"/> + <button label="土地を販売" name="sell_btn"/> <button label="ã‚ャンセル" name="cancel_btn"/> </panel> </scroll_container> diff --git a/indra/newview/skins/default/xui/ja/floater_sound_devices.xml b/indra/newview/skins/default/xui/ja/floater_sound_devices.xml new file mode 100644 index 0000000000000000000000000000000000000000..28d2388bed5bea42880bf1d6c489905880295a91 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_sound_devices.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_sound_devices" title="サウンドデãƒã‚¤ã‚¹"> + <text name="voice_label"> + ボイスãƒãƒ£ãƒƒãƒˆ + </text> + <check_box label="有効" name="enable_voice"/> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml index 211d1c3714f6f0955f4712748cdceb574e73f3b4..b29f744a68078060cbf044aa0ce8633cb35b3f92 100644 --- a/indra/newview/skins/default/xui/ja/floater_tools.xml +++ b/indra/newview/skins/default/xui/ja/floater_tools.xml @@ -69,7 +69,7 @@ <text name="RenderingCost" tool_tip="ã“ã®ã‚ªãƒ–ジェクトã«ã‹ã‹ã‚‹ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã‚³ã‚¹ãƒˆã‚’表示"> þ: [COUNT] </text> - <check_box label="" left="116" name="checkbox uniform"/> + <check_box label="" name="checkbox uniform"/> <text label="両å´ã‚’å»¶ã°ã™" name="checkbox uniform label"> 両å´ã‚’å»¶ã°ã™ </text> @@ -125,6 +125,18 @@ <text name="prim_count"> プリム: [COUNT] </text> + <text name="linked_set_count"> + リンクセット:[COUNT] + </text> + <text name="linked_set_cost" tool_tip="[prims] / [physics complexity] ã¨ã—ã¦ç¾åœ¨é¸æŠžã•れã¦ã„るリンクセットã®ã‚³ã‚¹ãƒˆ"> + 料金: [COST] / [PHYSICS] + </text> + <text name="object_count"> + オブジェクト: [COUNT] + </text> + <text name="object_cost" tool_tip="[prims] / [physics complexity] ã¨ã—ã¦ç¾åœ¨é¸æŠžã•れã¦ã„るオブジェクトã®ã‚³ã‚¹ãƒˆ"> + 料金: [COST] / [PHYSICS] + </text> <tab_container name="Object Info Tabs" tab_max_width="150" tab_min_width="30"> <panel label="一般" name="General"> <panel.string name="text deed continued"> @@ -275,15 +287,6 @@ <combo_box.item label="リング" name="Ring"/> <combo_box.item label="スカルプト" name="Sculpted"/> </combo_box> - <combo_box name="material"> - <combo_box.item label="石æ" name="Stone"/> - <combo_box.item label="金属" name="Metal"/> - <combo_box.item label="ガラス" name="Glass"/> - <combo_box.item label="木æ" name="Wood"/> - <combo_box.item label="肌" name="Flesh"/> - <combo_box.item label="プラスãƒãƒƒã‚¯" name="Plastic"/> - <combo_box.item label="ゴム" name="Rubber"/> - </combo_box> <text name="text cut"> パスカット(始点ã¨çµ‚点) </text> @@ -356,9 +359,19 @@ <combo_box.item label="トーラス" name="Torus"/> <combo_box.item label="å¹³é¢" name="Plane"/> <combo_box.item label="シリンダー" name="Cylinder"/> + <combo_box.item label="メッシュ" name="Mesh"/> </combo_box> </panel> <panel label="特徴" name="Features"> + <panel.string name="None"> + ãªã— + </panel.string> + <panel.string name="Prim"> + プリム+ </panel.string> + <panel.string name="Convex Hull"> + 凸状ã®å¤–æ®»æ§‹é€ + </panel.string> <text name="select_single"> プリムを 1 ã¤ã ã‘é¸æŠžã—ã¦ç·¨é›†ã—ã¦ãã ã•ã„ </text> @@ -383,6 +396,23 @@ <spinner label="焦点" name="Light Focus"/> <spinner label="å¼±ã¾ã‚‹" label_width="72" name="Light Falloff" width="135"/> <spinner label="環境" name="Light Ambiance"/> + <text name="label physicsshapetype"> + 実åƒã®ç¨®é¡žï¼š + </text> + <combo_box name="Physics Shape Type Combo Ctrl" tool_tip="実åƒã®ç¨®é¡žã‚’é¸æŠž"/> + <combo_box name="material"> + <combo_box.item label="石" name="Stone"/> + <combo_box.item label="金属" name="Metal"/> + <combo_box.item label="ガラス" name="Glass"/> + <combo_box.item label="木" name="Wood"/> + <combo_box.item label="肌" name="Flesh"/> + <combo_box.item label="プラスãƒãƒƒã‚¯" name="Plastic"/> + <combo_box.item label="ゴム" name="Rubber"/> + </combo_box> + <spinner label="é‡åŠ›" name="Physics Gravity"/> + <spinner label="摩擦" name="Physics Friction"/> + <spinner label="密度" name="Physics Density"/> + <spinner label="復元" name="Physics Restitution"/> </panel> <panel label="æè³ª" name="Texture"> <panel.string name="string repeats per meter"> diff --git a/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml deleted file mode 100644 index de8b590a802b12e284c31df67ffc0257dd439235..0000000000000000000000000000000000000000 --- a/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title=" "> - <button label="ä¿å˜" label_selected="ä¿å˜" name="Save"/> - <button label="å–り消ã—" label_selected="å–り消ã—" name="Cancel"/> - <text name="Save item as:"> - アイテムを別åã§æŒã¡ç‰©ã«ä¿å˜ï¼š - </text> - <line_editor name="name ed"> - New [DESC] - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/ja/menu_inventory_add.xml b/indra/newview/skins/default/xui/ja/menu_inventory_add.xml index 6c754e5d0874cdf9627379f2df4565fd723fef30..ae5ddbb78f1b3302c771151c1f266ed40b4dbd7f 100644 --- a/indra/newview/skins/default/xui/ja/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory_add.xml @@ -4,6 +4,8 @@ <menu_item_call label="ç”»åƒ ï¼ˆL$ [COST] )..." name="Upload Image"/> <menu_item_call label="サウンド (L$[COST] )..." name="Upload Sound"/> <menu_item_call label="アニメーション (L$ [COST] )..." name="Upload Animation"/> + <menu_item_call label="モデル" name="Upload Model"/> + <menu_item_call label="モデルウィザード" name="Upload Model Wizard"/> <menu_item_call label="一括 (ファイルã«ã¤ã L$[COST] )..." name="Bulk Upload"/> <menu_item_call label="デフォルトã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰æ¨©é™ã‚’è¨å®š" name="perm prefs"/> </menu> diff --git a/indra/newview/skins/default/xui/ja/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/ja/menu_model_import_gear_default.xml new file mode 100644 index 0000000000000000000000000000000000000000..43f86e84bf728c9058b91ca04412d2305dc4b9af --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_model_import_gear_default.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="model_menu_gear_default"> + <menu_item_check label="稜を表示" name="show_edges"/> + <menu_item_check label="物ç†åŠ¹æžœã‚’è¡¨ç¤º" name="show_physics"/> + <menu_item_check label="テクスãƒãƒ£ã‚’表示" name="show_textures"/> + <menu_item_check label="スã‚ンã®é‡ã•を表示" name="show_skin_weight"/> + <menu_item_check label="ジョイントãƒã‚¸ã‚·ãƒ§ãƒ³ã‚’表示" name="show_joint_positions"/> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml index b8efc200499e43f092cbd806bd1d3f3c2842b5d7..ec9db02522bc67e86699278e8753f9b5015eb108 100644 --- a/indra/newview/skins/default/xui/ja/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml @@ -120,6 +120,8 @@ <menu_item_call label="ç”»åƒï¼ˆL$[COST])..." name="Upload Image"/> <menu_item_call label="サウンド(L$[COST])..." name="Upload Sound"/> <menu_item_call label="アニメーション(L$[COST])..." name="Upload Animation"/> + <menu_item_call label="モデル" name="Upload Model"/> + <menu_item_call label="モデルウィザード" name="Upload Model Wizard"/> <menu_item_call label="一括 (ファイルã«ã¤ãL$[COST])..." name="Bulk Upload"/> </menu> <menu_item_call label="å…ƒã«æˆ»ã™" name="Undo"/> @@ -159,7 +161,7 @@ <menu_item_check label="アルファ" name="Alpha"/> <menu_item_check label="木" name="Tree"/> <menu_item_check label="ã‚¢ãƒã‚¿ãƒ¼" name="Character"/> - <menu_item_check label="地表" name="SurfacePath"/> + <menu_item_check label="サーフェスパッãƒ" name="Surface Patch"/> <menu_item_check label="空" name="Sky"/> <menu_item_check label="æ°´" name="Water"/> <menu_item_check label="地é¢" name="Ground"/> @@ -218,6 +220,7 @@ <menu_item_check label="テクスãƒãƒ£ã‚«ãƒ†ã‚´ãƒªã®ã‚³ãƒ³ã‚½ãƒ¼ãƒ«" name="Texture Category"/> <menu_item_check label="ファーストタイマー" name="Fast Timers"/> <menu_item_check label="メモリ" name="Memory"/> + <menu_item_check label="風景ã®çµ±è¨ˆ" name="Scene Statistics"/> <menu_item_call label="ãƒªãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±ã‚’ãƒ‡ãƒãƒƒã‚°ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã¸" name="Region Info to Debug Console"/> <menu_item_call label="ã‚°ãƒ«ãƒ¼ãƒ—æƒ…å ±ã‚’ãƒ‡ãƒãƒƒã‚°ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã¸" name="Group Info to Debug Console"/> <menu_item_call label="æ€§èƒ½æƒ…å ±ã‚’ãƒ‡ãƒãƒƒã‚°ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã¸" name="Capabilities Info to Debug Console"/> @@ -228,6 +231,7 @@ </menu> <menu label="æƒ…å ±ã‚’è¡¨ç¤º" name="Display Info"> <menu_item_check label="時間を表示ã™ã‚‹" name="Show Time"/> + <menu_item_check label="アップãƒãƒ¼ãƒ‰ä»£é‡‘を表示" name="Show Upload Cost"/> <menu_item_check label="æç”»æƒ…å ±ã‚’è¡¨ç¤ºã™ã‚‹" name="Show Render Info"/> <menu_item_check label="テクスãƒãƒ£æƒ…å ±ã‚’è¡¨ç¤º" name="Show Texture Info"/> <menu_item_check label="マトリックスを表示ã™ã‚‹" name="Show Matrices"/> @@ -253,8 +257,10 @@ </menu> <menu label="メタデータã®ãƒ¬ãƒ³ãƒ€ãƒ¼" name="Render Metadata"> <menu_item_check label="ãƒã‚¦ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ãƒœãƒƒã‚¯ã‚¹" name="Bounding Boxes"/> + <menu_item_check label="普通" name="Normals"/> <menu_item_check label="オクトリー" name="Octree"/> <menu_item_check label="シャドウ円éŒ" name="Shadow Frusta"/> + <menu_item_check label="実åƒ" name="Physics Shapes"/> <menu_item_check label="オクルージョン" name="Occlusion"/> <menu_item_check label="ãƒãƒƒãƒã®æç”»" name="Render Batches"/> <menu_item_check label="タイプを更新" name="Update Type"/> @@ -262,9 +268,12 @@ <menu_item_check label="テクスãƒãƒ£å„ªå…ˆåº¦" name="Texture Priority"/> <menu_item_check label="テクスãƒãƒ£ã®ç¯„囲" name="Texture Area"/> <menu_item_check label="å´é¢" name="Face Area"/> + <menu_item_check label="LOD æƒ…å ±" name="LOD Info"/> + <menu_item_check label="制作ã‚ュー" name="Build Queue"/> <menu_item_check label="å…‰" name="Lights"/> <menu_item_check label="骨組ã¿ã®è¡çªåˆ¤å®š" name="Collision Skeleton"/> <menu_item_check label="レイã‚ャスト" name="Raycast"/> + <menu_item_check label="スカルプト" name="Sculpt"/> </menu> <menu label="レンダリング" name="Rendering"> <menu_item_check label="軸" name="Axes"/> @@ -272,7 +281,6 @@ <menu_item_call label="é¸æŠžã—ãŸãƒ†ã‚¯ã‚¹ãƒãƒ£æƒ…å ±åŸºåº•" name="Selected Texture Info Basis"/> <menu_item_check label="ワイヤーフレーム" name="Wireframe"/> <menu_item_check label="オブジェクト間オクルージョン" name="Object-Object Occlusion"/> - <menu_item_check label="フレームãƒãƒƒãƒ•ァオブジェクト" name="Framebuffer Objects"/> <menu_item_check label="å…‰ã¨å½±" name="Lighting and Shadows"/> <menu_item_check label="太陽・月・プãƒã‚¸ã‚§ã‚¯ã‚¿ã‹ã‚‰ã®å½±" name="Shadows from Sun/Moon/Projectors"/> <menu_item_check label="SSAO ã¨å½±ã®å¹³æ»‘化" name="SSAO and Shadow Smoothing"/> @@ -371,6 +379,7 @@ <menu_item_call label="ãƒãƒ¼ã‚«ãƒ«ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’ダンプ" name="Dump Local Textures"/> </menu> <menu_item_check label="HTTP Texture" name="HTTP Textures"/> + <menu_item_check label="HTTP æŒã¡ç‰©" name="HTTP Inventory"/> <menu_item_call label="圧縮画åƒ" name="Compress Images"/> <menu_item_check label="デãƒãƒƒã‚°ç”¨ã®ãƒŸãƒ‹ãƒ€ãƒ³ãƒ—を出力ã™ã‚‹" name="Output Debug Minidump"/> <menu_item_check label="次回ã®èµ·å‹•時ã«ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’表示ã™ã‚‹" name="Console Window"/> diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index f93e032ffc66709866c624210a097b24c50d8dd9..d63ca8403513552dc42fbc88bc210221ab467baf 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -2205,6 +2205,12 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚» <notification name="RezItemNoPermissions"> オブジェクトを Rez ã™ã‚‹ã«ã¯æ¨©é™ãŒä¸è¶³ã—ã¦ã„ã¾ã™ã€‚ </notification> + <notification name="IMAcrossParentEstates"> + 親エステート間ã§ã¯ IM ã‚’é€ä¿¡ã§ãã¾ã›ã‚“。 + </notification> + <notification name="TransferInventoryAcrossParentEstates"> + è¦ªã‚¨ã‚¹ãƒ†ãƒ¼ãƒˆé–“ã§æŒã¡ç‰©ã‚’移動ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 + </notification> <notification name="UnableToLoadNotecard"> ノートカードをèªã¿è¾¼ã‚ã¾ã›ã‚“。ã‚ã¨ã§å†åº¦ãŠè©¦ã—ãã ã•ã„。 </notification> @@ -2780,6 +2786,10 @@ M ã‚ーを押ã—ã¦å¤‰æ›´ã—ã¾ã™ã€‚ モデレーターãŒã‚ãªãŸã®ãƒœã‚¤ã‚¹ã‚’ミュートã—ã¾ã—ãŸã€‚ <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="UploadCostConfirmation"> + ã“ã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã¯ L$[PRICE] ã®ã‚³ã‚¹ãƒˆãŒã‹ã‹ã‚Šã¾ã™ã€‚アップãƒãƒ¼ãƒ‰ã‚’ç¶šã‘ã¾ã™ã‹ï¼Ÿ + <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="アップãƒãƒ¼ãƒ‰"/> + </notification> <notification name="ConfirmClearTeleportHistory"> テレãƒãƒ¼ãƒˆå±¥æ´ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ <usetemplate name="okcancelbuttons" notext="ã‚ャンセル" yestext="OK"/> @@ -2791,6 +2801,9 @@ M ã‚ーを押ã—ã¦å¤‰æ›´ã—ã¾ã™ã€‚ <notification name="ShareNotification"> 共有ã™ã‚‹ä½äººã‚’é¸æŠžã—ã¾ã™ã€‚ </notification> + <notification name="MeshUploadError"> + [LABEL] をアップãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸï¼š [MESSAGE] [IDENTIFIER] [INVALIDITY_IDENTIFIER] + </notification> <notification name="ShareItemsConfirmation"> 次ã®ã‚¢ã‚¤ãƒ†ãƒ を共有ã—ã¾ã™ã‹ï¼Ÿ @@ -2807,6 +2820,19 @@ M ã‚ーを押ã—ã¦å¤‰æ›´ã—ã¾ã™ã€‚ <notification name="DeedToGroupFail"> グループã¸ã®è²æ¸¡ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ </notification> + <notification name="ReleaseLandThrottled"> + 区画「[PARCEL_NAME]ã€ã¯ç¾åœ¨æ”¾æ£„ã§ãã¾ã›ã‚“。 + </notification> + <notification name="ReleasedLandWithReclaim"> + [AREA] m² ã®åŒºç”»ã€Œ[PARCEL_NAME]ã€ãŒå…¬é–‹ã•れã¾ã—ãŸã€‚ + +åŒåŒºç”»ãŒä»–ã®ä½äººã«å£²ã‚Šå‡ºã•れるå‰ã® [RECLAIM_PERIOD] 時間内ã§ã‚れã°ç„¡å„Ÿã§åœŸåœ°ã‚’å–り戻ã™ã“ã¨ãŒã§ãã¾ã™ã€‚ + </notification> + <notification name="ReleasedLandNoReclaim"> + [AREA] m² ã®åŒºç”»ã€Œ[PARCEL_NAME]ã€ãŒå…¬é–‹ã•れã¾ã—ãŸã€‚ + +一般ã«å…¬é–‹ã•れãŸã®ã§ã€ä»Šãªã‚‰èª°ã§ã‚‚購入å¯èƒ½ã§ã™ã€‚ + </notification> <notification name="AvatarRezNotification"> (作æˆå¾Œ[EXISTENCE]秒経éŽï¼‰ '[NAME]'ã¨ã„ã†ã‚¢ãƒã‚¿ãƒ¼ã¯[TIME]秒後ã«å§¿ã‚’ç¾ã‚ã—ã¾ã—ãŸã€‚ @@ -2947,6 +2973,10 @@ M ã‚ーを押ã—ã¦å¤‰æ›´ã—ã¾ã™ã€‚ グループã®ä½œæˆã¨ç·¨é›†ã¯ã‚¢ãƒ‰ãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã§ã®ã¿åˆ©ç”¨ã§ãã¾ã™ã€‚終了ã—ã¦ãƒ¢ãƒ¼ãƒ‰ã‚’変更ã—ã¾ã™ã‹ï¼Ÿãƒ¢ãƒ¼ãƒ‰ã¯ãƒã‚°ã‚¤ãƒ³ç”»é¢ã§é¸æŠžã§ãã¾ã™ã€‚ <usetemplate name="okcancelbuttons" notext="終了ã—ãªã„" yestext="終了"/> </notification> + <notification label="" name="NoPlaceInfo"> + å ´æ‰€ã®ãƒ—ãƒãƒ•ィールã®è¡¨ç¤ºã¯ã‚¢ãƒ‰ãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã§ã®ã¿åˆ©ç”¨ã§ãã¾ã™ã€‚終了ã—ã¦ãƒ¢ãƒ¼ãƒ‰ã‚’変更ã—ã¾ã™ã‹ï¼Ÿãƒ¢ãƒ¼ãƒ‰ã¯ãƒã‚°ã‚¤ãƒ³ç”»é¢ã§é¸æŠžã§ãã¾ã™ã€‚ + <usetemplate name="okcancelbuttons" notext="終了ã—ãªã„" yestext="終了"/> + </notification> <notification label="" name="NoPicks"> ピックã®ä½œæˆã¨ç·¨é›†ã¯ã‚¢ãƒ‰ãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã§ã®ã¿åˆ©ç”¨ã§ãã¾ã™ã€‚終了ã—ã¦ãƒ¢ãƒ¼ãƒ‰ã‚’変更ã—ã¾ã™ã‹ï¼Ÿãƒ¢ãƒ¼ãƒ‰ã¯ãƒã‚°ã‚¤ãƒ³ç”»é¢ã§é¸æŠžã§ãã¾ã™ã€‚ <usetemplate name="okcancelbuttons" notext="終了ã—ãªã„" yestext="終了"/> @@ -2967,9 +2997,18 @@ M ã‚ーを押ã—ã¦å¤‰æ›´ã—ã¾ã™ã€‚ ä»–ã®ä½äººã¸ã®æ”¯æ‰•ã„ã¯ã‚¢ãƒ‰ãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã§ã®ã¿åˆ©ç”¨ã§ãã¾ã™ã€‚ãƒã‚°ã‚¢ã‚¦ãƒˆã—ã¦ãƒ¢ãƒ¼ãƒ‰ã‚’変更ã—ã¾ã™ã‹ï¼Ÿ <usetemplate name="okcancelbuttons" notext="終了ã—ãªã„" yestext="終了"/> </notification> - <global name="UnsupportedCPU"> - - ã‚ãªãŸã® CPU ã®é€Ÿåº¦ã¯å¿…é ˆå‹•ä½œç’°å¢ƒã®æ¡ä»¶ã‚’満ãŸã—ã¦ã„ã¾ã›ã‚“。 - </global> + <notification label="" name="NoInventory"> + æŒã¡ç‰©ã®è¡¨ç¤ºã¯ã‚¢ãƒ‰ãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã§ã®ã¿åˆ©ç”¨ã§ãã¾ã™ã€‚ãƒã‚°ã‚¢ã‚¦ãƒˆã—ã¦ãƒ¢ãƒ¼ãƒ‰ã‚’変更ã—ã¾ã™ã‹ï¼Ÿ + <usetemplate name="okcancelbuttons" notext="終了ã—ãªã„" yestext="終了"/> + </notification> + <notification label="" name="NoAppearance"> + 容姿エディターã¯ã‚¢ãƒ‰ãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã§ã®ã¿åˆ©ç”¨ã§ãã¾ã™ã€‚ãƒã‚°ã‚¢ã‚¦ãƒˆã—ã¦ãƒ¢ãƒ¼ãƒ‰ã‚’変更ã—ã¾ã™ã‹ï¼Ÿ + <usetemplate name="okcancelbuttons" notext="終了ã—ãªã„" yestext="終了"/> + </notification> + <notification label="" name="NoSearch"> + 検索ã¯ã‚¢ãƒ‰ãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã§ã®ã¿åˆ©ç”¨ã§ãã¾ã™ã€‚ãƒã‚°ã‚¢ã‚¦ãƒˆã—ã¦ãƒ¢ãƒ¼ãƒ‰ã‚’変更ã—ã¾ã™ã‹ï¼Ÿ + <usetemplate name="okcancelbuttons" notext="終了ã—ãªã„" yestext="終了"/> + </notification> <global name="UnsupportedGLRequirements"> [APP_NAME] ã«å¿…è¦ãªãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãŒãªã„よã†ã§ã™ã€‚ [APP_NAME] ã«ã¯ãƒžãƒ«ãƒãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ OpenGL グラフィックカードãŒå¿…è¦ã§ã™ã€‚ ãŠä½¿ã„ã®ã‚°ãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚«ãƒ¼ãƒ‰ã®æœ€æ–°ãƒ‰ãƒ©ã‚¤ãƒãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã€ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã®ã‚µãƒ¼ãƒ“スパックã¨ãƒ‘ッãƒãŒå…¥ã£ã¦ã„ã‚‹ã‹ã‚’ã”確èªãã ã•ã„。 diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_colors.xml b/indra/newview/skins/default/xui/ja/panel_preferences_colors.xml index e1dea89ca0ebf668718c899011d1571c4e83d182..9f6abf8fcbc1b25070318fbc4b21b81ea3bab76c 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_colors.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_colors.xml @@ -22,6 +22,9 @@ <text name="text_box5"> エラー </text> + <text name="text_box10"> + ダイレクト + </text> <text name="text_box7"> 所有者 </text> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml index b4430fa39dcc0c132efe8f1d1dacd86c1d6ab9ed..1786b4befc9925829a645a39f4cd9d303501e84c 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml @@ -27,8 +27,20 @@ </text> <check_box initial_value="true" label="逿˜Žãªæ°´" name="TransparentWater"/> <check_box initial_value="true" label="ãƒãƒ³ãƒ—マッピングã¨å…‰æ²¢" name="BumpShiny"/> + <check_box initial_value="true" label="è¿‘ãã®å…‰" name="LocalLights"/> <check_box initial_value="true" label="基本シェーダー" name="BasicShaders" tool_tip="ã“ã®ã‚ªãƒ—ションを無効ã«ã™ã‚‹ã¨ã€ã‚°ãƒ©ãƒ•ィックカードã®ãƒ‰ãƒ©ã‚¤ãƒã®ç¨®é¡žã«ã‚ˆã£ã¦ã¯ã€ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã™ã‚‹ã®ã‚’防ãŽã¾ã™ã€‚"/> <check_box initial_value="true" label="周囲(大気)シェーダー" name="WindLightUseAtmosShaders"/> + <check_box initial_value="true" label="å…‰ã¨å½±" name="UseLightShaders"/> + <check_box initial_value="true" label="アンビエントオクルージョン" name="UseSSAO"/> + <check_box initial_value="true" label="フィールドã®é 近感" name="UseDoF"/> + <text name="shadows_label"> + 影: + </text> + <combo_box name="ShadowDetail"> + <combo_box.item label="ãªã—" name="0"/> + <combo_box.item label="太陽/月" name="1"/> + <combo_box.item label="太陽/月・プãƒã‚¸ã‚§ã‚¯ã‚¿" name="2"/> + </combo_box> <text name="reflection_label"> æ°´ã®å射: </text> diff --git a/indra/newview/skins/default/xui/ja/panel_region_general.xml b/indra/newview/skins/default/xui/ja/panel_region_general.xml index 54ec24773f0fe55132c7eafb5930348d3c016ac3..65148cf1eee554c772b693c81ec7c9d477a04e10 100644 --- a/indra/newview/skins/default/xui/ja/panel_region_general.xml +++ b/indra/newview/skins/default/xui/ja/panel_region_general.xml @@ -25,6 +25,7 @@ <check_box label="土地ã®å†è²©ã‚’許å¯" name="allow_land_resell_check"/> <check_box label="土地ã®çµ±åˆãƒ»åˆ†å‰²ã‚’許å¯" name="allow_parcel_changes_check"/> <check_box label="åœŸåœ°ã®æ¤œç´¢è¡¨ç¤ºã‚’ブãƒãƒƒã‚¯" name="block_parcel_search_check" tool_tip="æ¤œç´¢çµæžœã§ã€ã“ã®åœ°åŸŸã¨åŒºç”»ã‚’表示ã™ã‚‹ã‹ã©ã†ã‹ã®è¨å®šã§ã™"/> + <check_box label="メッシュオブジェクトを許å¯" name="mesh_rez_enabled_check" tool_tip="ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã§ãƒ¡ãƒƒã‚·ãƒ¥ã‚ªãƒ–ジェクト㮠Rez を許å¯ã™ã‚‹"/> <spinner label="ã‚¢ãƒã‚¿ãƒ¼æ•°ä¸Šé™" name="agent_limit_spin"/> <spinner label="物体ボーナス" name="object_bonus_spin"/> <text label="æˆäººæŒ‡å®š" name="access_text"> diff --git a/indra/newview/skins/default/xui/ja/panel_sound_devices.xml b/indra/newview/skins/default/xui/ja/panel_sound_devices.xml new file mode 100644 index 0000000000000000000000000000000000000000..da103a2d6003654c2085e64eeff0b80c6d199e31 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_sound_devices.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel label="機器ã®è¨å®š" name="device_settings_panel"> + <panel.string name="default_text"> + デフォルト + </panel.string> + <text name="Input"> + 入力 + </text> + <text name="My volume label"> + ç§ã®éŸ³é‡ï¼š + </text> + <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="スライダーを使ã£ã¦éŸ³é‡ã‚’調節ã—ã¾ã™"/> + <text name="wait_text"> + ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。 + </text> + <text name="Output"> + 出力 + </text> +</panel> diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index cb248b8b4fd4e4a3a56833bdc6e12d8e55bfbcf3..a6691fb7649efb061b457f860b262fd379f32362 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -130,6 +130,139 @@ <string name="create_account_url"> http://join.secondlife.com/index.php?lang=ja-JP </string> + <string name="LoginFailedViewerNotPermitted"> + ãŠä½¿ã„ã®å¤ã„ビューワã§ã¯ Second Life ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“。以下ã®ãƒšãƒ¼ã‚¸ã‹ã‚‰æ–°ã—ã„ビューワをダウンãƒãƒ¼ãƒ‰ã—ã¦ãã ã•ã„: +http://secondlife.com/download + +詳細ã«ã¤ã„ã¦ã¯ã€FAQ ã‚’å‚ç…§ã—ã¦ãã ã•ã„: +http://secondlife.com/viewer-access-faq + </string> + <string name="LoginIntermediateOptionalUpdateAvailable"> + ビューワアップデート(オプション)ãŒã‚りã¾ã™ï¼š [VERSION] + </string> + <string name="LoginFailedRequiredUpdate"> + ãƒ“ãƒ¥ãƒ¼ãƒ¯ã‚¢ãƒƒãƒ—ãƒ‡ãƒ¼ãƒˆï¼ˆå¿…é ˆï¼‰ï¼š [VERSION] + </string> + <string name="LoginFailedAlreadyLoggedIn"> + ã“ã®ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã¯æ—¢ã«ãƒã‚°ã‚¤ãƒ³ã•れã¦ã„ã¾ã™ã€‚ + </string> + <string name="LoginFailedAuthenticationFailed"> + 申ã—訳ã‚りã¾ã›ã‚“ãŒã€ãƒã‚°ã‚¤ãƒ³ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ +ä»¥ä¸‹ã®æƒ…å ±ãŒæ£ã—ã入力ã•れãŸã“ã¨ã‚’確èªã—ã¦ãã ã•ã„: +* ユーザーå(bobsmith12 ã¾ãŸã¯ steller.sunshine ãªã©ï¼‰ +* パスワード +ã¾ãŸã€Caps Lock ã‚ãƒ¼ãŒæœ‰åйã«ãªã£ã¦ã„ãªã„ã“ã¨ã‚‚ãŠç¢ºã‹ã‚ãã ã•ã„。 + </string> + <string name="LoginFailedPasswordChanged"> + ã‚»ã‚ュリティ上ã®ç†ç”±ã«ã‚ˆã‚Šã€ã‚ãªãŸã®ãƒ‘スワードã¯å¤‰æ›´ã•れã¾ã—ãŸã€‚ +アカウントページ(http://secondlife.com/password)ã«ç§»å‹•ã—〠+秘密ã®è³ªå•ã«ç”ãˆã¦ã€ãƒ‘スワードをリセットã—ã¦ãã ã•ã„。 +ã”迷惑をãŠã‹ã‘ã—ã¦ç”³ã—訳ã”ã–ã„ã¾ã›ã‚“。 + </string> + <string name="LoginFailedPasswordReset"> + 弊社ã¯ã‚·ã‚¹ãƒ†ãƒ を若干変更ã—ã¾ã—ãŸã€‚ãŠæ‰‹æ•°ã§ã™ãŒã€ãƒ‘スワードã®ãƒªã‚»ãƒƒãƒˆã‚’ãŠé¡˜ã„ã—ã¾ã™ã€‚ +アカウントページ(http://secondlife.com/password)ã«ç§»å‹•ã—〠+秘密ã®è³ªå•ã«ç”ãˆã¦ã€ãƒ‘スワードをリセットã—ã¦ãã ã•ã„。 +ã”迷惑をãŠã‹ã‘ã—ã¦ç”³ã—訳ã”ã–ã„ã¾ã›ã‚“。 + </string> + <string name="LoginFailedEmployeesOnly"> + Second Life ã¯ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã®ãŸã‚ã€ä¸€æ™‚çš„ã«ã”利用ã„ãŸã ã‘ã¾ã›ã‚“。 +従æ¥å“¡ä»¥å¤–ã«ã¯ãƒã‚°ã‚¤ãƒ³ã‚’ã”é æ…®ã„ãŸã ã„ã¦ã„ã¾ã™ã€‚ +最新ã®çжæ³ã«ã¤ã„ã¦ã¯ www.secondlife.com/status ã§ãŠç¢ºã‹ã‚ãã ã•ã„。 + </string> + <string name="LoginFailedPremiumOnly"> + æ—¢ã«ãƒã‚°ã‚¤ãƒ³ã—ã¦ã„ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«æœ€ä¸Šã®ã‚¤ãƒ³ãƒ¯ãƒ¼ãƒ«ãƒ‰ä½“験をæä¾›ã™ã‚‹ãŸã‚ã€Second Life ã¸ã®ãƒã‚°ã‚¤ãƒ³ã¯ä¸€æ™‚çš„ã«åˆ¶é™ã•れã¦ã„ã¾ã™ã€‚ + +申ã—訳ã”ã–ã„ã¾ã›ã‚“ãŒã€æœ‰æ–™ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’優先ã™ã‚‹ãŸã‚ã«ã€ç¾æ™‚点ã®ã¨ã“ã‚無料アカウントã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¯ Second Life ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’ã”é æ…®ã„ãŸã ã„ã¦ã„ã¾ã™ã€‚ + </string> + <string name="LoginFailedComputerProhibited"> + ã“ã®ãƒ‘ソコンã‹ã‚‰ã¯ Second Life ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“。 +システムã®ã‚¨ãƒ©ãƒ¼ã ã¨æ€ã‚ã‚Œã‚‹å ´åˆã¯ã€ +support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。 + </string> + <string name="LoginFailedAcountSuspended"> + ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¯ +太平洋時間㮠[TIME] ã¾ã§ã”利用ã„ãŸã ã‘ã¾ã›ã‚“。 + </string> + <string name="LoginFailedAccountDisabled"> + ç¾åœ¨ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’完了ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 +Second Life ã®ã‚µãƒãƒ¼ãƒˆï¼ˆhttp://secondlife.com/support)ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。 +パスワードを変更ã§ããªã„å ´åˆã«ã¯ã€(866) 476-9763 ã«é›»è©±ã§ãŠå•ã„åˆã‚ã›ãã ã•ã„。 + </string> + <string name="LoginFailedTransformError"> + ãƒã‚°ã‚¤ãƒ³æ™‚ã«ãƒ‡ãƒ¼ã‚¿ã®ä¸ä¸€è‡´ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚ +support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。 + </string> + <string name="LoginFailedAccountMaintenance"> + ç¾åœ¨ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ãƒ¡ã‚¤ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ãŒè¡Œã‚れã¦ã„ã¾ã™ã€‚ +ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¯ +太平洋時間㮠[TIME] ã¾ã§ã”利用ã„ãŸã ã‘ã¾ã›ã‚“。 +システムã®ã‚¨ãƒ©ãƒ¼ã ã¨æ€ã‚ã‚Œã‚‹å ´åˆã¯ã€support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。 + </string> + <string name="LoginFailedPendingLogoutFault"> + ãƒã‚°ã‚¢ã‚¦ãƒˆã‚’リスクエストã—ãŸã‚‰ã€ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ãƒ¼ã‹ã‚‰ã€Œfaultã€ãŒè¿”ã•れã¾ã—ãŸã€‚ + </string> + <string name="LoginFailedPendingLogout"> + システムã«ã‚ˆã‚‹ãƒã‚°ã‚¢ã‚¦ãƒˆãŒå®Ÿè¡Œã•れã¾ã—ãŸã€‚ +ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¯ +太平洋時間㮠[TIME] ã¾ã§ã”利用ã„ãŸã ã‘ã¾ã›ã‚“。 + </string> + <string name="LoginFailedUnableToCreateSession"> + 有効ãªã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’生æˆã§ãã¾ã›ã‚“。 + </string> + <string name="LoginFailedUnableToConnectToSimulator"> + ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ãƒ¼ã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ + </string> + <string name="LoginFailedRestrictedHours"> + ã‚ãªãŸã® Second Life アカウントã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã‚‹ã®ã¯ã€ +太平洋時間㮠[START] ~ [END] ã®é–“ã«é™ã‚‰ã‚Œã¾ã™ã€‚ +æœ‰åŠ¹ãªæ™‚間帯ã«å†åº¦ãŠè©¦ã—ãã ã•ã„。 +システムã®ã‚¨ãƒ©ãƒ¼ã ã¨æ€ã‚ã‚Œã‚‹å ´åˆã¯ã€support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。 + </string> + <string name="LoginFailedIncorrectParameters"> + ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ãŒæ£ã—ãã‚りã¾ã›ã‚“。 +システムã®ã‚¨ãƒ©ãƒ¼ã ã¨æ€ã‚ã‚Œã‚‹å ´åˆã¯ã€support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。 + </string> + <string name="LoginFailedFirstNameNotAlphanumeric"> + ファーストãƒãƒ¼ãƒ ã®ãƒ‘ラメーターã¯è‹±æ•°å—ã§ã™ã€‚ +システムã®ã‚¨ãƒ©ãƒ¼ã ã¨æ€ã‚ã‚Œã‚‹å ´åˆã¯ã€support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。 + </string> + <string name="LoginFailedLastNameNotAlphanumeric"> + ラストãƒãƒ¼ãƒ ã®ãƒ‘ラメーターã¯è‹±æ•°å—ã§ã™ã€‚ +システムã®ã‚¨ãƒ©ãƒ¼ã ã¨æ€ã‚ã‚Œã‚‹å ´åˆã¯ã€support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。 + </string> + <string name="LogoutFailedRegionGoingOffline"> + リージョンã¯ã‚ªãƒ•ラインä¸ã§ã™ã€‚ +ã—ã°ã‚‰ãã—ã¦ã‹ã‚‰å†åº¦ãŠè©¦ã—ãã ã•ã„。 + </string> + <string name="LogoutFailedAgentNotInRegion"> + エージェントãŒãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«ä¸åœ¨ã§ã™ã€‚ +ã—ã°ã‚‰ãã—ã¦ã‹ã‚‰å†åº¦ãŠè©¦ã—ãã ã•ã„。 + </string> + <string name="LogoutFailedPendingLogin"> + ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯åˆ¥ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒãƒã‚°ã‚¤ãƒ³ã•れã¦ã„ã¾ã—ãŸã€‚ +ã—ã°ã‚‰ãã—ã¦ã‹ã‚‰å†åº¦ãŠè©¦ã—ãã ã•ã„。 + </string> + <string name="LogoutFailedLoggingOut"> + ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯å‰ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒãƒã‚°ã‚¢ã‚¦ãƒˆã•れã¾ã—ãŸã€‚ +ã—ã°ã‚‰ãã—ã¦ã‹ã‚‰å†åº¦ãŠè©¦ã—ãã ã•ã„。 + </string> + <string name="LogoutFailedStillLoggingOut"> + ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ç¾åœ¨ã‚‚å‰ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã®ãƒã‚°ã‚¢ã‚¦ãƒˆãŒå‡¦ç†ã•れã¦ã„ã¾ã™ã€‚ +ã—ã°ã‚‰ãã—ã¦ã‹ã‚‰å†åº¦ãŠè©¦ã—ãã ã•ã„。 + </string> + <string name="LogoutSucceeded"> + リージョンã§ã¯å‰ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒãƒã‚°ã‚¢ã‚¦ãƒˆã•れã¾ã—ãŸã€‚ +ã—ã°ã‚‰ãã—ã¦ã‹ã‚‰å†åº¦ãŠè©¦ã—ãã ã•ã„。 + </string> + <string name="LogoutFailedLogoutBegun"> + リージョンã§ã¯ãƒã‚°ã‚¢ã‚¦ãƒˆãƒ—ãƒã‚»ã‚¹ãŒé–‹å§‹ã•れã¾ã—ãŸã€‚ +ã—ã°ã‚‰ãã—ã¦ã‹ã‚‰å†åº¦ãŠè©¦ã—ãã ã•ã„。 + </string> + <string name="LoginFailedLoggingOutSession"> + ã‚ãªãŸã®å‰ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã¯ã‚·ã‚¹ãƒ†ãƒ ã«ã‚ˆã£ã¦ãƒã‚°ã‚¢ã‚¦ãƒˆã•れã¦ã„ã¾ã™ã€‚ +ã—ã°ã‚‰ãã—ã¦ã‹ã‚‰å†åº¦ãŠè©¦ã—ãã ã•ã„。 + </string> <string name="AgentLostConnection"> ã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã«ä¸éƒ½åˆãŒç™ºç”Ÿã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ ã”使用ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆæŽ¥ç¶šã‚’ã”確èªãã ã•ã„。 </string> @@ -441,6 +574,9 @@ <string name="symbolic folder link"> フォルダã®ãƒªãƒ³ã‚¯ </string> + <string name="mesh"> + メッシュ + </string> <string name="AvatarEditingAppearance"> (容姿ã®ç·¨é›†ä¸ï¼‰ </string> @@ -1180,6 +1316,9 @@ <string name="InvFolder Accessories"> アクセサリ </string> + <string name="InvFolder Meshes"> + メッシュ + </string> <string name="InvFolder Friends"> フレンド </string> @@ -3762,6 +3901,9 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンãƒãƒ¼ãƒ‰ã—ã¦ãã <string name="session_initialization_timed_out_error"> セッションã®åˆæœŸåŒ–ãŒã‚¿ã‚¤ãƒ アウトã—ã¾ã—㟠</string> + <string name="Home position set."> + å®¶ã®é…ç½®ã®è¨å®šã€‚ + </string> <string name="voice_morphing_url"> http://secondlife.com/landing/voicemorphing </string> diff --git a/indra/newview/skins/default/xui/nl/floater_about_land.xml b/indra/newview/skins/default/xui/nl/floater_about_land.xml index d51ea1c0f85e9af6ea2d7acd128629ba20e27b87..f336e53e05bc1aacd591d76818b73e8973b55ef2 100644 --- a/indra/newview/skins/default/xui/nl/floater_about_land.xml +++ b/indra/newview/skins/default/xui/nl/floater_about_land.xml @@ -49,7 +49,7 @@ <text name="Sell with landowners objects in parcel."> Objecten opgenomen in verkoop </text> - <text name="Selling with no objects in parcel." width="196"> + <text name="Selling with no objects in parcel."> Objecten niet opgenomen in verkoop </text> <button label="Annuleer landverkoop" label_selected="Annuleer landverkoop" name="Cancel Land Sale"/> diff --git a/indra/newview/skins/default/xui/nl/floater_preview_gesture.xml b/indra/newview/skins/default/xui/nl/floater_preview_gesture.xml index 7dd85460a241fb48e55c95b4eca40abb381bb862..c6b301841ae78600c537c470a6e9233898cc31db 100644 --- a/indra/newview/skins/default/xui/nl/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/nl/floater_preview_gesture.xml @@ -15,7 +15,7 @@ <text name="trigger_label"> Trigger: </text> - <text name="replace_text" tool_tip="Vervang de startseinwoorden door deze woorden. Bijvoorbeeld, startsein 'hallo' vervang door 'hoi' zal de chat 'Ik wilde hallo zeggen' veranderen in 'Ik wilde hoi zeggen', waarbij tevens het gebaar afgespeeld zal worden!" left="208"> + <text name="replace_text" tool_tip="Vervang de startseinwoorden door deze woorden. Bijvoorbeeld, startsein 'hallo' vervang door 'hoi' zal de chat 'Ik wilde hallo zeggen' veranderen in 'Ik wilde hoi zeggen', waarbij tevens het gebaar afgespeeld zal worden!"> Vervangen door: </text> <line_editor name="replace_editor" tool_tip="Vervang de startseinwoorden door deze woorden. Bijvoorbeeld, startsein 'hallo' vervang door 'hoi' zal de chat 'Ik wilde hallo zeggen' veranderen in 'Ik wilde hoi zeggen', waarbij tevens het gebaar afgespeeld zal worden."/> diff --git a/indra/newview/skins/default/xui/nl/floater_windlight_options.xml b/indra/newview/skins/default/xui/nl/floater_windlight_options.xml index d97c9679a91a79e4694b70be149c54cb67c20e0a..b26dd7916ecaea9389b90ea123b82c89e8b62d18 100644 --- a/indra/newview/skins/default/xui/nl/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/nl/floater_windlight_options.xml @@ -1,14 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="WindLight floater" title="GEAVANCEERDE LUCHT EDITOR"> - <combo_box allow_text_entry="false" bottom="-50" follows="left|top" height="18" - left_delta="116" max_chars="20" mouse_opaque="true" name="WLPresetsCombo" - width="150" /> + <combo_box allow_text_entry="false" follows="left|top" mouse_opaque="true" name="WLPresetsCombo"/> <text name="KeyFramePresetsText"> Lucht voorinstellingen </text> <button label="Nieuw" label_selected="Nieuw" name="WLNewPreset"/> <button label="Opslaan" label_selected="Opslaan" name="WLSavePreset"/> - <button label="Verwijderen" label_selected="Verwijderen" name="WLDeletePreset" width="80"/> + <button label="Verwijderen" label_selected="Verwijderen" name="WLDeletePreset"/> <button label="Dag cyclus editor" label_selected="Dag cyclus editor" name="WLDayCycleMenuButton"/> <tab_container name="WindLight Tabs"> <panel label="Atmosfeer" name="Atmosphere"> diff --git a/indra/newview/skins/default/xui/nl/strings.xml b/indra/newview/skins/default/xui/nl/strings.xml index 87e3638a49e81b7a911a99ecb6f769e55b67cfe0..a53c0769dc873cb55ced11143741b7a76a8be91c 100644 --- a/indra/newview/skins/default/xui/nl/strings.xml +++ b/indra/newview/skins/default/xui/nl/strings.xml @@ -1231,8 +1231,8 @@ <string name="Unknown"> (Unknown) </string> - <string name="SummaryForTheWeek" value="Samenvatting voor deze week, vanaf"/> - <string name="NextStipendDay" value="The next stipend day is"/> + <string name="SummaryForTheWeek" value="Samenvatting voor deze week, vanaf "/> + <string name="NextStipendDay" value=". The next stipend day is "/> <string name="GroupIndividualShare" value="Groep Individueel Aandeel"/> <string name="Balance"> Banksaldo diff --git a/indra/newview/skins/default/xui/pl/floater_sell_land.xml b/indra/newview/skins/default/xui/pl/floater_sell_land.xml index 528e5a416b7368213d5409f0fac959d1f4b25474..2201c4b0adf659428917ad7451b1fea6034e7534 100644 --- a/indra/newview/skins/default/xui/pl/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/pl/floater_sell_land.xml @@ -44,7 +44,7 @@ <combo_box.item label="Wybrany Kupiec:" name="Specificuser:"/> </combo_box> <button label="Wybierz" name="sell_to_select_agent"/> - <text name="sell_objects_label"> + <text name="sell_objects_label" font="SansSerifSmall"> 3. Obiekty sprzedawane razem z posiadÅ‚oÅ›ciÄ…? </text> <text name="sell_objects_text"> diff --git a/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml b/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml index 0c285e65460146032a213209f50dab28673c9021..9ec3c480b7a15827f9ec4059b934936b78d0f4f5 100644 --- a/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml @@ -46,7 +46,7 @@ </text> <check_box label="Modyfikuje" name="CheckOwnerModify"/> <check_box label="Kopiuje" name="CheckOwnerCopy"/> - <check_box label="Oddaje/Sprzedaje" name="CheckOwnerTransfer"/> + <check_box label="Oddaje/ Sprzedaje" name="CheckOwnerTransfer"/> <text name="AnyoneLabel"> Każdy: </text> @@ -60,7 +60,7 @@ </text> <check_box label="Modyfikuje" name="CheckNextOwnerModify"/> <check_box label="Kopiuje" name="CheckNextOwnerCopy"/> - <check_box label="Sprzedaje/Oddaje" name="CheckNextOwnerTransfer" tool_tip="NastÄ™pny wÅ‚aÅ›ciciel może oddawać lub sprzedawać ten obiekt"/> + <check_box label="Sprzedaje/ Oddaje" name="CheckNextOwnerTransfer" tool_tip="NastÄ™pny wÅ‚aÅ›ciciel może oddawać lub sprzedawać ten obiekt"/> </panel> <check_box label="Na sprzedaż" name="CheckPurchase"/> <combo_box name="combobox sale copy"> diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml index 94708ba448a5374c25fda7b7e2380ae24aa34d60..6eceed46d3acf981d678bb5b04bb507914b6a061 100644 --- a/indra/newview/skins/default/xui/pl/strings.xml +++ b/indra/newview/skins/default/xui/pl/strings.xml @@ -1464,7 +1464,7 @@ (nieznane) </string> <string name="SummaryForTheWeek" value="Podsumowanie dla tego tygodnia, poczÄ…wszy od "/> - <string name="NextStipendDay" value="NastÄ™pna wypÅ‚ata bÄ™dzie w "/> + <string name="NextStipendDay" value=". NastÄ™pna wypÅ‚ata bÄ™dzie w "/> <string name="GroupIndividualShare" value=" Groupa UdziaÅ‚y Indywidualne"/> <string name="GroupColumn" value="Grupa"/> <string name="Balance"> diff --git a/indra/newview/skins/default/xui/pt/floater_about.xml b/indra/newview/skins/default/xui/pt/floater_about.xml index a9da2a18af988d95d0ecdaa496ded45a484c3009..6ea2daced95fbd65ce8c9db5d1df9e6fdd881fd5 100644 --- a/indra/newview/skins/default/xui/pt/floater_about.xml +++ b/indra/newview/skins/default/xui/pt/floater_about.xml @@ -54,27 +54,13 @@ Agradecemos também aos seguintes residentes por sua colaboração na mais nova </panel> <panel label="Licenças" name="licenses_panel"> <text_editor name="credits_editor"> - 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion - APR Copyright (C) 2000-2004 The Apache Software Foundation - cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) - DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc. - expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. - FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). - GL Copyright (C) 1999-2004 Brian Paul. - Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. - jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) - jpeglib Copyright (C) 1991-1998, Thomas G. Lane. - ogg/vorbis Copyright (C) 2001, Xiphophorus - OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. - SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga - SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - xmlrpc-epi Copyright (C) 2000 Epinions, Inc. - zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. - google-perftools Copyright (c) 2005, Google Inc. - - Todos os direitos reservados. Veja licenças.txt para detalhes. + 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion APR Copyright (C) 2000-2004 The Apache Software Foundation Collada DOM Copyright 2005 Sony Computer Entertainment Inc. cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc. expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). GL Copyright (C) 1999-2004 Brian Paul. GLOD Copyright (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University and David Luebke, Brenden Schubert, University of Virginia. google-perftools Copyright (c) 2005, Google Inc. Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) jpeglib Copyright (C) 1991-1998, Thomas G. Lane. ogg/vorbis Copyright (C) 2001, Xiphophorus OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. PCRE Copyright (c) 1997-2008 University of Cambridge SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) xmlrpc-epi Copyright (C) 2000 Epinions, Inc. zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. google-perftools Copyright (c) 2005, Google Inc. - Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) +O Second Life Viewer usa Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (e licenciadores). Todos os direitos reservados. Mais detalhes em www.havok.com + +Todos os direitos reservados. Mais detalhes em licenses.txt. + +Codificação do áudio de bate-papo de voz: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) </text_editor> </panel> </tab_container> diff --git a/indra/newview/skins/default/xui/pt/floater_about_land.xml b/indra/newview/skins/default/xui/pt/floater_about_land.xml index 7761c79864258ab17bbaac878f8780af6d995271..e48cac7d1fe13f7c345cdad2f1c3b8f442cbf9ee 100644 --- a/indra/newview/skins/default/xui/pt/floater_about_land.xml +++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml @@ -113,7 +113,7 @@ Vá para o menu Mundo > Sobre o terreno ou selecione outro lote para mostrar <text name="Selling with no objects in parcel."> À venda (objetos não incluÃdos). </text> - <button label="Cancelar venda do terreno" label_selected="Cancelar venda do terreno" left="275" name="Cancel Land Sale" width="165"/> + <button label="Cancelar venda do terreno" label_selected="Cancelar venda do terreno" name="Cancel Land Sale"/> <text name="Claimed:"> Posse em: </text> diff --git a/indra/newview/skins/default/xui/pt/floater_buy_contents.xml b/indra/newview/skins/default/xui/pt/floater_buy_contents.xml index c64523ceb38c1616d7892a2eb91eb1dd52353d34..b9e7a044126592ed26c6707de639bcff2a49fd52 100644 --- a/indra/newview/skins/default/xui/pt/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/pt/floater_buy_contents.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_buy_contents" title="COMPRAR CONTEÚDO"> <text name="contains_text"> - [NAME] contém: + <nolink>[NAME]</nolink> contains: </text> <text name="buy_text"> Comprar por L$[AMOUNT] de(a) [NAME]? diff --git a/indra/newview/skins/default/xui/pt/floater_customize.xml b/indra/newview/skins/default/xui/pt/floater_customize.xml deleted file mode 100644 index a9ec0b9b1ff84d140e2d5dfb7d361dbc3c70f3be..0000000000000000000000000000000000000000 --- a/indra/newview/skins/default/xui/pt/floater_customize.xml +++ /dev/null @@ -1,530 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="APARÊNCIA"> - <tab_container name="customize tab container" tab_min_width="115"> - <text label="Corpo" name="body_parts_placeholder"> - Partes do corpo - </text> - <panel label="Forma" name="Shape"> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - <button label="Corpo" label_selected="Corpo" name="Body"/> - <button label="Cabeça" label_selected="Cabeça" name="Head"/> - <button label="Olhos" label_selected="Olhos" name="Eyes"/> - <button label="Orelhas" label_selected="Orelhas" name="Ears"/> - <button label="Nariz" label_selected="Nariz" name="Nose"/> - <button label="Boca" label_selected="Boca" name="Mouth"/> - <button label="Queixo" label_selected="Queixo" name="Chin"/> - <button label="Tórax" label_selected="Tórax" name="Torso"/> - <button label="Pernas" label_selected="Pernas" name="Legs"/> - <radio_group name="sex radio"> - <radio_item label="Feminino" name="radio" value="0"/> - <radio_item label="Masculino" name="radio2" value="1"/> - </radio_group> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possÃvel modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter um fÃsico novo, arraste um do inventário para o seu avatar. Ou crie um novo. - </text> - <text name="no modify instructions"> - Você não tem permissão para modificar esta vestimenta. - </text> - <text name="Item Action Label"> - Forma: - </text> - <button label="Nova" label_selected="Nova" name="Create New"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - </panel> - <panel label="Pele" name="Skin"> - <button label="Cor de pele" label_selected="Cor de pele" name="Skin Color" width="115"/> - <button label="Detalhes faciais" label_selected="Detalhes faciais" name="Face Detail" width="115"/> - <button label="Maquilagem" label_selected="Maquilagem" name="Makeup" width="115"/> - <button label="Detalhes do corpo" label_selected="Detalhes do corpo" name="Body Detail" width="115"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possÃvel modificar - </text> - <text name="title_loading"> - [DESC]: carregando.. - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizada em [PATH] - </text> - <text name="not worn instructions"> - Para obter uma pele nova, arraste uma do inventário para o seu avatar. Ou crie uma pele nova. - </text> - <text name="no modify instructions"> - Você não tem permissão para modificar esta vestimenta. - </text> - <text name="Item Action Label"> - Pele: - </text> - <texture_picker label="Tattoo: cabeça" name="Head Tattoos" tool_tip="Clique para escolher um desenho" width="86"/> - <texture_picker label="Tattoo: superior" name="Upper Tattoos" tool_tip="Clique para escolher um desenho" width="86"/> - <texture_picker label="Tattoo: inferior" name="Lower Tattoos" tool_tip="Clique para escolher um desenho" width="86"/> - <button label="Novo" label_selected="Novo" name="Create New"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Cabelo" name="Hair"> - <button label="Cor" label_selected="Cor" name="Color" width="115"/> - <button label="Estilo" label_selected="Estilo" name="Style" width="115"/> - <button label="Sombrancelhas" label_selected="Sombrancelhas" name="Eyebrows" width="115"/> - <button label="Rosto" label_selected="Rosto" name="Facial" width="115"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possÃvel modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter um cabelo novo, arraste um tipo de cabelo do inventário para o seu avatar. Ou crie um cabelo novo. - </text> - <text name="no modify instructions"> - Você não ter permissão para modificar essa vestimenta. - </text> - <text name="Item Action Label"> - Cabelo: - </text> - <texture_picker label="Texture" name="Texture" tool_tip="Clique para escolher uma imagem"/> - <button label="Criar novo cabelo" label_selected="Criar novo cabelo" name="Create New"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Olhos" name="Eyes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possÃvel modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter novos olhos, arraste um tipo de olhos do inventário para o seu avatar. Ou crie olhos novos. - </text> - <text name="no modify instructions"> - Você não tem permissão para alterar esta vestimenta. - </text> - <text name="Item Action Label"> - Olhos: - </text> - <texture_picker label="Ãris" name="Iris" tool_tip="Clique para escolher uma imagem"/> - <button label="Criar novos olhos" label_selected="Criar novos olhos" name="Create New"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <text label="Roupas" name="clothes_placeholder"> - Roupa - </text> - <panel label="Camisa" name="Shirt"> - <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> - <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> - <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Criar nova camisa" label_selected="Criar nova camisa" name="Create New"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possÃvel modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter uma camisa nova, arraste uma do inventário para o seu avatar. Ou crie uma camisa nova. - </text> - <text name="no modify instructions"> - Você não ter permissão para modificar esta vestimenta. - </text> - <text name="Item Action Label"> - Camisa: - </text> - </panel> - <panel label="Calças" name="Pants"> - <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> - <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> - <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Criar novas calças" label_selected="Criar novas calças" name="Create New"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possÃvel modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestindo - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter calças novas, arraste uma do inventário para o seu avatar. Ou crie calças novas. - </text> - <text name="no modify instructions"> - Você não tem permissão para modificar esta vestimenta. - </text> - <text name="Item Action Label"> - Calças: - </text> - </panel> - <panel label="Sapatos" name="Shoes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possÃvel modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter novos olhos, arraste um tipo de olhos do inventário para o seu avatar. Ou crie olhos novos. - </text> - <button label="Criar novos sapatos" label_selected="Criar novos sapatos" name="Create New" width="166"/> - <text name="no modify instructions"> - Você não tem permissão para modificar esta vestimenta. - </text> - <text name="Item Action Label"> - Sapatos: - </text> - <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> - <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> - <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Meias" name="Socks"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possÃvel modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido. - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter meias novas, arraste um par do inventário para o seu avatar. Ou crie meias novas. - </text> - <button label="Criar novas meias" label_selected="Criar novas meias" name="Create New"/> - <text name="no modify instructions"> - Você não tem permissão para modificar essa vestimenta. - </text> - <text name="Item Action Label"> - Meias: - </text> - <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> - <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> - <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Jaqueta" name="Jacket"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Não foi possÃvel modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para por uma jaqueta nova, arraste uma do inventário para o seu avatar. Ou crie uma jaqueta nova. - </text> - <button label="Criar nova jaqueta" label_selected="Criar nova jaqueta" name="Create New"/> - <text name="no modify instructions"> - Você não tem permissão para modificar esta vestimenta. - </text> - <text name="Item Action Label"> - Jaqueta: - </text> - <texture_picker label="Tecido superior" name="Upper Fabric" tool_tip="Clique para escolher uma imagem." width="84"/> - <texture_picker label="Tecido Inferior" name="Lower Fabric" tool_tip="Clique para escolher uma imagem." width="84"/> - <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> - <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Luvas" name="Gloves"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possÃvel modificar - </text> - <text name="title_loading"> - [DESC]: carregando.... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter luvas novas, arraste um par do inventário para o seu avatar. Ou crie luvas novas. - </text> - <button label="Criar novas luvas" label_selected="Criar novas luvas" name="Create New"/> - <text name="no modify instructions"> - Você não tem permissão para modificar essa vestimenta. - </text> - <text name="Item Action Label"> - Luvas: - </text> - <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> - <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> - <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Camiseta" name="Undershirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possÃvel modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter uma camiseta nova, arraste uma do inventário para o seu avatar. Ou crie uma camiseta nova. - </text> - <button label="Criar nova camiseta" label_selected="Criar nova camiseta" name="Create New"/> - <text name="no modify instructions"> - Você não ter permissão para modificar essa vestimenta. - </text> - <text name="Item Action Label"> - Camiseta: - </text> - <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> - <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> - <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Roupas de Baixo" name="Underpants"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possÃvel modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter roupa de baixo nova, arraste um modelo do inventário para o seu avatar. Ou crie uma roupa de baixo nova. - </text> - <button label="Criar novas" label_selected="Criar novas" name="Create New" width="180"/> - <text name="no modify instructions"> - Você não tem permissão para modificar essa vestimenta. - </text> - <text name="Item Action Label"> - Roupas de baixo: - </text> - <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> - <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> - <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Saia" name="Skirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possÃvel modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter um saia nova, arraste uma saia do inventário para o seu avatar. Ou crie uma saia nova. - </text> - <button label="Criar nova saia" label_selected="Criar nova saia" name="Create New"/> - <text name="no modify instructions"> - Você não tem permissão para modificar esta vestimenta. - </text> - <text name="Item Action Label"> - Saia: - </text> - <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> - <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> - <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Tatuagem" name="Tattoo"> - <text name="title"> - [DESC]: - </text> - <text name="title_no_modify"> - [DESC]: não pode ser modificado - </text> - <text name="title_loading"> - [DESC]: Carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localização: [PATH] - </text> - <text name="not worn instructions"> - Para por uma tatuagem nova, arraste uma tatuagem do inventário para o seu avatar. Ou crie uma tatuagem nova. - </text> - <button label="Criar tatuagem" label_selected="Criar tatuagem" name="Create New"/> - <text name="no modify instructions"> - Você não está autorizado a modificar este acessório. - </text> - <text name="Item Action Label"> - Tatuagem: - </text> - <texture_picker label="Tatuagem na cabeça" name="Head Tattoo" tool_tip="Selecionar imagem"/> - <texture_picker label="Tatuagem parte de cima" name="Upper Tattoo" tool_tip="Selecionar imagem"/> - <texture_picker label="Tatuagem de baixo" name="Lower Tattoo" tool_tip="Selecionar imagem"/> - <button label="Tirar" label_selected="Tirar" name="Take Off"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Alpha" name="Alpha"> - <text name="title"> - [DESC]: - </text> - <text name="title_no_modify"> - [DESC]: não pode ser modificado - </text> - <text name="title_loading"> - [DESC]: Carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localização: [PATH] - </text> - <text name="not worn instructions"> - Para por uma máscara alpha nova, arraste a máscara do inventário para o seu avatar. Ou crie uma máscara nova. - </text> - <button label="Criar Alpha novo" label_selected="Criar Alpha novo" name="Create New"/> - <text name="no modify instructions"> - Você não está autorizado a modificar este acessório. - </text> - <text name="Item Action Label"> - Alpha: - </text> - <texture_picker label="Alpha inferior" name="Lower Alpha" tool_tip="Selecionar imagem"/> - <texture_picker label="Alpha de cima" name="Upper Alpha" tool_tip="Selecionar imagem"/> - <texture_picker label="Cabeça Alpha" name="Head Alpha" tool_tip="Selecionar imagem"/> - <texture_picker label="Olhos Alpha" name="Eye Alpha" tool_tip="Selecionar imagem"/> - <texture_picker label="Cabelo alpha" name="Hair Alpha" tool_tip="Selecionar imagem"/> - <button label="Tirar" label_selected="Tirar" name="Take Off"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - </tab_container> - <scroll_container left="249" name="panel_container"/> - <button label="Dados do script" label_selected="Dados do script" name="script_info" tool_tip="Mostrar scripts anexados ao seu avatar"/> - <button label="Criar look" label_selected="Criar look" name="make_outfit_btn"/> - <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> - <button label="OK" label_selected="OK" name="Ok"/> -</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_device_settings.xml b/indra/newview/skins/default/xui/pt/floater_device_settings.xml deleted file mode 100644 index 48a4a6ef6f4539b3fee8e94cf4758f89593afb0d..0000000000000000000000000000000000000000 --- a/indra/newview/skins/default/xui/pt/floater_device_settings.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_device_settings" title="CONFIGURAÇÃO DE DISPOSITIVO DE VOZ"/> diff --git a/indra/newview/skins/default/xui/pt/floater_import_collada.xml b/indra/newview/skins/default/xui/pt/floater_import_collada.xml new file mode 100644 index 0000000000000000000000000000000000000000..ad55d416c38989f472991340badc8691c83302bb --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_import_collada.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Import Collada" title="Importar cena"> + <text name="mesh count"> + Meshes: [COUNT] + </text> + <text name="texture count"> + Texturas: [COUNT] + </text> + <text name="status"> + Status: [STATUS] + </text> + <button label="Cancelar" name="cancel"/> + <button label="OK" name="ok"/> + <string name="status_idle"> + Inativo + </string> + <string name="status_uploading"> + Carregando [NAME] + </string> + <string name="status_creating"> + Criando objeto [NAME] + </string> +</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml index d21e5740112de598d23722b8baff70b1690adf52..71759abdc243009414433c78d69033a5816ebf0d 100644 --- a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml @@ -5,6 +5,7 @@ <check_box label="Roupas" name="check_clothing"/> <check_box label="Gestos" name="check_gesture"/> <check_box label="Landmarks" name="check_landmark"/> + <check_box label="Meshes:" name="check_mesh"/> <check_box label="Anotações" name="check_notecard"/> <check_box label="Objetos" name="check_object"/> <check_box label="Scripts" name="check_script"/> diff --git a/indra/newview/skins/default/xui/pt/floater_model_preview.xml b/indra/newview/skins/default/xui/pt/floater_model_preview.xml new file mode 100644 index 0000000000000000000000000000000000000000..cdad55bded57e8b2d9d1d819b773bc96c2d2186d --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_model_preview.xml @@ -0,0 +1,231 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Model Preview" title="Carregar modelo"> + <string name="status_idle"> + Inativo + </string> + <string name="status_reading_file"> + Carregando... + </string> + <string name="status_generating_meshes"> + Gerando meshes... + </string> + <string name="status_vertex_number_overflow"> + Erro: Número de Vertex acima de 65534. Abortado. + </string> + <string name="high"> + Alto + </string> + <string name="medium"> + Média + </string> + <string name="low"> + Baixo + </string> + <string name="lowest"> + Mais baixo + </string> + <string name="mesh_status_good"> + Entregar! + </string> + <string name="mesh_status_na"> + N/D + </string> + <string name="mesh_status_none"> + Nenhum + </string> + <string name="mesh_status_submesh_mismatch"> + Cada nÃvel de detalhamento têm um número de faces para textura. + </string> + <string name="mesh_status_mesh_mismatch"> + Cada nÃvel de detalhamento têm um número de faces para textura. + </string> + <string name="mesh_status_too_many_vertices"> + O nÃvel de detalhamento possui vértices demais. + </string> + <string name="mesh_status_missing_lod"> + Falta o nÃvel de detalhamento necessário. + </string> + <string name="layer_all"> + Tudo + </string> + <string name="decomposing"> + Analisando... + </string> + <string name="simplifying"> + Simplificando... + </string> + <text name="name_label"> + Nome: + </text> + <text name="lod_label"> + Visualizar + </text> + <combo_box name="preview_lod_combo" tool_tip="LOD para ver no renderizador de pré-visualização"> + <combo_item name="high"> + NÃvel de detalhamento: Alto + </combo_item> + <combo_item name="medium"> + NÃvel de detalhamento: Média + </combo_item> + <combo_item name="low"> + NÃvel de detalhamento: Baixo + </combo_item> + <combo_item name="lowest"> + NÃvel de detalhamento: Mais baixo + </combo_item> + </combo_box> + <panel> + <text name="streaming cost"> + Custo do recurso: [COST] + </text> + <text name="physics cost"> + Custo fÃsico: [COST] + </text> + <text name="upload fee"> + Taxa de upload: N/D + </text> + </panel> + <text name="status"> + [STATUS] + </text> + <button label="Padrão" name="reset_btn" tool_tip="Valores padrão"/> + <button label="Upload" name="ok_btn" tool_tip="Carregar no simulador"/> + <button label="Cancelar" name="cancel_btn"/> + <tab_container name="import_tab"> + <panel label="NÃvel de detalhamento:" name="lod_panel"> + <text name="lod_table_header"> + Selecione o nÃvel de detalhamento: + </text> + <text name="high_label" value="Alto"/> + <text name="high_triangles" value="0"/> + <text name="high_vertices" value="0"/> + <text name="medium_label" value="Médio"/> + <text name="medium_triangles" value="0"/> + <text name="medium_vertices" value="0"/> + <text name="low_label" value="Baixo"/> + <text name="low_triangles" value="0"/> + <text name="low_vertices" value="0"/> + <text name="lowest_label" value="Mais baixo"/> + <text name="lowest_triangles" value="0"/> + <text name="lowest_vertices" value="0"/> + <text name="lod_table_footer"> + NÃvel de detalhamento: [DETAIL] + </text> + <radio_group name="lod_file_or_limit" value="lod_from_file"> + <radio_item label="Carregar de arquivo" name="lod_from_file"/> + <radio_item label="Gerar automaticamente" name="lod_auto_generate"/> + <radio_item label="Nenhum" name="lod_none"/> + </radio_group> + <button label="Procurar..." name="lod_browse"/> + <combo_box name="lod_mode"> + <combo_item name="triangle_limit"> + Limite de triângulo + </combo_item> + <combo_item name="error_threshold"> + Limite de erro + </combo_item> + </combo_box> + <text name="build_operator_text"> + Operador de construção: + </text> + <text name="queue_mode_text"> + Modo de fila: + </text> + <combo_box name="build_operator"> + <combo_item name="edge_collapse"> + Queda na borda + </combo_item> + <combo_item name="half_edge_collapse"> + Meia queda na borda + </combo_item> + </combo_box> + <combo_box name="queue_mode"> + <combo_item name="greedy"> + EgoÃsta + </combo_item> + <combo_item name="lazy"> + Preguiçoso + </combo_item> + <combo_item name="independent"> + Independente + </combo_item> + </combo_box> + <text name="border_mode_text"> + Modo da borda: + </text> + <text name="share_tolderance_text"> + Tolerância com compartilhamento: + </text> + <combo_box name="border_mode"> + <combo_item name="border_unlock"> + Desbloquear + </combo_item> + <combo_item name="border_lock"> + Bloquear + </combo_item> + </combo_box> + <text name="crease_label"> + Ângulo da dobra: + </text> + <spinner name="crease_angle" value="75"/> + </panel> + <panel label="FÃsica" name="physics_panel"> + <panel name="physics geometry"> + <radio_group name="physics_load_radio" value="physics_load_from_file"> + <radio_item label="Arquivo:" name="physics_load_from_file"/> + <radio_item label="NÃvel de detalhamento:" name="physics_use_lod"/> + </radio_group> + <combo_box name="physics_lod_combo" tool_tip="LOD para forma fÃsica"> + <combo_item name="physics_lowest"> + Mais baixo + </combo_item> + <combo_item name="physics_low"> + Baixo + </combo_item> + <combo_item name="physics_medium"> + Médio + </combo_item> + <combo_item name="physics_high"> + Alto + </combo_item> + </combo_box> + <button label="Procurar..." name="physics_browse"/> + </panel> + <panel name="physics analysis"> + <slider label="Alisar:" name="Smooth"/> + <check_box label="Tapar buracos (lento)" name="Close Holes (Slow)"/> + <button label="Analisar" name="Decompose"/> + <button label="Cancelar" name="decompose_cancel"/> + </panel> + <panel name="physics simplification"> + <slider label="Demãos:" name="Combine Quality"/> + <slider label="Escala do detalhamento:" name="Detail Scale"/> + <slider label="Manter:" name="Retain%"/> + <button label="Simplificar" name="Simplify"/> + <button label="Cancelar" name="simplify_cancel"/> + </panel> + <panel name="physics info"> + <slider label="Visualizar:" name="physics_explode"/> + <text name="physics_triangles"> + Triângulos: [TRIANGLES] + </text> + <text name="physics_points"> + Vértices: [POINTS] + </text> + <text name="physics_hulls"> + Hulls: [HULLS] + </text> + </panel> + </panel> + <panel label="Modificadores" name="modifiers_panel"> + <spinner name="import_scale" value="1.0"/> + <text name="import_dimensions"> + [X] x [Y] x [Z] m + </text> + <check_box label="Texturas" name="upload_textures"/> + <check_box label="Peso da pele" name="upload_skin"/> + <check_box label="Posição das juntas" name="upload_joints"/> + <spinner name="pelvis_offset" value="0.0"/> + </panel> + </tab_container> +</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_model_wizard.xml b/indra/newview/skins/default/xui/pt/floater_model_wizard.xml new file mode 100644 index 0000000000000000000000000000000000000000..1064e16e8339fa001782c20c52a8465832923d77 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_model_wizard.xml @@ -0,0 +1,241 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Model Wizard" title="CARREGAR ASSISTENTE DE MODELAGEM"> + <button label="5. Carregar" name="upload_btn"/> + <button label="4. Revisar" name="review_btn"/> + <button label="3. FÃsica" name="physics2_btn"/> + <button label="3. FÃsica" name="physics_btn"/> + <button label="2. Otimizar" name="optimize_btn"/> + <button label="1. Selecionra arquivo" name="choose_file_btn"/> + <panel name="choose_file_panel"> + <panel name="header_panel"> + <text name="header_text"> + Carregar modelo + </text> + </panel> + <text name="description"> + O assistente ajuda você a importar modelos mesh para o Second Life. Para começar, especifique o arquivo com o modelo a ser importado. O Second Life suporta arquivos COLLADA (.dae). + </text> + <panel name="content"> + <text name="Cache location"> + Nome do arquivo: + </text> + <button label="Procurar..." label_selected="Procurar..." name="browse"/> + <text name="dimensions"> + X Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + </panel> + <panel name="optimize_panel"> + <panel name="header_panel"> + <text name="header_text"> + Otimizar + </text> + </panel> + <text name="description"> + O assistente otimizou seu modelo para melhorar o desempenho. Ajuste os resultados da otimização abaixou ou clique em Próximo para prosseguir. + </text> + <panel name="content"> + <text name="high_detail_text"> + Gerar nÃvel de detalhamento: Alto + </text> + <text name="medium_detail_text"> + Gerar nÃvel de detalhamento: Médio + </text> + <text name="low_detail_text"> + Gerar nÃvel de detalhamento: Baixo + </text> + <text name="lowest_detail_text"> + Gerar nÃvel de detalhamento: Mais baixo + </text> + </panel> + <panel name="content2"> + <text name="lod_label"> + Visualizar modelo: + </text> + <combo_box name="preview_lod_combo2" tool_tip="LOD para ver no renderizador de pré-visualização"> + <combo_item name="high"> + Alto + </combo_item> + <combo_item name="medium"> + Médio + </combo_item> + <combo_item name="low"> + Baixo + </combo_item> + <combo_item name="lowest"> + Mais baixo + </combo_item> + </combo_box> + <text name="streaming cost"> + Custo do recurso: [COST] + </text> + <text name="dimensions"> + X Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + </panel> + <panel name="physics_panel"> + <panel name="header_panel"> + <text name="header_text"> + FÃsica + </text> + </panel> + <text name="description"> + O assistente cria uma forma fÃsica que determina como o objeto interage com outros objetos e avatares. Ajuste a barra para o nÃvel de detalhamento mais apropriado para a finalidade do seu objeto: + </text> + <panel name="content"> + <text name="streaming cost"> + Custo do recurso: [COST] + </text> + </panel> + </panel> + <panel name="physics2_panel"> + <panel name="header_panel"> + <text name="header_text"> + FÃsica + </text> + </panel> + <text name="description"> + Veja a forma fÃsica abaixo e clique em Próximo para prosseguir. Para modificar o formato fÃsico, clique em Anterior. + </text> + <panel name="content"> + <text name="lod_label"> + Visualizar modelo: + </text> + <combo_box name="preview_lod_combo3" tool_tip="LOD para ver no renderizador de pré-visualização"> + <combo_item name="high"> + Alto + </combo_item> + <combo_item name="medium"> + Médio + </combo_item> + <combo_item name="low"> + Baixo + </combo_item> + <combo_item name="lowest"> + Mais baixo + </combo_item> + </combo_box> + <text name="dimensions"> + X Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + <text name="streaming cost"> + Custo do recurso: [COST] + </text> + </panel> + </panel> + <panel name="review_panel"> + <panel name="header_panel"> + <text name="header_text"> + Revisar + </text> + </panel> + <text name="description"> + Veja os detalhes abaixo e clique em Carregar para carregar seu modelo. Seu saldo L$ será cobrado quando você clicar em Carregar. + </text> + <panel name="content"> + <text name="lod_label"> + Visualizar modelo: + </text> + <combo_box name="preview_lod_combo" tool_tip="LOD para ver no renderizador de pré-visualização"> + <combo_item name="high"> + Alto + </combo_item> + <combo_item name="medium"> + Médio + </combo_item> + <combo_item name="low"> + Baixo + </combo_item> + <combo_item name="lowest"> + Mais baixo + </combo_item> + </combo_box> + <text name="dimensions"> + X Y: Z: + </text> + <text name="dimension_dividers"> + | | + </text> + </panel> + <text name="streaming cost"> + Custo do recurso: [COST] + </text> + <text name="physics cost"> + Custo fÃsico: [COST] + </text> + </panel> + <panel name="upload_panel"> + <panel name="header_panel"> + <text name="header_text"> + Carregado! + </text> + </panel> + <text name="description"> + Parabéns! Seu modelo foi carregado com êxito. Procure-o na pasta Objetos de seu inventário. + </text> + </panel> + <button label="<< Voltar" name="back"/> + <button label="Próximo >>" name="next"/> + <button label="Carregar" name="upload" tool_tip="Carregar no simulador"/> + <button label="Cancelar" name="cancel"/> + <button label="Fechar" name="close"/> + <spinner name="import_scale" value="1.0"/> + <string name="status_idle"> + Inativo + </string> + <string name="status_reading_file"> + Carregando... + </string> + <string name="status_generating_meshes"> + Gerando meshes... + </string> + <string name="status_vertex_number_overflow"> + Erro: Número de Vertex acima de 65534. Abortado. + </string> + <string name="high"> + Alto + </string> + <string name="medium"> + Médio + </string> + <string name="low"> + Baixo + </string> + <string name="lowest"> + Mais baixo + </string> + <string name="mesh_status_good"> + Entregar! + </string> + <string name="mesh_status_na"> + N/D + </string> + <string name="mesh_status_none"> + Nenhum + </string> + <string name="mesh_status_submesh_mismatch"> + Cada nÃvel de detalhamento têm um número de faces para textura. + </string> + <string name="mesh_status_mesh_mismatch"> + Cada nÃvel de detalhamento têm um número de faces para textura. + </string> + <string name="mesh_status_too_many_vertices"> + O nÃvel de detalhamento possui vértices demais. + </string> + <string name="mesh_status_missing_lod"> + Falta o nÃvel de detalhamento necessário. + </string> + <string name="layer_all"> + Tudo + </string> +</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_preview_classified.xml b/indra/newview/skins/default/xui/pt/floater_preview_classified.xml deleted file mode 100644 index bb626430ed2ab59fddc05e0f9e8e33878238c2c3..0000000000000000000000000000000000000000 --- a/indra/newview/skins/default/xui/pt/floater_preview_classified.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="classified_preview" title="INFORMAÇÕES CLASSIFICADAS"> - <floater.string name="Title"> - Classificados: [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_preview_event.xml b/indra/newview/skins/default/xui/pt/floater_preview_event.xml deleted file mode 100644 index b422580f3b83fe1160e30647990b69e69721c428..0000000000000000000000000000000000000000 --- a/indra/newview/skins/default/xui/pt/floater_preview_event.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="event_preview" title="DADOS DO EVENTO"> - <floater.string name="Title"> - Evento: [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_price_for_listing.xml b/indra/newview/skins/default/xui/pt/floater_price_for_listing.xml new file mode 100644 index 0000000000000000000000000000000000000000..b078962feba04d9e1413d410dbaee1c2fa45b968 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_price_for_listing.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="price_for_listing" title="PUBLICAR ANÚNCIO"> + <text name="explanation_text"> + Seu anúncio será publicado por uma semana a partir da data de publicação. + +A posição do seu anúncio nos classificados depende de quanto você paga. + +Os anúncios de maior valor vão para o topo da lista e aparecem mais no topo dos resultados de busca. + </text> + <text name="price_text"> + Preço do anúncio: + </text> + <text name="price_symbol"> + L$ + </text> + <button label="OK" name="set_price_btn"/> + <button label="Cancelar" name="cancel_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_sound_devices.xml b/indra/newview/skins/default/xui/pt/floater_sound_devices.xml new file mode 100644 index 0000000000000000000000000000000000000000..0e6d923778dc33effb74808a7ea6e7232ebcf744 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_sound_devices.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_sound_devices" title="Dispositivos de áudio"> + <text name="voice_label"> + Bate-papo de voz + </text> + <check_box label="Ativado" name="enable_voice"/> +</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_statistics.xml b/indra/newview/skins/default/xui/pt/floater_statistics.xml deleted file mode 100644 index ecbf638157fb3f2216761ea0c41fc8f45c60359a..0000000000000000000000000000000000000000 --- a/indra/newview/skins/default/xui/pt/floater_statistics.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="stats floater" title="ESTATÃSTICAS"/> diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml index 7289b592fddc2299dca6cca9bd39752625083ef3..ed273d9f28c55b40410b2d2fc4b117b1be92e0e8 100644 --- a/indra/newview/skins/default/xui/pt/floater_tools.xml +++ b/indra/newview/skins/default/xui/pt/floater_tools.xml @@ -125,6 +125,18 @@ <text left="134" name="prim_count"> Prims: [COUNT] </text> + <text name="linked_set_count"> + Conjuntos linkados: [COUNT] + </text> + <text name="linked_set_cost" tool_tip="Custo dos conjuntos selecionados [prims],[complexidade fÃsica]"> + Custo: [COST] / [PHYSICS] + </text> + <text name="object_count"> + Objetos: [COUNT] + </text> + <text name="object_cost" tool_tip="Custo dos objetos selecionados [prims] / [complexidade fÃsica]"> + Custo: [COST] / [PHYSICS] + </text> <tab_container name="Object Info Tabs" tab_max_width="60" tab_min_width="30" width="288"> <panel label="Comum" name="General"> <panel.string name="text deed continued"> @@ -269,15 +281,6 @@ <combo_box.item label="Anel" name="Ring"/> <combo_box.item label="Esculpida" name="Sculpted"/> </combo_box> - <combo_box name="material"> - <combo_box.item label="Pedra" name="Stone"/> - <combo_box.item label="Metal" name="Metal"/> - <combo_box.item label="Vidro" name="Glass"/> - <combo_box.item label="Madeira" name="Wood"/> - <combo_box.item label="Carne" name="Flesh"/> - <combo_box.item label="Plástico" name="Plastic"/> - <combo_box.item label="Couro" name="Rubber"/> - </combo_box> <text name="text cut"> Path Cut (begin/end) </text> @@ -350,9 +353,19 @@ <combo_box.item label="Toróide" name="Torus"/> <combo_box.item label="Plano" name="Plane"/> <combo_box.item label="Cilindro" name="Cylinder"/> + <combo_box.item label="Mesh" name="Mesh"/> </combo_box> </panel> <panel label="Recursos" name="Features"> + <panel.string name="None"> + Nenhum + </panel.string> + <panel.string name="Prim"> + Prim + </panel.string> + <panel.string name="Convex Hull"> + Hull convexo + </panel.string> <text name="select_single" width="272"> Selecione apenas um prim para editar suas caracterÃsticas. </text> @@ -377,6 +390,23 @@ <spinner label="Enfocar" name="Light Focus"/> <spinner label="Queda" name="Light Falloff"/> <spinner label="Ambiente" name="Light Ambiance"/> + <text name="label physicsshapetype"> + Tipo de formato fÃsico: + </text> + <combo_box name="Physics Shape Type Combo Ctrl" tool_tip="Selecione o tipo de formato fÃsico"/> + <combo_box name="material"> + <combo_box.item label="Pedra" name="Stone"/> + <combo_box.item label="Metal" name="Metal"/> + <combo_box.item label="Vidro" name="Glass"/> + <combo_box.item label="Madeira" name="Wood"/> + <combo_box.item label="Carne" name="Flesh"/> + <combo_box.item label="Plástico" name="Plastic"/> + <combo_box.item label="Borrracha" name="Rubber"/> + </combo_box> + <spinner label="Gravidade" name="Physics Gravity"/> + <spinner label="Fricção" name="Physics Friction"/> + <spinner label="Densidade" name="Physics Density"/> + <spinner label="Restituição" name="Physics Restitution"/> </panel> <panel label="Textura" name="Texture"> <panel.string name="string repeats per meter"> diff --git a/indra/newview/skins/default/xui/pt/menu_inventory_add.xml b/indra/newview/skins/default/xui/pt/menu_inventory_add.xml index 9f345b5b6ed3f97a01171cc6669f0c1d64e80291..7a7ebc50af162a884dc818c508dc2c9c2bc0747c 100644 --- a/indra/newview/skins/default/xui/pt/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/pt/menu_inventory_add.xml @@ -4,6 +4,8 @@ <menu_item_call label="Imagem (L$[COST])..." name="Upload Image"/> <menu_item_call label="Som (L$[COST])..." name="Upload Sound"/> <menu_item_call label="Animação (L$[COST])..." name="Upload Animation"/> + <menu_item_call label="Modelar..." name="Upload Model"/> + <menu_item_call label="Assistente de modelagem..." name="Upload Model Wizard"/> <menu_item_call label="Volume (L$[COST] per file)..." name="Bulk Upload"/> <menu_item_call label="Autorizações de upload padrão" name="perm prefs"/> </menu> diff --git a/indra/newview/skins/default/xui/pt/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/pt/menu_model_import_gear_default.xml new file mode 100644 index 0000000000000000000000000000000000000000..079f876add8685180f54792b217c33f79967cdcf --- /dev/null +++ b/indra/newview/skins/default/xui/pt/menu_model_import_gear_default.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="model_menu_gear_default"> + <menu_item_check label="Mostrar bordas" name="show_edges"/> + <menu_item_check label="Mostrar fÃsica" name="show_physics"/> + <menu_item_check label="Mostrar texturas" name="show_textures"/> + <menu_item_check label="Mostrar peso da pele" name="show_skin_weight"/> + <menu_item_check label="Mostrar posição das juntas" name="show_joint_positions"/> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml index 0a2a2994f6f9d350dfbf215995108097b41a10fd..4213db7440ccc414b4d9d159f7301f1173e0f055 100644 --- a/indra/newview/skins/default/xui/pt/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml @@ -120,6 +120,8 @@ <menu_item_call label="Imagem (L$[COST])..." name="Upload Image"/> <menu_item_call label="Som (L$[COST])..." name="Upload Sound"/> <menu_item_call label="Animação (L$[COST])..." name="Upload Animation"/> + <menu_item_call label="Modelar..." name="Upload Model"/> + <menu_item_call label="Assistente de modelagem..." name="Upload Model Wizard"/> <menu_item_call label="Volume (L$[COST] por arquivo)..." name="Bulk Upload"/> </menu> <menu_item_call label="Desfazer" name="Undo"/> @@ -159,7 +161,7 @@ <menu_item_check label="Alpha" name="Alpha"/> <menu_item_check label="Ãrvore" name="Tree"/> <menu_item_check label="Avatares" name="Character"/> - <menu_item_check label="SurfacePath" name="SurfacePath"/> + <menu_item_check label="Patch de superfÃcie" name="Surface Patch"/> <menu_item_check label="Céu" name="Sky"/> <menu_item_check label="Ãgua" name="Water"/> <menu_item_check label="Chão" name="Ground"/> @@ -217,6 +219,7 @@ <menu_item_check label="Painel de texturas" name="Texture Category"/> <menu_item_check label="Tempos" name="Fast Timers"/> <menu_item_check label="Memória" name="Memory"/> + <menu_item_check label="EstatÃsticas da cena" name="Scene Statistics"/> <menu_item_call label="Region Info to Debug Console" name="Region Info to Debug Console"/> <menu_item_check label="Câmera:" name="Camera"/> <menu_item_check label="Vento" name="Wind"/> @@ -224,6 +227,7 @@ </menu> <menu label="Show Info" name="Display Info"> <menu_item_check label="Mostrar hora" name="Show Time"/> + <menu_item_check label="Mostar custo do upload" name="Show Upload Cost"/> <menu_item_check label="Dados de renderização" name="Show Render Info"/> <menu_item_check label="Mostrar info da textura" name="Show Texture Info"/> <menu_item_check label="Mostrar cor sob o cursor" name="Show Color Under Cursor"/> @@ -246,7 +250,12 @@ <menu_item_check label="Frame Test" name="Frame Test"/> </menu> <menu label="Render Metadata" name="Render Metadata"> + <menu_item_check label="Normais" name="Normals"/> + <menu_item_check label="Formas fÃsicas" name="Physics Shapes"/> <menu_item_check label="Tipo de atualização" name="Update Type"/> + <menu_item_check label="Dados LOD" name="LOD Info"/> + <menu_item_check label="Fila de construção" name="Build Queue"/> + <menu_item_check label="Esculpir" name="Sculpt"/> </menu> <menu label="Rendering" name="Rendering"> <menu_item_check label="Axes" name="Axes"/> @@ -312,6 +321,7 @@ <menu_item_call label="Depurar texturas do avatar" name="Debug Avatar Textures"/> </menu> <menu_item_check label="Texturas HTTP" name="HTTP Textures"/> + <menu_item_check label="Inventário HTTP" name="HTTP Inventory"/> <menu_item_check label="Console Window on next Run" name="Console Window"/> <menu_item_call label="Request Admin Status" name="Request Admin Options"/> <menu_item_call label="Sair do modo admin" name="Leave Admin Options"/> diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml index 0786a62f13ae3f6a24d12dc981e93d01417f53b9..56a33f51e8cd06cf2febf880afcb5efe7a0b7ad7 100644 --- a/indra/newview/skins/default/xui/pt/notifications.xml +++ b/indra/newview/skins/default/xui/pt/notifications.xml @@ -2148,6 +2148,12 @@ Ela pode afetar a digitação da senha. <notification name="RezItemNoPermissions"> Sem permissões suficientes para criar objetos. </notification> + <notification name="IMAcrossParentEstates"> + Não é possÃvel enviar MIs entre propriedades-pai. + </notification> + <notification name="TransferInventoryAcrossParentEstates"> + Não é possÃvel transferir o inventário para propriedades-pai. + </notification> <notification name="UnableToLoadNotecard"> Não é possÃvel carregar notas neste momento. </notification> @@ -2718,6 +2724,10 @@ Para sua segurança, os SLurls serão bloqueados por alguns instantes. Sua voz foi silenciada pelo moderador. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="UploadCostConfirmation"> + O carregamento custa L$[PRICE]. Deseja prosseguir? + <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Carregar"/> + </notification> <notification name="ConfirmClearTeleportHistory"> Tem certeza que deseja apagar todo o seu histórico de teletransporte? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> @@ -2729,6 +2739,9 @@ O botão será exibido quando houver espaço suficente. <notification name="ShareNotification"> Selecione os residentes com quem compartilhar. </notification> + <notification name="MeshUploadError"> + [LABEL] não foi carregado: [MESSAGE] [IDENTIFIER] [INVALIDITY_IDENTIFIER] + </notification> <notification name="ShareItemsConfirmation"> Tem certeza de que quer compartilhar os itens abaixo? @@ -2745,6 +2758,19 @@ Com os seguintes residentes: <notification name="DeedToGroupFail"> Ocorreu uma falha durante a doação ao grupo. </notification> + <notification name="ReleaseLandThrottled"> + O lote [PARCEL_NAME] não pode ser abandonado. + </notification> + <notification name="ReleasedLandWithReclaim"> + O lote de [AREA] m² '[PARCEL_NAME]' foi liberado. + +Você tem [RECLAIM_PERIOD] para reivindicá-lo por L$0. Depois o lote será colocado à venda para qualquer interessado. + </notification> + <notification name="ReleasedLandNoReclaim"> + O lote de [AREA] m² '[PARCEL_NAME]' foi liberado. + +Ele está à venda para qualquer interessado. + </notification> <notification name="AvatarRezNotification"> ( [EXISTENCE] segundos de vida ) O avatar de '[NAME]' emergiu em [TIME] segundos. @@ -2883,6 +2909,10 @@ Se o botão Falar for ocultado, o recurso de voz será desabilitado. É preciso usar o modo Avançado para criar e editar grupos. Desejar sair para mudar o modo? Selecione o modo na tela de login. <usetemplate name="okcancelbuttons" notext="Não sair" yestext="Sair"/> </notification> + <notification label="" name="NoPlaceInfo"> + É preciso estar no modo Avançado para visualizar o perfil de um lugar. Deseja sair para mudar o modo? Selecione o modo na tela de login. + <usetemplate name="okcancelbuttons" notext="Não sair" yestext="Sair"/> + </notification> <notification label="" name="NoPicks"> É preciso usar o modo Avançado para criar e editar Destaques. Desejar sair para mudar o modo? Selecione o modo na tela de login. <usetemplate name="okcancelbuttons" notext="Não sair" yestext="Sair"/> @@ -2903,9 +2933,18 @@ Se o botão Falar for ocultado, o recurso de voz será desabilitado. É preciso usar o modo Avançado para fazer pagamentos a outros residentes. Desejar sair para mudar o modo? <usetemplate name="okcancelbuttons" notext="Não sair" yestext="Sair"/> </notification> - <global name="UnsupportedCPU"> - - A velocidade da sua CPU não suporta os requisitos mÃnimos exigidos. - </global> + <notification label="" name="NoInventory"> + É preciso estar no modo Avançado para visualizar o inventário. Deseja sair para mudar o modo? + <usetemplate name="okcancelbuttons" notext="Não sair" yestext="Sair"/> + </notification> + <notification label="" name="NoAppearance"> + É preciso usar o modo Avançado para usar o editor de visual. Deseja sair para mudar o modo? + <usetemplate name="okcancelbuttons" notext="Não sair" yestext="Sair"/> + </notification> + <notification label="" name="NoSearch"> + É preciso estar no modo Avançado para fazer pesquisas. Deseja sair para mudar o modo? + <usetemplate name="okcancelbuttons" notext="Não sair" yestext="Sair"/> + </notification> <global name="UnsupportedGLRequirements"> Aparentemente a sua máquina não atende os requisitos de hardware do [APP_NAME]. [APP_NAME] requer placas de vÃdeo OpenGL com suporte a multitexturas. Se sua place de vÃdeo tiver este perfil, atualize o driver da placa de vÃdeo, assim como patches e service packs do sistema operacional. diff --git a/indra/newview/skins/default/xui/pt/panel_friends.xml b/indra/newview/skins/default/xui/pt/panel_friends.xml deleted file mode 100644 index 34073f9ce1c9589227d213e5fb5463130b5cc352..0000000000000000000000000000000000000000 --- a/indra/newview/skins/default/xui/pt/panel_friends.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="friends"> - <string name="Multiple"> - Diversos amigos - </string> - <scroll_list name="friend_list" tool_tip="Aperte shift ou control enquanto clica para selecionar múltiplos amigos"> - <column name="icon_online_status" tool_tip="Status Online"/> - <column label="Nome" name="friend_name" tool_tip="Nome"/> - <column name="icon_visible_online" tool_tip="Amigo pode ver quando você está online"/> - <column name="icon_visible_map" tool_tip="Amigo pode localizá-lo no mapa"/> - <column name="icon_edit_mine" tool_tip="Amigo pode editar, apagar ou pegar seus objetos"/> - <column name="icon_edit_theirs" tool_tip="Você pode editar os objetos deste amigo"/> - </scroll_list> - <button label="MI/Chamar" name="im_btn" tool_tip="Abrir sessão de Mensagem Instantânea" width="86"/> - <button label="Perfil" name="profile_btn" tool_tip="Mostrar foto, grupos e outras informações" width="86"/> - <button label="Teletransportar" name="offer_teleport_btn" tool_tip="Oferecer a este amigo o teletransporte para sua localização atual" width="86"/> - <button label="Pagar" name="pay_btn" tool_tip="Dar Linden dólares (L$) a este amigo" width="86"/> - <button label="Tirar" name="remove_btn" tool_tip="Remover esta pessoa de sua lista de amigos" width="86"/> - <button label="Adicionar" name="add_btn" tool_tip="Oferecer amizade para um residente" width="86"/> -</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_colors.xml b/indra/newview/skins/default/xui/pt/panel_preferences_colors.xml index 46d9517a9817c2f76aa2c742c4c556317f507a79..d6c6f66e37d0facbc7aa61fcfe7b769fdd59e40b 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_colors.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_colors.xml @@ -22,6 +22,9 @@ <text name="text_box5"> Erros </text> + <text name="text_box10"> + Direto + </text> <text name="text_box7"> Proprietário </text> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml index 4b03c79a9edd0a49fecc3f7b1db584c93d3f2739..28e71843267de71f36b0901b07f222cb45e0e4d1 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml @@ -28,8 +28,20 @@ rápido </text> <check_box initial_value="verdadeiro" label="Ãgua transparente" name="TransparentWater"/> <check_box initial_value="true" label="Bump de Mapeamento e Brilho" name="BumpShiny"/> + <check_box initial_value="verdadeiro" label="Luzes locais" name="LocalLights"/> <check_box initial_value="true" label="Sombreadores básicos" name="BasicShaders" tool_tip="Desabilitar esta opção poderá impedir que alguns drivers de placa de vÃdeo a travem."/> <check_box initial_value="true" label="Sombreadores Atmosféricos" name="WindLightUseAtmosShaders"/> + <check_box initial_value="verdadeiro" label="Iluminação e sombras" name="UseLightShaders"/> + <check_box initial_value="verdadeiro" label="Oclusão ambiental" name="UseSSAO"/> + <check_box initial_value="verdadeiro" label="Profundidade" name="UseDoF"/> + <text name="shadows_label"> + Sombras: + </text> + <combo_box name="ShadowDetail"> + <combo_box.item label="Nenhum" name="0"/> + <combo_box.item label="Sol/Lua" name="1"/> + <combo_box.item label="Sol/Lua + Projetores" name="2"/> + </combo_box> <text name="reflection_label"> Reflexo de água: </text> diff --git a/indra/newview/skins/default/xui/pt/panel_region_general.xml b/indra/newview/skins/default/xui/pt/panel_region_general.xml index e06f3c74bf7f79fd7680a61f7d741a5097cfc41d..4be1cd11c00480b93110688368499abcd4fcea25 100644 --- a/indra/newview/skins/default/xui/pt/panel_region_general.xml +++ b/indra/newview/skins/default/xui/pt/panel_region_general.xml @@ -25,6 +25,7 @@ <check_box label="Permitir revenda do terreno" name="allow_land_resell_check"/> <check_box label="Permitir junção/divisão do terreno" name="allow_parcel_changes_check"/> <check_box label="Bloquear exibição do terreno na busca" name="block_parcel_search_check" tool_tip="Permitir que as pessoas vejam esta região e seus lotes nos resultados de busca"/> + <check_box label="Permitir objetos mesh" name="mesh_rez_enabled_check" tool_tip="Permitir que que outras pessoas renderizem objectos mesh nessa região"/> <spinner label="Limite do agente" name="agent_limit_spin"/> <spinner label="Bônus de objetos" name="object_bonus_spin"/> <text label="Maturidade" name="access_text"> diff --git a/indra/newview/skins/default/xui/pt/panel_sound_devices.xml b/indra/newview/skins/default/xui/pt/panel_sound_devices.xml new file mode 100644 index 0000000000000000000000000000000000000000..fb612ca19b3c2e07413347a4ebc6169810e13109 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_sound_devices.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel label="Configuração de dispositivos" name="device_settings_panel"> + <panel.string name="default_text"> + Padrão + </panel.string> + <text name="Input"> + Entrada + </text> + <text name="My volume label"> + Meu volume: + </text> + <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Mude o volume usando o controle deslizante"/> + <text name="wait_text"> + Aguarde + </text> + <text name="Output"> + SaÃda + </text> +</panel> diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index 1dbbcafb0e91170d297f4f6959c25bdd18a8407a..c5268966c1f1eefd6092bca27abd825c67051959 100644 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -118,6 +118,100 @@ <string name="create_account_url"> http://join.secondlife.com/index.php?lang=pt-BR </string> + <string name="LoginFailedViewerNotPermitted"> + O visualizador utilizado já não é compatÃvel com o Second Life. Visite a página abaixo para baixar uma versão atual: http://secondlife.com/download + +Para saber mais, visite as perguntas frequentes abaixo: http://secondlife.com/viewer-access-faq + </string> + <string name="LoginIntermediateOptionalUpdateAvailable"> + Existe uma versão atualizada do seu visualizador: [VERSION] + </string> + <string name="LoginFailedRequiredUpdate"> + Atualização de visualizador obrigatória: [VERSION] + </string> + <string name="LoginFailedAlreadyLoggedIn"> + Este agente já fez login. + </string> + <string name="LoginFailedAuthenticationFailed"> + Desculpe! Não foi possÃvel fazer seu login. Verifique se digitou o nome de usuário correto* (como kiki45 ou astro.fÃsica) * e senha. Verifique também que a tecla Maiúscula está desativada. + </string> + <string name="LoginFailedPasswordChanged"> + Como medida de precaução, sua senha foi alterada. Visite sua conta em http://secondlife.com/password e responda a pergunta de segurança para mudar sua senha. Lamentamos qualquer inconveniente. + </string> + <string name="LoginFailedPasswordReset"> + Fizemos algumas alterações a seu sistema. Você precisa selecionar outra senha. Visite sua conta em http://secondlife.com/password e responda a pergunta de segurança para mudar sua senha. Lamentamos qualquer inconveniente. + </string> + <string name="LoginFailedEmployeesOnly"> + O Second Life está fechado para manutenção no momento. Somente funcionários podem acessá-lo. Consulte www.secondlife.com/status para as últimas atualizações. + </string> + <string name="LoginFailedPremiumOnly"> + O acesso ao Second Life está sendo restrito por alguns instantes para que todos tenham a melhor experiência possÃvel. + +Titulares de contas gratuitas não poderão acessar o Second Life para acomodar os assinantes do Second Life. + </string> + <string name="LoginFailedComputerProhibited"> + O Second Life não pode ser acessado deste computador. Se você acredita que houve algum equÃvoco, contate support@secondlife.com. + </string> + <string name="LoginFailedAcountSuspended"> + Sua conta não está disponÃvel para acesso até [TIME], horário do PacÃfico nos EUA (GMT-08). + </string> + <string name="LoginFailedAccountDisabled"> + Não é possÃvel concluir a solicitação neste momento. Para obter mais ajuda, conte o suporte em http://secondlife.com/support. Caso você não possa mudar sua senha, ligue para (866) 476-9763. + </string> + <string name="LoginFailedTransformError"> + Dados discrepantes detectados durante o login. Contate support@secondlife.com. + </string> + <string name="LoginFailedAccountMaintenance"> + Sua conta está passando por um breve perÃodo de manutenção. Sua conta não está disponÃvel para acesso até [TIME], horário do PacÃfico nos EUA (GMT-08). Se você acredita que houve algum equÃvoco, contate support@secondlife.com. + </string> + <string name="LoginFailedPendingLogoutFault"> + Reação à solicitação de saÃda foi uma falha do simulador. + </string> + <string name="LoginFailedPendingLogout"> + O sistema está passando para o modo offline. Sua conta não está disponÃvel para acesso até [TIME], horário do PacÃfico nos EUA (GMT-08). + </string> + <string name="LoginFailedUnableToCreateSession"> + ImpossÃvel criar sessão válida. + </string> + <string name="LoginFailedUnableToConnectToSimulator"> + Não foi possÃvel conectar o simulador. + </string> + <string name="LoginFailedRestrictedHours"> + Sua conta possui acesso ao Second Life das [START] à s [END], horário da costa leste dos EUA. Volte novamente durante seu horário de acesso. Se você acredita que houve algum equÃvoco, contate support@secondlife.com. + </string> + <string name="LoginFailedIncorrectParameters"> + Parâmetros incorretos. Se você acredita que houve algum equÃvoco, contate support@secondlife.com. + </string> + <string name="LoginFailedFirstNameNotAlphanumeric"> + O parâmetro de primeiro nome deve ser alfanumérico. Se você acredita que houve algum equÃvoco, contate support@secondlife.com. + </string> + <string name="LoginFailedLastNameNotAlphanumeric"> + O parâmetro de sobrenome deve ser alfanumérico. Se você acredita que houve algum equÃvoco, contate support@secondlife.com. + </string> + <string name="LogoutFailedRegionGoingOffline"> + Região passando para modo offline. Tente novamente dentro de alguns instantes. + </string> + <string name="LogoutFailedAgentNotInRegion"> + Não há agente na região. Tente novamente dentro de alguns instantes. + </string> + <string name="LogoutFailedPendingLogin"> + A região estava acessada por outra sessão. Tente novamente dentro de alguns instantes. + </string> + <string name="LogoutFailedLoggingOut"> + A região estava passando para o modo offline na sessão anterior. Tente novamente dentro de alguns instantes. + </string> + <string name="LogoutFailedStillLoggingOut"> + A região estava passando para o modo offline na sessão anterior. Tente novamente dentro de alguns instantes. + </string> + <string name="LogoutSucceeded"> + A região passou para o modo offline na última sessão. Tente novamente dentro de alguns instantes. + </string> + <string name="LogoutFailedLogoutBegun"> + A região inicou o modo offline. Tente novamente dentro de alguns instantes. + </string> + <string name="LoginFailedLoggingOutSession"> + O sistema iniciou o modo offline em sua sessão anterior. Tente novamente dentro de alguns instantes. + </string> <string name="AgentLostConnection"> Esta região pode estar passando por problemas. Por favor, verifique sua conexão com a internet. </string> @@ -426,6 +520,9 @@ <string name="symbolic folder link"> link da pasta </string> + <string name="mesh"> + mesh + </string> <string name="AvatarAway"> Distante </string> @@ -1153,6 +1250,9 @@ <string name="InvFolder Accessories"> Acessórios </string> + <string name="InvFolder Meshes"> + Meshes: + </string> <string name="InvFolder Friends"> Amigos </string> @@ -1466,8 +1566,8 @@ <string name="Unknown"> (Desconhecido) </string> - <string name="SummaryForTheWeek" value="Resumo para esta semana, com inÃcio em"/> - <string name="NextStipendDay" value="Próximo dia de salário é"/> + <string name="SummaryForTheWeek" value="Resumo para esta semana, com inÃcio em "/> + <string name="NextStipendDay" value=". Próximo dia de salário é "/> <string name="GroupIndividualShare" value="Grupo Divisão individualI"/> <string name="GroupColumn" value="Grupo"/> <string name="Balance"> @@ -3662,6 +3762,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="session_initialization_timed_out_error"> A inicialização da sessão expirou </string> + <string name="Home position set."> + Posição inicial definida. + </string> <string name="voice_morphing_url"> http://secondlife.com/landing/voicemorphing </string> diff --git a/indra/newview/skins/default/xui/zh/floater_aaa.xml b/indra/newview/skins/default/xui/zh/floater_aaa.xml index c62fc8b5d13a3dc7f295d56ba9d20b0b57ac851c..0d110c0456776d6e7ec316b38ee97b5941a588c0 100644 --- a/indra/newview/skins/default/xui/zh/floater_aaa.xml +++ b/indra/newview/skins/default/xui/zh/floater_aaa.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Test Floater" title="TEST FLOATER"> +<floater name="Test Floater" title="測試浮動視窗"> <string name="test_the_vlt"> This string CHANGE2 is extracted. </string> <string name="testing_eli"> - Just a test. changes. + é€™åªæ˜¯æ¸¬è©¦ - 變更。 </string> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_about.xml b/indra/newview/skins/default/xui/zh/floater_about.xml index 825fe13e92cb4347f46effc6c8274ccbde741760..bee940ddc13408d6a830473cfb3d45695d7553e0 100644 --- a/indra/newview/skins/default/xui/zh/floater_about.xml +++ b/indra/newview/skins/default/xui/zh/floater_about.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_about" title="ABOUT [CAPITALIZED_APP_NAME]"> +<floater name="floater_about" title="關於 [CAPITALIZED_APP_NAME]"> <floater.string name="AboutHeader"> [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL]) [[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]] @@ -13,11 +13,11 @@ [[SERVER_RELEASE_NOTES_URL] [ReleaseNotes]] </floater.string> <floater.string name="AboutSystem"> - CPU: [CPU] -Memory: [MEMORY_MB] MB -OS Version: [OS_VERSION] -Graphics Card Vendor: [GRAPHICS_CARD_VENDOR] -Graphics Card: [GRAPHICS_CARD] + CPU:[CPU] +記憶體:[MEMORY_MB] MB +作æ¥ç³»çµ±ç‰ˆæœ¬ï¼š[OS_VERSION] +顯示å¡ä¾›æ‡‰å•†ï¼š[GRAPHICS_CARD_VENDOR] +顯示å¡ï¼š[GRAPHICS_CARD] </floater.string> <floater.string name="AboutDriver"> Windows Graphics Driver Version: [GRAPHICS_DRIVER_VERSION] @@ -25,11 +25,11 @@ Graphics Card: [GRAPHICS_CARD] <floater.string name="AboutLibs"> OpenGL Version: [OPENGL_VERSION] -libcurl Version: [LIBCURL_VERSION] -J2C Decoder Version: [J2C_VERSION] -Audio Driver Version: [AUDIO_DRIVER_VERSION] -Qt Webkit Version: [QT_WEBKIT_VERSION] -Voice Server Version: [VOICE_VERSION] +libcurl 版本: [LIBCURL_VERSION] +J2C 解碼器版本: [J2C_VERSION] +音效驅動程å¼ç‰ˆæœ¬ï¼š [AUDIO_DRIVER_VERSION] +Qt Webkit 版本: [QT_WEBKIT_VERSION] +語音伺æœå™¨ç‰ˆæœ¬ï¼š [VOICE_VERSION] </floater.string> <floater.string name="none"> (無) diff --git a/indra/newview/skins/default/xui/zh/floater_about_land.xml b/indra/newview/skins/default/xui/zh/floater_about_land.xml index 4e5c4f96f03abce0fd3d43b18f2a6a34b59aa105..efd8909e67d11bac8cdd5b0fe51e8b57fcf92539 100644 --- a/indra/newview/skins/default/xui/zh/floater_about_land.xml +++ b/indra/newview/skins/default/xui/zh/floater_about_land.xml @@ -42,10 +42,10 @@ You must approve your purchase to modify this land. </panel.string> <panel.string name="group_owned_text"> - (Group Owned) + ï¼ˆç¤¾åœ˜æ‰€æ“æœ‰ï¼‰ </panel.string> <panel.string name="profile_text"> - Profile + 檔案 </panel.string> <panel.string name="info_text"> 資訊 @@ -81,13 +81,13 @@ 分級: </text> <text name="ContentRatingText"> - Adult + æˆäºº </text> <text name="Owner:"> æ“æœ‰è€…: </text> <text name="Group:"> - Group: + 社團: </text> <button label="è¨å®š" name="Set..."/> <check_box label="Allow Deed to Group" name="check deed" tool_tip="A group officer can deed this land to the group, so it will be supported by the group's land allocation."/> @@ -132,10 +132,10 @@ 0 </text> <button label="購買土地" name="Buy Land..."/> - <button label="Script Info" name="Scripts..."/> + <button label="腳本資訊" name="Scripts..."/> <button label="Buy For Group" name="Buy For Group..."/> - <button label="Buy Pass" name="Buy Pass..." tool_tip="A pass gives you temporary access to this land."/> - <button label="Abandon Land" name="Abandon Land..."/> + <button label="購買通行權" name="Buy Pass..." tool_tip="A pass gives you temporary access to this land."/> + <button label="放棄土地" name="Abandon Land..."/> <button label="Reclaim Land" name="Reclaim Land..."/> <button label="Linden Sale" name="Linden Sale..." tool_tip="Land must be owned, set content, and not already for auction."/> </panel> @@ -186,7 +186,7 @@ 分級: </text> <text name="region_maturity_text"> - Adult + æˆäºº </text> <text name="resellable_lbl"> Resale: @@ -201,7 +201,7 @@ Land in this region may not be joined/subdivided. </text> </panel> - <panel label="OBJECTS" name="land_objects_panel"> + <panel label="物件" name="land_objects_panel"> <panel.string name="objects_available_text"> [COUNT] out of [MAX] ([AVAILABLE] available) </panel.string> @@ -235,24 +235,24 @@ <text name="owner_objects_text"> [COUNT] </text> - <button label="Show" label_selected="Show" name="ShowOwner"/> - <button label="Return" name="ReturnOwner..." tool_tip="Return objects to their owners."/> + <button label="顯示" label_selected="顯示" name="ShowOwner"/> + <button label="退回" name="ReturnOwner..." tool_tip="Return objects to their owners."/> <text name="Set to group:"> Set to group: </text> <text name="group_objects_text"> [COUNT] </text> - <button label="Show" label_selected="Show" name="ShowGroup"/> - <button label="Return" name="ReturnGroup..." tool_tip="Return objects to their owners."/> + <button label="顯示" label_selected="顯示" name="ShowGroup"/> + <button label="退回" name="ReturnGroup..." tool_tip="Return objects to their owners."/> <text name="Owned by others:"> Owned by others: </text> <text name="other_objects_text"> [COUNT] </text> - <button label="Show" label_selected="Show" name="ShowOther"/> - <button label="Return" name="ReturnOther..." tool_tip="Return objects to their owners."/> + <button label="顯示" label_selected="顯示" name="ShowOther"/> + <button label="退回" name="ReturnOther..." tool_tip="Return objects to their owners."/> <text name="Selected / sat upon:"> Selected / sat upon: </text> @@ -274,7 +274,7 @@ <name_list.columns label="Most Recent" name="mostrecent"/> </name_list> </panel> - <panel label="OPTIONS" name="land_options_panel"> + <panel label="é¸é …" name="land_options_panel"> <panel.string name="search_enabled_tooltip"> Let people see this parcel in search results </panel.string> @@ -289,7 +289,7 @@ Only large parcels can be listed in search. Moderate Content </panel.string> <panel.string name="mature_check_adult"> - Adult Content + æˆäººå…§å®¹ </panel.string> <panel.string name="mature_check_mature_tooltip"> Your parcel information or content is considered moderate. @@ -301,41 +301,41 @@ Only large parcels can be listed in search. (無) </panel.string> <panel.string name="push_restrict_text"> - No Pushing + ç¦æ¢æŽ¨æ’ž </panel.string> <panel.string name="push_restrict_region_text"> - No Pushing (Region Override) + ç¦æ¢æŽ¨æ’žï¼ˆåœ°å€è¨å®šè¦†è“‹ï¼‰ </panel.string> <text name="allow_label"> - Allow other Residents to: + å…許其他居民去: </text> - <check_box label="Edit Terrain" name="edit land check" tool_tip="If checked, anyone can terraform your land. It is best to leave this unchecked, as you can always edit your own land."/> - <check_box label="Fly" name="check fly" tool_tip="If checked, Residents can fly on your land. If unchecked, they can only fly into and over your land."/> + <check_box label="編輯地形" name="edit land check" tool_tip="若勾é¸å‰‡ä»»ä½•人將å¯ä»¥è®Šå½¢ä½ çš„åœŸåœ°ï¼Œæœ€å¥½æ˜¯ä¿æŒæœªå‹¾é¸ï¼Œå› ç‚ºä½ éš¨æ™‚å¯ä»¥ç·¨è¼¯è®Šæ›´ä½ 的土地。"/> + <check_box label="飛行" name="check fly" tool_tip="逤勾é¸å‰‡å±…æ°‘å¯ä»¥åœ¨ä½ 飛行,ä¸ç„¶å°±åªèƒ½ç”±å¤–é¢é£›å…¥æˆ–é£›è¶Šä½ çš„åœŸåœ°ã€‚"/> <text name="allow_label2"> - Build: + å»ºé€ ï¼š </text> - <check_box label="Everyone" name="edit objects check"/> - <check_box label="Group" name="edit group objects check"/> + <check_box label="任何人" name="edit objects check"/> + <check_box label="社團" name="edit group objects check"/> <text name="allow_label3"> - Object Entry: + 物件進入: </text> - <check_box label="Everyone" name="all object entry check"/> - <check_box label="Group" name="group object entry check"/> + <check_box label="任何人" name="all object entry check"/> + <check_box label="社團" name="group object entry check"/> <text name="allow_label4"> - Run Scripts: + 執行腳本: </text> - <check_box label="Everyone" name="check other scripts"/> - <check_box label="Group" name="check group scripts"/> + <check_box label="任何人" name="check other scripts"/> + <check_box label="社團" name="check group scripts"/> <text name="land_options_label"> - Land Options: + 土地é¸é …: </text> - <check_box label="Safe (no damage)" name="check safe" tool_tip="If checked, sets the land to Safe, disabling damage combat. If cleared, damage combat is enabled."/> - <check_box label="No Pushing" name="PushRestrictCheck" tool_tip="Prevents scripts from pushing. Checking this option may be useful for preventing disruptive behavior on your land."/> - <check_box label="Show Place in Search (L$30/week)" name="ShowDirectoryCheck" tool_tip="Let people see this parcel in search results"/> + <check_box label="安全(無傷害)" name="check safe" tool_tip="若勾é¸å‰‡è¨æ‡‰åœŸåœ°ç‚ºå®‰å…¨çš„,傷害性的戰鬥將被關閉。清除勾é¸å¾Œæ‰èƒ½é€²è¡Œå‚·å®³æ€§çš„æˆ°é¬¥ã€‚"/> + <check_box label="ç¦æ¢æŽ¨æ’ž" name="PushRestrictCheck" tool_tip="防æ¢ä½¿ç”¨è…³æœ¬æŽ¨æ’žã€‚勾é¸é€™å€‹é¸é …å°‡å¯ä»¥æœ‰æ•ˆé˜²æ¢ä½ åœŸåœ°ä¸Šçš„ç ´å£žè¡Œç‚ºã€‚"/> + <check_box label="將地點刊登顯示在æœå°‹ä¸ï¼ˆL$30 / æ¯é€±ï¼‰" name="ShowDirectoryCheck" tool_tip="Let people see this parcel in search results"/> <combo_box name="land category with adult"> - <combo_box.item label="Any Category" name="item0"/> + <combo_box.item label="任何類別" name="item0"/> <combo_box.item label="Linden Location" name="item1"/> - <combo_box.item label="Adult" name="item2"/> + <combo_box.item label="æˆäºº" name="item2"/> <combo_box.item label="Arts & Culture" name="item3"/> <combo_box.item label="Business" name="item4"/> <combo_box.item label="Educational" name="item5"/> @@ -349,7 +349,7 @@ Only large parcels can be listed in search. <combo_box.item label="Other" name="item12"/> </combo_box> <combo_box name="land category"> - <combo_box.item label="Any Category" name="item0"/> + <combo_box.item label="任何類別" name="item0"/> <combo_box.item label="Linden Location" name="item1"/> <combo_box.item label="Arts & Culture" name="item3"/> <combo_box.item label="Business" name="item4"/> @@ -365,16 +365,16 @@ Only large parcels can be listed in search. </combo_box> <check_box label="Moderate Content" name="MatureCheck" tool_tip=" "/> <text name="Snapshot:"> - Snapshot: + 快照: </text> <texture_picker name="snapshot_ctrl" tool_tip="點擊以挑é¸åœ–片"/> <text name="landing_point"> - Landing Point: [LANDING] + 登陸點:[LANDING] </text> <button label="è¨å®š" label_selected="è¨å®š" name="Set" tool_tip="Sets the landing point where visitors arrive. Sets to your avatar's location inside this parcel."/> <button label="清除" label_selected="清除" name="Clear" tool_tip="清除登陸點"/> <text name="Teleport Routing: "> - Teleport Routing: + 瞬間傳é€è·¯å¾‘: </text> <combo_box name="landing type" tool_tip="Teleport Routing -- select how to handle teleports onto your land"> <combo_box.item label="Blocked" name="Blocked"/> @@ -388,7 +388,7 @@ Only large parcels can be listed in search. </text> <combo_box name="media type" tool_tip="Specify if the URL is a movie, web page, or other media"/> <text name="at URL:"> - Home Page: + 首é : </text> <button label="è¨å®š" name="set_media_url"/> <text name="Description:"> @@ -396,20 +396,20 @@ Only large parcels can be listed in search. </text> <line_editor name="url_description" tool_tip="Text displayed next to play/load button"/> <text name="Media texture:"> - Replace Texture: + å–代æè³ªï¼š </text> <texture_picker name="media texture" tool_tip="點擊以挑é¸åœ–片"/> <text name="replace_texture_help"> Objects using this texture will show the movie or web page after you click the play arrow. Select the thumbnail to choose a different texture. </text> - <check_box label="Auto scale" name="media_auto_scale" tool_tip="Checking this option will scale the content for this parcel automatically. It may be slightly slower and lower quality visually but no other texture scaling or alignment will be required."/> + <check_box label="自動縮放" name="media_auto_scale" tool_tip="Checking this option will scale the content for this parcel automatically. It may be slightly slower and lower quality visually but no other texture scaling or alignment will be required."/> <text name="media_size" tool_tip="Size to render Web media, leave 0 for default."> - Size: + 尺寸: </text> <spinner name="media_size_width" tool_tip="Size to render Web media, leave 0 for default."/> <spinner name="media_size_height" tool_tip="Size to render Web media, leave 0 for default."/> <text name="pixels"> - pixels + åƒç´ </text> <text name="Options:"> Options: @@ -453,7 +453,7 @@ Only large parcels can be listed in search. <check_box label="Sell passes to:" name="PassCheck" tool_tip="Allows temporary access to this parcel"/> <combo_box name="pass_combo"> <combo_box.item label="Anyone" name="Anyone"/> - <combo_box.item label="Group" name="Group"/> + <combo_box.item label="社團" name="Group"/> </combo_box> <spinner label="Price in L$:" name="PriceSpin"/> <spinner label="Hours of access:" name="HoursSpin"/> @@ -467,11 +467,11 @@ Only large parcels can be listed in search. </panel> <panel name="Banned_layout_panel"> <text label="Ban" name="BanCheck"> - Banned Residents + 被å°éŽ–çš„å±…æ°‘ </text> <name_list name="BannedList" tool_tip="([LISTED] listed, [MAX] max)"/> - <button label="Add" name="add_banned"/> - <button label="Remove" label_selected="Remove" name="remove_banned"/> + <button label="æ·»åŠ " name="add_banned"/> + <button label="移除" label_selected="移除" name="remove_banned"/> </panel> </panel> </tab_container> diff --git a/indra/newview/skins/default/xui/zh/floater_animation_preview.xml b/indra/newview/skins/default/xui/zh/floater_animation_preview.xml index 0f1feaa8439bff403d3bd17a26b79aa725384b68..b5d65119f7f23e010d2beddd0e7ed5d1661d5cec 100644 --- a/indra/newview/skins/default/xui/zh/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/zh/floater_animation_preview.xml @@ -9,7 +9,7 @@ Maximum animation length is [MAX_LENGTH] seconds. </floater.string> <floater.string name="failed_file_read"> - Unable to read animation file. + 無法讀å–動作檔。 [STATUS] </floater.string> @@ -23,7 +23,7 @@ Maximum animation length is [MAX_LENGTH] seconds. Cannot read constraint definition. </floater.string> <floater.string name="E_ST_NO_FILE"> - Cannot open BVH file. + 無法開啟 BVH 檔案。 </floater.string> <floater.string name="E_ST_NO_HIER"> Invalid HIERARCHY header. @@ -115,7 +115,7 @@ Maximum animation length is [MAX_LENGTH] seconds. <text name="description_label"> æè¿°ï¼š </text> - <spinner label="Priority" name="priority" tool_tip="Controls which other animations can be overridden by this animation"/> + <spinner label="優先度" name="priority" tool_tip="Controls which other animations can be overridden by this animation"/> <check_box label="Loop" name="loop_check" tool_tip="Makes this animation loop"/> <spinner label="In(%)" name="loop_in_point" tool_tip="Sets point in animation that looping returns to"/> <spinner label="Out(%)" name="loop_out_point" tool_tip="Sets point in animation that ends a loop"/> @@ -169,7 +169,7 @@ Maximum animation length is [MAX_LENGTH] seconds. <item label="Standing" name="Standing" value="Standing"/> <item label="Walking" name="Walking" value="Walking"/> <item label="Sitting" name="Sitting" value="Sitting"/> - <item label="Flying" name="Flying" value="Flying"/> + <item label="飛行" name="Flying" value="飛行"/> </combo_box> <spinner label="淡入(秒)" name="ease_in_time" tool_tip="Amount of time (in seconds) over which animations blends in"/> <spinner label="淡出(秒)" name="ease_out_time" tool_tip="Amount of time (in seconds) over which animations blends out"/> @@ -182,5 +182,5 @@ Maximum animation length is [MAX_LENGTH] seconds. We recommend BVH files exported from Poser 4. </text> <button label="上傳(L$[AMOUNT])" name="ok_btn"/> - <button label="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_avatar_picker.xml b/indra/newview/skins/default/xui/zh/floater_avatar_picker.xml index 2ffcaf5b55a1f7d89d5b627ea3e0c93e3f377c28..27a4199f8cd6ebdea029074e349dcf767711b881 100644 --- a/indra/newview/skins/default/xui/zh/floater_avatar_picker.xml +++ b/indra/newview/skins/default/xui/zh/floater_avatar_picker.xml @@ -10,44 +10,44 @@ No results </floater.string> <floater.string name="searching"> - Searching... + æœå°‹ä¸... </floater.string> <string name="Select"> - Select + 鏿“‡ </string> <string name="Close"> 關閉 </string> <tab_container name="ResidentChooserTabs"> - <panel label="Search" name="SearchPanel"> + <panel label="æœå°‹" name="SearchPanel"> <text name="InstructSearchResidentName"> Type part of a person's name: </text> <button label="Go" label_selected="Go" name="Find"/> <scroll_list name="SearchResults"> <columns label="å稱" name="name"/> - <columns label="Username" name="username"/> + <columns label="使用者å稱" name="username"/> </scroll_list> </panel> - <panel label="Friends" name="FriendsPanel"> + <panel label="朋å‹" name="FriendsPanel"> <text name="InstructSelectFriend"> 鏿“‡ä¸€å€‹äººï¼š </text> </panel> <panel label="接近我" name="NearMePanel"> <text name="InstructSelectResident"> - Select a person nearby: + 鏿“‡ä¸€ä½é™„近的人: </text> - <slider label="Range" name="near_me_range"/> + <slider label="範åœ" name="near_me_range"/> <text name="meters"> - Meters + 公尺 </text> <scroll_list name="NearMe"> <columns label="å稱" name="name"/> - <columns label="Username" name="username"/> + <columns label="使用者å稱" name="username"/> </scroll_list> </panel> </tab_container> <button label="確定" label_selected="確定" name="ok_btn"/> - <button label="å–銷" label_selected="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_avatar_textures.xml b/indra/newview/skins/default/xui/zh/floater_avatar_textures.xml index f895fa2e9dd121185aa1e51d20c8d2a810ee2135..b1dc081f04d22411d5d700a45ebdb0a5c471bc75 100644 --- a/indra/newview/skins/default/xui/zh/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/zh/floater_avatar_textures.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="avatar_texture_debug" title="AVATAR TEXTURES"> +<floater name="avatar_texture_debug" title="化身æè³ª"> <floater.string name="InvalidAvatar"> INVALID AVATAR </floater.string> @@ -15,15 +15,15 @@ Textures </text> <button label="Dump IDs to Console" label_selected="Dump" name="Dump"/> <panel name="scroll_content_panel"> - <texture_picker label="Hair" name="hair-baked"/> - <texture_picker label="Hair" name="hair_grain"/> + <texture_picker label="é é«®" name="hair-baked"/> + <texture_picker label="é é«®" name="hair_grain"/> <texture_picker label="Hair Alpha" name="hair_alpha"/> - <texture_picker label="Head" name="head-baked"/> + <texture_picker label="é 部" name="head-baked"/> <texture_picker label="Makeup" name="head_bodypaint"/> <texture_picker label="Head Alpha" name="head_alpha"/> - <texture_picker label="Head Tattoo" name="head_tattoo"/> + <texture_picker label="é 部刺é’" name="head_tattoo"/> <texture_picker label="眼ç›" name="eyes-baked"/> - <texture_picker label="Eye" name="eyes_iris"/> + <texture_picker label="眼ç›" name="eyes_iris"/> <texture_picker label="Eyes Alpha" name="eyes_alpha"/> <texture_picker label="Upper Body" name="upper-baked"/> <texture_picker label="Upper BodyPaint" name="upper_bodypaint"/> diff --git a/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml b/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml index 98fa6804bac9451421f44f119146448620322c7f..629b0d17d55fbf35cfad0d93c186be68f42625e6 100644 --- a/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml @@ -12,22 +12,22 @@ <floater.string name="done_text"> Finished permission change requests. </floater.string> - <icon name="icon_animation" tool_tip="Animation"/> - <icon name="icon_bodypart" tool_tip="Body Parts"/> - <icon name="icon_clothing" tool_tip="Clothing"/> - <icon name="icon_gesture" tool_tip="Gestures"/> - <icon name="icon_notecard" tool_tip="Notecards"/> - <icon name="icon_object" tool_tip="Objects"/> - <icon name="icon_script" tool_tip="Scripts"/> - <icon name="icon_sound" tool_tip="Sounds"/> - <icon name="icon_texture" tool_tip="Textures"/> - <button label="√ All" name="check_all"/> + <icon name="icon_animation" tool_tip="動作"/> + <icon name="icon_bodypart" tool_tip="身體部ä½"/> + <icon name="icon_clothing" tool_tip="æœè£"/> + <icon name="icon_gesture" tool_tip="å§¿å‹¢"/> + <icon name="icon_notecard" tool_tip="記事å¡"/> + <icon name="icon_object" tool_tip="物件"/> + <icon name="icon_script" tool_tip="腳本"/> + <icon name="icon_sound" tool_tip="è²éŸ³"/> + <icon name="icon_texture" tool_tip="æè³ª"/> + <button label="√ 全部" name="check_all"/> <button label="清除" label_selected="ç„¡" name="check_none"/> <text name="newperms"> New Content Permissions </text> <text name="GroupLabel"> - Group: + 社團: </text> <check_box label="分享" name="share_with_group"/> <text name="AnyoneLabel"> @@ -41,5 +41,5 @@ <check_box label="覆製" name="next_owner_copy"/> <check_box initial_value="true" label="轉移" name="next_owner_transfer" tool_tip="Next owner can give away or resell this object"/> <button label="確定" name="apply"/> - <button label="å–銷" name="close"/> + <button label="å–æ¶ˆ" name="close"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_buy_contents.xml b/indra/newview/skins/default/xui/zh/floater_buy_contents.xml index de3c0aa075c7882785d1bcd18d58f3f0e345facb..44d3394a526f379efcf7662641a57e46b929a7b3 100644 --- a/indra/newview/skins/default/xui/zh/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/zh/floater_buy_contents.xml @@ -15,7 +15,7 @@ <text name="buy_text"> Buy for L$[AMOUNT] from [NAME]? </text> - <check_box label="Wear clothing now" name="wear_check"/> + <check_box label="ç«‹å³ç©¿ä¸Šæœè£" name="wear_check"/> <button label="購買" label_selected="購買" name="buy_btn"/> - <button label="å–銷" label_selected="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_buy_currency.xml b/indra/newview/skins/default/xui/zh/floater_buy_currency.xml index bebc17a5cc4c9aabb65814365c8e0cdb6bf75c7f..d8e9fb0ecc119d6945ee1ce49b26c92c3735227b 100644 --- a/indra/newview/skins/default/xui/zh/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/zh/floater_buy_currency.xml @@ -40,7 +40,7 @@ [ACTION] </text> <text name="total_label"> - My new balance will be + 我的帳戶餘é¡å°‡ç‚º </text> <text name="total_amount"> L$ [AMT] @@ -58,7 +58,7 @@ You aren't buying enough L$. Please increase the amount. </text> <button label="ç«‹å³è³¼è²·" name="buy_btn"/> - <button label="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" name="cancel_btn"/> <text name="info_cannot_buy"> Unable to Buy </text> diff --git a/indra/newview/skins/default/xui/zh/floater_buy_land.xml b/indra/newview/skins/default/xui/zh/floater_buy_land.xml index d665a16639ea78db8c385e6f67df2f9147a61ecb..34401c11d01f25d427e4c543b926087c4d7b1bfa 100644 --- a/indra/newview/skins/default/xui/zh/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/zh/floater_buy_land.xml @@ -68,13 +68,13 @@ Try selecting a smaller area. none needed </floater.string> <floater.string name="must_upgrade"> - Your account must be upgraded to own land. + ä½ çš„å¸³æˆ¶å¿…é ˆè¦å‡ç´šæ‰èƒ½æ“有土地。 </floater.string> <floater.string name="cant_own_land"> - Your account can own land. + ä½ çš„å¸³æˆ¶èƒ½æ“æœ‰åœŸåœ°ã€‚ </floater.string> <floater.string name="land_holdings"> - You hold [BUYER] m² of land. + ä½ æŒæœ‰ [BUYER] m² 土地。 </floater.string> <floater.string name="pay_to_for_land"> Pay L$ [AMOUNT] to [SELLER] for this land @@ -83,7 +83,7 @@ Try selecting a smaller area. Buy L$ [AMOUNT] for approx. [LOCAL_AMOUNT], </floater.string> <floater.string name="parcel_meters"> - This parcel is [AMOUNT] m² + 這個地段為 [AMOUNT] m² </floater.string> <floater.string name="premium_land"> This land is premium, and will charge as [AMOUNT] m². @@ -122,7 +122,7 @@ supports [AMOUNT2] objects You need to buy at least L$ [AMOUNT] to afford this land. </floater.string> <floater.string name="no_parcel_selected"> - (no parcel selected) + ï¼ˆç„¡åœ°æ®µè¢«é¸æ“‡ï¼‰ </floater.string> <text name="region_name_label"> 地å€ï¼š @@ -171,7 +171,7 @@ supports [AMOUNT2] objects Scotopteryx 138,204 </text> <text name="info_size_label"> - Size: + 尺寸: </text> <text name="info_size"> 1024 m² @@ -190,7 +190,7 @@ sold with objects <text name="error_message"> Something ain't right. </text> - <button label="Go to website" name="error_web"/> + <button label="å‰å¾€ç¶²ç«™" name="error_web"/> <text name="account_action"> Upgrade you to premium membership. </text> @@ -229,5 +229,5 @@ This parcel is 512 m² of land. </text> <check_box label="Remove [AMOUNT] m² of contribution from group." name="remove_contribution"/> <button label="Purchase" name="buy_btn"/> - <button label="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_buy_object.xml b/indra/newview/skins/default/xui/zh/floater_buy_object.xml index 559982b6c9102c04fb0fdca13b66c0204d0e793e..ef8bc183a4451cab9ac879433cfa36fa205d331a 100644 --- a/indra/newview/skins/default/xui/zh/floater_buy_object.xml +++ b/indra/newview/skins/default/xui/zh/floater_buy_object.xml @@ -25,5 +25,5 @@ [NAME]? </text> <button label="購買" label_selected="購買" name="buy_btn"/> - <button label="å–銷" label_selected="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_choose_group.xml b/indra/newview/skins/default/xui/zh/floater_choose_group.xml index ec67f8d4faf9a8ebffccefff5dc81f55608486c2..9968565bf296226a4050e10bf9f025b60c6028e4 100644 --- a/indra/newview/skins/default/xui/zh/floater_choose_group.xml +++ b/indra/newview/skins/default/xui/zh/floater_choose_group.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="groups" title="GROUPS"> +<floater name="groups" title="社團"> <text name="groupdesc"> - Choose a group: + 鏿“‡ä¸€å€‹ç¤¾åœ˜ï¼š </text> <button label="確定" label_selected="確定" name="OK"/> - <button label="å–銷" label_selected="å–銷" name="Cancel"/> + <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="Cancel"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_color_picker.xml b/indra/newview/skins/default/xui/zh/floater_color_picker.xml index df9c780cbf8a6e763a72800594ab3c13578e006b..a7ac78e419167b07fc34f6987d786e06d66dd0b7 100644 --- a/indra/newview/skins/default/xui/zh/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/zh/floater_color_picker.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="ColorPicker" title="COLOR PICKER"> +<floater name="ColorPicker" title="é¡è‰²æŒ‘é¸å™¨"> <text name="r_val_text"> - Red: + 紅色: </text> <text name="g_val_text"> - Green: + ç¶ è‰²ï¼š </text> <text name="b_val_text"> - Blue: + è—色: </text> <text name="h_val_text"> Hue: @@ -20,9 +20,9 @@ </text> <check_box label="ç«‹å³å¥—用" name="apply_immediate"/> <button label="確定" label_selected="確定" name="select_btn"/> - <button label="å–銷" label_selected="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="cancel_btn"/> <text name="Current color:"> - Current color: + ç›®å‰é¡è‰²ï¼š </text> <text name="(Drag below to save.)"> (Drag below to save) diff --git a/indra/newview/skins/default/xui/zh/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/zh/floater_day_cycle_options.xml index c6ab787625b25466e3bedd7f909881e0a64bae2a..28d2ba6ed484358fb9964167eaa8b906ec831388 100644 --- a/indra/newview/skins/default/xui/zh/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/zh/floater_day_cycle_options.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Day Cycle Floater" title="DAY CYCLE EDITOR"> +<floater name="Day Cycle Floater" title="日循環編輯器"> <tab_container name="Day Cycle Tabs"> - <panel label="Day Cycle" name="Day Cycle"> + <panel label="日循環" name="Day Cycle"> <multi_slider initial_value="0" name="WLTimeSlider"/> <multi_slider initial_value="0" name="WLDayCycleKeys"/> <text name="WL12am"> @@ -86,7 +86,7 @@ é 覽: </text> <button label="Play" label_selected="Play" name="WLAnimSky"/> - <button label="Stop!" label_selected="Stop" name="WLStopAnimSky"/> + <button label="åœæ¢!" label_selected="åœæ¢" name="WLStopAnimSky"/> <button label="Use Estate Time" label_selected="Go to Estate Time" name="WLUseLindenTime"/> <button label="Save Test Day" label_selected="Save Test Day" name="WLSaveDayCycle"/> <button label="Load Test Day" label_selected="Load Test Day" name="WLLoadDayCycle"/> diff --git a/indra/newview/skins/default/xui/zh/floater_display_name.xml b/indra/newview/skins/default/xui/zh/floater_display_name.xml index 5a89ecaa829438266b3087709d1b2ba96cb3fef9..e12fc211663355bf742162ac8ec853e7b2bc558f 100644 --- a/indra/newview/skins/default/xui/zh/floater_display_name.xml +++ b/indra/newview/skins/default/xui/zh/floater_display_name.xml @@ -14,5 +14,5 @@ </text> <button label="儲å˜" name="save_btn" tool_tip="Save your new Display Name"/> <button label="Reset" name="reset_btn" tool_tip="Make Display Name the same as Username"/> - <button label="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_gesture.xml b/indra/newview/skins/default/xui/zh/floater_gesture.xml index 22e7451d131b6058bbdce0d5742a263125c66d17..651a976774963930b70cb0d796f4a58a14ec36e6 100644 --- a/indra/newview/skins/default/xui/zh/floater_gesture.xml +++ b/indra/newview/skins/default/xui/zh/floater_gesture.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater label="Places" name="gestures" title="GESTURES"> +<floater label="地點" name="gestures" title="å§¿å‹¢"> <floater.string name="loading"> 載入ä¸... </floater.string> @@ -15,12 +15,12 @@ <scroll_list.columns label="Key" name="shortcut"/> </scroll_list> <panel label="bottom_panel" name="bottom_panel"> - <menu_button name="gear_btn" tool_tip="More options"/> - <button name="new_gesture_btn" tool_tip="Make new gesture"/> + <menu_button name="gear_btn" tool_tip="更多é¸é …"/> + <button name="new_gesture_btn" tool_tip="製作新姿勢e"/> <button name="activate_btn" tool_tip="Activate/Deactivate selected gesture"/> - <button name="del_btn" tool_tip="Delete this gesture"/> + <button name="del_btn" tool_tip="刪除這個姿勢"/> </panel> <button label="編輯" name="edit_btn"/> - <button label="Play" name="play_btn"/> - <button label="Stop" name="stop_btn"/> + <button label="æ’æ”¾" name="play_btn"/> + <button label="åœæ¢" name="stop_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_god_tools.xml b/indra/newview/skins/default/xui/zh/floater_god_tools.xml index b01d346a6402c19568df2459fe221a8592f89563..fbe89ab2a6fa4de8de492d1bc0db2ded34de4313 100644 --- a/indra/newview/skins/default/xui/zh/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/zh/floater_god_tools.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="godtools floater" title="GOD TOOLS"> +<floater name="godtools floater" title="神之工具"> <tab_container name="GodTools Tabs"> - <panel label="Grid" name="grid"> + <panel label="ç¶²æ ¼" name="grid"> <button label="Flush This Region's Map Visibility Caches" label_selected="Flush This Region's Map Visibility Caches" name="Flush This Region's Map Visibility Caches"/> </panel> <panel label="地å€" name="region"> @@ -27,7 +27,7 @@ </text> <line_editor name="parentestate" tool_tip="This is the parent estate for this region"/> <text name="Grid Pos: "> - Grid Pos: + ç¶²æ ¼ä½ç½®ï¼š </text> <line_editor name="gridposx" tool_tip="This is the grid x position for this region"/> <line_editor name="gridposy" tool_tip="This is the grid y position for this region"/> @@ -43,9 +43,9 @@ <button label="Refresh" label_selected="Refresh" name="Refresh" tool_tip="Click here to refresh the above information"/> <button label="套用" label_selected="套用" name="Apply" tool_tip="Click here to apply any changes from above"/> <button label="鏿“‡åœ°å€" label_selected="鏿“‡åœ°å€" name="Select Region" tool_tip="Select the whole region with the land tool"/> - <button label="Autosave now" label_selected="Autosave now" name="Autosave now" tool_tip="Save gzipped state to autosave directory"/> + <button label="ç«‹å³è‡ªå‹•儲å˜" label_selected="ç«‹å³è‡ªå‹•儲å˜" name="Autosave now" tool_tip="Save gzipped state to autosave directory"/> </panel> - <panel label="Objects" name="objects"> + <panel label="物件" name="objects"> <panel.string name="no_target"> (no target) </panel.string> @@ -55,7 +55,7 @@ <text name="region name"> Welsh </text> - <check_box label="Disable Scripts" name="disable scripts" tool_tip="Set this to disable all scripts in this region"/> + <check_box label="關閉腳本" name="disable scripts" tool_tip="關閉這個地å€ç¾åœ¨çš„全部腳本"/> <check_box label="Disable Collisions" name="disable collisions" tool_tip="Set this to disable non-agent collisions in this region"/> <check_box label="Disable Physics" name="disable physics" tool_tip="Set this to disable all physics in this region"/> <button label="套用" label_selected="套用" name="Apply" tool_tip="Click here to apply any changes from above"/> diff --git a/indra/newview/skins/default/xui/zh/floater_hardware_settings.xml b/indra/newview/skins/default/xui/zh/floater_hardware_settings.xml index 75403a79ddca71f1e11b62e56e158560be1be104..1465dcb256fbb6642ba3169e97462c94f6d64f12 100644 --- a/indra/newview/skins/default/xui/zh/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/zh/floater_hardware_settings.xml @@ -25,7 +25,7 @@ Enable VBO: </text> <check_box initial_value="true" label="Enable OpenGL Vertex Buffer Objects" name="vbo" tool_tip="Enabling this on modern hardware gives a performance gain. However, older hardware often has poor implementations of VBOs and you may get crashes when this is enabled."/> - <slider label="Texture Memory (MB):" name="GraphicsCardTextureMemory" tool_tip="Amount of memory to allocate for textures. Defaults to video card memory. Reducing this may improve performance but may also make textures blurry."/> + <slider label="æè³ªè¨˜æ†¶é«”(MB):" name="GraphicsCardTextureMemory" tool_tip="Amount of memory to allocate for textures. Defaults to video card memory. Reducing this may improve performance but may also make textures blurry."/> <spinner label="Fog Distance Ratio:" name="fog"/> <button label="確定" label_selected="確定" name="OK"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_help_browser.xml b/indra/newview/skins/default/xui/zh/floater_help_browser.xml index 957c37bd6357e17c6efc9c0afd5a9666d65e6d86..e605d5f19ceaad0243b499672f5995fd2d5108b9 100644 --- a/indra/newview/skins/default/xui/zh/floater_help_browser.xml +++ b/indra/newview/skins/default/xui/zh/floater_help_browser.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_help_browser" title="HELP BROWSER"> +<floater name="floater_help_browser" title="幫助ç€è¦½å™¨"> <floater.string name="loading_text"> 載入ä¸... </floater.string> diff --git a/indra/newview/skins/default/xui/zh/floater_hud.xml b/indra/newview/skins/default/xui/zh/floater_hud.xml index e458913452f0c3afb7d2244af3b00a0ab3fc51a1..a788961e9566b1c030facbb22075d2ceed0c9b88 100644 --- a/indra/newview/skins/default/xui/zh/floater_hud.xml +++ b/indra/newview/skins/default/xui/zh/floater_hud.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_hud" title="TUTORIAL"/> +<floater name="floater_hud" title="æ•™å¸"/> diff --git a/indra/newview/skins/default/xui/zh/floater_im_container.xml b/indra/newview/skins/default/xui/zh/floater_im_container.xml index 5ea073365e3422546ce9aa0216190203aa3e727d..2d66c659fe8329a287508b8eae555323e1e94f58 100644 --- a/indra/newview/skins/default/xui/zh/floater_im_container.xml +++ b/indra/newview/skins/default/xui/zh/floater_im_container.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<multi_floater name="floater_im_box" title="CONVERSATIONS"/> +<multi_floater name="floater_im_box" title="交談"/> diff --git a/indra/newview/skins/default/xui/zh/floater_image_preview.xml b/indra/newview/skins/default/xui/zh/floater_image_preview.xml index 92d5c3df73030265302ae7ef83de3c52e93f4e16..d7e9a7704c081c957d01a870b86175b971fcb666 100644 --- a/indra/newview/skins/default/xui/zh/floater_image_preview.xml +++ b/indra/newview/skins/default/xui/zh/floater_image_preview.xml @@ -7,11 +7,11 @@ æè¿°ï¼š </text> <text name="preview_label"> - Preview image as: + é 覽圖åƒç‚ºï¼š </text> - <combo_box label="Clothing Type" name="clothing_type_combo"> - <item label="Image" name="Image" value="Image"/> - <item label="Hair" name="Hair" value="Hair"/> + <combo_box label="æœè£é¡žåž‹" name="clothing_type_combo"> + <item label="圖åƒ" name="Image" value="圖åƒ"/> + <item label="é é«®" name="Hair" value="é é«®"/> <item label="Female Head" name="FemaleHead" value="Female Head"/> <item label="Female Upper Body" name="FemaleUpperBody" value="Female Upper Body"/> <item label="Female Lower Body" name="FemaleLowerBody" value="Female Lower Body"/> @@ -22,11 +22,11 @@ <item label="Sculpted Prim" name="SculptedPrim" value="Sculpted Prim"/> </combo_box> <text name="bad_image_text"> - Unable to read image. + 無法讀å–圖åƒã€‚ -Try saving image as 24 bit Targa (.tga). +請嘗試儲å˜åœ–åƒç‚º 24 ä½å…ƒ Targa(.tgaï¼‰æ ¼å¼ã€‚ </text> <check_box label="Use lossless compression" name="lossless_check"/> - <button label="å–銷" name="cancel_btn"/> - <button label="Upload (L$[AMOUNT])" name="ok_btn"/> + <button label="å–æ¶ˆ" name="cancel_btn"/> + <button label="上傳(L$[AMOUNT])" name="ok_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_incoming_call.xml b/indra/newview/skins/default/xui/zh/floater_incoming_call.xml index 9ca08c06b184ee46cb6d1f030572f65d04ecc404..123cdd9f2c4cc7dfccc981d1cf729b92813ff5a7 100644 --- a/indra/newview/skins/default/xui/zh/floater_incoming_call.xml +++ b/indra/newview/skins/default/xui/zh/floater_incoming_call.xml @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="incoming call" title="Incoming call"> +<floater name="incoming call" title="來電"> <floater.string name="lifetime"> 5 </floater.string> <floater.string name="localchat"> - Nearby Voice Chat + 附近的音èŠå¤© </floater.string> <floater.string name="anonymous"> - anonymous + 匿å </floater.string> <floater.string name="VoiceInviteP2P"> - is calling. + 通話ä¸ã€‚ </floater.string> <floater.string name="VoiceInviteAdHoc"> has joined a Voice Chat call with a conference chat. @@ -28,6 +28,6 @@ Do you want to leave [CURRENT_CHAT] and join this voice chat? </text> <button label="接å—" label_selected="接å—" name="Accept"/> - <button label="Reject" label_selected="Reject" name="Reject"/> - <button label="Start IM" name="Start IM"/> + <button label="拒絕" label_selected="拒絕" name="Reject"/> + <button label="é–‹å§‹ IM" name="Start IM"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_inspect.xml b/indra/newview/skins/default/xui/zh/floater_inspect.xml index 7f23bba37a9e480da0159d5ad86ee04c2e661ea8..295538f797a6f22b842d2bae033aee21c29aa25b 100644 --- a/indra/newview/skins/default/xui/zh/floater_inspect.xml +++ b/indra/newview/skins/default/xui/zh/floater_inspect.xml @@ -9,6 +9,6 @@ <scroll_list.columns label="Creator Name" name="creator_name"/> <scroll_list.columns label="Creation Date" name="creation_date"/> </scroll_list> - <button label="See Owner Profile..." name="button owner" tool_tip="See profile of the highlighted object's owner"/> - <button label="See Creator Profile..." name="button creator" tool_tip="See profile of the highlighted object's original creator"/> + <button label="å¯Ÿçœ‹æ“æœ‰è€…檔案..." name="button owner" tool_tip="See profile of the highlighted object's owner"/> + <button label="å¯Ÿçœ‹å‰µé€ è€…æª”æ¡ˆ..." name="button creator" tool_tip="See profile of the highlighted object's original creator"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_inventory.xml b/indra/newview/skins/default/xui/zh/floater_inventory.xml index 93cd681126694ff2f4b0c07b3738d31282e00151..da4619c964c8a191ee57bf71dad5f214a99c5f66 100644 --- a/indra/newview/skins/default/xui/zh/floater_inventory.xml +++ b/indra/newview/skins/default/xui/zh/floater_inventory.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Inventory" title="MY INVENTORY"> - <panel label="Inventory Panel" name="Inventory Panel"/> +<floater name="Inventory" title="我的收ç´å€"> + <panel label="æ”¶ç´å€é¢æ¿" name="Inventory Panel"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/zh/floater_inventory_item_properties.xml index 4fac10df81f1109f0d3c1f5c147101af07876ae7..fcd702b16ddecdd98dc3c6704c667c6d42027569 100644 --- a/indra/newview/skins/default/xui/zh/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/zh/floater_inventory_item_properties.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="item properties" title="INVENTORY ITEM PROPERTIES"> +<floater name="item properties" title="æ”¶ç´å€ç‰©å“屬性"> <floater.string name="unknown"> (未知) </floater.string> @@ -24,11 +24,11 @@ <text name="LabelCreatorTitle"> å‰µé€ è€…ï¼š </text> - <button label="Profile..." name="BtnCreator"/> + <button label="檔案..." name="BtnCreator"/> <text name="LabelOwnerTitle"> æ“æœ‰è€…: </text> - <button label="Profile..." name="BtnOwner"/> + <button label="檔案..." name="BtnOwner"/> <text name="LabelAcquiredTitle"> Acquired: </text> @@ -46,7 +46,7 @@ </text> <check_box label="覆製" name="CheckEveryoneCopy"/> <text name="GroupLabel"> - Group: + 社團: </text> <check_box label="分享" name="CheckShareWithGroup"/> <text name="NextOwnerLabel"> diff --git a/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml index 41ea8dc5930738f664d481a5eecdd5442376a6ca..a4ede92ab163d8d367eb87a146e00696a77084d8 100644 --- a/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml @@ -1,15 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Inventory Finder" title="INVENTORY_RECENT_ITEMS"> - <check_box label="Animation" name="check_animation"/> +<floater name="Inventory Finder" title="最近_æ”¶ç´å€_物å“"> + <check_box label="動作" name="check_animation"/> <check_box label="Calling Cards" name="check_calling_card"/> - <check_box label="Clothing" name="check_clothing"/> - <check_box label="Gestures" name="check_gesture"/> - <check_box label="Landmarks" name="check_landmark"/> + <check_box label="æœè£" name="check_clothing"/> + <check_box label="å§¿å‹¢" name="check_gesture"/> + <check_box label="地標" name="check_landmark"/> <check_box label="Notecards" name="check_notecard"/> <check_box label="Objects" name="check_object"/> - <check_box label="Scripts" name="check_script"/> + <check_box label="腳本" name="check_script"/> <check_box label="Sounds" name="check_sound"/> - <check_box label="Textures" name="check_texture"/> + <check_box label="æè³ª" name="check_texture"/> <check_box label="Snapshots" name="check_snapshot"/> <button label="全部" label_selected="全部" name="All"/> <button label="ç„¡" label_selected="ç„¡" name="None"/> diff --git a/indra/newview/skins/default/xui/zh/floater_joystick.xml b/indra/newview/skins/default/xui/zh/floater_joystick.xml index 91f2bc6d8123c0aaa26369dccb20bff89542f672..1721f7cd1e2e2c1ffa22bfcde12e07a038e34607 100644 --- a/indra/newview/skins/default/xui/zh/floater_joystick.xml +++ b/indra/newview/skins/default/xui/zh/floater_joystick.xml @@ -17,8 +17,8 @@ <text name="Control Modes:"> Control Modes: </text> - <check_box label="Avatar" name="JoystickAvatarEnabled"/> - <check_box label="Build" name="JoystickBuildEnabled"/> + <check_box label="化身" name="JoystickAvatarEnabled"/> + <check_box label="å»ºé€ " name="JoystickBuildEnabled"/> <check_box label="Flycam" name="JoystickFlycamEnabled"/> <stat_view label="Joystick Monitor" name="axis_view"> <stat_bar label="Axis 0" name="axis0"/> @@ -75,5 +75,5 @@ </text> <button label="SpaceNavigator Defaults" name="SpaceNavigatorDefaults"/> <button label="確定" label_selected="確定" name="ok_btn"/> - <button label="å–銷" label_selected="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_lagmeter.xml b/indra/newview/skins/default/xui/zh/floater_lagmeter.xml index 4ff6c45b17004053b0435710bb467435bdaf9b8e..6e58e7332f2a39343d0c0658275f383f25c23631 100644 --- a/indra/newview/skins/default/xui/zh/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/zh/floater_lagmeter.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_lagmeter" title="LAG METER"> +<floater name="floater_lagmeter" title="LAG 測é‡å™¨"> <floater.string name="max_title_msg"> - Lag Meter + Lag 測é‡å™¨ </floater.string> <floater.string name="max_width_px"> 360 @@ -13,7 +13,7 @@ 90 </floater.string> <floater.string name="client_text_msg"> - Client + 客戶端 </floater.string> <floater.string name="client_frame_rate_critical_fps"> 10 @@ -31,7 +31,7 @@ Client frame rate between [CLIENT_FRAME_RATE_CRITICAL] and [CLIENT_FRAME_RATE_WARNING] </floater.string> <floater.string name="client_frame_time_normal_msg"> - Normal + æ£å¸¸ </floater.string> <floater.string name="client_draw_distance_cause_msg"> Possible cause: Draw distance set too high @@ -46,7 +46,7 @@ Possible cause: Too many complex objects in scene </floater.string> <floater.string name="network_text_msg"> - Network + 網路 </floater.string> <floater.string name="network_packet_loss_critical_pct"> 10 @@ -61,7 +61,7 @@ Connection is dropping [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% of packets </floater.string> <floater.string name="network_performance_normal_msg"> - Normal + æ£å¸¸ </floater.string> <floater.string name="network_ping_critical_ms"> 600 @@ -82,7 +82,7 @@ Possible bad connection or file-sharing app. </floater.string> <floater.string name="server_text_msg"> - Server + 伺æœå™¨ </floater.string> <floater.string name="server_frame_rate_critical_fps"> 20 @@ -94,31 +94,31 @@ 20 </floater.string> <floater.string name="server_frame_time_critical_msg"> - Simulator framerate below [SERVER_FRAME_RATE_CRITICAL] + 模擬器 framerate 低於 [SERVER_FRAME_RATE_CRITICAL] </floater.string> <floater.string name="server_frame_time_warning_msg"> - Simulator framerate between [SERVER_FRAME_RATE_CRITICAL] and [SERVER_FRAME_RATE_WARNING] + 模擬器 framerate 介於 [SERVER_FRAME_RATE_CRITICAL] 與 [SERVER_FRAME_RATE_WARNING] 之間 </floater.string> <floater.string name="server_frame_time_normal_msg"> - Normal + æ£å¸¸ </floater.string> <floater.string name="server_physics_cause_msg"> - Possible Cause: Too many physical objects + å¯èƒ½åŽŸå› ï¼šå¤ªå¤šç‰©ç†ç‰©ä»¶ </floater.string> <floater.string name="server_scripts_cause_msg"> - Possible Cause: Too many scripted objects + å¯èƒ½åŽŸå› ï¼šå¤ªå¤šè…³æœ¬ç‰©ä»¶ </floater.string> <floater.string name="server_net_cause_msg"> - Possible Cause: Too much network traffic + å¯èƒ½åŽŸå› ï¼šå¤ªå¤šç¶²è·¯æµé‡ </floater.string> <floater.string name="server_agent_cause_msg"> - Possible Cause: Too many moving people in region + å¯èƒ½åŽŸå› ï¼šåœ°å€æœ‰å¤ªå¤šç§»å‹•的人 </floater.string> <floater.string name="server_images_cause_msg"> - Possible Cause: Too many image calculations + å¯èƒ½åŽŸå› ï¼šå¤ªå¤šåœ–åƒè¨ˆç®— </floater.string> <floater.string name="server_generic_cause_msg"> - Possible Cause: Simulator load too heavy + å¯èƒ½åŽŸå› ï¼šæ¨¡æ“¬å™¨è² è¼‰éŽé‡ </floater.string> <floater.string name="smaller_label"> >> @@ -126,26 +126,26 @@ <floater.string name="bigger_label"> << </floater.string> - <button name="client_lagmeter" tool_tip="Client lag status"/> + <button name="client_lagmeter" tool_tip="客戶端 lag 狀態"/> <text name="client"> - Client + 客戶端 </text> <text name="client_text"> - Normal + æ£å¸¸ </text> - <button name="network_lagmeter" tool_tip="Network lag status"/> + <button name="network_lagmeter" tool_tip="網路 lag 狀態"/> <text name="network"> - Network + 網路 </text> <text name="network_text"> - Normal + æ£å¸¸ </text> - <button name="server_lagmeter" tool_tip="Server lag status"/> + <button name="server_lagmeter" tool_tip="伺æœå™¨ lag 狀態"/> <text name="server"> - Server + 伺æœå™¨ </text> <text name="server_text"> - Normal + æ£å¸¸ </text> - <button label=">>" name="minimize" tool_tip="Toggle floater size"/> + <button label=">>" name="minimize" tool_tip="åˆ‡æ›æµ®å‹•視窗尺寸"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_land_holdings.xml b/indra/newview/skins/default/xui/zh/floater_land_holdings.xml index de551f8c96e7df0cdf78f9c003822e5324ad5f40..3d9d391a215c471f020962ec4e60973628be668a 100644 --- a/indra/newview/skins/default/xui/zh/floater_land_holdings.xml +++ b/indra/newview/skins/default/xui/zh/floater_land_holdings.xml @@ -9,13 +9,13 @@ <scroll_list.columns label="Type" name="type"/> <scroll_list.columns label="Area" name="area"/> </scroll_list> - <button label="Teleport" label_selected="Teleport" name="Teleport" tool_tip="Teleport to the center of this land."/> + <button label="瞬間傳é€" label_selected="瞬間傳é€" name="Teleport" tool_tip="Teleport to the center of this land."/> <button label="地圖" label_selected="地圖" name="Show on Map" tool_tip="Show this land on the world map"/> <text name="contrib_label"> Contributions to your groups: </text> <scroll_list name="grant list"> - <scroll_list.columns label="Group" name="group"/> + <scroll_list.columns label="社團" name="group"/> <scroll_list.columns label="Area" name="area"/> </scroll_list> <text name="allowed_label"> diff --git a/indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml index 6c8bd76a8a806820921c992188bfee5a17158a64..e6f6e323522303bbd33d0f7d55015150cd4f8fa3 100644 --- a/indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="script ed float" title="SCRIPT: NEW SCRIPT"> +<floater name="script ed float" title="腳本: 新腳本"> <floater.string name="not_allowed"> You can not view or edit this script, since it has been set as "no copy". You need full permissions to view or edit a script inside an object. </floater.string> <floater.string name="script_running"> - Running + åŸ·è¡Œä¸ </floater.string> <floater.string name="Title"> - SCRIPT: [NAME] + 腳本:[NAME] </floater.string> <button label="Reset" label_selected="Reset" name="Reset"/> <check_box initial_value="true" label="Running" name="running"/> diff --git a/indra/newview/skins/default/xui/zh/floater_media_browser.xml b/indra/newview/skins/default/xui/zh/floater_media_browser.xml index 616c326d6b5a414d20ca23882f4993563eac50c3..6e75016fad73b44afe466149af93a02f03bd8e3a 100644 --- a/indra/newview/skins/default/xui/zh/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/zh/floater_media_browser.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_about" title="MEDIA BROWSER"> +<floater name="floater_about" title="媒體劉覽器"> <floater.string name="home_page_url"> http://www.secondlife.com </floater.string> @@ -8,22 +8,22 @@ </floater.string> <layout_stack name="stack1"> <layout_panel name="nav_controls"> - <button label="Back" name="back"/> - <button label="Forward" name="forward"/> - <button label="Reload" name="reload"/> + <button label="å‘後" name="back"/> + <button label="å‘å‰" name="forward"/> + <button label="é‡è¼‰" name="reload"/> <button label="Go" name="go"/> </layout_panel> <layout_panel name="time_controls"> <button label="rewind" name="rewind"/> - <button label="stop" name="stop"/> - <button label="forward" name="seek"/> + <button label="åœæ¢" name="stop"/> + <button label="å‘å‰" name="seek"/> </layout_panel> <layout_panel name="parcel_owner_controls"> - <button label="Send Current Page to Parcel" name="assign"/> + <button label="é€å‡ºç›®å‰é é¢åˆ°åœ°æ®µ" name="assign"/> </layout_panel> <layout_panel name="external_controls"> - <button label="Open in My Web Browser" name="open_browser"/> - <check_box label="Always open in my web browser" name="open_always"/> + <button label="在我的網é ç€è¦½å™¨ä¸é–‹å•Ÿ" name="open_browser"/> + <check_box label="總是在我的網é ç€è¦½å™¨ä¸é–‹å•Ÿ" name="open_always"/> <button label="關閉" name="close"/> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/zh/floater_media_settings.xml b/indra/newview/skins/default/xui/zh/floater_media_settings.xml index 821b93c06f7a07dc546cf7236fc10f2763b40426..f42c0af3d9902b1ee39fb54b83e1e1d9695d08d4 100644 --- a/indra/newview/skins/default/xui/zh/floater_media_settings.xml +++ b/indra/newview/skins/default/xui/zh/floater_media_settings.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="media_settings" title="MEDIA SETTINGS"> <button label="確定" label_selected="確定" name="OK"/> - <button label="å–銷" label_selected="å–銷" name="Cancel"/> + <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="Cancel"/> <button label="套用" label_selected="套用" name="Apply"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_mem_leaking.xml b/indra/newview/skins/default/xui/zh/floater_mem_leaking.xml index 3fa62b1b609a7c7fb7ed821589ca07737f495e80..93c1b58df6713273ec2e5861b9dc737d6ae54cb3 100644 --- a/indra/newview/skins/default/xui/zh/floater_mem_leaking.xml +++ b/indra/newview/skins/default/xui/zh/floater_mem_leaking.xml @@ -12,7 +12,7 @@ [NOTE2] </text> <button label="Start" name="start_btn"/> - <button label="Stop" name="stop_btn"/> + <button label="åœæ¢" name="stop_btn"/> <button label="Release" name="release_btn"/> <button label="關閉" name="close_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_moveview.xml b/indra/newview/skins/default/xui/zh/floater_moveview.xml index 1866592d849620dc3f85fbb221bdb528e4580677..3e44f458e7f49824a48a9e8b85d61aae56fa2763 100644 --- a/indra/newview/skins/default/xui/zh/floater_moveview.xml +++ b/indra/newview/skins/default/xui/zh/floater_moveview.xml @@ -25,22 +25,22 @@ Run right (press Shift + Right Arrow or D) </string> <string name="fly_forward_tooltip"> - Fly Forward (press Up Arrow or W) + å‘å‰é£›ï¼ˆæŒ‰ä¸‹å‘上ç®é 或 W éµï¼‰ </string> <string name="fly_back_tooltip"> - Fly Backwards (press Down Arrow or S) + å‘後飛(按下å‘下ç®é 或 S éµï¼‰ </string> <string name="fly_left_tooltip"> - Fly left (press Shift + Left Arrow or A) + å‘左飛(按下 Shift åŠ ä¸Šå·¦æ–¹å‘鵿ˆ–者是按 A éµï¼‰ </string> <string name="fly_right_tooltip"> - Fly right (press Shift + Right Arrow or D) + å‘å³é£›ï¼ˆæŒ‰ä¸‹ Shift åŠ ä¸Šå³æ–¹å‘鵿ˆ–者是按 D éµï¼‰ </string> <string name="fly_up_tooltip"> - Fly up (press E) + å‘上飛(按下 E éµï¼‰ </string> <string name="fly_down_tooltip"> - Fly down (press C) + å‘下飛(按下 C éµï¼‰ </string> <string name="jump_tooltip"> Jump (press E) @@ -55,7 +55,7 @@ Run </string> <string name="fly_title"> - Fly + 飛行 </string> <panel name="panel_actions"> <button name="turn left btn" tool_tip="Turn left (press Left Arrow or A)"/> @@ -64,12 +64,12 @@ <joystick_slide name="move right btn" tool_tip="Walk right (press Shift + Right Arrow or D)"/> <joystick_turn name="forward btn" tool_tip="Walk forward (press up arrow or W)"/> <joystick_turn name="backward btn" tool_tip="Walk backward (press down arrow or S)"/> - <button name="move up btn" tool_tip="Fly up (press E)"/> - <button name="move down btn" tool_tip="Fly down (press C)"/> + <button name="move up btn" tool_tip="å‘上飛(按下 E éµï¼‰"/> + <button name="move down btn" tool_tip="å‘下飛(按下 C 建)"/> </panel> <panel name="panel_modes"> <button label="" name="mode_walk_btn" tool_tip="Walking mode"/> <button label="" name="mode_run_btn" tool_tip="Running mode"/> - <button label="" name="mode_fly_btn" tool_tip="Flying mode"/> + <button label="" name="mode_fly_btn" tool_tip="飛行模å¼"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_mute_object.xml b/indra/newview/skins/default/xui/zh/floater_mute_object.xml index a2a56f769e5254ffde5af03e4cbf89ea52a6dbe7..7d76f4de08d646d272f8f216c942caca62f4eeeb 100644 --- a/indra/newview/skins/default/xui/zh/floater_mute_object.xml +++ b/indra/newview/skins/default/xui/zh/floater_mute_object.xml @@ -10,5 +10,5 @@ * Only blocks object text, not sounds </text> <button label="確定" name="OK"/> - <button label="å–銷" name="Cancel"/> + <button label="å–æ¶ˆ" name="Cancel"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_nearby_chat.xml b/indra/newview/skins/default/xui/zh/floater_nearby_chat.xml index bed7c20ba517d80f8e95963d0b9de812a0f5e7ad..f0c34acb0622d0d213d54517edf5a80a73e57c2a 100644 --- a/indra/newview/skins/default/xui/zh/floater_nearby_chat.xml +++ b/indra/newview/skins/default/xui/zh/floater_nearby_chat.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="nearby_chat" title="NEARBY CHAT"> +<floater name="nearby_chat" title="附近的èŠå¤©"> <check_box label="Translate chat (powered by Google)" name="translate_chat_checkbox"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_notification.xml b/indra/newview/skins/default/xui/zh/floater_notification.xml index 65102216d2f940c0e749812100b9242e9347c8b0..1e0e207fb0e1dcd4108957ecead63b88fe554ec3 100644 --- a/indra/newview/skins/default/xui/zh/floater_notification.xml +++ b/indra/newview/skins/default/xui/zh/floater_notification.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="notification" title="NOTIFICATIONS CONSOLE"> +<floater name="notification" title="通知控制å°"> <text_editor name="payload"> 載入ä¸... </text_editor> - <combo_box label="Response" name="response"/> + <combo_box label="回應" name="response"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_notifications_console.xml b/indra/newview/skins/default/xui/zh/floater_notifications_console.xml index 4e92aa69e086aebe9171c2e0b7180a9698878ba6..3478761b0b75d4fdecb775b9ef3efe9485e4b11e 100644 --- a/indra/newview/skins/default/xui/zh/floater_notifications_console.xml +++ b/indra/newview/skins/default/xui/zh/floater_notifications_console.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="notifications_console" title="NOTIFICATIONS CONSOLE"> - <combo_box label="Select notification type" name="notification_types"/> - <button label="Add" name="add_notification"/> +<floater name="notifications_console" title="通知控制å°"> + <combo_box label="鏿“‡é€šçŸ¥é¡žåž‹" name="notification_types"/> + <button label="æ·»åŠ " name="add_notification"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_openobject.xml b/indra/newview/skins/default/xui/zh/floater_openobject.xml index 0739e01833fb9b2124955af60624186d69af81ad..61ac3cb1fcda65cc5d054e84350cf6a5b8f5c43b 100644 --- a/indra/newview/skins/default/xui/zh/floater_openobject.xml +++ b/indra/newview/skins/default/xui/zh/floater_openobject.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="objectcontents" title="OBJECT CONTENTS"> +<floater name="objectcontents" title="物件內容"> <text name="object_name"> [DESC]: </text> - <button label="Copy To Inventory" label_selected="Copy To Inventory" name="copy_to_inventory_button"/> - <button label="Copy And Wear" label_selected="Copy And Wear" name="copy_and_wear_button"/> + <button label="覆製到收ç´å€" label_selected="覆製到收ç´å€" name="copy_to_inventory_button"/> + <button label="覆製且穿上" label_selected="覆製且穿上" name="copy_and_wear_button"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/zh/floater_outfit_save_as.xml index 63c9d6c9505b7c5363d9c95c2d431ff591059b12..e33183a0dccf9eefffd6c81f3d3cf84162c8f727 100644 --- a/indra/newview/skins/default/xui/zh/floater_outfit_save_as.xml +++ b/indra/newview/skins/default/xui/zh/floater_outfit_save_as.xml @@ -1,10 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title="Save Outfit"> +<floater name="modal container" title="儲å˜è£æ‰®"> <button label="儲å˜" label_selected="儲å˜" name="Save"/> - <button label="å–銷" label_selected="å–銷" name="Cancel"/> + <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="Cancel"/> <text name="Save item as:"> - Save what I'm wearing -as a new Outfit: + å„²å˜æˆ‘æ£åœ¨ç©¿çš„ç‚ºæ–°è£æ‰®ï¼š </text> <line_editor name="name ed"> [DESC] (new) diff --git a/indra/newview/skins/default/xui/zh/floater_outgoing_call.xml b/indra/newview/skins/default/xui/zh/floater_outgoing_call.xml index a871f821e3e554b42070e52155c025d5318ff745..8b15668e3b4d296702b5f486f58c54ac3d5b1394 100644 --- a/indra/newview/skins/default/xui/zh/floater_outgoing_call.xml +++ b/indra/newview/skins/default/xui/zh/floater_outgoing_call.xml @@ -10,7 +10,7 @@ anonymous </floater.string> <floater.string name="VoiceInviteP2P"> - is calling. + 通話ä¸ã€‚ </floater.string> <floater.string name="VoiceInviteAdHoc"> has joined a Voice Chat call with a conference chat. @@ -36,5 +36,5 @@ <text name="leaving"> Leaving [CURRENT_CHAT]. </text> - <button label="å–銷" label_selected="å–銷" name="Cancel"/> + <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="Cancel"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_pay.xml b/indra/newview/skins/default/xui/zh/floater_pay.xml index 9374ac3f3b09e42803367ea0083383fcad600953..b4841df0ff56112a3c450fc691c8f5f3cbd55f00 100644 --- a/indra/newview/skins/default/xui/zh/floater_pay.xml +++ b/indra/newview/skins/default/xui/zh/floater_pay.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Give Money"> <string name="payee_group"> - Pay Group + 支付社團 </string> <string name="payee_resident"> - Pay Resident + 支付居民 </string> <text name="payee_name"> Test Name That Is Extremely Long To Check Clipping @@ -14,8 +14,8 @@ <button label="L$10" label_selected="L$10" name="fastpay 10"/> <button label="L$20" label_selected="L$20" name="fastpay 20"/> <text name="amount text"> - Or, choose amount: + æˆ–ï¼Œé¸æ“‡ä¸€å€‹é‡‘é¡ï¼š </text> - <button label="Pay" label_selected="Pay" name="pay btn"/> - <button label="å–銷" label_selected="å–銷" name="cancel btn"/> + <button label="支付" label_selected="支付" name="pay btn"/> + <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="cancel btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_pay_object.xml b/indra/newview/skins/default/xui/zh/floater_pay_object.xml index fbb6a8ab3661668b327872dfafc6f5ca91f7421d..2a2aec93b94f99db34dab24d58393d643902cf49 100644 --- a/indra/newview/skins/default/xui/zh/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/zh/floater_pay_object.xml @@ -1,18 +1,18 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Give Money"> <string name="payee_group"> - Pay Group + 支付社團 </string> <string name="payee_resident"> - Pay Resident + 支付居民 </string> <text name="payee_name"> Ericacita Moostopolison </text> <text name="object_name_label"> - Via object: + 經由物件: </text> - <icon name="icon_object" tool_tip="Objects"/> + <icon name="icon_object" tool_tip="物件"/> <text name="object_name_text"> My awesome object with a really damn long name </text> @@ -23,6 +23,6 @@ <text name="amount text"> æˆ–è€…ï¼Œé¸æ“‡ä¸€å€‹é‡‘é¡ï¼š </text> - <button label="Pay" label_selected="Pay" name="pay btn"/> - <button label="å–銷" label_selected="å–銷" name="cancel btn"/> + <button label="支付" label_selected="支付" name="pay btn"/> + <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="cancel btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml b/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml index 8d44d474c0043855966fd3515bcdb9055cd1b6a0..31b8133a18e890f372462fe25da909ab78e00cc3 100644 --- a/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml @@ -11,5 +11,5 @@ <check_box initial_value="true" label="轉售 / é€äºº" name="next_owner_transfer"/> </panel> <button label="確定" label_selected="確定" name="ok"/> - <button label="å–銷" label_selected="å–銷" name="cancel"/> + <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="cancel"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_postcard.xml b/indra/newview/skins/default/xui/zh/floater_postcard.xml index c85ca93e85b6dfb255c128e8fb991459b7b2f673..6f6b75f4680d9d39ab86c73f96abb4fbe324f286 100644 --- a/indra/newview/skins/default/xui/zh/floater_postcard.xml +++ b/indra/newview/skins/default/xui/zh/floater_postcard.xml @@ -7,27 +7,27 @@ Check this out! </floater.string> <floater.string name="upload_message"> - Sending... + 傳é€ä¸... </floater.string> <text name="to_label"> - Recipient's Email: + 收件人電å郵件地å€ï¼š </text> <text name="from_label"> - Your Email: + ä½ çš„é›»å郵件地å€ï¼š </text> <text name="name_label"> - Your Name: + ä½ çš„å稱: </text> <text name="subject_label"> - Subject: + 主旨: </text> - <line_editor label="Type your subject here." name="subject_form"/> + <line_editor label="在æ¤è¼¸å…¥ä½ 的主旨。" name="subject_form"/> <text name="msg_label"> - Message: + 訓æ¯ï¼š </text> <text_editor name="msg_form"> - Type your message here. + 在æ¤è¼¸å…¥ä½ 的訊æ¯ã€‚ </text_editor> - <button label="å–銷" name="cancel_btn"/> - <button label="Send" name="send_btn"/> + <button label="å–æ¶ˆ" name="cancel_btn"/> + <button label="é€å‡º" name="send_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_preferences.xml b/indra/newview/skins/default/xui/zh/floater_preferences.xml index 777425ba30dd72bcfd926a0976ae09e0213d9953..396a4893e04dafaed83cb2cfd19e9b93fa18a8ee 100644 --- a/indra/newview/skins/default/xui/zh/floater_preferences.xml +++ b/indra/newview/skins/default/xui/zh/floater_preferences.xml @@ -1,17 +1,17 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Preferences" title="PREFERENCES"> +<floater name="Preferences" title="å好è¨å®š"> <button label="確定" label_selected="確定" name="OK"/> - <button label="å–銷" label_selected="å–銷" name="Cancel"/> + <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="Cancel"/> <tab_container name="pref core"> <panel label="一般" name="general"/> - <panel label="Graphics" name="display"/> - <panel label="Sound & Media" name="audio"/> + <panel label="圖形" name="display"/> + <panel label="è²éŸ³èˆ‡åª’é«”" name="audio"/> <panel label="èŠå¤©" name="chat"/> - <panel label="Move & View" name="move"/> - <panel label="Notifications" name="msgs"/> - <panel label="Colors" name="colors"/> - <panel label="Privacy" name="im"/> - <panel label="Setup" name="input"/> - <panel label="Advanced" name="advanced1"/> + <panel label="移動與視角" name="move"/> + <panel label="通知" name="msgs"/> + <panel label="é¡è‰²" name="colors"/> + <panel label="éš±ç§" name="im"/> + <panel label="è¨å®š" name="input"/> + <panel label="進階" name="advanced1"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_preview_animation.xml b/indra/newview/skins/default/xui/zh/floater_preview_animation.xml index 5ac2de4dc5e1315ccef5fa563c419b439bbe6fb5..ead8dc49a6da09604214d185398c2eaf840ecbbb 100644 --- a/indra/newview/skins/default/xui/zh/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/zh/floater_preview_animation.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview_anim"> <floater.string name="Title"> - Animation: [NAME] + 動作: [NAME] </floater.string> <text name="desc txt"> æè¿°ï¼š </text> - <button label="Play Inworld" label_selected="Stop" name="Anim play btn" tool_tip="Play this animation so that others can see it"/> - <button label="Play Locally" label_selected="Stop" name="Anim audition btn" tool_tip="Play this animation so that only you can see it"/> + <button label="Play Inworld" label_selected="åœæ¢" name="Anim play btn" tool_tip="Play this animation so that others can see it"/> + <button label="Play Locally" label_selected="åœæ¢" name="Anim audition btn" tool_tip="Play this animation so that only you can see it"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_preview_gesture.xml b/indra/newview/skins/default/xui/zh/floater_preview_gesture.xml index fe64f757775e97070693420e8f5c471d65cb764a..0649ecb79128af08d27cafba2d8655c8c75c6dc5 100644 --- a/indra/newview/skins/default/xui/zh/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/zh/floater_preview_gesture.xml @@ -13,7 +13,7 @@ Wait: </floater.string> <floater.string name="stop_txt"> - Stop + åœæ¢ </floater.string> <floater.string name="preview_txt"> é 覽 @@ -43,10 +43,10 @@ Library: </text> <scroll_list name="library_list"> - <scroll_list.rows name="action_animation" value="Animation"/> - <scroll_list.rows name="action_sound" value="Sound"/> + <scroll_list.rows name="action_animation" value="動作"/> + <scroll_list.rows name="action_sound" value="è²éŸ³"/> <scroll_list.rows name="action_chat" value="èŠå¤©"/> - <scroll_list.rows name="action_wait" value="Wait"/> + <scroll_list.rows name="action_wait" value="ç‰å¾…"/> </scroll_list> <button label="Add >>" name="add_btn"/> <text name="steps_label"> @@ -54,15 +54,15 @@ </text> <button label="Up" name="up_btn"/> <button label="Down" name="down_btn"/> - <button label="Remove" name="delete_btn"/> + <button label="移除" name="delete_btn"/> <text name="options_text"> - (options) + (é¸é …) </text> <radio_group name="animation_trigger_type"> - <radio_item label="Start" name="start"/> - <radio_item label="Stop" name="stop"/> + <radio_item label="é–‹å§‹" name="start"/> + <radio_item label="åœæ¢" name="stop"/> </radio_group> - <check_box label="until animations are done" name="wait_anim_check"/> + <check_box label="ç›´åˆ°å‹•ä½œçµæŸã€‚" name="wait_anim_check"/> <check_box label="time in seconds:" name="wait_time_check"/> <text name="help_label"> All steps happen simultaneously, unless you add wait steps. diff --git a/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml b/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml index a3eaa559e04bf0141c750a900191b161bd163aad..3c2f913a6dc5317ae0d258c3ff71e53efcc60d6e 100644 --- a/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="preview notecard" title="NOTECARD:"> +<floater name="preview notecard" title="記事å¡ï¼š"> <floater.string name="no_object"> Unable to find object containing this notecard. </floater.string> @@ -7,7 +7,7 @@ You do not have permission to view this notecard. </floater.string> <floater.string name="Title"> - Notecard: [NAME] + 記事å¡ï¼š [NAME] </floater.string> <text name="desc txt"> æè¿°ï¼š diff --git a/indra/newview/skins/default/xui/zh/floater_preview_texture.xml b/indra/newview/skins/default/xui/zh/floater_preview_texture.xml index 53fb7ef2f10f86e71c821ed6d86dbaf88ead3676..02e26cea24eb99947bc902bb58fdc24d67ef41bf 100644 --- a/indra/newview/skins/default/xui/zh/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/zh/floater_preview_texture.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview_texture"> <floater.string name="Title"> - Texture: [NAME] + æè³ªï¼š[NAME] </floater.string> <floater.string name="Copy"> - Copy To Inventory + 覆製到收ç´å€ </floater.string> <text name="desc txt"> æè¿°ï¼š @@ -22,7 +22,7 @@ <combo_item name="1:1" tool_tip="Group insignia or Real World profile"> 1:1 </combo_item> - <combo_item name="4:3" tool_tip="[SECOND_LIFE] profile"> + <combo_item name="4:3" tool_tip="[SECOND_LIFE] 檔案"> 4:3 </combo_item> <combo_item name="10:7" tool_tip="Classifieds and search listings, landmarks"> diff --git a/indra/newview/skins/default/xui/zh/floater_publish_classified.xml b/indra/newview/skins/default/xui/zh/floater_publish_classified.xml index 45bbe7b9796b83334e29683efef43582f7a20f8e..acec1efcb05929a1e5427cf1fc683275ec8278ee 100644 --- a/indra/newview/skins/default/xui/zh/floater_publish_classified.xml +++ b/indra/newview/skins/default/xui/zh/floater_publish_classified.xml @@ -7,5 +7,5 @@ Remember, Classified fees are non-refundable. </text> <spinner label="åƒ¹æ ¼ï¼š L$" name="price_for_listing" tool_tip="Price for listing." value="50"/> <button label="Publish" name="publish_btn"/> - <button label="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_report_abuse.xml b/indra/newview/skins/default/xui/zh/floater_report_abuse.xml index c745051c8bbd476808d724252b148a30d870327f..436f5cdcc56ad9097baf6d548a5e755bd8dd1287 100644 --- a/indra/newview/skins/default/xui/zh/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/zh/floater_report_abuse.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_report_abuse" title="REPORT ABUSE"> +<floater name="floater_report_abuse" title="èˆ‰å ±æ¿«ç”¨"> <floater.string name="Screenshot"> - Screenshot + å¿«ç…§ </floater.string> - <check_box label="Use this screenshot" name="screen_check"/> + <check_box label="使用這張快照" name="screen_check"/> <text name="reporter_title"> - Reporter: + èˆ‰å ±è€…ï¼š </text> <text name="sim_title"> 地å€ï¼š @@ -24,13 +24,13 @@ </text> <button name="pick_btn" tool_tip="Object Picker - Identify an object as the subject of this report"/> <text name="object_name_label"> - Object: + 物件: </text> <text name="owner_name_label"> æ“æœ‰è€…: </text> <combo_box name="category_combo" tool_tip="Category -- select the category that best describes this report"> - <combo_box.item label="Select category" name="Select_category"/> + <combo_box.item label="鏿“‡é¡žåˆ¥" name="Select_category"/> <combo_box.item label="Age > Age play" name="Age__Age_play"/> <combo_box.item label="Age > Adult Resident on Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/> <combo_box.item label="Age > Underage Resident outside of Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/> @@ -68,20 +68,20 @@ <combo_box.item label="Land > Encroachment > Particles" name="Land__Encroachment__Particles"/> <combo_box.item label="Land > Encroachment > Trees/plants" name="Land__Encroachment__Trees_plants"/> <combo_box.item label="Wagering/gambling" name="Wagering_gambling"/> - <combo_box.item label="Other" name="Other"/> + <combo_box.item label="å…¶ä»–" name="Other"/> </combo_box> <text name="abuser_name_title"> - Abuser name: + 濫用者å稱: </text> - <button label="Choose" name="select_abuser" tool_tip="Select the name of the abuser from a list"/> + <button label="鏿“‡" name="select_abuser" tool_tip="Select the name of the abuser from a list"/> <text name="abuser_name_title2"> - Location of Abuse: + 濫用ä½ç½®ï¼š </text> <text name="sum_title"> - Summary: + 摘è¦ï¼š </text> <text name="dscr_title"> - Details: + 細節: </text> <text name="bug_aviso"> Please be as specific as possible @@ -89,6 +89,6 @@ <text name="incomplete_title"> * Incomplete reports won't be investigated </text> - <button label="Report Abuse" label_selected="Report Abuse" name="send_btn"/> - <button label="å–銷" label_selected="å–銷" name="cancel_btn"/> + <button label="èˆ‰å ±æ¿«ç”¨" label_selected="èˆ‰å ±æ¿«ç”¨" name="send_btn"/> + <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_script_debug.xml b/indra/newview/skins/default/xui/zh/floater_script_debug.xml index 12e646785da148f9b5572b95d201202fefca28f4..5b3500c018e41b281717e345d202fc0da10c90c7 100644 --- a/indra/newview/skins/default/xui/zh/floater_script_debug.xml +++ b/indra/newview/skins/default/xui/zh/floater_script_debug.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<multi_floater name="script debug floater" title="Script Warning/Error"/> +<multi_floater name="script debug floater" title="腳本 è¦å‘Š/錯誤"/> diff --git a/indra/newview/skins/default/xui/zh/floater_script_search.xml b/indra/newview/skins/default/xui/zh/floater_script_search.xml index b6671df0e266b0005562070951106829c07a16c9..400ef4be81fd19b9284c867a2155690eed464f1b 100644 --- a/indra/newview/skins/default/xui/zh/floater_script_search.xml +++ b/indra/newview/skins/default/xui/zh/floater_script_search.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="script search" title="SCRIPT SEARCH"> +<floater name="script search" title="腳本æœå°‹"> <check_box label="Case Insensitive" name="case_text"/> - <button label="Search" label_selected="Search" name="search_btn"/> + <button label="æœå°‹" label_selected="æœå°‹" name="search_btn"/> <button label="å–代" label_selected="å–代" name="replace_btn"/> <button label="全部å–代" label_selected="全部å–代" name="replace_all_btn"/> <text name="txt"> - Search + æœå°‹ </text> <text name="txt2"> å–代 diff --git a/indra/newview/skins/default/xui/zh/floater_select_key.xml b/indra/newview/skins/default/xui/zh/floater_select_key.xml index 1452f744dac4159439bc03bc2b2afe68818f43bb..c1661635f1652e3a7048e30531bda22c6b9089fa 100644 --- a/indra/newview/skins/default/xui/zh/floater_select_key.xml +++ b/indra/newview/skins/default/xui/zh/floater_select_key.xml @@ -3,5 +3,5 @@ <text name="Save item as:"> Press a key to set your Speak button trigger. </text> - <button label="å–銷" label_selected="å–銷" name="Cancel"/> + <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="Cancel"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_sell_land.xml b/indra/newview/skins/default/xui/zh/floater_sell_land.xml index 12d4ed606d7c3e9c81f9d65000915ed77f8fefa7..19580c99a1f4a733c8c92e2077ea4a0fc321407b 100644 --- a/indra/newview/skins/default/xui/zh/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/zh/floater_sell_land.xml @@ -9,7 +9,7 @@ 地段å稱 </text> <text name="info_size_label"> - Size: + 尺寸: </text> <text name="info_size"> [AREA] m² @@ -39,11 +39,11 @@ Choose whether to sell to anyone or a particular buyer. </text> <combo_box name="sell_to"> - <combo_box.item label="- Select one -" name="--selectone--"/> + <combo_box.item label="- 鏿“‡ä¸€å€‹ -" name="--selectone--"/> <combo_box.item label="任何人" name="Anyone"/> - <combo_box.item label="Specific person:" name="Specificuser:"/> + <combo_box.item label="指定人:" name="Specificuser:"/> </combo_box> - <button label="Select" name="sell_to_select_agent"/> + <button label="鏿“‡" name="sell_to_select_agent"/> <text name="sell_objects_label"> 3. Sell the objects with the land? </text> @@ -54,12 +54,12 @@ <radio_item label="No, keep ownership of objects" name="no"/> <radio_item label="Yes, sell objects with land" name="yes"/> </radio_group> - <button label="Show Objects" name="show_objects"/> + <button label="顯示物件" name="show_objects"/> <text name="nag_message_label"> REMEMBER: All sales are final. </text> <button label="Set Land For Sale" name="sell_btn"/> - <button label="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" name="cancel_btn"/> </panel> </scroll_container> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_snapshot.xml b/indra/newview/skins/default/xui/zh/floater_snapshot.xml index 80b9d69a7958565767450f46c67381ab0c6b0bcb..9edc19969f8c4700145b1195b28388ab40c708ce 100644 --- a/indra/newview/skins/default/xui/zh/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/zh/floater_snapshot.xml @@ -5,43 +5,43 @@ </floater.string> <radio_group label="Snapshot type" name="snapshot_type_radio"> <radio_item label="Email" name="postcard"/> - <radio_item label="My inventory (L$[AMOUNT])" name="texture"/> + <radio_item label="我的收ç´å€ï¼ˆL$[AMOUNT])" name="texture"/> <radio_item label="Save to my computer" name="local"/> </radio_group> <text name="file_size_label"> [SIZE] KB </text> - <button label="Send" name="send_btn"/> - <button label="Save (L$[AMOUNT])" name="upload_btn"/> - <flyout_button label="儲å˜" name="save_btn" tool_tip="Save image to a file"> + <button label="é€å‡º" name="send_btn"/> + <button label="儲å˜ï¼ˆL$[AMOUNT])" name="upload_btn"/> + <flyout_button label="儲å˜" name="save_btn" tool_tip="儲å˜åœ–åƒåˆ°æª”案"> <flyout_button.item label="儲å˜" name="save_item"/> <flyout_button.item label="å¦å˜..." name="saveas_item"/> </flyout_button> - <button label="More" name="more_btn" tool_tip="Advanced options"/> - <button label="Less" name="less_btn" tool_tip="Advanced options"/> - <button label="å–銷" name="discard_btn"/> + <button label="更多" name="more_btn" tool_tip="進階é¸é …"/> + <button label="æ›´å°‘" name="less_btn" tool_tip="進階é¸é …"/> + <button label="å–æ¶ˆ" name="discard_btn"/> <text name="type_label2"> - Size + 尺寸 </text> <text name="format_label"> Format </text> <combo_box label="Resolution" name="postcard_size_combo"> - <combo_box.item label="Current Window" name="CurrentWindow"/> + <combo_box.item label="ç›®å‰è¦–窗" name="CurrentWindow"/> <combo_box.item label="640x480" name="640x480"/> <combo_box.item label="800x600" name="800x600"/> <combo_box.item label="1024x768" name="1024x768"/> - <combo_box.item label="Custom" name="Custom"/> + <combo_box.item label="自訂" name="Custom"/> </combo_box> <combo_box label="Resolution" name="texture_size_combo"> - <combo_box.item label="Current Window" name="CurrentWindow"/> + <combo_box.item label="ç›®å‰è¦–窗" name="CurrentWindow"/> <combo_box.item label="Small (128x128)" name="Small(128x128)"/> <combo_box.item label="Medium (256x256)" name="Medium(256x256)"/> <combo_box.item label="Large (512x512)" name="Large(512x512)"/> - <combo_box.item label="Custom" name="Custom"/> + <combo_box.item label="自訂" name="Custom"/> </combo_box> <combo_box label="Resolution" name="local_size_combo"> - <combo_box.item label="Current Window" name="CurrentWindow"/> + <combo_box.item label="ç›®å‰è¦–窗" name="CurrentWindow"/> <combo_box.item label="320x240" name="320x240"/> <combo_box.item label="640x480" name="640x480"/> <combo_box.item label="800x600" name="800x600"/> @@ -58,17 +58,17 @@ <spinner label="Width" name="snapshot_width"/> <spinner label="Height" name="snapshot_height"/> <check_box label="Constrain proportions" name="keep_aspect_check"/> - <slider label="Image quality" name="image_quality_slider"/> + <slider label="圖åƒå“質" name="image_quality_slider"/> <text name="layer_type_label"> Capture: </text> - <combo_box label="Image Layers" name="layer_types"> + <combo_box label="圖層" name="layer_types"> <combo_box.item label="Colors" name="Colors"/> <combo_box.item label="Depth" name="Depth"/> </combo_box> <check_box label="Interface" name="ui_check"/> <check_box label="HUDs" name="hud_check"/> <check_box label="Keep open after saving" name="keep_open_check"/> - <check_box label="Freeze frame (fullscreen)" name="freeze_frame_check"/> + <check_box label="å‡çµæ¡†æž¶ï¼ˆå…¨èž¢å¹•)" name="freeze_frame_check"/> <check_box label="Auto-refresh" name="auto_snapshot_check"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_sound_preview.xml b/indra/newview/skins/default/xui/zh/floater_sound_preview.xml index 269cd5db086329f426b5d0210c03d2ee23d1f3f6..c942ba1cfb43eab9c94f3011bce28e3fd5ac6951 100644 --- a/indra/newview/skins/default/xui/zh/floater_sound_preview.xml +++ b/indra/newview/skins/default/xui/zh/floater_sound_preview.xml @@ -7,5 +7,5 @@ æè¿°ï¼š </text> <button label="上傳(L$[AMOUNT])" name="ok_btn"/> - <button label="å–銷" label_selected="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_stats.xml b/indra/newview/skins/default/xui/zh/floater_stats.xml index 6b6276e88f324aba60332a3ad05388927504745e..eebd5df3f75a3f4bdcccd4f107b2e65d254c3a97 100644 --- a/indra/newview/skins/default/xui/zh/floater_stats.xml +++ b/indra/newview/skins/default/xui/zh/floater_stats.xml @@ -1,53 +1,53 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Statistics" title="STATISTICS"> +<floater name="Statistics" title="統計"> <scroll_container name="statistics_scroll"> <container_view name="statistics_view"> - <stat_view label="Basic" name="basic"> + <stat_view label="基本" name="basic"> <stat_bar label="FPS" name="fps"/> - <stat_bar label="Bandwidth" name="bandwidth"/> + <stat_bar label="é »å¯¬" name="bandwidth"/> <stat_bar label="å°åŒ…æå¤±" name="packet_loss"/> <stat_bar label="Ping Sim" name="ping"/> </stat_view> - <stat_view label="Advanced" name="advanced"> + <stat_view label="進階" name="advanced"> <stat_view label="Render" name="render"> <stat_bar label="KTris Drawn" name="ktrisframe"/> <stat_bar label="KTris Drawn" name="ktrissec"/> - <stat_bar label="Total Objects" name="objs"/> - <stat_bar label="New Objects" name="newobjs"/> + <stat_bar label="物件總計" name="objs"/> + <stat_bar label="新物件" name="newobjs"/> </stat_view> - <stat_view label="Texture" name="texture"> - <stat_bar label="Count" name="numimagesstat"/> + <stat_view label="æè³ª" name="texture"> + <stat_bar label="計數" name="numimagesstat"/> <stat_bar label="Raw Count" name="numrawimagesstat"/> <stat_bar label="GL Mem" name="gltexmemstat"/> <stat_bar label="Formatted Mem" name="formattedmemstat"/> <stat_bar label="Raw Mem" name="rawmemstat"/> <stat_bar label="Bound Mem" name="glboundmemstat"/> </stat_view> - <stat_view label="Network" name="network"> + <stat_view label="網路" name="network"> <stat_bar label="Packets In" name="packetsinstat"/> <stat_bar label="Packets Out" name="packetsoutstat"/> - <stat_bar label="Objects" name="objectkbitstat"/> - <stat_bar label="Texture" name="texturekbitstat"/> - <stat_bar label="Asset" name="assetkbitstat"/> + <stat_bar label="物件" name="objectkbitstat"/> + <stat_bar label="æè³ª" name="texturekbitstat"/> + <stat_bar label="資產" name="assetkbitstat"/> <stat_bar label="Layers" name="layerskbitstat"/> <stat_bar label="Actual In" name="actualinkbitstat"/> <stat_bar label="Actual Out" name="actualoutkbitstat"/> <stat_bar label="VFS Pending Ops" name="vfspendingoperations"/> </stat_view> </stat_view> - <stat_view label="Simulator" name="sim"> + <stat_view label="模擬器" name="sim"> <stat_bar label="Time Dilation" name="simtimedilation"/> <stat_bar label="Sim FPS" name="simfps"/> <stat_bar label="Physics FPS" name="simphysicsfps"/> <stat_view label="Physics Details" name="physicsdetail"> <stat_bar label="Pinned Objects" name="physicspinnedtasks"/> <stat_bar label="Low LOD Objects" name="physicslodtasks"/> - <stat_bar label="Memory Allocated" name="physicsmemoryallocated"/> + <stat_bar label="記憶體é…ç½®" name="physicsmemoryallocated"/> </stat_view> <stat_bar label="Agent Updates/Sec" name="simagentups"/> <stat_bar label="Main Agents" name="simmainagents"/> <stat_bar label="Child Agents" name="simchildagents"/> - <stat_bar label="Objects" name="simobjects"/> + <stat_bar label="物件" name="simobjects"/> <stat_bar label="Active Objects" name="simactiveobjects"/> <stat_bar label="Active Scripts" name="simactivescripts"/> <stat_bar label="Script Events" name="simscripteps"/> @@ -63,7 +63,7 @@ <stat_bar label="Simulation Time" name="simsimothermsec"/> <stat_bar label="Agent Time" name="simagentmsec"/> <stat_bar label="Images Time" name="simimagesmsec"/> - <stat_bar label="Script Time" name="simscriptmsec"/> + <stat_bar label="腳本時間" name="simscriptmsec"/> </stat_view> </stat_view> </container_view> diff --git a/indra/newview/skins/default/xui/zh/floater_sys_well.xml b/indra/newview/skins/default/xui/zh/floater_sys_well.xml index dbdd32974c6d7808683dcc66786c40c9b67fad8e..fd27e944ac9949a582963f6bafc577b2d305cdd0 100644 --- a/indra/newview/skins/default/xui/zh/floater_sys_well.xml +++ b/indra/newview/skins/default/xui/zh/floater_sys_well.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="sys_well_window" title="NOTIFICATIONS"> +<floater name="sys_well_window" title="通知"> <string name="title_im_well_window"> CONVERSATIONS </string> <string name="title_notification_well_window"> - NOTIFICATIONS + 通知 </string> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/zh/floater_texture_ctrl.xml index 4c6dffea76d1eb958cacfe11384a986f8fb75f9f..fc00b0b4a2deb77f170bc723c1f89655b24491b0 100644 --- a/indra/newview/skins/default/xui/zh/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/zh/floater_texture_ctrl.xml @@ -10,14 +10,14 @@ Multiple textures </text> <text name="unknown"> - Size: [DIMENSIONS] + 尺寸:[DIMENSIONS] </text> <button label="é è¨" label_selected="é è¨" name="Default"/> <button label="ç„¡" label_selected="ç„¡" name="None"/> <button label="Blank" label_selected="Blank" name="Blank"/> <check_box initial_value="true" label="ç«‹å³å¥—用" name="apply_immediate_check"/> - <filter_editor label="Filter Textures" name="inventory search editor"/> + <filter_editor label="æè³ªéŽæ¿¾å™¨" name="inventory search editor"/> <check_box initial_value="false" label="顯示資料夾" name="show_folders_check"/> <button label="確定" label_selected="確定" name="Select"/> - <button label="å–銷" label_selected="å–銷" name="Cancel"/> + <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="Cancel"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_tools.xml b/indra/newview/skins/default/xui/zh/floater_tools.xml index b0d3d6923090a3778785e91aec18deef66c7f0a2..300d7ee63be9fe34e19e974d2fe0087782b24c9a 100644 --- a/indra/newview/skins/default/xui/zh/floater_tools.xml +++ b/indra/newview/skins/default/xui/zh/floater_tools.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="toolbox floater" short_title="BUILD TOOLS"> +<floater name="toolbox floater" short_title="å»ºé€ å·¥å…·"> <floater.string name="status_rotate"> Drag colored bands to rotate object </floater.string> @@ -39,11 +39,11 @@ <floater.string name="grid_attachment_text"> Attachment </floater.string> - <button name="button focus" tool_tip="Focus"/> + <button name="button focus" tool_tip="èšç„¦"/> <button name="button move" tool_tip="移動"/> <button name="button edit" tool_tip="編輯"/> - <button name="button create" tool_tip="Create"/> - <button name="button land" tool_tip="Land"/> + <button name="button create" tool_tip="å‰µé€ "/> + <button name="button land" tool_tip="土地"/> <text name="text status"> Drag to move, shift-drag to copy </text> @@ -60,27 +60,27 @@ </radio_group> <radio_group name="edit_radio_group"> <radio_item label="移動" name="radio position"/> - <radio_item label="Rotate (Ctrl)" name="radio rotate"/> - <radio_item label="Stretch (Ctrl+Shift)" name="radio stretch"/> - <radio_item label="Select Face" name="radio select face"/> + <radio_item label="旋轉(Ctrl)" name="radio rotate"/> + <radio_item label="伸展(Ctrl+Shift)" name="radio stretch"/> + <radio_item label="鏿“‡é¢" name="radio select face"/> </radio_group> - <check_box label="Edit linked" name="checkbox edit linked parts"/> - <button label="Link" name="link_btn"/> - <button label="Unlink" name="unlink_btn"/> + <check_box label="編輯è¯çµéƒ¨åˆ†" name="checkbox edit linked parts"/> + <button label="è¯çµ" name="link_btn"/> + <button label="å–æ¶ˆè¯çµ" name="unlink_btn"/> <text name="RenderingCost" tool_tip="Shows the rendering cost calculated for this object"> þ: [COUNT] </text> - <text label="Stretch Both Sides" name="checkbox uniform label"> - Stretch Both Sides + <text label="åŒæ™‚伸展兩å´" name="checkbox uniform label"> + åŒæ™‚ä¼¸å±•å…©å´ </text> - <check_box initial_value="true" label="Stretch Textures" name="checkbox stretch textures"/> + <check_box initial_value="true" label="伸展æè³ª" name="checkbox stretch textures"/> <check_box initial_value="true" label="è²¼é½Šæ ¼ç·š" name="checkbox snap to grid"/> <combo_box name="combobox grid mode" tool_tip="Choose the type of grid ruler for positioning the object"> <combo_box.item label="World grid" name="World"/> <combo_box.item label="Local grid" name="Local"/> <combo_box.item label="Reference grid" name="Reference"/> </combo_box> - <button name="Options..." tool_tip="See more grid options"/> + <button name="Options..." tool_tip="å¯Ÿçœ‹æ›´å¤šæ ¼ç·šé¸é …"/> <button name="ToolCube" tool_tip="Cube"/> <button name="ToolPrism" tool_tip="Prism"/> <button name="ToolPyramid" tool_tip="Pyramid"/> @@ -96,33 +96,33 @@ <button name="ToolRing" tool_tip="Ring"/> <button name="ToolTree" tool_tip="Tree"/> <button name="ToolGrass" tool_tip="Grass"/> - <check_box label="Keep Tool selected" name="checkbox sticky"/> - <check_box label="Copy selection" name="checkbox copy selection"/> + <check_box label="ä¿æŒå·²é¸æ“‡çš„工具" name="checkbox sticky"/> + <check_box label="è¦†è£½é¸æ“‡" name="checkbox copy selection"/> <check_box initial_value="true" label="Center Copy" name="checkbox copy centers"/> <check_box label="Rotate Copy" name="checkbox copy rotates"/> <radio_group name="land_radio_group"> - <radio_item label="Select Land" name="radio select land"/> - <radio_item label="Flatten" name="radio flatten"/> - <radio_item label="Raise" name="radio raise"/> - <radio_item label="Lower" name="radio lower"/> - <radio_item label="Smooth" name="radio smooth"/> - <radio_item label="Roughen" name="radio noise"/> - <radio_item label="Revert" name="radio revert"/> + <radio_item label="鏿“‡åœŸåœ°" name="radio select land"/> + <radio_item label="攤平" name="radio flatten"/> + <radio_item label="æé«˜" name="radio raise"/> + <radio_item label="é™ä½Ž" name="radio lower"/> + <radio_item label="平滑" name="radio smooth"/> + <radio_item label="ç²—ç³™" name="radio noise"/> + <radio_item label="還原" name="radio revert"/> </radio_group> <text name="Bulldozer:"> - Bulldozer: + 推土機: </text> <text name="Dozer Size:"> - Size + 尺寸 </text> <slider_bar initial_value="2.0" name="slider brush size"/> <text name="Strength:"> - Strength + åŠ›é“ </text> <slider_bar initial_value="0.00" name="slider force"/> - <button label="套用" label_selected="套用" name="button apply to selection" tool_tip="Modify selected land"/> + <button label="套用" label_selected="套用" name="button apply to selection" tool_tip="ä¿®æ”¹æ‰€é¸æ“‡çš„土地"/> <text name="obj_count"> - Objects: [COUNT] + 物件: [COUNT] </text> <text name="prim_count"> Prims: [COUNT] @@ -136,19 +136,19 @@ Deed </panel.string> <panel.string name="text modify info 1"> - You can modify this object + ä½ èƒ½ä¿®æ”¹é€™å€‹ç‰©ä»¶ </panel.string> <panel.string name="text modify info 2"> - You can modify these objects + ä½ èƒ½ä¿®æ”¹é€™äº›ç‰©ä»¶ </panel.string> <panel.string name="text modify info 3"> - You can't modify this object + ä½ ä¸èƒ½ä¿®æ”¹é€™å€‹ç‰©ä»¶ </panel.string> <panel.string name="text modify info 4"> - You can't modify these objects + ä½ ä¸èƒ½ä¿®æ”¹é€™äº›ç‰©ä»¶ </panel.string> <panel.string name="text modify warning"> - You must select entire object to set permissions + ä½ å¿…é ˆé¸å–整個物件以è¨å®šæ¬Šé™ </panel.string> <panel.string name="Cost Default"> åƒ¹æ ¼ï¼š L$ @@ -157,7 +157,7 @@ 總價: L$ </panel.string> <panel.string name="Cost Per Unit"> - Price Per: L$ + 單價æ¯å€‹ï¼š L$ </panel.string> <panel.string name="Cost Mixed"> Mixed Price @@ -178,22 +178,22 @@ æ“æœ‰è€…: </text> <text name="Group:"> - Group: + 社團: </text> <name_box initial_value="載入ä¸..." name="Group Name Proxy"/> - <button name="button set group" tool_tip="Choose a group to share this object's permissions"/> + <button name="button set group" tool_tip="鏿“‡ä¸€å€‹ç¤¾åœ˜ä»¥åˆ†äº«é€™ç‰©ä»¶æ¬Šé™"/> <check_box label="分享" name="checkbox share with group" tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions."/> <button label="Deed" label_selected="Deed" name="button deed" tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer."/> <text name="label click action"> - Click to: + 點擊以: </text> <combo_box name="clickaction"> - <combo_box.item label="Touch (default)" name="Touch/grab(default)"/> - <combo_box.item label="Sit on object" name="Sitonobject"/> - <combo_box.item label="Buy object" name="Buyobject"/> - <combo_box.item label="Pay object" name="Payobject"/> - <combo_box.item label="Open" name="Open"/> - <combo_box.item label="Zoom" name="Zoom"/> + <combo_box.item label="觸碰(é è¨ï¼‰" name="Touch/grab(default)"/> + <combo_box.item label="å在物件上" name="Sitonobject"/> + <combo_box.item label="購買物件" name="Buyobject"/> + <combo_box.item label="支付物件" name="Payobject"/> + <combo_box.item label="開啟" name="Open"/> + <combo_box.item label="縮放" name="Zoom"/> </combo_box> <check_box label="出售:" name="checkbox for sale"/> <combo_box name="sale type"> @@ -202,10 +202,10 @@ <combo_box.item label="原件" name="Original"/> </combo_box> <spinner label="åƒ¹æ ¼ï¼š L$" name="Edit Cost"/> - <check_box label="Show in search" name="search_check" tool_tip="Let people see this object in search results"/> + <check_box label="顯示在æœå°‹ä¸" name="search_check" tool_tip="讓其他人å¯ä»¥åœ¨æœå°‹çµæžœä¸çœ‹åˆ°é€™ç‰©ä»¶"/> <panel name="perms_build"> <text name="perm_modify"> - You can modify this object + ä½ å¯ä»¥ä¿®æ”¹é€™å€‹ç‰©ä»¶ </text> <text name="Anyone can:"> 任何人: @@ -238,25 +238,25 @@ </text> </panel> </panel> - <panel label="Object" name="Object"> - <check_box label="Locked" name="checkbox locked" tool_tip="Prevents object from being moved or deleted. Frequently useful during building to avoid unintended edits."/> - <check_box label="Physical" name="Physical Checkbox Ctrl" tool_tip="Allows object to be pushed and affected by gravity"/> - <check_box label="Temporary" name="Temporary Checkbox Ctrl" tool_tip="Causes object to be deleted 1 minute after creation"/> - <check_box label="Phantom" name="Phantom Checkbox Ctrl" tool_tip="Causes object to not collide with other objects or avatars"/> + <panel label="物件" name="Object"> + <check_box label="鎖定" name="checkbox locked" tool_tip="é é˜²ç‰©ä»¶è¢«ç§»å‹•æˆ–åˆªé™¤ï¼Œæœ€å¸¸ä½¿ç”¨çš„ç‹€æ³æ˜¯åœ¨å»ºé€ éŽç¨‹ä¸é¿å…被æ„外的編輯。"/> + <check_box label="ç‰©ç†æ€§" name="Physical Checkbox Ctrl" tool_tip="å…許物件被推撞與å—é‡åŠ›å½±éŸ¿"/> + <check_box label="暫時性" name="Temporary Checkbox Ctrl" tool_tip="ä½¿ç‰©ä»¶åœ¨å»ºé€ å¾Œçš„ä¸€åˆ†é˜è‡ªå‹•刪除"/> + <check_box label="幻影性" name="Phantom Checkbox Ctrl" tool_tip="ä½¿ç‰©ä»¶ä¸æœƒèˆ‡å…¶ä»–物件或化身產生碰撞"/> <text name="label position"> - Position (meters) + ä½ç½®ï¼ˆå…¬å°ºï¼‰ </text> <spinner label="X" name="Pos X"/> <spinner label="Y" name="Pos Y"/> <spinner label="Z" name="Pos Z"/> <text name="label size"> - Size (meters) + 尺寸(公尺) </text> <spinner label="X" name="Scale X"/> <spinner label="Y" name="Scale Y"/> <spinner label="Z" name="Scale Z"/> <text name="label rotation"> - Rotation (degrees) + 旋轉(角度) </text> <spinner label="X" name="Rot X"/> <spinner label="Y" name="Rot Y"/> @@ -273,12 +273,12 @@ </combo_box> <combo_box name="material"> <combo_box.item label="Stone" name="Stone"/> - <combo_box.item label="Metal" name="Metal"/> - <combo_box.item label="Glass" name="Glass"/> - <combo_box.item label="Wood" name="Wood"/> - <combo_box.item label="Flesh" name="Flesh"/> - <combo_box.item label="Plastic" name="Plastic"/> - <combo_box.item label="Rubber" name="Rubber"/> + <combo_box.item label="金屬" name="Metal"/> + <combo_box.item label="玻璃" name="Glass"/> + <combo_box.item label="木é " name="Wood"/> + <combo_box.item label="肌肉" name="Flesh"/> + <combo_box.item label="å¡‘è† " name="Plastic"/> + <combo_box.item label="æ©¡è† " name="Rubber"/> </combo_box> <text name="text cut"> Path Cut (begin/end) @@ -286,13 +286,13 @@ <spinner label="B" name="cut begin"/> <spinner label="E" name="cut end"/> <text name="text hollow"> - Hollow + ä¸ç©º </text> <text name="text skew"> Skew </text> <text name="Hollow Shape"> - Hollow Shape + ä¸ç©ºå½¢ç‹€ </text> <combo_box name="hole"> <combo_box.item label="é è¨" name="Default"/> @@ -309,7 +309,7 @@ Taper </text> <text name="scale_hole"> - Hole Size + 洞尺寸 </text> <spinner label="X" name="Taper Scale X"/> <spinner label="Y" name="Taper Scale Y"/> @@ -354,12 +354,12 @@ <combo_box.item label="Cylinder" name="Cylinder"/> </combo_box> </panel> - <panel label="Features" name="Features"> + <panel label="特性" name="Features"> <text name="select_single"> Select only one primitive to edit features. </text> <text name="edit_object"> - Edit object features: + 編輯物件特性: </text> <check_box label="Flexible Path" name="Flexible1D Checkbox Ctrl" tool_tip="Allows object to flex about the Z axis (Client-side only)"/> <spinner label="Softness" name="FlexNumSections"/> @@ -371,7 +371,7 @@ <spinner label="Force Y" name="FlexForceY"/> <spinner label="Force Z" name="FlexForceZ"/> <check_box label="Light" name="Light Checkbox Ctrl" tool_tip="Causes object to emit light"/> - <color_swatch name="colorswatch" tool_tip="Click to open color picker"/> + <color_swatch name="colorswatch" tool_tip="點擊以開啟é¡è‰²æŒ‘é¸å™¨"/> <texture_picker label="" name="light texture control" tool_tip="Click to choose a projection image (only has effect with deferred rendering enabled)"/> <spinner label="Intensity" name="Light Intensity"/> <spinner label="FOV" name="Light FOV"/> @@ -380,40 +380,40 @@ <spinner label="Falloff" name="Light Falloff"/> <spinner label="Ambiance" name="Light Ambiance"/> </panel> - <panel label="Texture" name="Texture"> + <panel label="æè³ª" name="Texture"> <panel.string name="string repeats per meter"> - Repeats Per Meter + æ¯å…¬å°ºé‡è¦†æ¬¡æ•¸ </panel.string> <panel.string name="string repeats per face"> - Repeats Per Face + æ¯ä¸€é¢é‡è¦†æ¬¡æ•¸ </panel.string> - <texture_picker label="Texture" name="texture control" tool_tip="點擊以挑é¸åœ–片"/> - <color_swatch label="Color" name="colorswatch" tool_tip="Click to open color picker"/> + <texture_picker label="æè³ª" name="texture control" tool_tip="點擊以挑é¸åœ–片"/> + <color_swatch label="é¡è‰²" name="colorswatch" tool_tip="點擊以開啟é¡è‰²æŒ‘é¸å™¨"/> <text name="color trans"> - Transparency % + 逿˜Žåº¦ % </text> <text name="glow label"> - Glow + 光暈 </text> - <check_box label="Full Bright" name="checkbox fullbright"/> + <check_box label="全亮" name="checkbox fullbright"/> <text name="tex gen"> - Mapping + æ˜ å°„æ–¹å¼ </text> <combo_box name="combobox texgen"> <combo_box.item label="é è¨" name="Default"/> - <combo_box.item label="Planar" name="Planar"/> + <combo_box.item label="å¹³é¢" name="Planar"/> </combo_box> <text name="label shininess"> - Shininess + 光澤 </text> <combo_box name="combobox shininess"> <combo_box.item label="ç„¡" name="None"/> - <combo_box.item label="Low" name="Low"/> - <combo_box.item label="Medium" name="Medium"/> - <combo_box.item label="High" name="High"/> + <combo_box.item label="低" name="Low"/> + <combo_box.item label="ä¸" name="Medium"/> + <combo_box.item label="高" name="High"/> </combo_box> <text name="label bumpiness"> - Bumpiness + 凹凸貼圖 </text> <combo_box name="combobox bumpiness"> <combo_box.item label="ç„¡" name="None"/> @@ -435,65 +435,65 @@ <combo_box.item label="suction" name="suction"/> <combo_box.item label="weave" name="weave"/> </combo_box> - <check_box initial_value="false" label="Align planar faces" name="checkbox planar align" tool_tip="Align textures on all selected faces with the last selected face. Requires Planar texture mapping."/> + <check_box initial_value="false" label="å°é½Šå¹³é¢" name="checkbox planar align" tool_tip="ä»¥æœ€å¾Œæ‰€é¸æ“‡çš„é¢ç‚ºåŸºæº–,å°é½Šå…¨éƒ¨æ‰€é¸æ“‡çš„é¢ä¸Šçš„æè³ªã€‚é€™å¿…é ˆä½¿ç”¨å¹³é¢æè³ªæ˜ å°„æ–¹å¼ã€‚"/> <text name="rpt"> - Repeats / Face - </text> - <spinner label="Horizontal (U)" name="TexScaleU"/> - <check_box label="Flip" name="checkbox flip s"/> - <spinner label="Vertical (V)" name="TexScaleV"/> - <check_box label="Flip" name="checkbox flip t"/> - <spinner label="RotationËš" name="TexRot"/> - <spinner label="Repeats / Meter" name="rptctrl"/> + é‡è¦†æ¬¡æ•¸ / é¢ + </text> + <spinner label="水平(U)" name="TexScaleU"/> + <check_box label="翻轉" name="checkbox flip s"/> + <spinner label="垂直(V)" name="TexScaleV"/> + <check_box label="翻轉" name="checkbox flip t"/> + <spinner label="旋轉˚" name="TexRot"/> + <spinner label="é‡è¦†æ¬¡æ•¸ / 公尺" name="rptctrl"/> <button label="套用" label_selected="套用" name="button apply"/> <text name="tex offset"> - Texture Offset + æè³ªä½ç§» </text> - <spinner label="Horizontal (U)" name="TexOffsetU"/> - <spinner label="Vertical (V)" name="TexOffsetV"/> + <spinner label="水平(U)" name="TexOffsetU"/> + <spinner label="垂直(V)" name="TexOffsetV"/> <panel name="Add_Media"> <text name="media_tex"> - Media + 媒體 </text> - <button name="add_media" tool_tip="Add Media"/> - <button name="delete_media" tool_tip="Delete this media texture"/> - <button name="edit_media" tool_tip="Edit this Media"/> - <button label="Align" label_selected="Align Media" name="button align" tool_tip="Align media texture (must load first)"/> + <button name="add_media" tool_tip="æ·»åŠ åª’é«”"/> + <button name="delete_media" tool_tip="刪除這個媒體æè³ª"/> + <button name="edit_media" tool_tip="編輯這個媒體"/> + <button label="å°é½Š" label_selected="å°é½Šåª’é«”" name="button align" tool_tip="å°é½Šåª’é«”æè³ªï¼ˆé ˆå…ˆè¼‰å…¥ï¼‰"/> </panel> </panel> - <panel label="Content" name="Contents"> - <button label="New Script" label_selected="New Script" name="button new script"/> - <button label="Permissions" name="button permissions"/> + <panel label="內容" name="Contents"> + <button label="新腳本" label_selected="新腳本" name="button new script"/> + <button label="權é™" name="button permissions"/> </panel> </tab_container> <panel name="land info panel"> <text name="label_parcel_info"> - Parcel Information + 地段資訊 </text> <text name="label_area_price"> - Price: L$[PRICE] for [AREA] m² + åƒ¹æ ¼ï¼š L$[PRICE] 購買 [AREA] m² </text> <text name="label_area"> é¢ç©ï¼š [AREA] m² </text> <button label="關於土地" label_selected="關於土地" name="button about land"/> - <check_box label="é¡¯ç¤ºæ“æœ‰ä¸»" name="checkbox show owners" tool_tip="Colorize the parcels according to the type of owner: + <check_box label="é¡¯ç¤ºæ“æœ‰è€…" name="checkbox show owners" tool_tip="Colorize the parcels according to the type of owner: -Green = Your land -Aqua = Your group's land -Red = Owned by others -Yellow = For sale -Purple = For auction -Grey = Public"/> +ç¶ è‰² = ä½ çš„åœŸåœ° +æ°´è— = ä½ ç¤¾åœ˜çš„åœŸåœ° +紅色 = 其他人所有 +黃色 = 出售 +紫色 = æ‹è³£ +ç°è‰² = 公有地"/> <text name="label_parcel_modify"> - Modify Parcel + 修改地段 </text> - <button label="Subdivide" label_selected="Subdivide" name="button subdivide land"/> - <button label="Join" label_selected="Join" name="button join land"/> + <button label="分割" label_selected="分割" name="button subdivide land"/> + <button label="åˆä½µ" label_selected="åˆä½µ" name="button join land"/> <text name="label_parcel_trans"> - Land Transactions + 土地交易 </text> <button label="購買土地" label_selected="購買土地" name="button buy land"/> - <button label="Abandon Land" label_selected="Abandon Land" name="button abandon land"/> + <button label="放棄土地" label_selected="放棄土地" name="button abandon land"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_top_objects.xml b/indra/newview/skins/default/xui/zh/floater_top_objects.xml index c1ad927bbb8ac37d9f744499803e0d0c7f477532..074a4a1881b8aa454348c2c33d5b8d2462203f5b 100644 --- a/indra/newview/skins/default/xui/zh/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/zh/floater_top_objects.xml @@ -19,7 +19,7 @@ Top [COUNT] objects experiencing many potential collisions </floater.string> <floater.string name="colliders_score_label"> - Score + ç©åˆ† </floater.string> <floater.string name="none_descriptor"> None found. @@ -28,7 +28,7 @@ 載入ä¸... </text> <scroll_list name="objects_list"> - <scroll_list.columns label="Score" name="score"/> + <scroll_list.columns label="ç©åˆ†" name="score"/> <scroll_list.columns label="å稱" name="name"/> <scroll_list.columns label="æ“æœ‰è€…" name="owner"/> <scroll_list.columns label="ä½ç½®" name="location"/> @@ -37,19 +37,19 @@ <scroll_list.columns label="URLs" name="URLs"/> </scroll_list> <text name="id_text"> - Object ID: + 物件 ID: </text> <button label="Show Beacon" name="show_beacon_btn"/> <text name="obj_name_text"> 物件å稱: </text> - <button label="Filter" name="filter_object_btn"/> + <button label="éŽæ¿¾å™¨" name="filter_object_btn"/> <text name="owner_name_text"> æ“æœ‰è€…: </text> - <button label="Filter" name="filter_owner_btn"/> - <button label="Return Selected" name="return_selected_btn"/> + <button label="éŽæ¿¾å™¨" name="filter_owner_btn"/> + <button label="é€€å›žæ‰€é¸æ“‡çš„" name="return_selected_btn"/> <button label="全部退回" name="return_all_btn"/> - <button label="Disable Selected" name="disable_selected_btn"/> - <button label="Disable All" name="disable_all_btn"/> + <button label="é—œé–‰æ‰€é¸æ“‡çš„" name="disable_selected_btn"/> + <button label="全部關閉" name="disable_all_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_tos.xml b/indra/newview/skins/default/xui/zh/floater_tos.xml index acc61a7961c5995e26586ee4334b21b3879a9bec..5f9e16afe1d71bb3534be6e7af220b5cf13ac00f 100644 --- a/indra/newview/skins/default/xui/zh/floater_tos.xml +++ b/indra/newview/skins/default/xui/zh/floater_tos.xml @@ -7,7 +7,7 @@ data:text/html,%3Chtml%3E%3Chead%3E%3C/head%3E%3Cbody text=%22000000%22%3E%3Ch2%3E Loading %3Ca%20target%3D%22_external%22%20href%3D%22http%3A//secondlife.com/app/tos/%22%3ETerms%20of%20Service%3C/a%3E...%3C/h2%3E %3C/body%3E %3C/html%3E </floater.string> <button label="繼續" label_selected="繼續" name="Continue"/> - <button label="å–銷" label_selected="å–銷" name="Cancel"/> + <button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="Cancel"/> <check_box label="æˆ‘åŒæ„æŽ¥å—æœå‹™æ¢æ¬¾åŠéš±ç§æ”¿ç–" name="agree_chk"/> <text name="tos_heading"> 請謹慎閱讀以下的æœå‹™æ¢æ¬¾åŠéš±ç§æ”¿ç–。è¦ç¹¼çºŒç™»å…¥åˆ° [SECOND_LIFE]ï¼Œä½ å¿…é ˆæŽ¥å—這些å”è°ã€‚ diff --git a/indra/newview/skins/default/xui/zh/floater_url_entry.xml b/indra/newview/skins/default/xui/zh/floater_url_entry.xml index 2b4f5ea11d0394104d7ca41e5b67b1f6b533aab9..65f6a9cb957b4c59be2d14a037c8fe6a74d707c4 100644 --- a/indra/newview/skins/default/xui/zh/floater_url_entry.xml +++ b/indra/newview/skins/default/xui/zh/floater_url_entry.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="url_entry"> <text name="media_label"> - Media URL: + 媒體 URL: </text> <button label="" name="ok_btn"/> - <button label="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" name="cancel_btn"/> <button label="清除" name="clear_btn"/> <text name="loading_label"> 載入ä¸... diff --git a/indra/newview/skins/default/xui/zh/floater_voice_controls.xml b/indra/newview/skins/default/xui/zh/floater_voice_controls.xml index d4a76555cbc65365b2866797f7226bede52c0d67..4d650eaaee5eca021005491013e0e27235860927 100644 --- a/indra/newview/skins/default/xui/zh/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/zh/floater_voice_controls.xml @@ -17,7 +17,7 @@ </string> <layout_stack name="my_call_stack"> <layout_panel name="my_panel"> - <text name="user_text" value="My Avatar:"/> + <text name="user_text" value="我的化身:"/> </layout_panel> <layout_panel name="leave_call_panel"> <layout_stack name="voice_effect_and_leave_call_stack"> diff --git a/indra/newview/skins/default/xui/zh/floater_voice_effect.xml b/indra/newview/skins/default/xui/zh/floater_voice_effect.xml index b9021d25d9e115d3da64e4b15e0763a910861e51..36efe20b65c783e19afee55f24918cba94e2aeb6 100644 --- a/indra/newview/skins/default/xui/zh/floater_voice_effect.xml +++ b/indra/newview/skins/default/xui/zh/floater_voice_effect.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater label="Places" name="voice_effects" title="語音變è²"> +<floater label="地點" name="voice_effects" title="語音變è²"> <string name="no_voice_effect"> (No Voice Morph) </string> @@ -19,7 +19,7 @@ Record a sample, then click on a voice to hear how it will sound. </text> <button label="Record" name="record_btn" tool_tip="Record a sample of your voice."/> - <button label="Stop" name="record_stop_btn"/> + <button label="åœæ¢" name="record_stop_btn"/> <text name="voice_morphing_link"> [[URL] Subscribe Now] </text> diff --git a/indra/newview/skins/default/xui/zh/floater_water.xml b/indra/newview/skins/default/xui/zh/floater_water.xml index 2e0fcd13a8ec5f05d0701b13c6e508f4c2fdc258..5fb57272af89dd882dd09437b6a59b258163d5d7 100644 --- a/indra/newview/skins/default/xui/zh/floater_water.xml +++ b/indra/newview/skins/default/xui/zh/floater_water.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Water Floater" title="ADVANCED WATER EDITOR"> +<floater name="Water Floater" title="進階水文編輯器"> <floater.string name="WLDefaultWaterNames"> Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez </floater.string> <text name="KeyFramePresetsText"> Water Presets: </text> - <button label="New" label_selected="New" name="WaterNewPreset"/> + <button label="新增" label_selected="新增" name="WaterNewPreset"/> <button label="儲å˜" label_selected="儲å˜" name="WaterSavePreset"/> <button label="刪除" label_selected="刪除" name="WaterDeletePreset"/> <tab_container name="Water Tabs"> @@ -14,7 +14,7 @@ <text name="BHText"> Water Fog Color </text> - <color_swatch name="WaterFogColor" tool_tip="Click to open color picker"/> + <color_swatch name="WaterFogColor" tool_tip="點擊以開啟é¡è‰²æŒ‘é¸å™¨"/> <text name="WaterFogDensText"> Fog Density Exponent </text> @@ -43,7 +43,7 @@ Blur Multiplier </text> </panel> - <panel label="IMAGE" name="Waves"> + <panel label="圖åƒ" name="Waves"> <text name="BHText"> Big Wave Direction </text> @@ -63,7 +63,7 @@ Y </text> <text name="BHText3"> - Normal Map + æ£å¸¸åœ°åœ– </text> </panel> </tab_container> diff --git a/indra/newview/skins/default/xui/zh/floater_web_content.xml b/indra/newview/skins/default/xui/zh/floater_web_content.xml index 2670e223d395dd9e2240ee8643be2a67a17bc3b9..a756498b814a074a5e7ce8ceb0b1de172cd350d7 100644 --- a/indra/newview/skins/default/xui/zh/floater_web_content.xml +++ b/indra/newview/skins/default/xui/zh/floater_web_content.xml @@ -4,9 +4,9 @@ <layout_panel name="nav_controls"> <button name="back" tool_tip="Navigate back"/> <button name="forward" tool_tip="Navigate forward"/> - <button name="stop" tool_tip="Stop navigation"/> + <button name="stop" tool_tip="åœæ¢å°Žè¦½"/> <button name="reload" tool_tip="é‡è¼‰é é¢"/> - <combo_box name="address" tool_tip="Enter URL here"/> + <combo_box name="address" tool_tip="在æ¤è¼¸å…¥ URL ä½ç½®"/> <icon name="media_secure_lock_flag" tool_tip="Secured Browsing"/> <button name="popexternal" tool_tip="Open current URL in your desktop browser"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/zh/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/zh/floater_whitelist_entry.xml index ea360be6c9355ceb8d036169ed4808a3b02b8f9d..36e00049f0b452c896e497078a7bc817032cad13 100644 --- a/indra/newview/skins/default/xui/zh/floater_whitelist_entry.xml +++ b/indra/newview/skins/default/xui/zh/floater_whitelist_entry.xml @@ -5,5 +5,5 @@ </text> <line_editor name="whitelist_entry" tool_tip="Enter a URL or URL pattern to White List"/> <button label="確定" name="ok_btn"/> - <button label="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_windlight_options.xml b/indra/newview/skins/default/xui/zh/floater_windlight_options.xml index 2b202a9e6c1b62a655deca326b20d52e595d353f..fce851cc90e4d5c3e28c09601a018acd98fae67e 100644 --- a/indra/newview/skins/default/xui/zh/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/zh/floater_windlight_options.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="WindLight floater" title="ADVANCED SKY EDITOR"> +<floater name="WindLight floater" title="進階天空編輯器"> <floater.string name="WLDefaultSkyNames"> A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor's Delight:Sheer Sensuality </floater.string> <text name="KeyFramePresetsText"> Sky Presets: </text> - <button label="New" label_selected="New" name="WLNewPreset"/> + <button label="新增" label_selected="新增" name="WLNewPreset"/> <button label="儲å˜" label_selected="儲å˜" name="WLSavePreset"/> <button label="刪除" label_selected="刪除" name="WLDeletePreset"/> <button label="Day Cycle Editor" label_selected="Day Cycle Editor" name="WLDayCycleMenuButton"/> @@ -99,7 +99,7 @@ Sun Glow </text> <slider label="Focus" name="WLGlowB"/> - <slider label="Size" name="WLGlowR"/> + <slider label="尺寸" name="WLGlowR"/> <text name="SceneGammaText"> Scene Gamma </text> diff --git a/indra/newview/skins/default/xui/zh/floater_window_size.xml b/indra/newview/skins/default/xui/zh/floater_window_size.xml index 34b969c2dcee30a7699d089f3cde25500cde03ef..54b72afcccf77287c90b6b84f95a27fa51e0454a 100644 --- a/indra/newview/skins/default/xui/zh/floater_window_size.xml +++ b/indra/newview/skins/default/xui/zh/floater_window_size.xml @@ -1,17 +1,17 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="window_size" title="WINDOW SIZE"> +<floater name="window_size" title="視窗尺寸大å°"> <string name="resolution_format"> [RES_X] x [RES_Y] </string> <text name="windowsize_text"> - Set window size: + è¨å®šè¦–窗尺寸大å°ï¼š </text> - <combo_box name="window_size_combo" tool_tip="width x height"> - <combo_box.item label="1000 x 700 (default)" name="item0"/> + <combo_box name="window_size_combo" tool_tip="寬度 x 高度"> + <combo_box.item label="1000 x 700 (é è¨ï¼‰" name="item0"/> <combo_box.item label="1024 x 768" name="item1"/> - <combo_box.item label="1280 x 720 (720p)" name="item2"/> - <combo_box.item label="1920 x 1080 (1080p)" name="item3"/> + <combo_box.item label="1280 x 720 (720p)" name="item2"/> + <combo_box.item label="1920 x 1080 (1080p)" name="item3"/> </combo_box> <button label="è¨å®š" name="set_btn"/> - <button label="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_world_map.xml b/indra/newview/skins/default/xui/zh/floater_world_map.xml index e149285ab2d97bf54df957a1739a940d29a4bfff..552bb02582e49b32febbfaa2c3e428b8ee6ee245 100644 --- a/indra/newview/skins/default/xui/zh/floater_world_map.xml +++ b/indra/newview/skins/default/xui/zh/floater_world_map.xml @@ -11,7 +11,7 @@ Me </text> <text name="person_label"> - Person + 人 </text> <text name="infohub_label"> Infohub @@ -25,9 +25,9 @@ <text name="by_owner_label"> by owner </text> - <button name="Go Home" tool_tip="Teleport to my home location"/> + <button name="Go Home" tool_tip="瞬間傳é€åˆ°æˆ‘的家ä½ç½®"/> <text name="Home_label"> - Home + å®¶ </text> <text name="events_label"> Events: @@ -40,29 +40,29 @@ Moderate </text> <text name="events_adult_label"> - Adult + æˆäºº </text> </panel> <panel name="layout_panel_3"> <text name="find_on_map_label"> - Find on Map + åœ¨åœ°åœ–ä¸Šç™¼ç¾ </text> </panel> <panel name="layout_panel_4"> - <combo_box label="Online Friends" name="friend combo" tool_tip="Show friends on map"> - <combo_box.item label="My Friends Online" name="item1"/> + <combo_box label="線上的朋å‹" name="friend combo" tool_tip="顯示朋å‹åœ¨åœ°åœ–上"> + <combo_box.item label="我線上的朋å‹" name="item1"/> </combo_box> - <combo_box label="My Landmarks" name="landmark combo" tool_tip="Landmark to show on map"> - <combo_box.item label="My Landmarks" name="item1"/> + <combo_box label="我的地標" name="landmark combo" tool_tip="將地標ä½ç½®é¡¯ç¤ºåœ¨åœ°åœ–上"> + <combo_box.item label="我的地標" name="item1"/> </combo_box> - <search_editor label="Regions by Name" name="location" tool_tip="Type the name of a region"/> + <search_editor label="Regions by Name" name="location" tool_tip="輸入一個地å€çš„å稱"/> <button label="Find" name="DoSearch" tool_tip="Search for region"/> <button name="Clear" tool_tip="Clear tracking lines and reset map"/> <text name="events_label"> ä½ç½®ï¼š </text> - <button label="Teleport" name="Teleport" tool_tip="Teleport to selected location"/> - <button label="Copy SLurl" name="copy_slurl" tool_tip="Copies current location as SLurl to be used on the web."/> + <button label="瞬間傳é€" name="Teleport" tool_tip="瞬間傳é€åˆ°æ‰€é¸çš„ä½ç½®"/> + <button label="覆製 SLurl" name="copy_slurl" tool_tip="Copies current location as SLurl to be used on the web."/> <button label="Show Selection" name="Show Destination" tool_tip="Center map on selected location"/> </panel> <panel name="layout_panel_5"> diff --git a/indra/newview/skins/default/xui/zh/inspect_avatar.xml b/indra/newview/skins/default/xui/zh/inspect_avatar.xml index df450937fd9885de5cc5b510e269c600a2420a02..02e81983a68632491b67f8ef81fba0b5289f9cdf 100644 --- a/indra/newview/skins/default/xui/zh/inspect_avatar.xml +++ b/indra/newview/skins/default/xui/zh/inspect_avatar.xml @@ -17,7 +17,7 @@ <slider name="volume_slider" tool_tip="Voice volume" value="0.5"/> <button label="åŠ ç‚ºæœ‹å‹" name="add_friend_btn"/> <button label="IM" name="im_btn"/> - <button label="Profile" name="view_profile_btn"/> + <button label="檔案" name="view_profile_btn"/> <panel name="moderator_panel"> <button label="Disable Voice" name="disable_voice"/> <button label="Enable Voice" name="enable_voice"/> diff --git a/indra/newview/skins/default/xui/zh/inspect_group.xml b/indra/newview/skins/default/xui/zh/inspect_group.xml index 72e5eade9c00b80449069d67c3935ebe77009903..3583976646448c308c651ad74a438d8db28a11d3 100644 --- a/indra/newview/skins/default/xui/zh/inspect_group.xml +++ b/indra/newview/skins/default/xui/zh/inspect_group.xml @@ -5,10 +5,10 @@ --> <floater name="inspect_group"> <string name="PrivateGroup"> - Private group + ç§äººç¤¾åœ˜ </string> <string name="FreeToJoin"> - Free to join + å…è²»åŠ å…¥ </string> <string name="CostToJoin"> L$[AMOUNT] to join @@ -26,7 +26,7 @@ Fear the moose! Fear it! And the mongoose too! <text name="group_cost"> L$123 to join </text> - <button label="Join" name="join_btn"/> - <button label="Leave" name="leave_btn"/> - <button label="View Profile" name="view_profile_btn"/> + <button label="åŠ å…¥" name="join_btn"/> + <button label="退出" name="leave_btn"/> + <button label="察看檔案" name="view_profile_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/inspect_object.xml b/indra/newview/skins/default/xui/zh/inspect_object.xml index f1fe037087caca3fbcf1cc4597f129e62f90004a..58091b3aefbf93c40edcef87833ba6057fbf2271 100644 --- a/indra/newview/skins/default/xui/zh/inspect_object.xml +++ b/indra/newview/skins/default/xui/zh/inspect_object.xml @@ -35,7 +35,7 @@ owner secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about http://www.superdupertest.com </text> <button label="購買" name="buy_btn"/> - <button label="Pay" name="pay_btn"/> + <button label="支付" name="pay_btn"/> <button label="å–得副本" name="take_free_copy_btn"/> <button label="Touch" name="touch_btn"/> <button label="Sit" name="sit_btn"/> diff --git a/indra/newview/skins/default/xui/zh/menu_attachment_other.xml b/indra/newview/skins/default/xui/zh/menu_attachment_other.xml index b674ed2763c80219a26de3bc352d0b9441618d78..a04d59bc81e925588de4a9616b089fc07c77fccf 100644 --- a/indra/newview/skins/default/xui/zh/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/zh/menu_attachment_other.xml @@ -1,17 +1,17 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!-- *NOTE: See also menu_avatar_other.xml --> <context_menu name="Avatar Pie"> - <menu_item_call label="View Profile" name="Profile..."/> + <menu_item_call label="察看檔案" name="Profile..."/> <menu_item_call label="åŠ ç‚ºæœ‹å‹" name="Add Friend"/> <menu_item_call label="IM" name="Send IM..."/> - <menu_item_call label="Call" name="Call"/> - <menu_item_call label="Invite to Group" name="Invite..."/> - <menu_item_call label="Block" name="Avatar Mute"/> - <menu_item_call label="Report" name="abuse"/> - <menu_item_call label="Freeze" name="Freeze..."/> - <menu_item_call label="Eject" name="Eject..."/> - <menu_item_call label="Debug Textures" name="Debug..."/> + <menu_item_call label="通話" name="Call"/> + <menu_item_call label="é‚€è«‹åŠ å…¥ç¤¾åœ˜" name="Invite..."/> + <menu_item_call label="å°éŽ–" name="Avatar Mute"/> + <menu_item_call label="å›žå ±" name="abuse"/> + <menu_item_call label="å‡çµ" name="Freeze..."/> + <menu_item_call label="踢出" name="Eject..."/> + <menu_item_call label="æè³ªé™¤éŒ¯" name="Debug..."/> <menu_item_call label="Zoom In" name="Zoom In"/> - <menu_item_call label="Pay" name="Pay..."/> - <menu_item_call label="Object Profile" name="Object Inspect"/> + <menu_item_call label="支付" name="Pay..."/> + <menu_item_call label="物件檔案" name="Object Inspect"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_attachment_self.xml b/indra/newview/skins/default/xui/zh/menu_attachment_self.xml index 2089f8d58a853271db758cd5286baf480c3dc769..e3a791cde55a102705c7c5e24e29895779f89ee9 100644 --- a/indra/newview/skins/default/xui/zh/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/zh/menu_attachment_self.xml @@ -5,12 +5,12 @@ <menu_item_call label="å¸ä¸‹" name="Detach"/> <menu_item_call label="å下" name="Sit Down Here"/> <menu_item_call label="èµ·ç«‹" name="Stand Up"/> - <menu_item_call label="My Appearance" name="Change Outfit"/> - <menu_item_call label="Edit My Outfit" name="Edit Outfit"/> - <menu_item_call label="Edit My Shape" name="Edit My Shape"/> - <menu_item_call label="My Friends" name="Friends..."/> - <menu_item_call label="My Groups" name="Groups..."/> - <menu_item_call label="My Profile" name="Profile..."/> - <menu_item_call label="Debug Textures" name="Debug..."/> - <menu_item_call label="Drop" name="Drop"/> + <menu_item_call label="我的外觀" name="Change Outfit"/> + <menu_item_call label="ç·¨è¼¯æˆ‘çš„è£æ‰®" name="Edit Outfit"/> + <menu_item_call label="編輯我的體形" name="Edit My Shape"/> + <menu_item_call label="我的朋å‹" name="Friends..."/> + <menu_item_call label="我的社團" name="Groups..."/> + <menu_item_call label="我的檔案" name="Profile..."/> + <menu_item_call label="æè³ªé™¤éŒ¯" name="Debug..."/> + <menu_item_call label="丟棄" name="Drop"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_icon.xml b/indra/newview/skins/default/xui/zh/menu_avatar_icon.xml index cce8fa3ca6c244fb1d0d7d39ecdde5bb1143ed0a..ef0986a13bd4fbdc2b571e5c640be1af93943f4d 100644 --- a/indra/newview/skins/default/xui/zh/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/zh/menu_avatar_icon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="Avatar Icon Menu"> - <menu_item_call label="View Profile" name="Show Profile"/> - <menu_item_call label="Send IM..." name="Send IM"/> + <menu_item_call label="察看檔案" name="Show Profile"/> + <menu_item_call label="é€å‡º IM..." name="Send IM"/> <menu_item_call label="åŠ ç‚ºæœ‹å‹..." name="Add Friend"/> - <menu_item_call label="Remove Friend..." name="Remove Friend"/> + <menu_item_call label="移除朋å‹..." name="Remove Friend"/> </menu> diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_other.xml b/indra/newview/skins/default/xui/zh/menu_avatar_other.xml index db22646cedd1a90a88aa46155d3cef9e8feae5e0..acf98dfdfaf2c763b2296b590250737d39de5b38 100644 --- a/indra/newview/skins/default/xui/zh/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/zh/menu_avatar_other.xml @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!-- *NOTE: See also menu_attachment_other.xml --> <context_menu name="Avatar Pie"> - <menu_item_call label="View Profile" name="Profile..."/> + <menu_item_call label="察看檔案" name="Profile..."/> <menu_item_call label="åŠ ç‚ºæœ‹å‹" name="Add Friend"/> <menu_item_call label="IM" name="Send IM..."/> - <menu_item_call label="Call" name="Call"/> - <menu_item_call label="Invite to Group" name="Invite..."/> + <menu_item_call label="通話" name="Call"/> + <menu_item_call label="é‚€è«‹åŠ å…¥ç¤¾åœ˜" name="Invite..."/> <menu_item_call label="Block" name="Avatar Mute"/> - <menu_item_call label="Report" name="abuse"/> - <menu_item_call label="Freeze" name="Freeze..."/> - <menu_item_call label="Eject" name="Eject..."/> - <menu_item_call label="Debug Textures" name="Debug..."/> + <menu_item_call label="å›žå ±" name="abuse"/> + <menu_item_call label="å‡çµ" name="Freeze..."/> + <menu_item_call label="踢出" name="Eject..."/> + <menu_item_call label="æè³ªé™¤éŒ¯" name="Debug..."/> <menu_item_call label="Zoom In" name="Zoom In"/> - <menu_item_call label="Pay" name="Pay..."/> + <menu_item_call label="支付" name="Pay..."/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_self.xml b/indra/newview/skins/default/xui/zh/menu_avatar_self.xml index bccae5b5471ef36a72718c2075c8ba1042857483..646edcf563d5ffe3f1d6b19b574baa5cfbedc526 100644 --- a/indra/newview/skins/default/xui/zh/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/zh/menu_avatar_self.xml @@ -3,7 +3,7 @@ <menu_item_call label="å下" name="Sit Down Here"/> <menu_item_call label="èµ·ç«‹" name="Stand Up"/> <context_menu label="脫下" name="Take Off >"> - <context_menu label="Clothes" name="Clothes >"> + <context_menu label="è¡£æœ" name="Clothes >"> <menu_item_call label="襯衫" name="Shirt"/> <menu_item_call label="褲å" name="Pants"/> <menu_item_call label="裙å" name="Skirt"/> @@ -16,17 +16,17 @@ <menu_item_call label="刺é’" name="Self Tattoo"/> <menu_item_call label="Physics" name="Self Physics"/> <menu_item_call label="Alpha" name="Self Alpha"/> - <menu_item_call label="All Clothes" name="All Clothes"/> + <menu_item_call label="全部衣æœ" name="All Clothes"/> </context_menu> <context_menu label="HUD" name="Object Detach HUD"/> <context_menu label="å¸ä¸‹" name="Object Detach"/> <menu_item_call label="全部å¸ä¸‹" name="Detach All"/> </context_menu> - <menu_item_call label="My Appearance" name="Chenge Outfit"/> - <menu_item_call label="Edit My Outfit" name="Edit Outfit"/> - <menu_item_call label="Edit My Shape" name="Edit My Shape"/> - <menu_item_call label="My Friends" name="Friends..."/> - <menu_item_call label="My Groups" name="Groups..."/> - <menu_item_call label="My Profile" name="Profile..."/> - <menu_item_call label="Debug Textures" name="Debug..."/> + <menu_item_call label="我的外觀" name="Chenge Outfit"/> + <menu_item_call label="ç·¨è¼¯æˆ‘è£æ‰®" name="Edit Outfit"/> + <menu_item_call label="編輯我的體形" name="Edit My Shape"/> + <menu_item_call label="我的朋å‹" name="Friends..."/> + <menu_item_call label="我的社團" name="Groups..."/> + <menu_item_call label="我的檔案" name="Profile..."/> + <menu_item_call label="æè³ªé™¤éŒ¯" name="Debug..."/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_bottomtray.xml b/indra/newview/skins/default/xui/zh/menu_bottomtray.xml index d55b3afc95519c6b637e283f3388941a8e04458d..a00aa7cd355246be5ebdf1c7bf0aa4c3a3964f80 100644 --- a/indra/newview/skins/default/xui/zh/menu_bottomtray.xml +++ b/indra/newview/skins/default/xui/zh/menu_bottomtray.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="hide_camera_move_controls_menu"> - <menu_item_check label="Speak Button" name="EnableVoiceChat"/> - <menu_item_check label="Gesture button" name="ShowGestureButton"/> - <menu_item_check label="Move button" name="ShowMoveButton"/> - <menu_item_check label="View button" name="ShowCameraButton"/> - <menu_item_check label="Snapshot button" name="ShowSnapshotButton"/> - <menu_item_check label="Build button" name="ShowBuildButton"/> - <menu_item_check label="Search button" name="ShowSearchButton"/> + <menu_item_check label="講話按鈕" name="EnableVoiceChat"/> + <menu_item_check label="姿勢按鈕" name="ShowGestureButton"/> + <menu_item_check label="移動按鈕" name="ShowMoveButton"/> + <menu_item_check label="視角按鈕" name="ShowCameraButton"/> + <menu_item_check label="快照按鈕" name="ShowSnapshotButton"/> + <menu_item_check label="å»ºé€ æŒ‰éˆ•" name="ShowBuildButton"/> + <menu_item_check label="æœå°‹æŒ‰éˆ•" name="ShowSearchButton"/> <menu_item_check label="地圖按鈕" name="ShowWorldMapButton"/> <menu_item_check label="è¿·ä½ åœ°åœ–æŒ‰éˆ•" name="ShowMiniMapButton"/> <menu_item_call label="剪下" name="NearbyChatBar_Cut"/> diff --git a/indra/newview/skins/default/xui/zh/menu_cof_gear.xml b/indra/newview/skins/default/xui/zh/menu_cof_gear.xml index 7314676c6ceae35be193d62a2822f8fff0da14c8..cd069f96017af11dbac2774059a827b7a467683e 100644 --- a/indra/newview/skins/default/xui/zh/menu_cof_gear.xml +++ b/indra/newview/skins/default/xui/zh/menu_cof_gear.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="Gear COF"> - <menu label="New Clothes" name="COF.Gear.New_Clothes"/> - <menu label="New Body Parts" name="COF.Geear.New_Body_Parts"/> + <menu label="æ–°è¡£æœ" name="COF.Gear.New_Clothes"/> + <menu label="新身體部ä½" name="COF.Geear.New_Body_Parts"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_edit.xml b/indra/newview/skins/default/xui/zh/menu_edit.xml index 1e645acc7a5e2ca04759e569f5f7f40442d4fb5c..d6eb87a6b05015b2d4d07c9ad4485bce545a5244 100644 --- a/indra/newview/skins/default/xui/zh/menu_edit.xml +++ b/indra/newview/skins/default/xui/zh/menu_edit.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu label="編輯" name="Edit"> <menu_item_call label="復原" name="Undo"/> - <menu_item_call label="Redo" name="Redo"/> + <menu_item_call label="é‡åš" name="Redo"/> <menu_item_call label="剪下" name="Cut"/> <menu_item_call label="覆製" name="Copy"/> <menu_item_call label="貼上" name="Paste"/> <menu_item_call label="刪除" name="Delete"/> <menu_item_call label="覆製貼上" name="Duplicate"/> <menu_item_call label="å…¨é¸" name="Select All"/> - <menu_item_call label="Deselect" name="Deselect"/> + <menu_item_call label="å–æ¶ˆé¸æ“‡" name="Deselect"/> </menu> diff --git a/indra/newview/skins/default/xui/zh/menu_favorites.xml b/indra/newview/skins/default/xui/zh/menu_favorites.xml index 042f5c3a930c679875fadbfdbb3a2292336bff90..c60bebd3dcc29956db5f8b006f05999bc7baa165 100644 --- a/indra/newview/skins/default/xui/zh/menu_favorites.xml +++ b/indra/newview/skins/default/xui/zh/menu_favorites.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="Popup"> - <menu_item_call label="Teleport" name="Teleport To Landmark"/> - <menu_item_call label="View/Edit Landmark" name="Landmark Open"/> - <menu_item_call label="Copy SLurl" name="Copy slurl"/> + <menu_item_call label="瞬間傳é€" name="Teleport To Landmark"/> + <menu_item_call label="察看 / 編輯 地標" name="Landmark Open"/> + <menu_item_call label="覆製 SLurl" name="Copy slurl"/> <menu_item_call label="顯示在地圖上" name="Show On Map"/> <menu_item_call label="覆製" name="Landmark Copy"/> <menu_item_call label="貼上" name="Landmark Paste"/> diff --git a/indra/newview/skins/default/xui/zh/menu_gesture_gear.xml b/indra/newview/skins/default/xui/zh/menu_gesture_gear.xml index 488d80bfadcb5cd31753ec647c57d46d8cdfb29d..e053eb238840fe0a816a6688a045df5498975951 100644 --- a/indra/newview/skins/default/xui/zh/menu_gesture_gear.xml +++ b/indra/newview/skins/default/xui/zh/menu_gesture_gear.xml @@ -3,7 +3,7 @@ <menu_item_call label="Add/Remove from Favorites" name="activate"/> <menu_item_call label="覆製" name="copy_gesture"/> <menu_item_call label="貼上" name="paste"/> - <menu_item_call label="Copy UUID" name="copy_uuid"/> - <menu_item_call label="Save to current outfit" name="save_to_outfit"/> + <menu_item_call label="覆製 UUID" name="copy_uuid"/> + <menu_item_call label="儲å˜åˆ°ç›®å‰è£æ‰®" name="save_to_outfit"/> <menu_item_call label="編輯" name="edit_gesture"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_hide_navbar.xml b/indra/newview/skins/default/xui/zh/menu_hide_navbar.xml index f03749533e521fe152079d8fa6477b9ba2174692..dbb8ececaac70851b0b0e053f88051a2d841d52f 100644 --- a/indra/newview/skins/default/xui/zh/menu_hide_navbar.xml +++ b/indra/newview/skins/default/xui/zh/menu_hide_navbar.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="hide_navbar_menu"> - <menu_item_check label="Show Navigation Bar" name="ShowNavbarNavigationPanel"/> - <menu_item_check label="Show Favorites Bar" name="ShowNavbarFavoritesPanel"/> - <menu_item_check label="Show Mini-Location Bar" name="ShowMiniLocationPanel"/> + <menu_item_check label="顯示導覽列" name="ShowNavbarNavigationPanel"/> + <menu_item_check label="顯示最愛列" name="ShowNavbarFavoritesPanel"/> + <menu_item_check label="é¡¯ç¤ºè¿·ä½ ä½ç½®åˆ—" name="ShowMiniLocationPanel"/> </menu> diff --git a/indra/newview/skins/default/xui/zh/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/zh/menu_imchiclet_adhoc.xml index 6cf86327be3305b3a683c40d3cc4c6ca3ed9778d..85417d554e51c883bd92f9d450514da791bc8ec8 100644 --- a/indra/newview/skins/default/xui/zh/menu_imchiclet_adhoc.xml +++ b/indra/newview/skins/default/xui/zh/menu_imchiclet_adhoc.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="IMChiclet AdHoc Menu"> - <menu_item_call label="End Session" name="End Session"/> + <menu_item_call label="çµæŸæœƒè©±" name="End Session"/> </menu> diff --git a/indra/newview/skins/default/xui/zh/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/zh/menu_imchiclet_group.xml index 7ca805278a62ba6f46b2bfc0e690f958fa10d060..2577c582a73a8a2a07e55e37e7004f66835e4859 100644 --- a/indra/newview/skins/default/xui/zh/menu_imchiclet_group.xml +++ b/indra/newview/skins/default/xui/zh/menu_imchiclet_group.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="IMChiclet Group Menu"> - <menu_item_call label="Group Info" name="Show Profile"/> - <menu_item_call label="Show Session" name="Chat"/> - <menu_item_call label="End Session" name="End Session"/> + <menu_item_call label="社團資訊" name="Show Profile"/> + <menu_item_call label="顯示會話" name="Chat"/> + <menu_item_call label="çµæŸæœƒè©±" name="End Session"/> </menu> diff --git a/indra/newview/skins/default/xui/zh/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/zh/menu_imchiclet_p2p.xml index d9254f7aff5e12f3bbf93ece0c804c90b1d01099..636bdaae09265afabcb34b46ad52f5020e6acf1c 100644 --- a/indra/newview/skins/default/xui/zh/menu_imchiclet_p2p.xml +++ b/indra/newview/skins/default/xui/zh/menu_imchiclet_p2p.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="IMChiclet P2P Menu"> - <menu_item_call label="View Profile" name="Show Profile"/> + <menu_item_call label="察看檔案" name="Show Profile"/> <menu_item_call label="åŠ ç‚ºæœ‹å‹" name="Add Friend"/> - <menu_item_call label="Show Session" name="Send IM"/> - <menu_item_call label="End Session" name="End Session"/> + <menu_item_call label="顯示會話" name="Send IM"/> + <menu_item_call label="çµæŸæœƒè©±" name="End Session"/> </menu> diff --git a/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml index 2ed6cfad8992c7e39f303ce94a7d88bcb4aaff2a..0f14057c07fb4090093a57adc7ccabb852944cb7 100644 --- a/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml +++ b/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml @@ -1,21 +1,21 @@ <?xml version="1.0" encoding="utf-8"?> <toggleable_menu name="Gear Menu"> - <menu_item_call label="View Profile" name="view_profile"/> + <menu_item_call label="察看檔案" name="view_profile"/> <menu_item_call label="åŠ ç‚ºæœ‹å‹" name="add_friend"/> <menu_item_call label="IM" name="im"/> - <menu_item_call label="Call" name="call"/> - <menu_item_call label="Teleport" name="teleport"/> + <menu_item_call label="通話" name="call"/> + <menu_item_call label="瞬間傳é€" name="teleport"/> <menu_item_call label="Invite to Group" name="invite_to_group"/> <menu_item_call label="Block" name="block"/> <menu_item_call label="Unblock" name="unblock"/> - <menu_item_call label="Report" name="report"/> - <menu_item_call label="Freeze" name="freeze"/> - <menu_item_call label="Eject" name="eject"/> - <menu_item_call label="Kick" name="kick"/> + <menu_item_call label="å›žå ±" name="report"/> + <menu_item_call label="å‡çµ" name="freeze"/> + <menu_item_call label="踢出" name="eject"/> + <menu_item_call label="踢出" name="kick"/> <menu_item_call label="CSR" name="csr"/> - <menu_item_call label="Debug Textures" name="debug"/> + <menu_item_call label="æè³ªé™¤éŒ¯" name="debug"/> <menu_item_call label="Find On Map" name="find_on_map"/> <menu_item_call label="Zoom In" name="zoom_in"/> - <menu_item_call label="Pay" name="pay"/> + <menu_item_call label="支付" name="pay"/> <menu_item_call label="分享" name="share"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/zh/menu_inspect_object_gear.xml index 41ea648803e8c4815abbc29fa4af6352bf51499c..94ab82b8a9495341941e8429936f957812fe94f5 100644 --- a/indra/newview/skins/default/xui/zh/menu_inspect_object_gear.xml +++ b/indra/newview/skins/default/xui/zh/menu_inspect_object_gear.xml @@ -1,18 +1,18 @@ <?xml version="1.0" encoding="utf-8"?> <toggleable_menu name="Gear Menu"> - <menu_item_call label="Touch" name="touch"/> - <menu_item_call label="Sit" name="sit"/> + <menu_item_call label="觸碰" name="touch"/> + <menu_item_call label="å下" name="sit"/> <menu_item_call label="Pay" name="pay"/> <menu_item_call label="購買" name="buy"/> - <menu_item_call label="Take" name="take"/> + <menu_item_call label="å–å¾—" name="take"/> <menu_item_call label="å–得副本" name="take_copy"/> - <menu_item_call label="Open" name="open"/> + <menu_item_call label="開啟" name="open"/> <menu_item_call label="編輯" name="edit"/> - <menu_item_call label="Wear" name="wear"/> - <menu_item_call label="Add" name="add"/> - <menu_item_call label="Report" name="report"/> + <menu_item_call label="穿上" name="wear"/> + <menu_item_call label="æ·»åŠ " name="add"/> + <menu_item_call label="å›žå ±" name="report"/> <menu_item_call label="Block" name="block"/> <menu_item_call label="Zoom In" name="zoom_in"/> - <menu_item_call label="Remove" name="remove"/> + <menu_item_call label="移除" name="remove"/> <menu_item_call label="更多資訊" name="more_info"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml index c88826708e43d5280dc9f2b17bf30aa78ddc855f..2d7da70bfc41351e22af380156460c6583a19051 100644 --- a/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml +++ b/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml @@ -3,7 +3,7 @@ <menu_item_call label="å下" name="Sit Down Here"/> <menu_item_call label="èµ·ç«‹" name="Stand Up"/> <context_menu label="脫下" name="Take Off >"> - <context_menu label="Clothes" name="Clothes >"> + <context_menu label="è¡£æœ" name="Clothes >"> <menu_item_call label="襯衫" name="Shirt"/> <menu_item_call label="褲å" name="Pants"/> <menu_item_call label="裙å" name="Skirt"/> @@ -15,17 +15,17 @@ <menu_item_call label="內褲" name="Self Underpants"/> <menu_item_call label="刺é’" name="Self Tattoo"/> <menu_item_call label="Alpha" name="Self Alpha"/> - <menu_item_call label="All Clothes" name="All Clothes"/> + <menu_item_call label="全部衣æœ" name="All Clothes"/> </context_menu> <context_menu label="HUD" name="Object Detach HUD"/> <context_menu label="å¸ä¸‹" name="Object Detach"/> <menu_item_call label="全部å¸ä¸‹" name="Detach All"/> </context_menu> - <menu_item_call label="Change Outfit" name="Chenge Outfit"/> - <menu_item_call label="Edit My Outfit" name="Edit Outfit"/> - <menu_item_call label="Edit My Shape" name="Edit My Shape"/> - <menu_item_call label="My Friends" name="Friends..."/> - <menu_item_call label="My Groups" name="Groups..."/> - <menu_item_call label="My Profile" name="Profile..."/> - <menu_item_call label="Debug Textures" name="Debug..."/> + <menu_item_call label="è®Šæ›´è£æ‰®" name="Chenge Outfit"/> + <menu_item_call label="ç·¨è¼¯æˆ‘çš„è£æ‰®" name="Edit Outfit"/> + <menu_item_call label="編輯我的體形" name="Edit My Shape"/> + <menu_item_call label="我的朋å‹" name="Friends..."/> + <menu_item_call label="我的社團" name="Groups..."/> + <menu_item_call label="我的檔案" name="Profile..."/> + <menu_item_call label="æè³ªé™¤éŒ¯" name="Debug..."/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_inventory.xml b/indra/newview/skins/default/xui/zh/menu_inventory.xml index 086a89fc33115b359c61b41d654a8d4ab8b5a25b..a93e8be1498ce97ace976828ff83793503f5780e 100644 --- a/indra/newview/skins/default/xui/zh/menu_inventory.xml +++ b/indra/newview/skins/default/xui/zh/menu_inventory.xml @@ -13,7 +13,7 @@ <menu_item_call label="New Script" name="New Script"/> <menu_item_call label="New Notecard" name="New Note"/> <menu_item_call label="New Gesture" name="New Gesture"/> - <menu label="New Clothes" name="New Clothes"> + <menu label="æ–°è¡£æœ" name="New Clothes"> <menu_item_call label="新襯衫" name="New Shirt"/> <menu_item_call label="新褲å" name="New Pants"/> <menu_item_call label="æ–°éž‹å" name="New Shoes"/> @@ -24,41 +24,41 @@ <menu_item_call label="æ–°å…§è¡£" name="New Undershirt"/> <menu_item_call label="新內褲" name="New Underpants"/> <menu_item_call label="New Alpha Mask" name="New Alpha Mask"/> - <menu_item_call label="New Tattoo" name="New Tattoo"/> + <menu_item_call label="新刺é’" name="New Tattoo"/> <menu_item_call label="New Physics" name="New Physics"/> </menu> - <menu label="New Body Parts" name="New Body Parts"> - <menu_item_call label="New Shape" name="New Shape"/> - <menu_item_call label="New Skin" name="New Skin"/> - <menu_item_call label="New Hair" name="New Hair"/> - <menu_item_call label="New Eyes" name="New Eyes"/> + <menu label="新身體部ä½" name="New Body Parts"> + <menu_item_call label="新體形" name="New Shape"/> + <menu_item_call label="新皮膚" name="New Skin"/> + <menu_item_call label="æ–°é é«®" name="New Hair"/> + <menu_item_call label="新眼ç›" name="New Eyes"/> </menu> - <menu label="Change Type" name="Change Type"> + <menu label="變更類型" name="Change Type"> <menu_item_call label="é è¨" name="Default"/> <menu_item_call label="手套" name="Gloves"/> <menu_item_call label="夾克" name="Jacket"/> <menu_item_call label="褲å" name="Pants"/> - <menu_item_call label="Shape" name="Shape"/> + <menu_item_call label="體形" name="Shape"/> <menu_item_call label="éž‹å" name="Shoes"/> <menu_item_call label="襯衫" name="Shirt"/> <menu_item_call label="裙å" name="Skirt"/> <menu_item_call label="內褲" name="Underpants"/> <menu_item_call label="å…§è¡£" name="Undershirt"/> </menu> - <menu_item_call label="Teleport" name="Landmark Open"/> - <menu_item_call label="Open" name="Animation Open"/> - <menu_item_call label="Open" name="Sound Open"/> - <menu_item_call label="Replace Current Outfit" name="Replace Outfit"/> - <menu_item_call label="Add To Current Outfit" name="Add To Outfit"/> - <menu_item_call label="Remove From Current Outfit" name="Remove From Outfit"/> + <menu_item_call label="瞬間傳é€" name="Landmark Open"/> + <menu_item_call label="開啟" name="Animation Open"/> + <menu_item_call label="開啟" name="Sound Open"/> + <menu_item_call label="å–代目å‰çš„è£æ‰®" name="Replace Outfit"/> + <menu_item_call label="æ·»åŠ åˆ°ç›®å‰è£æ‰®" name="Add To Outfit"/> + <menu_item_call label="由目å‰çš„è£æ‰®ç§»é™¤" name="Remove From Outfit"/> <menu_item_call label="Find Original" name="Find Original"/> <menu_item_call label="Purge Item" name="Purge Item"/> <menu_item_call label="Restore Item" name="Restore Item"/> - <menu_item_call label="Open" name="Open"/> + <menu_item_call label="開啟" name="Open"/> <menu_item_call label="Open Original" name="Open Original"/> <menu_item_call label="Properties" name="Properties"/> <menu_item_call label="æ›´å" name="Rename"/> - <menu_item_call label="Copy Asset UUID" name="Copy Asset UUID"/> + <menu_item_call label="覆製資產 UUID" name="Copy Asset UUID"/> <menu_item_call label="覆製" name="Copy"/> <menu_item_call label="貼上" name="Paste"/> <menu_item_call label="Paste As Link" name="Paste As Link"/> @@ -66,11 +66,11 @@ <menu_item_call label="刪除" name="Delete"/> <menu_item_call label="刪除系統資料夾" name="Delete System Folder"/> <menu_item_call label="Start Conference Chat" name="Conference Chat Folder"/> - <menu_item_call label="Play" name="Sound Play"/> - <menu_item_call label="About Landmark" name="About Landmark"/> + <menu_item_call label="æ’æ”¾" name="Sound Play"/> + <menu_item_call label="æ·»åŠ åœ°æ¨™" name="About Landmark"/> <menu_item_call label="Play Inworld" name="Animation Play"/> <menu_item_call label="Play Locally" name="Animation Audition"/> - <menu_item_call label="Send Instant Message" name="Send Instant Message"/> + <menu_item_call label="é€å‡ºå³æ™‚訊æ¯" name="Send Instant Message"/> <menu_item_call label="Offer Teleport..." name="Offer Teleport..."/> <menu_item_call label="Start Conference Chat" name="Conference Chat"/> <menu_item_call label="Activate" name="Activate"/> @@ -83,5 +83,5 @@ <menu_item_call label="編輯" name="Wearable Edit"/> <menu_item_call label="Add" name="Wearable Add"/> <menu_item_call label="脫下" name="Take Off"/> - <menu_item_call label="--no options--" name="--no options--"/> + <menu_item_call label="-- ç„¡é¸é … --" name="--no options--"/> </menu> diff --git a/indra/newview/skins/default/xui/zh/menu_inventory_add.xml b/indra/newview/skins/default/xui/zh/menu_inventory_add.xml index 1cfba8e989a0d87b021db53e3ce2cdaef97f0c8a..91996082003cf2310db9e87d7f9bc19d119b983a 100644 --- a/indra/newview/skins/default/xui/zh/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/zh/menu_inventory_add.xml @@ -25,7 +25,7 @@ <menu_item_call label="新刺é’" name="New Tattoo"/> <menu_item_call label="New Physics" name="New Physics"/> </menu> - <menu label="New Body Parts" name="New Body Parts"> + <menu label="新身體部ä½" name="New Body Parts"> <menu_item_call label="新體形" name="New Shape"/> <menu_item_call label="新皮膚" name="New Skin"/> <menu_item_call label="æ–°é é«®" name="New Hair"/> diff --git a/indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml index 8b0fd8c01408349c8f8e3a9d379fa5e8e5a082dc..f51b27d9ce3179198c28fa573a984c8aafa4e40a 100644 --- a/indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml @@ -1,15 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="menu_gear_default"> - <menu_item_call label="New Inventory Window" name="new_window"/> + <menu_item_call label="æ–°æ”¶ç´å€è¦–窗" name="new_window"/> <menu_item_check label="ä¾å稱排åº" name="sort_by_name"/> <menu_item_check label="便œ€è¿‘排åº" name="sort_by_recent"/> - <menu_item_check label="Sort Folders Always by Name" name="sort_folders_by_name"/> - <menu_item_check label="Sort System Folders to Top" name="sort_system_folders_to_top"/> - <menu_item_call label="Show Filters" name="show_filters"/> + <menu_item_check label="總是由å稱排åºè³‡æ–™å¤¾" name="sort_folders_by_name"/> + <menu_item_check label="系統資料夾排åºåˆ°æœ€ä¸Šæ–¹" name="sort_system_folders_to_top"/> + <menu_item_call label="é¡¯ç¤ºéŽæ¿¾å™¨" name="show_filters"/> <menu_item_call label="Reset Filters" name="reset_filters"/> <menu_item_call label="關閉全部資料夾" name="close_folders"/> - <menu_item_call label="Empty Lost and Found" name="empty_lostnfound"/> - <menu_item_call label="Save Texture As" name="Save Texture As"/> + <menu_item_call label="清空 Lost and Found" name="empty_lostnfound"/> + <menu_item_call label="å„²å˜æè³ªç‚º" name="Save Texture As"/> <menu_item_call label="分享" name="Share"/> <menu_item_call label="Find Original" name="Find Original"/> <menu_item_call label="Find All Links" name="Find All Links"/> diff --git a/indra/newview/skins/default/xui/zh/menu_landmark.xml b/indra/newview/skins/default/xui/zh/menu_landmark.xml index f91b479fb6157c5f7344063bfefde8924399659e..7372b223cfd008c734e4b56cfe567de80dd80376 100644 --- a/indra/newview/skins/default/xui/zh/menu_landmark.xml +++ b/indra/newview/skins/default/xui/zh/menu_landmark.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="landmark_overflow_menu"> - <menu_item_call label="Copy SLurl" name="copy"/> + <menu_item_call label="覆製 SLurl" name="copy"/> <menu_item_call label="刪除" name="delete"/> - <menu_item_call label="Create Pick" name="pick"/> - <menu_item_call label="Add to Favorites Bar" name="add_to_favbar"/> + <menu_item_call label="建立精é¸åœ°é»ž" name="pick"/> + <menu_item_call label="æ·»åŠ åˆ°æœ€æ„›åˆ—" name="add_to_favbar"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_login.xml b/indra/newview/skins/default/xui/zh/menu_login.xml index 056c11e69d04eb1cc5abb9f4e139651262e2d454..d6bf34c66e3040119261d911a604bd706a2c8322 100644 --- a/indra/newview/skins/default/xui/zh/menu_login.xml +++ b/indra/newview/skins/default/xui/zh/menu_login.xml @@ -1,25 +1,25 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu_bar name="Login Menu"> - <menu label="Me" name="File"> - <menu_item_call label="Preferences" name="Preferences..."/> - <menu_item_call label="Exit [APP_NAME]" name="Quit"/> + <menu label="自己" name="File"> + <menu_item_call label="å好è¨å®š" name="Preferences..."/> + <menu_item_call label="çµæŸé€€å‡º [APP_NAME]" name="Quit"/> </menu> - <menu label="Help" name="Help"> - <menu_item_call label="[SECOND_LIFE] Help" name="Second Life Help"/> - <menu_item_call label="About [APP_NAME]" name="About Second Life"/> + <menu label="幫助" name="Help"> + <menu_item_call label="[SECOND_LIFE] 幫助" name="Second Life Help"/> + <menu_item_call label="關於 [APP_NAME]" name="About Second Life"/> </menu> - <menu_item_check label="Show Debug Menu" name="Show Debug Menu"/> + <menu_item_check label="顯示除錯é¸å–®" name="Show Debug Menu"/> <menu label="除錯" name="Debug"> - <menu_item_call label="Show Debug Settings" name="Debug Settings"/> - <menu_item_call label="UI/Color Settings" name="UI/Color Settings"/> - <menu_item_call label="XUI Preview Tool" name="UI Preview Tool"/> - <menu label="UI Tests" name="UI Tests"/> - <menu_item_call label="Set Window Size..." name="Set Window Size..."/> - <menu_item_call label="Show TOS" name="TOS"/> - <menu_item_call label="Show Critical Message" name="Critical"/> - <menu_item_call label="Media Browser Test" name="Web Browser Test"/> - <menu_item_call label="Web Content Floater Test" name="Web Content Floater Test"/> - <menu_item_check label="Show Grid Picker" name="Show Grid Picker"/> - <menu_item_call label="Show Notifications Console" name="Show Notifications Console"/> + <menu_item_call label="顯示除錯è¨å®š" name="Debug Settings"/> + <menu_item_call label="UI / é¡è‰² è¨å®š" name="UI/Color Settings"/> + <menu_item_call label="XUI é 覽工具" name="UI Preview Tool"/> + <menu label="UI 測試" name="UI Tests"/> + <menu_item_call label="è¨å®šè¦–窗尺寸大å°..." name="Set Window Size..."/> + <menu_item_call label="顯示 TOS" name="TOS"/> + <menu_item_call label="顯示嚴é‡è¨Šæ¯" name="Critical"/> + <menu_item_call label="媒體ç€è¦½å™¨æ¸¬è©¦" name="Web Browser Test"/> + <menu_item_call label="ç¶²é 內容浮動視窗測試" name="Web Content Floater Test"/> + <menu_item_check label="é¡¯ç¤ºç¶²æ ¼æŒ‘é¸å™¨" name="Show Grid Picker"/> + <menu_item_call label="顯示通知控制å°" name="Show Notifications Console"/> </menu> </menu_bar> diff --git a/indra/newview/skins/default/xui/zh/menu_navbar.xml b/indra/newview/skins/default/xui/zh/menu_navbar.xml index 66b5fbe58d044e2ded0f0444a58b94cddb6b18ab..69df4929f2aa490f142b1c7c354848558f19dfe4 100644 --- a/indra/newview/skins/default/xui/zh/menu_navbar.xml +++ b/indra/newview/skins/default/xui/zh/menu_navbar.xml @@ -2,7 +2,7 @@ <menu name="Navbar Menu"> <menu_item_check label="顯示座標" name="Show Coordinates"/> <menu_item_check label="顯示地段屬性" name="Show Parcel Properties"/> - <menu_item_call label="Landmark" name="Landmark"/> + <menu_item_call label="地標" name="Landmark"/> <menu_item_call label="剪下" name="Cut"/> <menu_item_call label="覆製" name="Copy"/> <menu_item_call label="貼上" name="Paste"/> diff --git a/indra/newview/skins/default/xui/zh/menu_nearby_chat.xml b/indra/newview/skins/default/xui/zh/menu_nearby_chat.xml index 6e525cccd5555277e287597a9b098a0cdc78e6b0..cad462eebbbb6418ed64e1a37c2db77f951552aa 100644 --- a/indra/newview/skins/default/xui/zh/menu_nearby_chat.xml +++ b/indra/newview/skins/default/xui/zh/menu_nearby_chat.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="NearBy Chat Menu"> - <menu_item_call label="Show Nearby People..." name="nearby_people"/> + <menu_item_call label="顯示附近的人..." name="nearby_people"/> <menu_item_check label="Show Blocked Text" name="muted_text"/> <menu_item_check label="Show Buddy Icons" name="show_buddy_icons"/> <menu_item_check label="Show Names" name="show_names"/> <menu_item_check label="Show Icons and Names" name="show_icons_and_names"/> - <menu_item_call label="Font Size" name="font_size"/> + <menu_item_call label="å—型尺寸" name="font_size"/> </menu> diff --git a/indra/newview/skins/default/xui/zh/menu_object.xml b/indra/newview/skins/default/xui/zh/menu_object.xml index 6107318a0e7231ff0496254acda2123352bf5f69..ed41a4f0bf02d5aeec87235f71f3e25b540e3150 100644 --- a/indra/newview/skins/default/xui/zh/menu_object.xml +++ b/indra/newview/skins/default/xui/zh/menu_object.xml @@ -1,27 +1,27 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Object Pie"> - <menu_item_call label="Touch" name="Object Touch"/> + <menu_item_call label="觸碰" name="Object Touch"/> <menu_item_call label="編輯" name="Edit..."/> - <menu_item_call label="Build" name="Build"/> - <menu_item_call label="Open" name="Open"/> - <menu_item_call label="Sit Here" name="Object Sit"/> + <menu_item_call label="å»ºé€ " name="Build"/> + <menu_item_call label="開啟" name="Open"/> + <menu_item_call label="å下" name="Object Sit"/> <menu_item_call label="èµ·ç«‹" name="Object Stand Up"/> - <menu_item_call label="Object Profile" name="Object Inspect"/> + <menu_item_call label="物件檔案" name="Object Inspect"/> <menu_item_call label="Zoom In" name="Zoom In"/> - <context_menu label="Put On" name="Put On"> - <menu_item_call label="Wear" name="Wear"/> - <menu_item_call label="Add" name="Add"/> + <context_menu label="穿上" name="Put On"> + <menu_item_call label="穿上" name="Wear"/> + <menu_item_call label="æ·»åŠ " name="Add"/> <context_menu label="Attach" name="Object Attach"/> <context_menu label="Attach HUD" name="Object Attach HUD"/> </context_menu> - <context_menu label="Manage" name="Remove"> - <menu_item_call label="Report Abuse" name="Report Abuse..."/> - <menu_item_call label="Block" name="Object Mute"/> - <menu_item_call label="Return" name="Return..."/> + <context_menu label="管ç†" name="Remove"> + <menu_item_call label="èˆ‰å ±æ¿«ç”¨" name="Report Abuse..."/> + <menu_item_call label="å°éŽ–" name="Object Mute"/> + <menu_item_call label="退回" name="Return..."/> </context_menu> - <menu_item_call label="Take" name="Pie Object Take"/> + <menu_item_call label="å–å¾—" name="Pie Object Take"/> <menu_item_call label="å–得副本" name="Take Copy"/> - <menu_item_call label="Pay" name="Pay..."/> + <menu_item_call label="支付" name="Pay..."/> <menu_item_call label="購買" name="Buy..."/> <menu_item_call label="刪除" name="Delete"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_object_icon.xml b/indra/newview/skins/default/xui/zh/menu_object_icon.xml index 7cf6289bd17bc3a9300933d813bf93a317670d54..d27e75b83091c4fb5eccbd196cd638bed3cecff4 100644 --- a/indra/newview/skins/default/xui/zh/menu_object_icon.xml +++ b/indra/newview/skins/default/xui/zh/menu_object_icon.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="Object Icon Menu"> - <menu_item_call label="Object Profile..." name="Object Profile"/> + <menu_item_call label="物件檔案..." name="Object Profile"/> <menu_item_call label="Block..." name="Block"/> </menu> diff --git a/indra/newview/skins/default/xui/zh/menu_outfit_gear.xml b/indra/newview/skins/default/xui/zh/menu_outfit_gear.xml index 6befd163b3bf6d2314e1be3904a65a249dbef018..cf47020bd98d5e02017854df618d3f5d539d7a23 100644 --- a/indra/newview/skins/default/xui/zh/menu_outfit_gear.xml +++ b/indra/newview/skins/default/xui/zh/menu_outfit_gear.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="Gear Outfit"> - <menu_item_call label="Wear - Replace Current Outfit" name="wear"/> - <menu_item_call label="Wear - Add to Current Outfit" name="wear_add"/> - <menu_item_call label="Take Off - Remove from Current Outfit" name="take_off"/> - <menu label="New Clothes" name="New Clothes"> + <menu_item_call label="穿上 ï¼ å–代目å‰è£æ‰®" name="wear"/> + <menu_item_call label="穿上 ï¼ æ·»åŠ åˆ°ç›®å‰è£æ‰®" name="wear_add"/> + <menu_item_call label="脫下 ï¼ ç”±ç›®å‰è£æ‰®ç§»é™¤" name="take_off"/> + <menu label="æ–°è¡£æœ" name="New Clothes"> <menu_item_call label="新襯衫" name="New Shirt"/> <menu_item_call label="新褲å" name="New Pants"/> <menu_item_call label="æ–°éž‹å" name="New Shoes"/> @@ -15,14 +15,14 @@ <menu_item_call label="新內褲" name="New Underpants"/> <menu_item_call label="New Alpha" name="New Alpha"/> <menu_item_call label="New Physics" name="New Physics"/> - <menu_item_call label="New Tattoo" name="New Tattoo"/> + <menu_item_call label="新刺é’" name="New Tattoo"/> </menu> - <menu label="New Body Parts" name="New Body Parts"> - <menu_item_call label="New Shape" name="New Shape"/> - <menu_item_call label="New Skin" name="New Skin"/> - <menu_item_call label="New Hair" name="New Hair"/> - <menu_item_call label="New Eyes" name="New Eyes"/> + <menu label="新身體部ä½" name="New Body Parts"> + <menu_item_call label="新體形" name="New Shape"/> + <menu_item_call label="新皮膚" name="New Skin"/> + <menu_item_call label="æ–°é é«®" name="New Hair"/> + <menu_item_call label="新眼ç›" name="New Eyes"/> </menu> - <menu_item_call label="Rename Outfit" name="rename"/> - <menu_item_call label="Delete Outfit" name="delete_outfit"/> + <menu_item_call label="è£æ‰®æ›´å" name="rename"/> + <menu_item_call label="åˆªé™¤è£æ‰®" name="delete_outfit"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_outfit_tab.xml b/indra/newview/skins/default/xui/zh/menu_outfit_tab.xml index 9254aadf561be22e2748de887dda7b4c3735927b..a4614710f4be8b0c39aac4b1588cc26e37421534 100644 --- a/indra/newview/skins/default/xui/zh/menu_outfit_tab.xml +++ b/indra/newview/skins/default/xui/zh/menu_outfit_tab.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Outfit"> - <menu_item_call label="Wear - Replace Current Outfit" name="wear_replace"/> - <menu_item_call label="Wear - Add to Current Outfit" name="wear_add"/> - <menu_item_call label="Take Off - Remove from Current Outfit" name="take_off"/> - <menu_item_call label="Edit Outfit" name="edit"/> - <menu_item_call label="Rename Outfit" name="rename"/> - <menu_item_call label="Delete Outfit" name="delete"/> + <menu_item_call label="穿上 ï¼ å–代目å‰è£æ‰®" name="wear_replace"/> + <menu_item_call label="穿上 ï¼ æ·»åŠ åˆ°ç›®å‰è£æ‰®" name="wear_add"/> + <menu_item_call label="脫下 ï¼ ç”±ç›®å‰è£æ‰®ç§»é™¤" name="take_off"/> + <menu_item_call label="ç·¨è¼¯è£æ‰®" name="edit"/> + <menu_item_call label="è£æ‰®æ›´å" name="rename"/> + <menu_item_call label="åˆªé™¤è£æ‰®" name="delete"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_participant_list.xml b/indra/newview/skins/default/xui/zh/menu_participant_list.xml index c487c35588fc5a9412a4a93e1593db45da65498d..3737e3d041f4afbec6128a776d0561a29c817f45 100644 --- a/indra/newview/skins/default/xui/zh/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/zh/menu_participant_list.xml @@ -2,12 +2,12 @@ <context_menu name="Participant List Context Menu"> <menu_item_check label="ä¾å稱排åº" name="SortByName"/> <menu_item_check label="Sort by Recent Speakers" name="SortByRecentSpeakers"/> - <menu_item_call label="View Profile" name="View Profile"/> + <menu_item_call label="察看檔案" name="View Profile"/> <menu_item_call label="åŠ ç‚ºæœ‹å‹" name="Add Friend"/> <menu_item_call label="IM" name="IM"/> - <menu_item_call label="Call" name="Call"/> + <menu_item_call label="通話" name="Call"/> <menu_item_call label="分享" name="Share"/> - <menu_item_call label="Pay" name="Pay"/> + <menu_item_call label="支付" name="Pay"/> <menu_item_check label="View People Icons" name="View Icons"/> <menu_item_check label="Block Voice" name="Block/Unblock"/> <menu_item_check label="Block Text" name="MuteText"/> diff --git a/indra/newview/skins/default/xui/zh/menu_people_groups.xml b/indra/newview/skins/default/xui/zh/menu_people_groups.xml index c2d7182a6c0c4d52d3372c16c01617d1e15b67ad..1d78c1de0ac5e2dce4fbcbdef3fb48a98f15ef6b 100644 --- a/indra/newview/skins/default/xui/zh/menu_people_groups.xml +++ b/indra/newview/skins/default/xui/zh/menu_people_groups.xml @@ -2,7 +2,7 @@ <menu name="menu_group_plus"> <menu_item_call label="察看資訊" name="View Info"/> <menu_item_call label="èŠå¤©" name="Chat"/> - <menu_item_call label="Call" name="Call"/> + <menu_item_call label="通話" name="Call"/> <menu_item_call label="Activate" name="Activate"/> <menu_item_call label="Leave" name="Leave"/> </menu> diff --git a/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml index 2c84a858af99069b45e4be53c2223d4f91f84ebe..cf36507d743e7db64c1ca042008f253890fc2f7b 100644 --- a/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml +++ b/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="menu_group_plus"> - <menu_item_check label="Display Group Icons" name="Display Group Icons"/> - <menu_item_call label="Leave Selected Group" name="Leave Selected Group"/> + <menu_item_check label="顯示社團圖示" name="Display Group Icons"/> + <menu_item_call label="è„«é›¢æ‰€é¸æ“‡çš„社團" name="Leave Selected Group"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_people_nearby.xml b/indra/newview/skins/default/xui/zh/menu_people_nearby.xml index 2ca0ad6a89c8d499db57da8ccdffe0ac780588b5..49fa775424537810bb2b48c88e6dab0114c43291 100644 --- a/indra/newview/skins/default/xui/zh/menu_people_nearby.xml +++ b/indra/newview/skins/default/xui/zh/menu_people_nearby.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Avatar Context Menu"> - <menu_item_call label="View Profile" name="View Profile"/> + <menu_item_call label="察看檔案" name="View Profile"/> <menu_item_call label="åŠ ç‚ºæœ‹å‹" name="Add Friend"/> <menu_item_call label="Remove Friend" name="Remove Friend"/> <menu_item_call label="IM" name="IM"/> - <menu_item_call label="Call" name="Call"/> + <menu_item_call label="通話" name="Call"/> <menu_item_call label="地圖" name="Map"/> <menu_item_call label="分享" name="Share"/> - <menu_item_call label="Pay" name="Pay"/> + <menu_item_call label="支付" name="Pay"/> <menu_item_check label="Block/Unblock" name="Block/Unblock"/> <menu_item_call label="Offer Teleport" name="teleport"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/zh/menu_people_nearby_multiselect.xml index a71609170be94e2d180c3ede69d98b44a26b5a77..c7aff48df466bc5c8668781c397d691d78adc95f 100644 --- a/indra/newview/skins/default/xui/zh/menu_people_nearby_multiselect.xml +++ b/indra/newview/skins/default/xui/zh/menu_people_nearby_multiselect.xml @@ -3,8 +3,8 @@ <menu_item_call label="åŠ ç‚ºæœ‹å‹" name="Add Friends"/> <menu_item_call label="移除朋å‹" name="Remove Friend"/> <menu_item_call label="IM" name="IM"/> - <menu_item_call label="Call" name="Call"/> + <menu_item_call label="通話" name="Call"/> <menu_item_call label="分享" name="Share"/> - <menu_item_call label="Pay" name="Pay"/> + <menu_item_call label="支付" name="Pay"/> <menu_item_call label="Offer Teleport" name="teleport"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_recent_view_sort.xml index 5a4729abde6beb22d3a669a42fea8a0389152f8e..5b6e7335d65d8bba8aeb7ce9a61e9f4438bf50b0 100644 --- a/indra/newview/skins/default/xui/zh/menu_people_recent_view_sort.xml +++ b/indra/newview/skins/default/xui/zh/menu_people_recent_view_sort.xml @@ -2,6 +2,6 @@ <toggleable_menu name="menu_group_plus"> <menu_item_check label="便œ€è¿‘排åº" name="sort_most"/> <menu_item_check label="ä¾å稱排åº" name="sort_name"/> - <menu_item_check label="View People Icons" name="view_icons"/> - <menu_item_call label="Show Blocked Residents & Objects" name="show_blocked_list"/> + <menu_item_check label="察看人群圖示" name="view_icons"/> + <menu_item_call label="顯示被å°éŽ–çš„å±…æ°‘èˆ‡ç‰©ä»¶" name="show_blocked_list"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_picks.xml b/indra/newview/skins/default/xui/zh/menu_picks.xml index 3c78e9f92073191733e65392b75c239063700c89..2e88ac2d39b38a0ef3c468383fe12267cc80bad9 100644 --- a/indra/newview/skins/default/xui/zh/menu_picks.xml +++ b/indra/newview/skins/default/xui/zh/menu_picks.xml @@ -2,7 +2,7 @@ <context_menu name="Picks"> <menu_item_call label="資訊" name="pick_info"/> <menu_item_call label="編輯" name="pick_edit"/> - <menu_item_call label="Teleport" name="pick_teleport"/> + <menu_item_call label="瞬間傳é€" name="pick_teleport"/> <menu_item_call label="地圖" name="pick_map"/> <menu_item_call label="刪除" name="pick_delete"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_picks_plus.xml b/indra/newview/skins/default/xui/zh/menu_picks_plus.xml index 9e55c633f956bf5045f9e03ef39e855a0213282f..e962bd90d578542590583babb352cdcc319ee047 100644 --- a/indra/newview/skins/default/xui/zh/menu_picks_plus.xml +++ b/indra/newview/skins/default/xui/zh/menu_picks_plus.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="picks_plus_menu"> - <menu_item_call label="New Pick" name="create_pick"/> + <menu_item_call label="æ–°ç²¾é¸åœ°é»ž" name="create_pick"/> <menu_item_call label="New Classified" name="create_classified"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_place.xml b/indra/newview/skins/default/xui/zh/menu_place.xml index 63e44d808ccf4074adaa6e01214c61692c6b2c2d..3733baf119155c529837605a3f96684c6b7b75c7 100644 --- a/indra/newview/skins/default/xui/zh/menu_place.xml +++ b/indra/newview/skins/default/xui/zh/menu_place.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="place_overflow_menu"> - <menu_item_call label="Make a Landmark" name="landmark"/> - <menu_item_call label="Create Pick" name="pick"/> + <menu_item_call label="製作一個地標" name="landmark"/> + <menu_item_call label="建立精é¸åœ°é»ž" name="pick"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_place_add_button.xml b/indra/newview/skins/default/xui/zh/menu_place_add_button.xml index e86fe7367ec9f00dfbc27f681695322bb081d441..d0b9438cfccb7e8a21a5e73fe3366dc7cde8ae82 100644 --- a/indra/newview/skins/default/xui/zh/menu_place_add_button.xml +++ b/indra/newview/skins/default/xui/zh/menu_place_add_button.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_folder_gear"> <menu_item_call label="Add Folder" name="add_folder"/> - <menu_item_call label="Add Landmark" name="add_landmark"/> + <menu_item_call label="æ·»åŠ åœ°æ¨™" name="add_landmark"/> </menu> diff --git a/indra/newview/skins/default/xui/zh/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/zh/menu_places_gear_folder.xml index e9658f72a2e033c517f8815c6d2cbde5d7d5cc20..7f4144d14d9a6220862871192e110e52ade4c213 100644 --- a/indra/newview/skins/default/xui/zh/menu_places_gear_folder.xml +++ b/indra/newview/skins/default/xui/zh/menu_places_gear_folder.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="menu_folder_gear"> - <menu_item_call label="Add Landmark" name="add_landmark"/> - <menu_item_call label="Add Folder" name="add_folder"/> - <menu_item_call label="Restore Item" name="restore_item"/> + <menu_item_call label="æ·»åŠ åœ°æ¨™" name="add_landmark"/> + <menu_item_call label="æ·»åŠ è³‡æ–™å¤¾" name="add_folder"/> + <menu_item_call label="還原物å“" name="restore_item"/> <menu_item_call label="剪下" name="cut"/> <menu_item_call label="覆製" name="copy_folder"/> <menu_item_call label="貼上" name="paste"/> diff --git a/indra/newview/skins/default/xui/zh/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/zh/menu_places_gear_landmark.xml index 66247d3fe6ed4dd7e2f1a0e8c5ffa5a5a58a53e2..f23d970b78a8915df1a1a46fd6fe1d024d6009ba 100644 --- a/indra/newview/skins/default/xui/zh/menu_places_gear_landmark.xml +++ b/indra/newview/skins/default/xui/zh/menu_places_gear_landmark.xml @@ -1,19 +1,19 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="menu_ladmark_gear"> - <menu_item_call label="Teleport" name="teleport"/> + <menu_item_call label="瞬間傳é€" name="teleport"/> <menu_item_call label="更多資訊" name="more_info"/> <menu_item_call label="顯示在地圖上" name="show_on_map"/> - <menu_item_call label="Add Landmark" name="add_landmark"/> - <menu_item_call label="Add Folder" name="add_folder"/> - <menu_item_call label="Restore Item" name="restore_item"/> + <menu_item_call label="æ·»åŠ åœ°æ¨™" name="add_landmark"/> + <menu_item_call label="æ·»åŠ è³‡æ–™å¤¾" name="add_folder"/> + <menu_item_call label="還原物å“" name="restore_item"/> <menu_item_call label="剪下" name="cut"/> - <menu_item_call label="Copy Landmark" name="copy_landmark"/> - <menu_item_call label="Copy SLurl" name="copy_slurl"/> + <menu_item_call label="覆製地標" name="copy_landmark"/> + <menu_item_call label="覆製 SLurl" name="copy_slurl"/> <menu_item_call label="貼上" name="paste"/> <menu_item_call label="æ›´å" name="rename"/> <menu_item_call label="刪除" name="delete"/> <menu_item_call label="展開全部資料夾" name="expand_all"/> <menu_item_call label="摺疊全部資料夾" name="collapse_all"/> <menu_item_check label="便—¥æœŸæŽ’åº" name="sort_by_date"/> - <menu_item_call label="Create Pick" name="create_pick"/> + <menu_item_call label="建立精é¸åœ°é»ž" name="create_pick"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_profile_overflow.xml b/indra/newview/skins/default/xui/zh/menu_profile_overflow.xml index 9c52ddfd187798cbe729945e0f4a673a0df7d4b6..ca637ae54daf1ae4e74df3963e9062457ebf4844 100644 --- a/indra/newview/skins/default/xui/zh/menu_profile_overflow.xml +++ b/indra/newview/skins/default/xui/zh/menu_profile_overflow.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="profile_overflow_menu"> <menu_item_call label="地圖" name="show_on_map"/> - <menu_item_call label="Pay" name="pay"/> + <menu_item_call label="支付" name="pay"/> <menu_item_call label="分享" name="share"/> <menu_item_call label="Block" name="block"/> <menu_item_call label="Unblock" name="unblock"/> - <menu_item_call label="Kick" name="kick"/> - <menu_item_call label="Freeze" name="freeze"/> - <menu_item_call label="Unfreeze" name="unfreeze"/> + <menu_item_call label="踢出" name="kick"/> + <menu_item_call label="å‡çµ" name="freeze"/> + <menu_item_call label="è§£å‡" name="unfreeze"/> <menu_item_call label="CSR" name="csr"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_slurl.xml b/indra/newview/skins/default/xui/zh/menu_slurl.xml index 7291239383b7ddb39c77cd3f83932687c2cbd338..2cea18105a74382a19b07f934ac385be68b2bb53 100644 --- a/indra/newview/skins/default/xui/zh/menu_slurl.xml +++ b/indra/newview/skins/default/xui/zh/menu_slurl.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="Popup"> - <menu_item_call label="About URL" name="about_url"/> - <menu_item_call label="Teleport to URL" name="teleport_to_url"/> + <menu_item_call label="關於 URL" name="about_url"/> + <menu_item_call label="瞬間傳é€åˆ° URL" name="teleport_to_url"/> <menu_item_call label="地圖" name="show_on_map"/> </menu> diff --git a/indra/newview/skins/default/xui/zh/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/zh/menu_teleport_history_gear.xml index 12989ea59c17bd15ef2c437d57d31b62f8ed8297..d188840588593e0c8a457e09197c2b630c5b7063 100644 --- a/indra/newview/skins/default/xui/zh/menu_teleport_history_gear.xml +++ b/indra/newview/skins/default/xui/zh/menu_teleport_history_gear.xml @@ -2,5 +2,5 @@ <toggleable_menu name="Teleport History Gear Context Menu"> <menu_item_call label="展開全部資料夾" name="Expand all folders"/> <menu_item_call label="摺疊全部資料夾" name="Collapse all folders"/> - <menu_item_call label="Clear Teleport History" name="Clear Teleport History"/> + <menu_item_call label="æ¸…é™¤çž¬é–“å‚³é€æ·å²ç´€éŒ„" name="Clear Teleport History"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/zh/menu_teleport_history_item.xml index 4d1aa5f74a31e7ed3f3037dbba966adb741bd43b..c636e108ad90752665dc6e347a3914111518d537 100644 --- a/indra/newview/skins/default/xui/zh/menu_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/zh/menu_teleport_history_item.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Teleport History Item Context Menu"> - <menu_item_call label="Teleport" name="Teleport"/> + <menu_item_call label="瞬間傳é€" name="Teleport"/> <menu_item_call label="更多資訊" name="More Information"/> <menu_item_call label="覆製到剪貼簿" name="CopyToClipboard"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/zh/menu_teleport_history_tab.xml index 423ba64aa77d156387e970dd557f4e5e1d8bbd66..f9107a96ed433806475a0def27fa8b3d92eb8dff 100644 --- a/indra/newview/skins/default/xui/zh/menu_teleport_history_tab.xml +++ b/indra/newview/skins/default/xui/zh/menu_teleport_history_tab.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Teleport History Item Context Menu"> - <menu_item_call label="Open" name="TabOpen"/> + <menu_item_call label="開啟" name="TabOpen"/> <menu_item_call label="關閉" name="TabClose"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_topinfobar.xml b/indra/newview/skins/default/xui/zh/menu_topinfobar.xml index dc3981a4d8e993cc2708efed79ab95ad40a6b8a2..debaafaa1073e3fc08fe74403ee085db3aec7921 100644 --- a/indra/newview/skins/default/xui/zh/menu_topinfobar.xml +++ b/indra/newview/skins/default/xui/zh/menu_topinfobar.xml @@ -2,6 +2,6 @@ <menu name="menu_topinfobar"> <menu_item_check label="顯示座標" name="Show Coordinates"/> <menu_item_check label="顯示地段屬性" name="Show Parcel Properties"/> - <menu_item_call label="Landmark" name="Landmark"/> + <menu_item_call label="地標" name="Landmark"/> <menu_item_call label="覆製" name="Copy"/> </menu> diff --git a/indra/newview/skins/default/xui/zh/menu_url_agent.xml b/indra/newview/skins/default/xui/zh/menu_url_agent.xml index 9f56edb9594189724a9ab78ce13ed555479ef4e3..592bb6561e9f4bab2a98eaf05bec691be7d6049d 100644 --- a/indra/newview/skins/default/xui/zh/menu_url_agent.xml +++ b/indra/newview/skins/default/xui/zh/menu_url_agent.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Show Resident Profile" name="show_agent"/> + <menu_item_call label="顯示居民檔案" name="show_agent"/> <menu_item_call label="覆製å稱到剪貼簿" name="url_copy_label"/> - <menu_item_call label="Copy SLurl to clipboard" name="url_copy"/> + <menu_item_call label="覆製 SLurl 到剪貼簿" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_url_group.xml b/indra/newview/skins/default/xui/zh/menu_url_group.xml index c574090a4a2fc099dcc29e13c6dd609cccd61494..2cbdd602cb6e34ee9a15da52b7ad1b99c656c6b8 100644 --- a/indra/newview/skins/default/xui/zh/menu_url_group.xml +++ b/indra/newview/skins/default/xui/zh/menu_url_group.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Show Group Information" name="show_group"/> - <menu_item_call label="Copy Group to clipboard" name="url_copy_label"/> - <menu_item_call label="Copy SLurl to clipboard" name="url_copy"/> + <menu_item_call label="顯示社團資訊" name="show_group"/> + <menu_item_call label="覆製社團到剪貼簿" name="url_copy_label"/> + <menu_item_call label="覆製 SLurl 到剪貼簿" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_url_inventory.xml b/indra/newview/skins/default/xui/zh/menu_url_inventory.xml index 1e56aa1a47722697cba74636f63e40a890233102..8eaea68c6f017e5ac8ae1e4a608c041e8afa6ac2 100644 --- a/indra/newview/skins/default/xui/zh/menu_url_inventory.xml +++ b/indra/newview/skins/default/xui/zh/menu_url_inventory.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Show Inventory Item" name="show_item"/> - <menu_item_call label="Copy Name to clipboard" name="url_copy_label"/> - <menu_item_call label="Copy SLurl to clipboard" name="url_copy"/> + <menu_item_call label="顯示收ç´å€ç‰©å“" name="show_item"/> + <menu_item_call label="覆製å稱到剪貼簿" name="url_copy_label"/> + <menu_item_call label="覆製 SLurl 到剪貼簿" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_url_map.xml b/indra/newview/skins/default/xui/zh/menu_url_map.xml index fc8922318fbefe88ff69336bc68e2fb4f2cfeffe..fbda20fd2f393a5787479c0fc1fabc48aae178e6 100644 --- a/indra/newview/skins/default/xui/zh/menu_url_map.xml +++ b/indra/newview/skins/default/xui/zh/menu_url_map.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> <menu_item_call label="顯示在地圖上" name="show_on_map"/> - <menu_item_call label="Teleport to Location" name="teleport_to_location"/> - <menu_item_call label="Copy SLurl to clipboard" name="url_copy"/> + <menu_item_call label="瞬間傳é€åˆ°ä½ç½®" name="teleport_to_location"/> + <menu_item_call label="覆製 SLurl 到剪貼簿" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_url_objectim.xml b/indra/newview/skins/default/xui/zh/menu_url_objectim.xml index 8ad8e4ba845ee39bb0020d53af7c77c3efa25474..b344b21c62f56dd0886a5227e95169d4250ea6c1 100644 --- a/indra/newview/skins/default/xui/zh/menu_url_objectim.xml +++ b/indra/newview/skins/default/xui/zh/menu_url_objectim.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Show Object Information" name="show_object"/> + <menu_item_call label="顯示物件資訊" name="show_object"/> <menu_item_call label="顯示在地圖上" name="show_on_map"/> - <menu_item_call label="Teleport to Object Location" name="teleport_to_object"/> - <menu_item_call label="Copy Object Name to clipboard" name="url_copy_label"/> - <menu_item_call label="Copy SLurl to clipboard" name="url_copy"/> + <menu_item_call label="瞬間傳é€åˆ°ç‰©ä»¶ä½ç½®" name="teleport_to_object"/> + <menu_item_call label="覆製物件å稱到剪貼簿" name="url_copy_label"/> + <menu_item_call label="覆製 SLurl 到剪貼簿" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_url_parcel.xml b/indra/newview/skins/default/xui/zh/menu_url_parcel.xml index d011ba8208e0ea486cac14e384e35bad2bb602d8..330c28238f74b761933395692a94846f3cf844d1 100644 --- a/indra/newview/skins/default/xui/zh/menu_url_parcel.xml +++ b/indra/newview/skins/default/xui/zh/menu_url_parcel.xml @@ -2,5 +2,5 @@ <context_menu name="Url Popup"> <menu_item_call label="顯示地段資訊" name="show_parcel"/> <menu_item_call label="顯示在地圖上" name="show_on_map"/> - <menu_item_call label="Copy SLurl to clipboard" name="url_copy"/> + <menu_item_call label="覆製 SLurl 到剪貼簿" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_url_slapp.xml b/indra/newview/skins/default/xui/zh/menu_url_slapp.xml index 10d7c9cba00dc0a0c8c3d61cbe5d16ea83319404..afc15ce13ca44e1573d83678e500636788eafc66 100644 --- a/indra/newview/skins/default/xui/zh/menu_url_slapp.xml +++ b/indra/newview/skins/default/xui/zh/menu_url_slapp.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> <menu_item_call label="Run This Command" name="run_slapp"/> - <menu_item_call label="Copy SLurl to clipboard" name="url_copy"/> + <menu_item_call label="覆製 SLurl 到剪貼簿" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_url_slurl.xml b/indra/newview/skins/default/xui/zh/menu_url_slurl.xml index cf4ff9f8ee2f671c489f652713712bb9838bb473..2fb247f250947ee5581bd0de9a7c42da0aa53647 100644 --- a/indra/newview/skins/default/xui/zh/menu_url_slurl.xml +++ b/indra/newview/skins/default/xui/zh/menu_url_slurl.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Show Place Information" name="show_place"/> + <menu_item_call label="顯示地點資訊" name="show_place"/> <menu_item_call label="顯示在地圖上" name="show_on_map"/> - <menu_item_call label="Teleport to Location" name="teleport_to_location"/> - <menu_item_call label="Copy SLurl to clipboard" name="url_copy"/> + <menu_item_call label="瞬間傳é€åˆ°ä½ç½®" name="teleport_to_location"/> + <menu_item_call label="覆製 SLurl 到剪貼簿" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_url_teleport.xml b/indra/newview/skins/default/xui/zh/menu_url_teleport.xml index c1035824873c8c5ef26a539f8ad070800337fa04..e3e4b4716d4dac378f78e809e3013f04a759ecdd 100644 --- a/indra/newview/skins/default/xui/zh/menu_url_teleport.xml +++ b/indra/newview/skins/default/xui/zh/menu_url_teleport.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Teleport to this Location" name="teleport"/> + <menu_item_call label="瞬間傳é€åˆ°é€™å€‹ä½ç½®" name="teleport"/> <menu_item_call label="顯示在地圖上" name="show_on_map"/> - <menu_item_call label="Copy SLurl to clipboard" name="url_copy"/> + <menu_item_call label="覆製 SLurl 到剪貼簿" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml index 3b1f7820afd9618d72c20f349fa71fd88f43cf1e..6d70ac4c1f272ec9191d7a48dabf127f39d384ca 100644 --- a/indra/newview/skins/default/xui/zh/menu_viewer.xml +++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml @@ -20,9 +20,9 @@ <menu_item_call label="離開" name="Set Away"/> <menu_item_call label="忙碌" name="Set Busy"/> </menu> - <menu_item_call label="Request Admin Status" name="Request Admin Options"/> - <menu_item_call label="Leave Admin Status" name="Leave Admin Options"/> - <menu_item_call label="çµæŸé›¢é–‹ [APP_NAME]" name="Quit"/> + <menu_item_call label="è¦æ±‚ Admin 狀態" name="Request Admin Options"/> + <menu_item_call label="離開 Admin 狀態" name="Leave Admin Options"/> + <menu_item_call label="çµæŸé€€å‡º [APP_NAME]" name="Quit"/> </menu> <menu label="æºé€š" name="Communicate"> <menu_item_call label="我的朋å‹" name="My Friends"/> @@ -35,9 +35,9 @@ <menu_item_check label="世界地圖" name="World Map"/> <menu_item_check label="æœå°‹" name="Search"/> <menu_item_call label="æ‹æ”å¿«ç…§" name="Take Snapshot"/> - <menu_item_call label="Landmark This Place" name="Create Landmark Here"/> - <menu label="Place Profile" name="Land"> - <menu_item_call label="Place Profile" name="Place Profile"/> + <menu_item_call label="å°‡æ¤è™•記下地標" name="Create Landmark Here"/> + <menu label="地點檔案" name="Land"> + <menu_item_call label="地點檔案" name="Place Profile"/> <menu_item_call label="關於土地" name="About Land"/> <menu_item_call label="åœ°å€ / é ˜åœ°" name="Region/Estate"/> </menu> @@ -54,7 +54,7 @@ <menu_item_check label="地段屬性" name="Parcel Properties"/> <menu_item_check label="進階é¸å–®" name="Show Advanced Menu"/> </menu> - <menu_item_call label="瞬間傳é€å›žå®¶" name="Teleport Home"/> + <menu_item_call label="瞬間瞬間傳é€å›žå®¶" name="Teleport Home"/> <menu_item_call label="è¨å®šå®¶åœ¨æ¤è™•" name="Set Home to Here"/> <menu label="太陽" name="Environment Settings"> <menu_item_call label="日出" name="Sunrise"/> @@ -75,7 +75,7 @@ <menu_item_call label="土地工具" name="Land"/> </menu> <menu_item_call label="è¯çµ" name="Link"/> - <menu_item_call label="å–銷è¯çµ" name="Unlink"/> + <menu_item_call label="å–æ¶ˆè¯çµ" name="Unlink"/> <menu_item_check label="編輯è¯çµéƒ¨ä½" name="Edit Linked Parts"/> <menu label="鏿“‡è¯çµéƒ¨ä½" name="Select Linked Parts"> <menu_item_call label="鏿“‡ä¸‹ä¸€éƒ¨ä½" name="Select Next Part"/> @@ -84,73 +84,73 @@ <menu_item_call label="包括上一部ä½" name="Include Previous Part"/> </menu> <menu_item_call label="èšç„¦æ–¼æ‰€é¸éƒ¨ä½" name="Focus on Selection"/> - <menu_item_call label="Zoom to Selection" name="Zoom to Selection"/> - <menu label="Object" name="Object"> + <menu_item_call label="縮放至所é¸éƒ¨ä½" name="Zoom to Selection"/> + <menu label="物件" name="Object"> <menu_item_call label="購買" name="Menu Object Buy"/> - <menu_item_call label="Take" name="Menu Object Take"/> + <menu_item_call label="å–å¾—" name="Menu Object Take"/> <menu_item_call label="å–得副本" name="Take Copy"/> - <menu_item_call label="Save Back to My Inventory" name="Save Object Back to My Inventory"/> - <menu_item_call label="Save Back to Object Contents" name="Save Object Back to Object Contents"/> + <menu_item_call label="回å˜åˆ°æˆ‘的收ç´å€" name="Save Object Back to My Inventory"/> + <menu_item_call label="回å˜åˆ°ç‰©ä»¶å…§å®¹" name="Save Object Back to Object Contents"/> <menu_item_call label="退回物件" name="Return Object back to Owner"/> </menu> - <menu label="Scripts" name="Scripts"> - <menu_item_call label="Recompile Scripts (Mono)" name="Mono"/> - <menu_item_call label="Recompile Scripts (LSL)" name="LSL"/> + <menu label="腳本" name="Scripts"> + <menu_item_call label="釿–°ç·¨è¯è…³æœ¬ï¼ˆMono)" name="Mono"/> + <menu_item_call label="釿–°ç·¨è¯è…³æœ¬ï¼ˆLSL)" name="LSL"/> <menu_item_call label="Reset Scripts" name="Reset Scripts"/> - <menu_item_call label="Set Scripts to Running" name="Set Scripts to Running"/> - <menu_item_call label="Set Scripts to Not Running" name="Set Scripts to Not Running"/> + <menu_item_call label="è¨å®šè…³æœ¬ç‚ºåŸ·è¡Œä¸" name="Set Scripts to Running"/> + <menu_item_call label="è¨å®šè…³æœ¬ç‚ºéžåŸ·è¡Œä¸" name="Set Scripts to Not Running"/> </menu> - <menu label="Options" name="Options"> - <menu_item_check label="Show Advanced Permissions" name="DebugPermissions"/> - <menu_item_check label="Select Only My Objects" name="Select Only My Objects"/> - <menu_item_check label="Select Only Movable Objects" name="Select Only Movable Objects"/> + <menu label="é¸é …" name="Options"> + <menu_item_check label="顯示進階權é™" name="DebugPermissions"/> + <menu_item_check label="åªé¸å–我的物件" name="Select Only My Objects"/> + <menu_item_check label="åªé¸å–å¯ç§»å‹•的物件" name="Select Only Movable Objects"/> <menu_item_check label="Select By Surrounding" name="Select By Surrounding"/> <menu_item_check label="Show Selection Outlines" name="Show Selection Outlines"/> <menu_item_check label="Show Hidden Selection" name="Show Hidden Selection"/> <menu_item_check label="Show Light Radius for Selection" name="Show Light Radius for Selection"/> <menu_item_check label="Show Selection Beam" name="Show Selection Beam"/> <menu_item_check label="è²¼é½Šæ ¼ç·š" name="Snap to Grid"/> - <menu_item_call label="Snap Object XY to Grid" name="Snap Object XY to Grid"/> + <menu_item_call label="貼齊物件 XY è»¸åˆ°æ ¼ç·š" name="Snap Object XY to Grid"/> <menu_item_call label="Use Selection for Grid" name="Use Selection for Grid"/> - <menu_item_call label="Grid Options" name="Grid Options"/> + <menu_item_call label="æ ¼ç·šé¸é …" name="Grid Options"/> </menu> - <menu label="Upload" name="Upload"> - <menu_item_call label="Image (L$[COST])..." name="Upload Image"/> - <menu_item_call label="Sound (L$[COST])..." name="Upload Sound"/> - <menu_item_call label="Animation (L$[COST])..." name="Upload Animation"/> - <menu_item_call label="Bulk (L$[COST] per file)..." name="Bulk Upload"/> - <menu_item_call label="Set Default Upload Permissions" name="perm prefs"/> + <menu label="上傳" name="Upload"> + <menu_item_call label="圖åƒï¼ˆL$[COST])..." name="Upload Image"/> + <menu_item_call label="è²éŸ³ï¼ˆL$[COST])..." name="Upload Sound"/> + <menu_item_call label="動作(L$[COST])..." name="Upload Animation"/> + <menu_item_call label="大é‡ä¸Šå‚³ï¼ˆæ¯æª”案 L$[COST] )..." name="Bulk Upload"/> + <menu_item_call label="è¨å®šé è¨ä¸Šå‚³æ¬Šé™" name="perm prefs"/> </menu> <menu_item_call label="復原" name="Undo"/> - <menu_item_call label="Redo" name="Redo"/> + <menu_item_call label="é‡åš" name="Redo"/> </menu> - <menu label="Help" name="Help"> - <menu_item_call label="[SECOND_LIFE] Help" name="Second Life Help"/> - <menu_item_check label="Enable Hints" name="Enable Hints"/> - <menu_item_call label="Report Abuse" name="Report Abuse"/> - <menu_item_call label="Report Bug" name="Report Bug"/> - <menu_item_call label="About [APP_NAME]" name="About Second Life"/> + <menu label="幫助" name="Help"> + <menu_item_call label="[SECOND_LIFE] 幫助" name="Second Life Help"/> + <menu_item_check label="啟用æç¤º" name="Enable Hints"/> + <menu_item_call label="èˆ‰å ±æ¿«ç”¨" name="Report Abuse"/> + <menu_item_call label="å›žå ±è‡èŸ²" name="Report Bug"/> + <menu_item_call label="關於 [APP_NAME]" name="About Second Life"/> </menu> - <menu label="Advanced" name="Advanced"> + <menu label="進階" name="Advanced"> <menu_item_call label="Rebake Textures" name="Rebake Texture"/> - <menu_item_call label="Set UI Size to Default" name="Set UI Size to Default"/> - <menu_item_call label="Set Window Size..." name="Set Window Size..."/> - <menu_item_check label="Limit Select Distance" name="Limit Select Distance"/> + <menu_item_call label="è¨å®šä½¿ç”¨è€…界é¢å¤§å°è‡³é è¨å€¼" name="Set UI Size to Default"/> + <menu_item_call label="è¨å®šè¦–窗尺寸大å°..." name="Set Window Size..."/> + <menu_item_check label="é™åˆ¶é¸æ“‡è·é›¢" name="Limit Select Distance"/> <menu_item_check label="Disable Camera Constraints" name="Disable Camera Distance"/> - <menu_item_check label="High-res Snapshot" name="HighResSnapshot"/> - <menu_item_check label="Quiet Snapshots to Disk" name="QuietSnapshotsToDisk"/> - <menu_item_check label="Compress Snapshots to Disk" name="CompressSnapshotsToDisk"/> - <menu label="Performance Tools" name="Performance Tools"> + <menu_item_check label="高解æžåº¦å¿«ç…§" name="HighResSnapshot"/> + <menu_item_check label="éœéŸ³æ‹æ”快照到硬碟" name="QuietSnapshotsToDisk"/> + <menu_item_check label="壓縮快照å˜åˆ°ç¡¬ç¢Ÿ" name="CompressSnapshotsToDisk"/> + <menu label="效能工具" name="Performance Tools"> <menu_item_call label="Lag Meter" name="Lag Meter"/> - <menu_item_check label="Statistics Bar" name="Statistics Bar"/> + <menu_item_check label="統計列" name="Statistics Bar"/> <menu_item_check label="Show Avatar Rendering Cost" name="Avatar Rendering Cost"/> </menu> <menu label="Highlighting and Visibility" name="Highlighting and Visibility"> <menu_item_check label="Cheesy Beacon" name="Cheesy Beacon"/> <menu_item_check label="Hide Particles" name="Hide Particles"/> <menu_item_check label="Hide Selected" name="Hide Selected"/> - <menu_item_check label="Highlight Transparent" name="Highlight Transparent"/> - <menu_item_check label="Show HUD Attachments" name="Show HUD Attachments"/> + <menu_item_check label="é«˜äº®é¡¯ç¤ºé€æ˜Žç‰©ä»¶" name="Highlight Transparent"/> + <menu_item_check label="顯示 HUD 附件" name="Show HUD Attachments"/> <menu_item_check label="Show Mouselook Crosshairs" name="ShowCrosshairs"/> </menu> <menu label="Rendering Types" name="Rendering Types"> @@ -181,16 +181,16 @@ <menu_item_check label="Use Plugin Read Thread" name="Use Plugin Read Thread"/> <menu_item_call label="Clear Group Cache" name="ClearGroupCache"/> <menu_item_check label="Mouse Smoothing" name="Mouse Smoothing"/> - <menu label="Shortcuts" name="Shortcuts"> - <menu_item_call label="Image (L$[COST])..." name="Upload Image"/> - <menu_item_check label="Search" name="Search"/> - <menu_item_call label="Release Keys" name="Release Keys"/> - <menu_item_call label="Set UI Size to Default" name="Set UI Size to Default"/> + <menu label="快速éµ" name="Shortcuts"> + <menu_item_call label="圖åƒï¼ˆL$[COST])..." name="Upload Image"/> + <menu_item_check label="æœå°‹" name="Search"/> + <menu_item_call label="釋出按éµ" name="Release Keys"/> + <menu_item_call label="è¨å®šä½¿ç”¨è€…界é¢å¤§å°è‡³é è¨å€¼" name="Set UI Size to Default"/> <menu_item_check label="Show Advanced Menu - legacy shortcut" name="Show Advanced Menu - legacy shortcut"/> <menu_item_call label="關閉視窗" name="Close Window"/> <menu_item_call label="關閉全部視窗" name="Close All Windows"/> <menu_item_call label="Snapshot to Disk" name="Snapshot to Disk"/> - <menu_item_call label="Mouselook" name="Mouselook"/> + <menu_item_call label="第一人稱視角" name="Mouselook"/> <menu_item_check label="Joystick Flycam" name="Joystick Flycam"/> <menu_item_call label="Reset View" name="Reset View"/> <menu_item_call label="Look at Last Chatter" name="Look at Last Chatter"/> @@ -209,11 +209,11 @@ <menu_item_check label="顯示開發é¸å–®" name="Debug Mode"/> </menu> <menu label="開發" name="Develop"> - <menu label="Consoles" name="Consoles"> - <menu_item_check label="Texture Console" name="Texture Console"/> - <menu_item_check label="Debug Console" name="Debug Console"/> - <menu_item_call label="Notifications Console" name="Notifications"/> - <menu_item_check label="Texture Size Console" name="Texture Size"/> + <menu label="控制å°" name="Consoles"> + <menu_item_check label="æè³ªæŽ§åˆ¶å°" name="Texture Console"/> + <menu_item_check label="除錯控制å°" name="Debug Console"/> + <menu_item_call label="通知控制å°" name="Notifications"/> + <menu_item_check label="æè³ªå°ºå¯¸æŽ§åˆ¶å°" name="Texture Size"/> <menu_item_check label="Texture Category Console" name="Texture Category"/> <menu_item_check label="Fast Timers" name="Fast Timers"/> <menu_item_check label="記憶體" name="Memory"/> @@ -226,9 +226,9 @@ <menu_item_check label="Badge" name="Badge"/> </menu> <menu label="顯示資訊" name="Display Info"> - <menu_item_check label="Show Time" name="Show Time"/> + <menu_item_check label="顯示時間" name="Show Time"/> <menu_item_check label="Show Render Info" name="Show Render Info"/> - <menu_item_check label="Show Texture Info" name="Show Texture Info"/> + <menu_item_check label="顯示æè³ªè³‡è¨Š" name="Show Texture Info"/> <menu_item_check label="Show Matrices" name="Show Matrices"/> <menu_item_check label="Show Color Under Cursor" name="Show Color Under Cursor"/> <menu_item_check label="顯示記憶體" name="Show Memory"/> @@ -316,7 +316,7 @@ <menu_item_call label="Media Browser Test" name="Web Browser Test"/> <menu_item_call label="Web Content Browser" name="Web Content Browser"/> <menu_item_call label="Dump SelectMgr" name="Dump SelectMgr"/> - <menu_item_call label="Dump Inventory" name="Dump Inventory"/> + <menu_item_call label="傾尿”¶ç´å€" name="Dump Inventory"/> <menu_item_call label="Dump Timers" name="Dump Timers"/> <menu_item_call label="Dump Focus Holder" name="Dump Focus Holder"/> <menu_item_call label="Print Selected Object Info" name="Print Selected Object Info"/> @@ -335,13 +335,13 @@ <menu_item_call label="Reload Color Settings" name="Reload Color Settings"/> <menu_item_call label="Show Font Test" name="Show Font Test"/> <menu_item_check label="Show XUI Names" name="Show XUI Names"/> - <menu_item_call label="Send Test IMs" name="Send Test IMs"/> + <menu_item_call label="é€å‡ºæ¸¬è©¦ IMs" name="Send Test IMs"/> <menu_item_call label="Flush Names Caches" name="Flush Names Caches"/> </menu> - <menu label="Avatar" name="Character"> + <menu label="化身" name="Character"> <menu label="Grab Baked Texture" name="Grab Baked Texture"> <menu_item_call label="Iris" name="Iris"/> - <menu_item_call label="Head" name="Head"/> + <menu_item_call label="é 部" name="Head"/> <menu_item_call label="Upper Body" name="Upper Body"/> <menu_item_call label="Lower Body" name="Lower Body"/> <menu_item_call label="裙å" name="Skirt"/> @@ -355,10 +355,10 @@ <menu_item_check label="Allow Select Avatar" name="Allow Select Avatar"/> </menu> <menu_item_call label="Force Params to Default" name="Force Params to Default"/> - <menu_item_check label="Animation Info" name="Animation Info"/> - <menu_item_check label="Slow Motion Animations" name="Slow Motion Animations"/> - <menu_item_check label="Show Look At" name="Show Look At"/> - <menu_item_check label="Show Point At" name="Show Point At"/> + <menu_item_check label="動作資訊" name="Animation Info"/> + <menu_item_check label="慢動作" name="Slow Motion Animations"/> + <menu_item_check label="顯示注視在" name="Show Look At"/> + <menu_item_check label="顯示指å‘在" name="Show Point At"/> <menu_item_check label="Debug Joint Updates" name="Debug Joint Updates"/> <menu_item_check label="Disable LOD" name="Disable LOD"/> <menu_item_check label="Debug Character Vis" name="Debug Character Vis"/> @@ -369,7 +369,7 @@ <menu_item_call label="Debug Avatar Textures" name="Debug Avatar Textures"/> <menu_item_call label="Dump Local Textures" name="Dump Local Textures"/> </menu> - <menu_item_check label="HTTP Textures" name="HTTP Textures"/> + <menu_item_check label="HTTP æè³ª" name="HTTP Textures"/> <menu_item_call label="Compress Images" name="Compress Images"/> <menu_item_check label="Output Debug Minidump" name="Output Debug Minidump"/> <menu_item_check label="Console Window on next Run" name="Console Window"/> @@ -400,7 +400,7 @@ <menu label="Admin" name="Deprecated"> <menu label="Attach Object" name="Attach Object"/> <menu label="Detach Object" name="Detach Object"/> - <menu label="Take Off Clothing" name="Take Off Clothing"> + <menu label="脫下æœè£" name="Take Off Clothing"> <menu_item_call label="襯衫" name="Shirt"/> <menu_item_call label="褲å" name="Pants"/> <menu_item_call label="éž‹å" name="Shoes"/> @@ -413,15 +413,15 @@ <menu_item_call label="Alpha" name="Alpha"/> <menu_item_call label="Tattoo" name="Tattoo"/> <menu_item_call label="Physics" name="Physics"/> - <menu_item_call label="All Clothes" name="All Clothes"/> + <menu_item_call label="全部衣æœ" name="All Clothes"/> </menu> - <menu label="Help" name="Help"> - <menu_item_call label="Official Linden Blog" name="Official Linden Blog"/> + <menu label="幫助" name="Help"> + <menu_item_call label="æž—ç™»å®˜æ–¹éƒ¨è½æ ¼" name="Official Linden Blog"/> <menu_item_call label="Scripting Portal" name="Scripting Portal"/> - <menu label="Bug Reporting" name="Bug Reporting"> + <menu label="è‡èŸ²å›žå ±" name="Bug Reporting"> <menu_item_call label="Public Issue Tracker" name="Public Issue Tracker"/> <menu_item_call label="Public Issue Tracker Help" name="Publc Issue Tracker Help"/> - <menu_item_call label="Bug Reporting 101" name="Bug Reporing 101"/> + <menu_item_call label="è‡èŸ²å›žå ± 101" name="Bug Reporing 101"/> <menu_item_call label="Security Issues" name="Security Issues"/> <menu_item_call label="QA Wiki" name="QA Wiki"/> </menu> diff --git a/indra/newview/skins/default/xui/zh/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/zh/menu_wearable_list_item.xml index 97f18f0936e972949c55af1ebd08e9b08d475462..c5c1f661fbd8a34a7be6f145e697176fb2aa5c2e 100644 --- a/indra/newview/skins/default/xui/zh/menu_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/zh/menu_wearable_list_item.xml @@ -9,6 +9,6 @@ <context_menu label="Attach to HUD" name="wearable_attach_to_hud"/> <menu_item_call label="脫下" name="take_off"/> <menu_item_call label="編輯" name="edit"/> - <menu_item_call label="Item Profile" name="object_profile"/> - <menu_item_call label="Show Original" name="show_original"/> + <menu_item_call label="ç‰©å“æª”案" name="object_profile"/> + <menu_item_call label="顯示原件" name="show_original"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_wearing_gear.xml b/indra/newview/skins/default/xui/zh/menu_wearing_gear.xml index ebf9b80d277dff1e4a1df29072ca98640da10b9e..d9f4acb27b28afac3b5c27d2286f344875bffb10 100644 --- a/indra/newview/skins/default/xui/zh/menu_wearing_gear.xml +++ b/indra/newview/skins/default/xui/zh/menu_wearing_gear.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="Gear Wearing"> - <menu_item_call label="Edit Outfit" name="edit"/> + <menu_item_call label="ç·¨è¼¯è£æ‰®" name="edit"/> <menu_item_call label="脫下" name="takeoff"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_wearing_tab.xml b/indra/newview/skins/default/xui/zh/menu_wearing_tab.xml index 5e82cb087f47a29e9faa89f597f6e9d5eb4fc618..c7d2853995f76ef8f446748cdf44a0fe19e3e297 100644 --- a/indra/newview/skins/default/xui/zh/menu_wearing_tab.xml +++ b/indra/newview/skins/default/xui/zh/menu_wearing_tab.xml @@ -2,5 +2,5 @@ <context_menu name="Wearing"> <menu_item_call label="脫下" name="take_off"/> <menu_item_call label="å¸ä¸‹" name="detach"/> - <menu_item_call label="Edit Outfit" name="edit"/> + <menu_item_call label="ç·¨è¼¯è£æ‰®" name="edit"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/mime_types.xml b/indra/newview/skins/default/xui/zh/mime_types.xml index 1c9b68da1a8a730c5b52d751d378035ac1aa4098..3498942f9b89ec6e615ecd66ff4e7980df020244 100644 --- a/indra/newview/skins/default/xui/zh/mime_types.xml +++ b/indra/newview/skins/default/xui/zh/mime_types.xml @@ -13,18 +13,18 @@ </widgetset> <widgetset name="movie"> <label name="movie_label"> - Movie + 影片 </label> <tooltip name="movie_tooltip"> - There is a movie to play here + 沒有影片å¯ä»¥æ’放 </tooltip> <playtip name="movie_playtip"> - Play movie + æ’æ”¾å½±ç‰‡ </playtip> </widgetset> <widgetset name="image"> <label name="image_label"> - Image + åœ–åƒ </label> <tooltip name="image_tooltip"> There is an image at this location @@ -71,12 +71,12 @@ </mimetype> <mimetype name="image/*"> <label name="image2_label"> - Image + åœ–åƒ </label> </mimetype> <mimetype name="video/vnd.secondlife.qt.legacy"> <label name="vnd.secondlife.qt.legacy_label"> - Movie (QuickTime) + 影片(QuickTime) </label> </mimetype> <mimetype name="application/javascript"> @@ -91,12 +91,12 @@ </mimetype> <mimetype name="application/pdf"> <label name="application/pdf_label"> - PDF Document + PDF 文件 </label> </mimetype> <mimetype name="application/postscript"> <label name="application/postscript_label"> - Postscript Document + Postscript 文件 </label> </mimetype> <mimetype name="application/rtf"> @@ -111,7 +111,7 @@ </mimetype> <mimetype name="application/xhtml+xml"> <label name="application/xhtml+xml_label"> - Web Page (XHTML) + é¸é …(XHTML) </label> </mimetype> <mimetype name="application/x-director"> @@ -141,42 +141,42 @@ </mimetype> <mimetype name="image/bmp"> <label name="image/bmp_label"> - Image (BMP) + 圖åƒï¼ˆBMP) </label> </mimetype> <mimetype name="image/gif"> <label name="image/gif_label"> - Image (GIF) + 圖åƒï¼ˆGIF) </label> </mimetype> <mimetype name="image/jpeg"> <label name="image/jpeg_label"> - Image (JPEG) + 圖åƒï¼ˆJPEG) </label> </mimetype> <mimetype name="image/png"> <label name="image/png_label"> - Image (PNG) + 圖åƒï¼ˆPNG) </label> </mimetype> <mimetype name="image/svg+xml"> <label name="image/svg+xml_label"> - Image (SVG) + 圖åƒï¼ˆSVG) </label> </mimetype> <mimetype name="image/tiff"> <label name="image/tiff_label"> - Image (TIFF) + 圖åƒï¼ˆTIFF) </label> </mimetype> <mimetype name="text/html"> <label name="text/html_label"> - Web Page + é¸é … </label> </mimetype> <mimetype name="text/plain"> <label name="text/plain_label"> - Text + æ–‡å— </label> </mimetype> <mimetype name="text/xml"> @@ -186,32 +186,32 @@ </mimetype> <mimetype name="video/mpeg"> <label name="video/mpeg_label"> - Movie (MPEG) + 影片(MPEG) </label> </mimetype> <mimetype name="video/mp4"> <label name="video/mp4_label"> - Movie (MP4) + 影片(MP4) </label> </mimetype> <mimetype name="video/quicktime"> <label name="video/quicktime_label"> - Movie (QuickTime) + 影片(QuickTime) </label> </mimetype> <mimetype name="video/x-ms-asf"> <label name="video/x-ms-asf_label"> - Movie (Windows Media ASF) + 影片(Windows Media ASF) </label> </mimetype> <mimetype name="video/x-ms-wmv"> <label name="video/x-ms-wmv_label"> - Movie (Windows Media WMV) + 影片(Windows Media WMV) </label> </mimetype> <mimetype name="video/x-msvideo"> <label name="video/x-msvideo_label"> - Movie (AVI) + 影片(AVI) </label> </mimetype> </mimetypes> diff --git a/indra/newview/skins/default/xui/zh/mime_types_linux.xml b/indra/newview/skins/default/xui/zh/mime_types_linux.xml index 1c9b68da1a8a730c5b52d751d378035ac1aa4098..3498942f9b89ec6e615ecd66ff4e7980df020244 100644 --- a/indra/newview/skins/default/xui/zh/mime_types_linux.xml +++ b/indra/newview/skins/default/xui/zh/mime_types_linux.xml @@ -13,18 +13,18 @@ </widgetset> <widgetset name="movie"> <label name="movie_label"> - Movie + 影片 </label> <tooltip name="movie_tooltip"> - There is a movie to play here + 沒有影片å¯ä»¥æ’放 </tooltip> <playtip name="movie_playtip"> - Play movie + æ’æ”¾å½±ç‰‡ </playtip> </widgetset> <widgetset name="image"> <label name="image_label"> - Image + åœ–åƒ </label> <tooltip name="image_tooltip"> There is an image at this location @@ -71,12 +71,12 @@ </mimetype> <mimetype name="image/*"> <label name="image2_label"> - Image + åœ–åƒ </label> </mimetype> <mimetype name="video/vnd.secondlife.qt.legacy"> <label name="vnd.secondlife.qt.legacy_label"> - Movie (QuickTime) + 影片(QuickTime) </label> </mimetype> <mimetype name="application/javascript"> @@ -91,12 +91,12 @@ </mimetype> <mimetype name="application/pdf"> <label name="application/pdf_label"> - PDF Document + PDF 文件 </label> </mimetype> <mimetype name="application/postscript"> <label name="application/postscript_label"> - Postscript Document + Postscript 文件 </label> </mimetype> <mimetype name="application/rtf"> @@ -111,7 +111,7 @@ </mimetype> <mimetype name="application/xhtml+xml"> <label name="application/xhtml+xml_label"> - Web Page (XHTML) + é¸é …(XHTML) </label> </mimetype> <mimetype name="application/x-director"> @@ -141,42 +141,42 @@ </mimetype> <mimetype name="image/bmp"> <label name="image/bmp_label"> - Image (BMP) + 圖åƒï¼ˆBMP) </label> </mimetype> <mimetype name="image/gif"> <label name="image/gif_label"> - Image (GIF) + 圖åƒï¼ˆGIF) </label> </mimetype> <mimetype name="image/jpeg"> <label name="image/jpeg_label"> - Image (JPEG) + 圖åƒï¼ˆJPEG) </label> </mimetype> <mimetype name="image/png"> <label name="image/png_label"> - Image (PNG) + 圖åƒï¼ˆPNG) </label> </mimetype> <mimetype name="image/svg+xml"> <label name="image/svg+xml_label"> - Image (SVG) + 圖åƒï¼ˆSVG) </label> </mimetype> <mimetype name="image/tiff"> <label name="image/tiff_label"> - Image (TIFF) + 圖åƒï¼ˆTIFF) </label> </mimetype> <mimetype name="text/html"> <label name="text/html_label"> - Web Page + é¸é … </label> </mimetype> <mimetype name="text/plain"> <label name="text/plain_label"> - Text + æ–‡å— </label> </mimetype> <mimetype name="text/xml"> @@ -186,32 +186,32 @@ </mimetype> <mimetype name="video/mpeg"> <label name="video/mpeg_label"> - Movie (MPEG) + 影片(MPEG) </label> </mimetype> <mimetype name="video/mp4"> <label name="video/mp4_label"> - Movie (MP4) + 影片(MP4) </label> </mimetype> <mimetype name="video/quicktime"> <label name="video/quicktime_label"> - Movie (QuickTime) + 影片(QuickTime) </label> </mimetype> <mimetype name="video/x-ms-asf"> <label name="video/x-ms-asf_label"> - Movie (Windows Media ASF) + 影片(Windows Media ASF) </label> </mimetype> <mimetype name="video/x-ms-wmv"> <label name="video/x-ms-wmv_label"> - Movie (Windows Media WMV) + 影片(Windows Media WMV) </label> </mimetype> <mimetype name="video/x-msvideo"> <label name="video/x-msvideo_label"> - Movie (AVI) + 影片(AVI) </label> </mimetype> </mimetypes> diff --git a/indra/newview/skins/default/xui/zh/mime_types_mac.xml b/indra/newview/skins/default/xui/zh/mime_types_mac.xml index b6c8784759569c1964bc5dde835ecc7dc64aa23f..3f38c528a6b9316e065a8cac2fe1b2f288187238 100644 --- a/indra/newview/skins/default/xui/zh/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/zh/mime_types_mac.xml @@ -5,7 +5,7 @@ ç¶²é 內容 </label> <tooltip name="web_tooltip"> - This location has Web content + 這個ä½ç½®æœ‰ç¶²é 內容 </tooltip> <playtip name="web_playtip"> 顯示網é 內容 @@ -13,18 +13,18 @@ </widgetset> <widgetset name="movie"> <label name="movie_label"> - Movie + 影片 </label> <tooltip name="movie_tooltip"> - There is a movie to play here + 沒有影片å¯ä»¥æ’放 </tooltip> <playtip name="movie_playtip"> - Play movie + æ’æ”¾å½±ç‰‡ </playtip> </widgetset> <widgetset name="image"> <label name="image_label"> - Image + åœ–åƒ </label> <tooltip name="image_tooltip"> There is an image at this location @@ -71,12 +71,12 @@ </mimetype> <mimetype name="image/*"> <label name="image2_label"> - Image + åœ–åƒ </label> </mimetype> <mimetype name="video/vnd.secondlife.qt.legacy"> <label name="vnd.secondlife.qt.legacy_label"> - Movie (QuickTime) + 影片 (QuickTime) </label> </mimetype> <mimetype name="application/javascript"> @@ -91,12 +91,12 @@ </mimetype> <mimetype name="application/pdf"> <label name="application/pdf_label"> - PDF Document + PDF 文件 </label> </mimetype> <mimetype name="application/postscript"> <label name="application/postscript_label"> - Postscript Document + Postscript 文件 </label> </mimetype> <mimetype name="application/rtf"> @@ -111,7 +111,7 @@ </mimetype> <mimetype name="application/xhtml+xml"> <label name="application/xhtml+xml_label"> - Web Page (XHTML) + ç¶²é (XHTML) </label> </mimetype> <mimetype name="application/x-director"> @@ -141,32 +141,32 @@ </mimetype> <mimetype name="image/bmp"> <label name="image/bmp_label"> - Image (BMP) + 圖åƒï¼ˆBMP) </label> </mimetype> <mimetype name="image/gif"> <label name="image/gif_label"> - Image (GIF) + 圖åƒï¼ˆGIF) </label> </mimetype> <mimetype name="image/jpeg"> <label name="image/jpeg_label"> - Image (JPEG) + 圖åƒï¼ˆJPEG) </label> </mimetype> <mimetype name="image/png"> <label name="image/png_label"> - Image (PNG) + 圖åƒï¼ˆPNG) </label> </mimetype> <mimetype name="image/svg+xml"> <label name="image/svg+xml_label"> - Image (SVG) + 圖åƒï¼ˆSVG) </label> </mimetype> <mimetype name="image/tiff"> <label name="image/tiff_label"> - Image (TIFF) + 圖åƒï¼ˆTIFF) </label> </mimetype> <mimetype name="text/html"> @@ -186,32 +186,32 @@ </mimetype> <mimetype name="video/mpeg"> <label name="video/mpeg_label"> - Movie (MPEG) + 影片(MPEG) </label> </mimetype> <mimetype name="video/mp4"> <label name="video/mp4_label"> - Movie (MP4) + 影片(MP4) </label> </mimetype> <mimetype name="video/quicktime"> <label name="video/quicktime_label"> - Movie (QuickTime) + 影片(QuickTime) </label> </mimetype> <mimetype name="video/x-ms-asf"> <label name="video/x-ms-asf_label"> - Movie (Windows Media ASF) + 影片(Windows Media ASF) </label> </mimetype> <mimetype name="video/x-ms-wmv"> <label name="video/x-ms-wmv_label"> - Movie (Windows Media WMV) + 影片(Windows Media WMV) </label> </mimetype> <mimetype name="video/x-msvideo"> <label name="video/x-msvideo_label"> - Movie (AVI) + 影片(AVI) </label> </mimetype> </mimetypes> diff --git a/indra/newview/skins/default/xui/zh/notifications.xml b/indra/newview/skins/default/xui/zh/notifications.xml index 8b26c704305d9c9f0ff49af74017ab99c81e71d2..65bb8ce517106882856d8f359e7fdd06ae97d5ef 100644 --- a/indra/newview/skins/default/xui/zh/notifications.xml +++ b/indra/newview/skins/default/xui/zh/notifications.xml @@ -65,7 +65,7 @@ Error details: The notification called '[_NAME]' was not found in noti </notification> <notification name="GenericAlertYesCancel"> [MESSAGE] - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="是"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="是"/> </notification> <notification name="BadInstallation"> An error occurred while updating [APP_NAME]. Please [http://get.secondlife.com download the latest version] of the Viewer. @@ -83,7 +83,7 @@ Make sure your Internet connection is working properly. </notification> <notification name="WearableSave"> Save changes to current clothing/body part? - <usetemplate canceltext="å–銷" name="yesnocancelbuttons" notext="ä¸è¦å„²å˜" yestext="儲å˜"/> + <usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="ä¸è¦å„²å˜" yestext="儲å˜"/> </notification> <notification name="CompileQueueSaveText"> There was a problem uploading the text for a script due to the following reason: [REASON]. Please try again later. @@ -102,8 +102,8 @@ Make sure your Internet connection is working properly. Please select only one object and try again. </notification> <notification name="SaveClothingBodyChanges"> - Save all changes to clothing/body parts? - <usetemplate canceltext="å–銷" name="yesnocancelbuttons" notext="ä¸è¦å„²å˜" yestext="全部儲å˜"/> + 儲å˜å…¨éƒ¨æœè£æˆ–身體部ä½çš„變更? + <usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="ä¸è¦å„²å˜" yestext="全部儲å˜"/> </notification> <notification name="FriendsAndGroupsOnly"> Non-friends won't know that you've choosen to ignore their calls and instant messages. @@ -139,7 +139,7 @@ Do you want to grant modify rights for the selected Residents? <notification name="PanelGroupApply"> [NEEDS_APPLY_MESSAGE] [WANT_APPLY_MESSAGE] - <usetemplate canceltext="å–銷" name="yesnocancelbuttons" notext="忽視變更" yestext="套用變更"/> + <usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="忽視變更" yestext="套用變更"/> </notification> <notification name="MustSpecifyGroupNoticeSubject"> You must specify a subject to send a group notice. @@ -178,12 +178,12 @@ Add this Ability to '[ROLE_NAME]'? <notification name="JoinGroupCanAfford"> Joining this group costs L$[COST]. Do you wish to proceed? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="Join"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="Join"/> </notification> <notification name="JoinGroupNoCost"> You are joining group [NAME]. Do you wish to proceed? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="Join"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="Join"/> </notification> <notification name="JoinGroupCannotAfford"> Joining this group costs L$[COST]. @@ -193,11 +193,11 @@ You do not have enough L$ to join this group. Creating this group will cost L$100. Groups need more than one member, or they are deleted forever. Please invite members within 48 hours. - <usetemplate canceltext="å–銷" name="okcancelbuttons" notext="å–銷" yestext="Create group for L$100"/> + <usetemplate canceltext="å–æ¶ˆ" name="okcancelbuttons" notext="å–æ¶ˆ" yestext="Create group for L$100"/> </notification> <notification name="LandBuyPass"> For L$[COST] you can enter this land ('[PARCEL_NAME]') for [TIME] hours. Buy a pass? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="SalePriceRestriction"> Sale price must be set to more than L$0 if selling to anyone. @@ -206,14 +206,14 @@ Please select an individual to sell to if selling for L$0. <notification name="ConfirmLandSaleChange"> The selected [LAND_SIZE] m² land is being set for sale. Your selling price will be L$[SALE_PRICE] and will be authorized for sale to [NAME]. - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmLandSaleToAnyoneChange"> ATTENTION: Clicking 'sell to anyone' makes your land available to the entire [SECOND_LIFE] community, even those not in this region. The selected [LAND_SIZE] m² land is being set for sale. Your selling price will be L$[SALE_PRICE] and will be authorized for sale to [NAME]. - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ReturnObjectsDeededToGroup"> Are you sure you want to return all objects shared with the group '[NAME]' on this parcel of land back to their previous owner's inventory? @@ -221,19 +221,19 @@ Your selling price will be L$[SALE_PRICE] and will be authorized for sale to [NA *WARNING* This will delete the non-transferable objects deeded to the group! Objects: [N] - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ReturnObjectsOwnedByUser"> Are you sure you want to return all objects owned by the Resident '[NAME]' on this parcel of land back to their inventory? Objects: [N] - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ReturnObjectsOwnedBySelf"> Are you sure you want to return all objects owned by you on this parcel of land back to your inventory? Objects: [N] - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ReturnObjectsNotOwnedBySelf"> Are you sure you want to return all objects NOT owned by you on this parcel of land back to their owner's inventory? @@ -242,7 +242,7 @@ Transferable objects deeded to a group will be returned to their previous owners *WARNING* This will delete the non-transferable objects deeded to the group! Objects: [N] - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ReturnObjectsNotOwnedByUser"> Are you sure you want to return all objects NOT owned by [NAME] on this parcel of land back to their owner's inventory? @@ -251,21 +251,21 @@ Transferable objects deeded to a group will be returned to their previous owners *WARNING* This will delete the non-transferable objects deeded to the group! Objects: [N] - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ReturnAllTopObjects"> Are you sure you want to return all listed objects back to their owner's inventory? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="DisableAllTopObjects"> Are you sure you want to disable all objects in this region? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ReturnObjectsNotOwnedByGroup"> Return the objects on this parcel of land that are NOT shared with the group [NAME] back to their owners? Objects: [N] - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="UnableToDisableOutsideScripts"> Can not disable scripts. @@ -276,7 +276,7 @@ Scripts must be allowed to run for weapons to work. Multiple faces are currently selected. If you continue this action, separate instances of media will be set on multiple faces of the object. To place the media on only one face, choose Select Face and click on the desired face of that object then click Add. - <usetemplate ignoretext="Media will be set on multiple selected faces" name="okcancelignore" notext="å–銷" yestext="確定"/> + <usetemplate ignoretext="Media will be set on multiple selected faces" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="MustBeInParcel"> You must be standing inside the land parcel to set its Landing Point. @@ -289,7 +289,7 @@ To place the media on only one face, choose Select Face and click on the desired </notification> <notification name="PromptMissingSubjMsg"> Email snapshot with the default subject or message? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ErrorProcessingSnapshot"> Error processing snapshot data @@ -328,7 +328,7 @@ You need an account to enter [SECOND_LIFE]. Would you like to create one now? <url name="url"> http://join.secondlife.com/ </url> - <usetemplate name="okcancelbuttons" notext="Try again" yestext="Create a new account"/> + <usetemplate name="okcancelbuttons" notext="å†è©¦ä¸€æ¬¡" yestext="å‰µé€ æ–°å¸³æˆ¶"/> </notification> <notification name="InvalidCredentialFormat"> You need to enter either the Username or both the First and Last name of your avatar into the Username field, then login again. @@ -336,7 +336,7 @@ You need an account to enter [SECOND_LIFE]. Would you like to create one now? <notification name="DeleteClassified"> Delete classified '[NAME]'? There is no reimbursement for fees paid. - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="DeleteMedia"> You have selected to delete the media associated with this face. @@ -345,7 +345,7 @@ Are you sure you want to continue? </notification> <notification name="ClassifiedSave"> Save changes to classified [NAME]? - <usetemplate canceltext="å–銷" name="yesnocancelbuttons" notext="ä¸è¦å„²å˜" yestext="儲å˜"/> + <usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="ä¸è¦å„²å˜" yestext="儲å˜"/> </notification> <notification name="ClassifiedInsufficientFunds"> Insufficient funds to create classified. @@ -353,18 +353,18 @@ Are you sure you want to continue? </notification> <notification name="DeleteAvatarPick"> Delete pick <nolink>[PICK]</nolink>? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="DeleteOutfits"> - Delete the selected outfit? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + åˆªé™¤æ‰€é¸æ“‡çš„è£æ‰®ï¼Ÿ + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="PromptGoToEventsPage"> - Go to the [SECOND_LIFE] events web page? + å‰å¾€ [SECOND_LIFE] 事件網é ? <url name="url"> http://secondlife.com/events/ </url> - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="SelectProposalToView"> Please select a proposal to view. @@ -389,15 +389,15 @@ Note: This will clear the cache. Changing language will take effect after you restart [APP_NAME]. </notification> <notification name="GoToAuctionPage"> - Go to the [SECOND_LIFE] web page to see auction details or make a bid? + å‰å¾€ [SECOND_LIFE] ç¶²é 去察看æ‹è³£ç´°ç¯€æˆ–下標? <url name="url"> http://secondlife.com/auctions/auction-detail.php?id=[AUCTION_ID] </url> - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="SaveChanges"> Save Changes? - <usetemplate canceltext="å–銷" name="yesnocancelbuttons" notext="ä¸è¦å„²å˜" yestext="儲å˜"/> + <usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="ä¸è¦å„²å˜" yestext="儲å˜"/> </notification> <notification name="GestureSaveFailedTooManySteps"> Gesture save failed. @@ -425,7 +425,7 @@ The object may be out of range or may have been deleted. Could not undo all changes in your version of the script. Would you like to load the server's last saved version? (**Warning** This operation cannot be undone.) - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="SaveScriptFailReason"> There was a problem saving a script due to the following reason: [REASON]. Please try re-saving the script later. @@ -459,14 +459,14 @@ Visit [_URL] for more information? <url name="url"> http://www.secondlife.com/corporate/sysreqs.php </url> - <usetemplate ignoretext="My computer hardware is not supported" name="okcancelignore" notext="å¦" yestext="是"/> + <usetemplate ignoretext="æˆ‘çš„é›»è…¦ç¡¬é«”ä¸¦ä¸æ”¯æ´" name="okcancelignore" notext="å¦" yestext="是"/> </notification> <notification name="UnknownGPU"> Your system contains a graphics card that [APP_NAME] doesn't recognize. This is often the case with new hardware that hasn't been tested yet with [APP_NAME]. It will probably be ok, but you may need to adjust your graphics settings. (Me > Preferences > Graphics). <form name="form"> - <ignore name="ignore" text="My graphics card could not be identified"/> + <ignore name="ignore" text="我的顯示å¡ç„¡æ³•辨è˜"/> </form> </notification> <notification name="DisplaySettingsNoShaders"> @@ -476,7 +476,7 @@ We recommend updating your graphics card drivers. Graphics Quality can be raised in Preferences > Graphics. </notification> <notification name="RegionNoTerraforming"> - The region [REGION] does not allow terraforming. + 這個 [REGION] 地å€ä¸¦ä¸å…許變更地形。 </notification> <notification name="CannotCopyWarning"> You do not have permission to copy the following items: @@ -485,10 +485,10 @@ and will lose it from your inventory if you give it away. Do you really want to <usetemplate name="okcancelbuttons" notext="å¦" yestext="是"/> </notification> <notification name="CannotGiveItem"> - Unable to give inventory item. + 無法給予收ç´å€ç‰©å“。 </notification> <notification name="TransactionCancelled"> - Transaction cancelled. + äº¤æ˜“å·²å–æ¶ˆã€‚ </notification> <notification name="TooManyItems"> Cannot give more than 42 items in a single inventory transfer. @@ -505,29 +505,29 @@ Do you really want to give these items? You do not have permission to transfer the selected folder. </notification> <notification name="FreezeAvatar"> - Freeze this avatar? -He or she will temporarily be unable to move, chat, or interact with the world. - <usetemplate canceltext="å–銷" name="yesnocancelbuttons" notext="Unfreeze" yestext="Freeze"/> + å‡çµé€™ä½åŒ–身? +他將暫時無法移動ã€èŠå¤©æˆ–這個世界互動。 + <usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="è§£å‡" yestext="å‡çµ"/> </notification> <notification name="FreezeAvatarFullname"> - Freeze [AVATAR_NAME]? -He or she will temporarily be unable to move, chat, or interact with the world. - <usetemplate canceltext="å–銷" name="yesnocancelbuttons" notext="Unfreeze" yestext="Freeze"/> + å‡çµ [AVATAR_NAME]? +他將暫時無法移動ã€èŠå¤©æˆ–這個世界互動。 + <usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="è§£å‡" yestext="å‡çµ"/> </notification> <notification name="EjectAvatarFullname"> - Eject [AVATAR_NAME] from your land? - <usetemplate canceltext="å–銷" name="yesnocancelbuttons" notext="Eject and Ban" yestext="Eject"/> + å°‡ [AVATAR_NAME] ç”±ä½ çš„åœŸåœ°è¸¢å‡ºï¼Ÿ + <usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="踢出並å°éŽ–" yestext="踢出"/> </notification> <notification name="EjectAvatarNoBan"> - Eject this avatar from your land? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="Eject"/> + 將這一ä½åŒ–èº«ç”±ä½ çš„åœŸåœ°è¸¢å‡ºï¼Ÿ + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="踢出"/> </notification> <notification name="EjectAvatarFullnameNoBan"> - Eject [AVATAR_NAME] from your land? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="Eject"/> + å°‡ [AVATAR_NAME] ç”±ä½ çš„åœŸåœ°è¸¢å‡ºï¼Ÿ + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="踢出"/> </notification> <notification name="EjectAvatarFromGroup"> - You ejected [AVATAR_NAME] from group [GROUP_NAME] + ä½ å·²å°‡ [AVATAR_NAME] 由社團 [GROUP_NAME] ä¸è¸¢å‡º </notification> <notification name="AcquireErrorTooManyObjects"> ACQUIRE ERROR: Too many objects selected. @@ -543,7 +543,7 @@ Go to [_URL] for information on purchasing L$? <url name="url"> http://secondlife.com/app/currency/ </url> - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="UnableToLinkObjects"> Unable to link these [COUNT] objects. @@ -643,14 +643,14 @@ Expected [VALIDS] Please try again later. </notification> <notification name="LandmarkCreated"> - You have added "[LANDMARK_NAME]" to your [FOLDER_NAME] folder. + ä½ å·²ç¶“æ·»åŠ "[LANDMARK_NAME]" åˆ°ä½ çš„ [FOLDER_NAME] 資料夾。 </notification> <notification name="LandmarkAlreadyExists"> - You already have a landmark for this location. + ä½ å·²ç¶“æœ‰é€™å€‹ä½ç½®çš„地標。 <usetemplate name="okbutton" yestext="確定"/> </notification> <notification name="CannotCreateLandmarkNotOwner"> - You cannot create a landmark here because the owner of the land doesn't allow it. + ä½ ä¸èƒ½å‰µé€ åœ°æ¨™ï¼Œå› ç‚ºåœ°ä¸»ä¸¦ä¸å…è¨±ä½ é€™æ¨£åšã€‚ </notification> <notification name="CannotRecompileSelectObjectsNoScripts"> Not able to perform 'recompilation'. @@ -696,7 +696,7 @@ Searched for: [FINALQUERY] Your search terms were too short so no search was performed. </notification> <notification name="CouldNotTeleportReason"> - Teleport failed. + 瞬間傳é€å¤±æ•—。 [REASON] </notification> <notification name="invalid_tport"> @@ -735,7 +735,7 @@ If you continue to get this message, please check the [SUPPORT_SITE]. Unable to find teleport destination. The destination may be temporarily unavailable or no longer exists. Please try again in a few minutes. </notification> <notification name="no_inventory_host"> - The inventory system is currently unavailable. + æ”¶ç´å€åŠŸèƒ½ç›®å‰ç„¡æ³•使用。 </notification> <notification name="CannotSetLandOwnerNothingSelected"> Unable to set land owner: @@ -747,7 +747,7 @@ No parcel selected. <notification name="ForceOwnerAuctionWarning"> This parcel is up for auction. Forcing ownership will cancel the auction and potentially make some Residents unhappy if bidding has begun. Force ownership? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="CannotContentifyNothingSelected"> Unable to contentify: @@ -840,7 +840,7 @@ Select an entire parcel, or divide your parcel first. Releasing this parcel will remove it from your land holdings, but will not grant any L$. Release this land? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="CannotDivideLandNothingSelected"> Unable to divide land: @@ -857,7 +857,7 @@ Try selecting a part of the parcel. Dividing this land will split this parcel into two and each parcel can have its own settings. Some settings will be reset to defaults after the operation. Divide land? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="CannotDivideLandNoRegion"> Unable to divide land: @@ -888,15 +888,15 @@ Select land across both parcels. You will need to reset the name and options of the new parcel. Join land? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmNotecardSave"> This notecard needs to be saved before the item can be copied or viewed. Save notecard? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmItemCopy"> - Copy this item to your inventory? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="Copy"/> + 覆製這個物å“åˆ°ä½ çš„æ”¶ç´å€ï¼Ÿ + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="覆製"/> </notification> <notification name="ResolutionSwitchFail"> Failed to switch resolution to [RESX] by [RESY] @@ -917,7 +917,7 @@ This is usually a temporary failure. Please customize and save the wearable agai <notification name="YouHaveBeenLoggedOut"> Darn. You have been logged out of [SECOND_LIFE] [MESSAGE] - <usetemplate name="okcancelbuttons" notext="Quit" yestext="View IM & Chat"/> + <usetemplate name="okcancelbuttons" notext="çµæŸé€€å‡º" yestext="View IM & Chat"/> </notification> <notification name="OnlyOfficerCanBuyLand"> Unable to buy land for the group: @@ -929,67 +929,67 @@ You do not have permission to buy land for your active group. Offer friendship to [NAME]? <form name="form"> <input name="message"> - Would you be my friend? + ä½ é¡˜æ„æˆç‚ºæˆ‘的朋å‹å—Žï¼Ÿ </input> <button name="Offer" text="確定"/> - <button name="Cancel" text="å–銷"/> + <button name="Cancel" text="å–æ¶ˆ"/> </form> </notification> - <notification label="Save Outfit" name="SaveOutfitAs"> - Save what I'm wearing as a new Outfit: + <notification label="儲å˜è£æ‰®" name="SaveOutfitAs"> + å„²å˜æˆ‘æ£åœ¨ç©¿çš„ç‚ºæ–°è£æ‰®ï¼š <form name="form"> <input name="message"> - [DESC] (new) + [DESC] (新) </input> <button name="OK" text="確定"/> - <button name="Cancel" text="å–銷"/> + <button name="Cancel" text="å–æ¶ˆ"/> </form> </notification> <notification label="Save Wearable" name="SaveWearableAs"> - Save item to my inventory as: + 儲å˜ç‰©å“到我的收ç´å€ç‚ºï¼š <form name="form"> <input name="message"> [DESC] (新) </input> <button name="OK" text="確定"/> - <button name="Cancel" text="å–銷"/> + <button name="Cancel" text="å–æ¶ˆ"/> </form> </notification> - <notification label="Rename Outfit" name="RenameOutfit"> - New outfit name: + <notification label="è£æ‰®æ›´å" name="RenameOutfit"> + æ–°è£æ‰®å稱: <form name="form"> <input name="new_name"> [NAME] </input> <button name="OK" text="確定"/> - <button name="Cancel" text="å–銷"/> + <button name="Cancel" text="å–æ¶ˆ"/> </form> </notification> <notification name="RemoveFromFriends"> Do you want to remove [NAME] from your Friends List? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="RemoveMultipleFromFriends"> - Do you want to remove multiple friends from your Friends list? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + ä½ ç¢ºå®šè¦ç”±æœ‹å‹æ¸…å–®ä¸ç§»é™¤å¤šå€‹æœ‹å‹å—Žï¼Ÿ + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="GodDeleteAllScriptedPublicObjectsByUser"> Are you sure you want to delete all scripted objects owned by ** [AVATAR_NAME] ** on all others land in this sim? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="GodDeleteAllScriptedObjectsByUser"> Are you sure you want to DELETE ALL scripted objects owned by ** [AVATAR_NAME] ** on ALL LAND in this sim? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="GodDeleteAllObjectsByUser"> Are you sure you want to DELETE ALL objects (scripted or not) owned by ** [AVATAR_NAME] ** on ALL LAND in this sim? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="BlankClassifiedName"> You must specify a name for your classified. @@ -1003,46 +1003,46 @@ Please enter a higher price. At least one of the items you has link items that point to it. If you delete this item, its links will permanently stop working. It is strongly advised to delete the links first. Are you sure you want to delete these items? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmObjectDeleteLock"> At least one of the items you have selected is locked. Are you sure you want to delete these items? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmObjectDeleteNoCopy"> At least one of the items you have selected is not copyable. Are you sure you want to delete these items? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmObjectDeleteNoOwn"> You do not own least one of the items you have selected. Are you sure you want to delete these items? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmObjectDeleteLockNoCopy"> At least one object is locked. At least one object is not copyable. Are you sure you want to delete these items? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmObjectDeleteLockNoOwn"> At least one object is locked. You do not own least one object. Are you sure you want to delete these items? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmObjectDeleteNoCopyNoOwn"> At least one object is not copyable. You do not own least one object. Are you sure you want to delete these items? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmObjectDeleteLockNoCopyNoOwn"> At least one object is locked. @@ -1050,20 +1050,20 @@ At least one object is not copyable. You do not own least one object. Are you sure you want to delete these items? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmObjectTakeLock"> At least one object is locked. Are you sure you want to take these items? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmObjectTakeNoOwn"> You do not own all of the objects you are taking. If you continue, next owner permissions will be applied and possibly restrict your ability to modify or copy them. Are you sure you want to take these items? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmObjectTakeLockNoOwn"> At least one object is locked. @@ -1072,7 +1072,7 @@ If you continue, next owner permissions will be applied and possibly restrict yo However, you can take the current selection. Are you sure you want to take these items? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="CantBuyLandAcrossMultipleRegions"> Unable to buy land because selection spans multiple regions. @@ -1084,7 +1084,7 @@ Please select a smaller area and try again. The purchase price of the land is not refunded to the owner. If a deeded parcel is sold, the sale price will be divided evenly among group members. Deed this [AREA] m² of land to the group '[GROUP_NAME]'? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="DeedLandToGroupWithContribution"> By deeding this parcel, the group will be required to have and maintain sufficient land use credits. @@ -1092,7 +1092,7 @@ The deed will include a simultaneous land contribution to the group from '[ The purchase price of the land is not refunded to the owner. If a deeded parcel is sold, the sale price will be divided evenly among group members. Deed this [AREA] m² of land to the group '[GROUP_NAME]'? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="DisplaySetToSafe"> Display settings have been set to safe levels because you have specified the -safe option. @@ -1118,18 +1118,18 @@ You have been moved into a nearby region. You may want to set a new home location. </notification> <notification name="ClothingLoading"> - Your clothing is still downloading. -You can use [SECOND_LIFE] normally and other people will see you correctly. + ä½ çš„æœè£ä»åœ¨ä¸‹è¼‰ä¸ã€‚ +ä½ å¯ä»¥æ£å¸¸ä½¿ç”¨ [SECOND_LIFE]ï¼Œè€Œä¸”å…¶ä»–äººçœ‹åˆ°ä½ ä¹Ÿæ˜¯æ£å¸¸çš„。 <form name="form"> - <ignore name="ignore" text="Clothing is taking a long time to download"/> + <ignore name="ignore" text="æœè£èŠ±å¤ªå¤šæ™‚é–“ä¸‹è¼‰"/> </form> </notification> <notification name="FirstRun"> - [APP_NAME] installation is complete. + [APP_NAME] 安è£å®Œæˆã€‚ If this is your first time using [SECOND_LIFE], you will need to create an account before you can log in. Return to [http://join.secondlife.com secondlife.com] to create a new account? - <usetemplate name="okcancelbuttons" notext="繼續" yestext="New Account..."/> + <usetemplate name="okcancelbuttons" notext="繼續" yestext="新帳戶..."/> </notification> <notification name="LoginPacketNeverReceived"> We're having trouble connecting. There may be a problem with your Internet connection or the [SECOND_LIFE_GRID]. @@ -1140,8 +1140,8 @@ You can either check your Internet connection and try again in a few minutes, cl </url> <form name="form"> <button name="OK" text="確定"/> - <button name="Help" text="Help"/> - <button name="Teleport" text="Teleport"/> + <button name="Help" text="幫助"/> + <button name="Teleport" text="瞬間傳é€"/> </form> </notification> <notification name="WelcomeChooseSex"> @@ -1186,7 +1186,7 @@ Extended Key Usage: [EXTENDEDKEYUSAGE] Subject Key Identifier: [SUBJECTKEYIDENTIFIER] Would you like to trust this authority? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="Trust"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="Trust"/> </notification> <notification name="NotEnoughCurrency"> [NAME] L$ [PRICE] You don't have enough L$ to do that. @@ -1201,7 +1201,7 @@ Would you like to trust this authority? This will flush the map caches on this region. This is really only useful for debugging. (In production, wait 5 minutes, then everyone's map will update after they relog.) - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="BuyOneObjectOnly"> Unable to buy more than one object at a time. Please select only one object and try again. @@ -1209,15 +1209,15 @@ This is really only useful for debugging. <notification name="OnlyCopyContentsOfSingleItem"> Unable to copy the contents of more than one item at a time. Please select only one object and try again. - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="KickUsersFromRegion"> - Teleport all Residents in this region home? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + 確定è¦å¼·åˆ¶çž¬é–“傳é€é€™åœ°å€æ‰€æœ‰å±…民回家? + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="EstateObjectReturn"> Are you sure you want to return objects owned by [USER_NAME]? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="InvalidTerrainBitDepth"> Couldn't set region textures: @@ -1232,17 +1232,17 @@ Terrain texture [TEXTURE_NUM] is too large at [TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y]. Replace texture [TEXTURE_NUM] with a 24-bit 512x512 or smaller image then click "Apply" again. </notification> <notification name="RawUploadStarted"> - Upload started. It may take up to two minutes, depending on your connection speed. + 上傳開始。將會花費約兩分é˜ï¼Œé€™å–æ±ºæ–¼ä½ çš„é€£ç·šé€Ÿåº¦ã€‚ </notification> <notification name="ConfirmBakeTerrain"> Do you really want to bake the current terrain, make it the center for terrain raise/lower limits and the default for the 'Revert' tool? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="MaxAllowedAgentOnRegion"> You can only have [MAX_AGENTS] Allowed Residents. </notification> <notification name="MaxBannedAgentsOnRegion"> - You can only have [MAX_BANNED] Banned Residents. + ä½ åªå¯ä»¥æœ‰æœ€å¤š [MAX_BANNED] ä½è¢«å°éŽ–çš„å±…æ°‘ã€‚ </notification> <notification name="MaxAgentOnRegionBatch"> Failure while attempting to add [NUM_ADDED] agents: @@ -1250,16 +1250,16 @@ Exceeds the [MAX_AGENTS] [LIST_TYPE] limit by [NUM_EXCESS]. </notification> <notification name="MaxAllowedGroupsOnRegion"> You can only have [MAX_GROUPS] Allowed Groups. - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="Bake"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="Bake"/> </notification> <notification name="MaxManagersOnRegion"> - You can only have [MAX_MANAGER] Estate Managers. + ä½ åªå¯ä»¥æœ‰æœ€å¤š [MAX_MANAGER] ä½é ˜åœ°ç¶“ç†ã€‚ </notification> <notification name="OwnerCanNotBeDenied"> - Can't add estate owner to estate 'Banned Resident' list. + ç„¡æ³•æ·»åŠ é ˜åœ°æ“æœ‰è€…åˆ°é ˜åœ°çš„ '被å°éŽ–çš„å±…æ°‘' åå–®ä¸ã€‚ </notification> <notification name="CanNotChangeAppearanceUntilLoaded"> - Can't change appearance until clothing and shape are loaded. + 無法變更外觀,直到æœè£èˆ‡é«”形下載完畢。 </notification> <notification name="ClassifiedMustBeAlphanumeric"> The name of your classified must start with a letter from A to Z or a number. No punctuation is allowed. @@ -1273,15 +1273,15 @@ Please set the object for sale and try again. [DOWNLOAD_PATH]. </notification> <notification name="DownloadWindowsMandatory"> - A new version of [APP_NAME] is available. + 一個新版本的 [APP_NAME] 已經å¯ç”¨ã€‚ [MESSAGE] -You must download this update to use [APP_NAME]. - <usetemplate name="okcancelbuttons" notext="Quit" yestext="下載"/> +ä½ å¿…é ˆä¸‹è¼‰é€™å€‹æ›´æ–°ä»¥ä½¿ç”¨ [APP_NAME]。 + <usetemplate name="okcancelbuttons" notext="çµæŸé€€å‡º" yestext="下載"/> </notification> <notification name="DownloadWindows"> - An updated version of [APP_NAME] is available. + 一個 [APP_NAME] æ›´æ–°éŽçš„版本已經å¯ç”¨ã€‚ [MESSAGE] -This update is not required, but we suggest you install it to improve performance and stability. +這個更新並éžå¼·åˆ¶æ›´æ–°ï¼Œä½†æˆ‘們建è°ä½ 安è£ä»¥å¢žå¼·æ•ˆèƒ½åŠç©©å®šæ€§ã€‚ <usetemplate name="okcancelbuttons" notext="繼續" yestext="下載"/> </notification> <notification name="DownloadWindowsReleaseForDownload"> @@ -1294,7 +1294,7 @@ This update is not required, but we suggest you install it to improve performanc A new version of [APP_NAME] is available. [MESSAGE] You must download this update to use [APP_NAME]. - <usetemplate name="okcancelbuttons" notext="Quit" yestext="下載"/> + <usetemplate name="okcancelbuttons" notext="çµæŸé€€å‡º" yestext="下載"/> </notification> <notification name="DownloadLinux"> An updated version of [APP_NAME] is available. @@ -1314,7 +1314,7 @@ This update is not required, but we suggest you install it to improve performanc You must download this update to use [APP_NAME]. Download to your Applications folder? - <usetemplate name="okcancelbuttons" notext="Quit" yestext="下載"/> + <usetemplate name="okcancelbuttons" notext="çµæŸé€€å‡º" yestext="下載"/> </notification> <notification name="DownloadMac"> An updated version of [APP_NAME] is available. @@ -1344,24 +1344,24 @@ You will be unable to log in until [APP_NAME] has been updated. Please download and install the latest viewer from http://secondlife.com/download. - <usetemplate name="okbutton" yestext="Quit"/> + <usetemplate name="okbutton" yestext="çµæŸé€€å‡º"/> </notification> <notification name="UpdaterServiceNotRunning"> There is a required update for your Second Life Installation. You may download this update from http://www.secondlife.com/downloads or you can install it now. - <usetemplate name="okcancelbuttons" notext="Quit Second Life" yestext="Download and install now"/> + <usetemplate name="okcancelbuttons" notext="çµæŸé€€å‡ºç¬¬äºŒäººç”Ÿ" yestext="ç«‹å³ä¸‹è¼‰åŠå®‰è£"/> </notification> <notification name="DownloadBackgroundTip"> We have downloaded an update to your [APP_NAME] installation. Version [VERSION] [[RELEASE_NOTES_FULL_URL] Information about this update] - <usetemplate name="okcancelbuttons" notext="Later..." yestext="Install now and restart [APP_NAME]"/> + <usetemplate name="okcancelbuttons" notext="ç¨å€™..." yestext="ç«‹å³å®‰è£åŠé‡æ–°å•Ÿå‹• [APP_NAME]"/> </notification> <notification name="DownloadBackgroundDialog"> We have downloaded an update to your [APP_NAME] installation. Version [VERSION] [[RELEASE_NOTES_FULL_URL] Information about this update] - <usetemplate name="okcancelbuttons" notext="Later..." yestext="Install now and restart [APP_NAME]"/> + <usetemplate name="okcancelbuttons" notext="梢候..." yestext="ç«‹å³å®‰è£åŠé‡æ–°å•Ÿå‹• [APP_NAME]"/> </notification> <notification name="RequiredUpdateDownloadedVerboseDialog"> We have downloaded a required software update. @@ -1371,60 +1371,60 @@ We must restart [APP_NAME] to install the update. <usetemplate name="okbutton" yestext="確定"/> </notification> <notification name="RequiredUpdateDownloadedDialog"> - We must restart [APP_NAME] to install the update. + æˆ‘é–€å¿…é ˆé‡æ–°å•Ÿå‹• [APP_NAME] ä»¥å®‰è£æ›´æ–°ã€‚ <usetemplate name="okbutton" yestext="確定"/> </notification> <notification name="DeedObjectToGroup"> Deeding this object will cause the group to: * Receive L$ paid into the object - <usetemplate ignoretext="Confirm before I deed an object to a group" name="okcancelignore" notext="å–銷" yestext="Deed"/> + <usetemplate ignoretext="Confirm before I deed an object to a group" name="okcancelignore" notext="å–æ¶ˆ" yestext="Deed"/> </notification> <notification name="WebLaunchExternalTarget"> Do you want to open your Web browser to view this content? - <usetemplate ignoretext="Launch my browser to view a web page" name="okcancelignore" notext="å–銷" yestext="確定"/> + <usetemplate ignoretext="Launch my browser to view a web page" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="WebLaunchJoinNow"> - Go to your [http://secondlife.com/account/ Dashboard] to manage your account? - <usetemplate ignoretext="Launch my browser to manage my account" name="okcancelignore" notext="å–銷" yestext="確定"/> + å‰å¾€ä½ çš„[http://secondlife.com/account/ 塗鴉牆]以進行管ç†ä½ 的帳戶? + <usetemplate ignoretext="啟動我的ç€è¦½å™¨ä»¥ç®¡ç†æˆ‘的帳戶" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="WebLaunchSecurityIssues"> Visit the [SECOND_LIFE] Wiki for details of how to report a security issue. - <usetemplate ignoretext="Launch my browser to learn how to report a Security Issue" name="okcancelignore" notext="å–銷" yestext="確定"/> + <usetemplate ignoretext="Launch my browser to learn how to report a Security Issue" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="WebLaunchQAWiki"> Visit the [SECOND_LIFE] QA Wiki. - <usetemplate ignoretext="Launch my browser to view the QA Wiki" name="okcancelignore" notext="å–銷" yestext="確定"/> + <usetemplate ignoretext="Launch my browser to view the QA Wiki" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="WebLaunchPublicIssue"> Visit the [SECOND_LIFE] Public Issue Tracker, where you can report bugs and other issues. - <usetemplate ignoretext="Launch my browser to use the Public Issue Tracker" name="okcancelignore" notext="å–銷" yestext="Go to page"/> + <usetemplate ignoretext="Launch my browser to use the Public Issue Tracker" name="okcancelignore" notext="å–æ¶ˆ" yestext="å‰å¾€é é¢"/> </notification> <notification name="WebLaunchSupportWiki"> - Go to the Official Linden Blog, for the latest news and information. - <usetemplate ignoretext="Launch my browser to view the blog" name="okcancelignore" notext="å–銷" yestext="確定"/> + å‰å¾€æž—ç™»å®˜æ–¹éƒ¨è½æ ¼ï¼Œä»¥å–得最新的新èžèˆ‡è³‡è¨Šã€‚ + <usetemplate ignoretext="Launch my browser to view the blog" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="WebLaunchLSLGuide"> Do you want to open the Scripting Guide for help with scripting? - <usetemplate ignoretext="Launch my browser to view the Scripting Guide" name="okcancelignore" notext="å–銷" yestext="確定"/> + <usetemplate ignoretext="Launch my browser to view the Scripting Guide" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="WebLaunchLSLWiki"> Do you want to visit the LSL Portal for help with scripting? - <usetemplate ignoretext="Launch my browser to view the LSL Portal" name="okcancelignore" notext="å–銷" yestext="Go to page"/> + <usetemplate ignoretext="Launch my browser to view the LSL Portal" name="okcancelignore" notext="å–æ¶ˆ" yestext="å‰å¾€é é¢"/> </notification> <notification name="ReturnToOwner"> Are you sure you want to return the selected objects to their owners? Transferable deeded objects will be returned to their previous owners. *WARNING* No-transfer deeded objects will be deleted! - <usetemplate ignoretext="Confirm before I return objects to their owners" name="okcancelignore" notext="å–銷" yestext="確定"/> + <usetemplate ignoretext="Confirm before I return objects to their owners" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="GroupLeaveConfirmMember"> You are currently a member of the group [GROUP]. Leave Group? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmKick"> - Do you REALLY want to kick all Residents off the grid? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="Kick All Residents"/> + ä½ ç¢ºå®šè¦è¸¢å‡ºé€™ç¶²æ ¼å…§çš„全部居民? + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="踢出全部居民"/> </notification> <notification name="MuteLinden"> Sorry, you cannot block a Linden. @@ -1439,7 +1439,7 @@ Leave Group? </notification> <notification name="RemoveItemWarn"> Though permitted, deleting contents may damage the object. Do you want to delete that item? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="CantOfferCallingCard"> Cannot offer a calling card at this time. Please try again in a moment. @@ -1464,13 +1464,13 @@ Chat and instant messages will be hidden. Instant messages will get your Busy mo <usetemplate name="okbutton" yestext="確定"/> </notification> <notification name="KickUser"> - Kick this Resident with what message? + 踢出這個居民並留給他什麼訊æ¯ï¼Ÿ <form name="form"> <input name="message"> An administrator has logged you off. </input> <button name="OK" text="確定"/> - <button name="Cancel" text="å–銷"/> + <button name="Cancel" text="å–æ¶ˆ"/> </form> </notification> <notification name="KickAllUsers"> @@ -1480,27 +1480,27 @@ Chat and instant messages will be hidden. Instant messages will get your Busy mo An administrator has logged you off. </input> <button name="OK" text="確定"/> - <button name="Cancel" text="å–銷"/> + <button name="Cancel" text="å–æ¶ˆ"/> </form> </notification> <notification name="FreezeUser"> - Freeze this Resident with what message? + å‡çµé€™ä½å±…æ°‘æ™‚åŒæ™‚留下什麼訊æ¯ï¼Ÿ <form name="form"> <input name="message"> - You have been frozen. You cannot move or chat. An administrator will contact you via instant message (IM). + ä½ å·²ç¶“è¢«å‡çµäº†ã€‚ä½ å°‡ä¸èƒ½ç§»å‹•或èŠå¤©ã€‚管ç†å“¡å°‡æœƒä»¥å³æ™‚訊æ¯è¯ç¹«ä½ (IM)。 </input> <button name="OK" text="確定"/> - <button name="Cancel" text="å–銷"/> + <button name="Cancel" text="å–æ¶ˆ"/> </form> </notification> <notification name="UnFreezeUser"> - Unfreeze this Resident with what message? + 將這ä½å±…æ°‘è§£å‡ä¸¦åŒæ™‚留下什麼訊æ¯ï¼Ÿ <form name="form"> <input name="message"> You are no longer frozen. </input> <button name="OK" text="確定"/> - <button name="Cancel" text="å–銷"/> + <button name="Cancel" text="å–æ¶ˆ"/> </form> </notification> <notification name="SetDisplayNameSuccess"> @@ -1547,10 +1547,10 @@ Please try again later. Offer a teleport to your location with the following message? <form name="form"> <input name="message"> - Join me in [REGION] + åŠ å…¥æˆ‘åˆ° [REGION] </input> <button name="OK" text="確定"/> - <button name="Cancel" text="å–銷"/> + <button name="Cancel" text="å–æ¶ˆ"/> </form> </notification> <notification name="OfferTeleportFromGod"> @@ -1560,30 +1560,30 @@ Please try again later. Join me in [REGION] </input> <button name="OK" text="確定"/> - <button name="Cancel" text="å–銷"/> + <button name="Cancel" text="å–æ¶ˆ"/> </form> </notification> <notification name="TeleportFromLandmark"> Are you sure you want to teleport to <nolink>[LOCATION]</nolink>? - <usetemplate ignoretext="Confirm that I want to teleport to a landmark" name="okcancelignore" notext="å–銷" yestext="Teleport"/> + <usetemplate ignoretext="Confirm that I want to teleport to a landmark" name="okcancelignore" notext="å–æ¶ˆ" yestext="瞬間傳é€"/> </notification> <notification name="TeleportToPick"> - Teleport to [PICK]? - <usetemplate ignoretext="Confirm that I want to teleport to a location in Picks" name="okcancelignore" notext="å–銷" yestext="Teleport"/> + 瞬間傳é€åˆ° [PICK]? + <usetemplate ignoretext="ç¢ºèªæˆ‘è¦çž¬é–“傳é€åˆ°ç²¾é¸åœ°é»žçš„æ‰€åœ¨ä½ç½®" name="okcancelignore" notext="å–æ¶ˆ" yestext="瞬間傳é€"/> </notification> <notification name="TeleportToClassified"> - Teleport to [CLASSIFIED]? - <usetemplate ignoretext="Confirm that I want to teleport to a location in Classifieds" name="okcancelignore" notext="å–銷" yestext="Teleport"/> + 瞬間傳é€åˆ° [CLASSIFIED]? + <usetemplate ignoretext="ç¢ºèªæˆ‘è¦çž¬é–“傳é€åˆ°å€‹äººå»£å‘Šçš„æ‰€åœ¨ä½ç½®" name="okcancelignore" notext="å–æ¶ˆ" yestext="瞬間傳é€"/> </notification> <notification name="TeleportToHistoryEntry"> - Teleport to [HISTORY_ENTRY]? - <usetemplate ignoretext="Confirm that I want to teleport to a history location" name="okcancelignore" notext="å–銷" yestext="Teleport"/> + 瞬間傳é€åˆ° [HISTORY_ENTRY]? + <usetemplate ignoretext="ç¢ºèªæˆ‘è¦çž¬é–“傳é€åˆ°æ·å²ç´€éŒ„ä¸çš„ä½ç½®" name="okcancelignore" notext="å–æ¶ˆ" yestext="瞬間傳é€"/> </notification> - <notification label="Message everyone in your Estate" name="MessageEstate"> + <notification label="é€å‡ºè¨Šæ¯çµ¦ä½ é ˜åœ°å…§çš„æ¯ä¸€å€‹äºº" name="MessageEstate"> Type a short announcement which will be sent to everyone currently in your estate. <form name="form"> <button name="OK" text="確定"/> - <button name="Cancel" text="å–銷"/> + <button name="Cancel" text="å–æ¶ˆ"/> </form> </notification> <notification label="Change Linden Estate" name="ChangeLindenEstate"> @@ -1592,54 +1592,54 @@ Please try again later. This is EXTREMELY DANGEROUS because it can fundamentally affect the Resident experience. On the mainland, it will change thousands of regions and make the spaceserver hiccup. Proceed? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification label="Change Linden Estate Access" name="ChangeLindenAccess"> You are about to change the access list for a Linden owned estate (mainland, teen grid, orientation, etc.). This is DANGEROUS and should only be done to invoke the hack allowing objects/L$ to be transfered in/out of a grid. It will change thousands of regions and make the spaceserver hiccup. - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification label="鏿“‡é ˜åœ°" name="EstateAllowedAgentAdd"> Add to allowed list for this estate only or for [ALL_ESTATES]? - <usetemplate canceltext="å–銷" name="yesnocancelbuttons" notext="å…¨éƒ¨é ˜åœ°" yestext="é€™å€‹é ˜åœ°"/> + <usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="å…¨éƒ¨é ˜åœ°" yestext="é€™å€‹é ˜åœ°"/> </notification> <notification label="鏿“‡é ˜åœ°" name="EstateAllowedAgentRemove"> Remove from allowed list for this estate only or for [ALL_ESTATES]? - <usetemplate canceltext="å–銷" name="yesnocancelbuttons" notext="å…¨éƒ¨é ˜åœ°" yestext="é€™å€‹é ˜åœ°"/> + <usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="å…¨éƒ¨é ˜åœ°" yestext="é€™å€‹é ˜åœ°"/> </notification> <notification label="鏿“‡é ˜åœ°" name="EstateAllowedGroupAdd"> Add to group allowed list for this estate only or for [ALL_ESTATES]? - <usetemplate canceltext="å–銷" name="yesnocancelbuttons" notext="å…¨éƒ¨é ˜åœ°" yestext="é€™å€‹é ˜åœ°"/> + <usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="å…¨éƒ¨é ˜åœ°" yestext="é€™å€‹é ˜åœ°"/> </notification> <notification label="鏿“‡é ˜åœ°" name="EstateAllowedGroupRemove"> Remove from group allowed list for this estate only or [ALL_ESTATES]? - <usetemplate canceltext="å–銷" name="yesnocancelbuttons" notext="å…¨éƒ¨é ˜åœ°" yestext="é€™å€‹é ˜åœ°"/> + <usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="å…¨éƒ¨é ˜åœ°" yestext="é€™å€‹é ˜åœ°"/> </notification> <notification label="鏿“‡é ˜åœ°" name="EstateBannedAgentAdd"> Deny access for this estate only or for [ALL_ESTATES]? - <usetemplate canceltext="å–銷" name="yesnocancelbuttons" notext="å…¨éƒ¨é ˜åœ°" yestext="é€™å€‹é ˜åœ°"/> + <usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="å…¨éƒ¨é ˜åœ°" yestext="é€™å€‹é ˜åœ°"/> </notification> <notification label="鏿“‡é ˜åœ°" name="EstateBannedAgentRemove"> Remove this Resident from the ban list for access for this estate only or for [ALL_ESTATES]? - <usetemplate canceltext="å–銷" name="yesnocancelbuttons" notext="å…¨éƒ¨é ˜åœ°" yestext="é€™å€‹é ˜åœ°"/> + <usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="å…¨éƒ¨é ˜åœ°" yestext="é€™å€‹é ˜åœ°"/> </notification> <notification label="鏿“‡é ˜åœ°" name="EstateManagerAdd"> Add estate manager for this estate only or for [ALL_ESTATES]? - <usetemplate canceltext="å–銷" name="yesnocancelbuttons" notext="å…¨éƒ¨é ˜åœ°" yestext="é€™å€‹é ˜åœ°"/> + <usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="å…¨éƒ¨é ˜åœ°" yestext="é€™å€‹é ˜åœ°"/> </notification> <notification label="鏿“‡é ˜åœ°" name="EstateManagerRemove"> Remove estate manager for this estate only or for [ALL_ESTATES]? - <usetemplate canceltext="å–銷" name="yesnocancelbuttons" notext="å…¨éƒ¨é ˜åœ°" yestext="é€™å€‹é ˜åœ°"/> + <usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="å…¨éƒ¨é ˜åœ°" yestext="é€™å€‹é ˜åœ°"/> </notification> - <notification label="Confirm Kick" name="EstateKickUser"> - Kick [EVIL_USER] from this estate? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <notification label="確èªè¸¢å‡º" name="EstateKickUser"> + å°‡ [EVIL_USER] ç”±é€™é ˜åœ°è¸¢å‡ºï¼Ÿ + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="EstateChangeCovenant"> Are you sure you want to change the Estate Covenant? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="RegionEntryAccessBlocked"> You are not allowed in that Region due to your maturity Rating. This may be a result of a lack of information validating your age. @@ -1750,25 +1750,25 @@ You can click 'Change Preference' to raise your maturity Rating prefer Remember: Classified ad fees are non-refundable. Publish this classified now for L$[AMOUNT]? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="SetClassifiedMature"> Does this classified contain Moderate content? - <usetemplate canceltext="å–銷" name="yesnocancelbuttons" notext="å¦" yestext="是"/> + <usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="å¦" yestext="是"/> </notification> <notification name="SetGroupMature"> Does this group contain Moderate content? - <usetemplate canceltext="å–銷" name="yesnocancelbuttons" notext="å¦" yestext="是"/> + <usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="å¦" yestext="是"/> </notification> <notification label="Confirm restart" name="ConfirmRestart"> Do you really want to restart this region in 2 minutes? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification label="Message everyone in this region" name="MessageRegion"> Type a short announcement which will be sent to everyone in this region. <form name="form"> <button name="OK" text="確定"/> - <button name="Cancel" text="å–銷"/> + <button name="Cancel" text="å–æ¶ˆ"/> </form> </notification> <notification label="Changed Region Maturity" name="RegionMaturityChange"> @@ -1780,15 +1780,15 @@ To enter Adult regions, Residents must be Account Verified, either by age-verifi <notification label="Voice Version Mismatch" name="VoiceVersionMismatch"> This version of [APP_NAME] is not compatible with the Voice Chat feature in this region. In order for Voice Chat to function correctly you will need to update [APP_NAME]. </notification> - <notification label="Can't Buy Objects" name="BuyObjectOneOwner"> + <notification label="無法購買物件" name="BuyObjectOneOwner"> Cannot buy objects from different owners at the same time. Please select only one object and try again. </notification> - <notification label="Can't Buy Contents" name="BuyContentsOneOnly"> + <notification label="無法購買內容物" name="BuyContentsOneOnly"> Unable to buy the contents of more than one object at a time. Please select only one object and try again. </notification> - <notification label="Can't Buy Contents" name="BuyContentsOneOwner"> + <notification label="無法購買內容物" name="BuyContentsOneOwner"> Cannot buy objects from different owners at the same time. Please select only one object and try again. </notification> @@ -1799,7 +1799,7 @@ You will be able to: Modify: [MODIFYPERM] Copy: [COPYPERM] Resell or Give Away: [RESELLPERM] - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="BuyOriginalNoOwner"> Buy original object for L$[PRICE]? @@ -1808,7 +1808,7 @@ You will be able to: Modify: [MODIFYPERM] Copy: [COPYPERM] Resell or Give Away: [RESELLPERM] - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="BuyCopy"> Buy a copy from [OWNER] for L$[PRICE]? @@ -1817,7 +1817,7 @@ You will be able to: Modify: [MODIFYPERM] Copy: [COPYPERM] Resell or Give Away: [RESELLPERM] - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="BuyCopyNoOwner"> Buy a copy for L$[PRICE]? @@ -1826,24 +1826,24 @@ You will be able to: Modify: [MODIFYPERM] Copy: [COPYPERM] Resell or Give Away: [RESELLPERM] - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="BuyContents"> Buy contents from [OWNER] for L$[PRICE]? They will be copied to your inventory. - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="BuyContentsNoOwner"> Buy contents for L$[PRICE]? They will be copied to your inventory. - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmPurchase"> This transaction will: [ACTION] Are you sure you want to proceed with this purchase? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmPurchasePassword"> This transaction will: @@ -1853,7 +1853,7 @@ Are you sure you want to proceed with this purchase? Please re-enter your password and click OK. <form name="form"> <button name="ConfirmPurchase" text="確定"/> - <button name="Cancel" text="å–銷"/> + <button name="Cancel" text="å–æ¶ˆ"/> </form> </notification> <notification name="SetPickLocation"> @@ -1866,14 +1866,14 @@ You have updated the location of this pick but the other details will retain the These items will be moved to your inventory, not copied. Move the inventory item(s)? - <usetemplate ignoretext="Warn me before I move 'no-copy' items from an object" name="okcancelignore" notext="å–銷" yestext="確定"/> + <usetemplate ignoretext="Warn me before I move 'no-copy' items from an object" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="MoveInventoryFromScriptedObject"> You have selected 'no copy' inventory items. These items will be moved to your inventory, not copied. Because this object is scripted, moving these items to your inventory may cause the script to malfunction. Move the inventory item(s)? - <usetemplate ignoretext="Warn me before I move 'no-copy' items which might break a scripted object" name="okcancelignore" notext="å–銷" yestext="確定"/> + <usetemplate ignoretext="Warn me before I move 'no-copy' items which might break a scripted object" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ClickActionNotPayable"> Warning: The 'Pay object' click action has been set, but it will only work if a script is added with a money() event. @@ -1885,16 +1885,16 @@ Move the inventory item(s)? There are no items in this object that you are allowed to copy. </notification> <notification name="WebLaunchAccountHistory"> - Go to your [http://secondlife.com/account/ Dashboard] to see your account history? - <usetemplate ignoretext="Launch my browser to see my account history" name="okcancelignore" notext="å–銷" yestext="Go to page"/> + å‰å¾€ä½ çš„[http://secondlife.com/account/ 塗鴉牆]ä»¥å¯Ÿçœ‹ä½ çš„å¸³æˆ¶æ·å²ç´€éŒ„? + <usetemplate ignoretext="啟動我的ç€è¦½å™¨ä»¥å¯Ÿçœ‹æˆ‘的帳戶æ·å²ç´€éŒ„" name="okcancelignore" notext="å–æ¶ˆ" yestext="å‰å¾€é é¢"/> </notification> <notification name="ConfirmQuit"> - Are you sure you want to quit? - <usetemplate ignoretext="Confirm before I quit" name="okcancelignore" notext="Don't Quit" yestext="Quit"/> + ä½ ç¢ºå®šä½ è¦çµæŸé€€å‡ºï¼Ÿ + <usetemplate ignoretext="ç•¶æˆ‘çµæŸé€€å‡ºæ™‚進行確èª" name="okcancelignore" notext="ä¸çµæŸé€€å‡º" yestext="çµæŸé€€å‡º"/> </notification> <notification name="DeleteItems"> [QUESTION] - <usetemplate ignoretext="Confirm before deleting items" name="okcancelignore" notext="å–銷" yestext="確定"/> + <usetemplate ignoretext="Confirm before deleting items" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="HelpReportAbuseEmailLL"> Use this tool to report violations of the [http://secondlife.com/corporate/tos.php Terms of Service] and [http://secondlife.com/corporate/cs.php Community Standards]. @@ -1946,39 +1946,39 @@ Linden Lab Do you want to replace it with the selected object? <form name="form"> <ignore name="ignore" text="Replace an existing attachment with the selected item"/> - <button ignore="Replace Automatically" name="Yes" text="確定"/> - <button ignore="Never Replace" name="No" text="å–銷"/> + <button ignore="自動å–代" name="Yes" text="確定"/> + <button ignore="絕ä¸å–代" name="No" text="å–æ¶ˆ"/> </form> </notification> - <notification label="Busy Mode Warning" name="BusyModePay"> + <notification label="忙碌模å¼è¦å‘Š" name="BusyModePay"> You are in Busy Mode, which means you will not receive any items offered in exchange for this payment. Would you like to leave Busy Mode before completing this transaction? <form name="form"> <ignore name="ignore" text="I am about to pay a person or object while I am in Busy mode"/> <button ignore="Always leave Busy Mode" name="Yes" text="確定"/> - <button ignore="Never leave Busy Mode" name="No" text="å–銷"/> + <button ignore="Never leave Busy Mode" name="No" text="å–æ¶ˆ"/> </form> </notification> <notification name="ConfirmDeleteProtectedCategory"> The folder '[FOLDERNAME]' is a system folder. Deleting system folders can cause instability. Are you sure you want to delete it? - <usetemplate ignoretext="Confirm before I delete a system folder" name="okcancelignore" notext="å–銷" yestext="確定"/> + <usetemplate ignoretext="Confirm before I delete a system folder" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmEmptyTrash"> Are you sure you want to permanently delete the contents of your Trash? - <usetemplate ignoretext="Confirm before I empty the inventory Trash folder" name="okcancelignore" notext="å–銷" yestext="確定"/> + <usetemplate ignoretext="Confirm before I empty the inventory Trash folder" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmClearBrowserCache"> Are you sure you want to delete your travel, web, and search history? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ConfirmClearCookies"> Are you sure you want to clear your cookies? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="是"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="是"/> </notification> <notification name="ConfirmClearMediaUrlList"> Are you sure you want to clear your list of saved URLs? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="是"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="是"/> </notification> <notification name="ConfirmEmptyLostAndFound"> Are you sure you want to permanently delete the contents of your Lost And Found? @@ -1990,7 +1990,7 @@ Would you like to leave Busy Mode before completing this transaction? Link to this from a web page to give others easy access to this location, or try it out yourself by pasting it into the address bar of any web browser. <form name="form"> - <ignore name="ignore" text="SLurl is copied to my clipboard"/> + <ignore name="ignore" text="SLurl 已經覆製到我的剪貼簿。"/> </form> </notification> <notification name="WLSavePresetAlert"> @@ -2018,7 +2018,7 @@ Link to this from a web page to give others easy access to this location, or try New Preset </input> <button name="OK" text="確定"/> - <button name="Cancel" text="å–銷"/> + <button name="Cancel" text="å–æ¶ˆ"/> </form> </notification> <notification name="ExistsSkyPresetAlert"> @@ -2031,7 +2031,7 @@ Link to this from a web page to give others easy access to this location, or try New Preset </input> <button name="OK" text="確定"/> - <button name="Cancel" text="å–銷"/> + <button name="Cancel" text="å–æ¶ˆ"/> </form> </notification> <notification name="ExistsWaterPresetAlert"> @@ -2041,7 +2041,7 @@ Link to this from a web page to give others easy access to this location, or try You cannot edit or delete a default preset. </notification> <notification name="ChatterBoxSessionStartError"> - Unable to start a new chat session with [RECIPIENT]. + 無法開始一個與 [RECIPIENT] 他的新èŠå¤©æœƒè©±ã€‚ [REASON] <usetemplate name="okbutton" yestext="確定"/> </notification> @@ -2051,7 +2051,7 @@ Link to this from a web page to give others easy access to this location, or try <usetemplate name="okbutton" yestext="確定"/> </notification> <notification name="ForceCloseChatterBoxSession"> - Your chat session with [NAME] must close. + ä½ èˆ‡ [NAME] çš„èŠå¤©æœƒè©±å¿…é ˆé—œé–‰ã€‚ [REASON] <usetemplate name="okbutton" yestext="確定"/> </notification> @@ -2063,8 +2063,8 @@ Link to this from a web page to give others easy access to this location, or try <usetemplate name="okbutton" yestext="確定"/> </notification> <notification name="AutoWearNewClothing"> - Would you like to automatically wear the clothing you are about to create? - <usetemplate ignoretext="Wear the clothing I create while editing My Appearance" name="okcancelignore" notext="å¦" yestext="是"/> + ä½ è¦è‡ªå‹•ç©¿ä¸Šä½ æ‰€å‰µé€ çš„æœè£å—Žï¼Ÿ + <usetemplate ignoretext="ç·¨è¼¯å¤–è§€æ™‚èƒ½ç©¿ä¸Šæˆ‘æ‰€å‰µé€ çš„æœè£" name="okcancelignore" notext="å¦" yestext="是"/> </notification> <notification name="NotAgeVerified"> You must be age-verified to visit this area. Do you want to go to the [SECOND_LIFE] website and verify your age? @@ -2122,7 +2122,7 @@ Link to this from a web page to give others easy access to this location, or try (Takes about 5 minutes.) </notification> <notification name="UploadPayment"> - You paid L$[AMOUNT] to upload. + ä½ æ”¯ä»˜ L$[AMOUNT] 上傳。 </notification> <notification name="UploadWebSnapshotDone"> Web site snapshot upload done. @@ -2140,10 +2140,10 @@ Link to this from a web page to give others easy access to this location, or try Unable to load gesture [NAME]. </notification> <notification name="LandmarkMissing"> - Landmark is missing from database. + 資料庫ä¸çš„地標éºå¤±ã€‚ </notification> <notification name="UnableToLoadLandmark"> - Unable to load landmark. Please try again. + 無法載入地標,請å†è©¦ä¸€æ¬¡ã€‚ </notification> <notification name="CapsKeyOn"> Your Caps Lock key is on. @@ -2255,7 +2255,7 @@ Try selecting a smaller piece of land. [DATE] <form name="form"> <button name="Details" text="Details"/> - <button name="Cancel" text="å–銷"/> + <button name="Cancel" text="å–æ¶ˆ"/> </form> </notification> <notification name="TransferObjectsHighlighted"> @@ -2374,7 +2374,7 @@ Please go to the Knowledge Base for details on accessing areas with this maturit Could not teleport closer to destination. </notification> <notification name="TPCancelled"> - Teleport cancelled. + 瞬間傳é€å·²å–消。 </notification> <notification name="FullRegionTryAgain"> The region you are attempting to enter is currently full. @@ -2452,8 +2452,8 @@ Please try again in a few moments. [MESSAGE] - [MATURITY_STR] <icon>[MATURITY_ICON]</icon> <form name="form"> - <button name="Teleport" text="Teleport"/> - <button name="Cancel" text="å–銷"/> + <button name="Teleport" text="瞬間傳é€"/> + <button name="Cancel" text="å–æ¶ˆ"/> </form> </notification> <notification name="TeleportOfferSent"> @@ -2463,8 +2463,8 @@ Please try again in a few moments. [MESSAGE] [URL] <form name="form"> - <button name="Later" text="Later"/> - <button name="GoNow..." text="Go Now..."/> + <button name="Later" text="ç¨å€™"/> + <button name="GoNow..." text="ç«‹å³å‰å¾€..."/> </form> </notification> <notification name="OfferFriendship"> @@ -2519,14 +2519,14 @@ If you stay in this region you will be logged out. If you stay in this region you will be logged out. </notification> <notification name="LoadWebPage"> - Load web page [URL]? + 載入網é [URL]? [MESSAGE] From object: <nolink>[OBJECTNAME]</nolink>, owner: [NAME]? <form name="form"> - <button name="Gotopage" text="Go to page"/> - <button name="Cancel" text="å–銷"/> + <button name="Gotopage" text="å‰å¾€é é¢"/> + <button name="Cancel" text="å–æ¶ˆ"/> </form> </notification> <notification name="FailedToFindWearableUnnamed"> @@ -2697,7 +2697,7 @@ Click Accept to join the chat or Decline to decline the invitation. Click Block An error has occurred while trying to connect to voice chat for [VOICE_CHANNEL_NAME]. Please try again later. </notification> <notification name="UnsupportedCommandSLURL"> - The SLurl you clicked on is not supported. + ä½ æ‰€é»žæ“Šçš„ SLurl ä½ç½®ä¸¦ä¸è¢«æ”¯æ´ã€‚ </notification> <notification name="BlockedSLURL"> A SLurl was received from an untrusted browser and has been blocked for your security. @@ -2714,7 +2714,7 @@ They will be blocked for a few seconds for your security. </notification> <notification name="ConfirmCloseAll"> Are you sure you want to close all IMs? - <usetemplate ignoretext="Confirm before I close all IMs" name="okcancelignore" notext="å–銷" yestext="確定"/> + <usetemplate ignoretext="Confirm before I close all IMs" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="AttachmentSaved"> Attachment has been saved. @@ -2737,7 +2737,7 @@ They will be blocked for a few seconds for your security. </notification> <notification name="ConfirmClearTeleportHistory"> Are you sure you want to delete your teleport history? - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="BottomTrayButtonCanNotBeShown"> Selected button can not be shown right now. @@ -2754,7 +2754,7 @@ The button will be shown when there is enough space for it. With the following Residents: [RESIDENTS] - <usetemplate name="okcancelbuttons" notext="å–銷" yestext="確定"/> + <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification name="ItemsShared"> Items successfully shared. @@ -2823,7 +2823,7 @@ You locally updated a [RESOLUTION] baked texture for '[BODYREGION]' af </notification> <notification name="ConfirmLeaveCall"> Are you sure you want to leave this call? - <usetemplate ignoretext="Confirm before I leave call" name="okcancelignore" notext="å¦" yestext="是"/> + <usetemplate ignoretext="æˆ‘çµæŸé€šè©±å‰é€²è¡Œç¢ºèª" name="okcancelignore" notext="å¦" yestext="是"/> </notification> <notification name="ConfirmMuteAll"> You have selected to mute all participants in a group call. @@ -2831,7 +2831,7 @@ This will also cause all residents that later join the call to be muted, even after you have left the call. Mute everyone? - <usetemplate ignoretext="Confirm before I mute all participants in a group call" name="okcancelignore" notext="å–銷" yestext="確定"/> + <usetemplate ignoretext="Confirm before I mute all participants in a group call" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/> </notification> <notification label="èŠå¤©" name="HintChat"> To join the conversation, type into the chat field below. @@ -2868,7 +2868,7 @@ Click and drag anywhere on the world to rotate your view <notification label="View" name="HintView"> To change your camera view, use the Orbit and Pan controls. Reset your view by pressing Escape or walking. </notification> - <notification label="Inventory" name="HintInventory"> + <notification label="æ”¶ç´å€" name="HintInventory"> Check your inventory to find items. Newest items can be easily found in the Recent tab. </notification> <notification label="You've got Linden Dollars!" name="HintLindenDollar"> @@ -2887,40 +2887,40 @@ Click and drag anywhere on the world to rotate your view <input name="username" text="User Name"/> <input name="password" text="Password"/> <button name="ok" text="Submit"/> - <button name="cancel" text="å–銷"/> + <button name="cancel" text="å–æ¶ˆ"/> </form> </notification> <notification label="" name="ModeChange"> - Changing modes requires you to quit and restart. - <usetemplate name="okcancelbuttons" notext="Don't Quit" yestext="Quit"/> + 改變劉覽器模å¼è¦æ±‚ä½ å¿…é ˆçµæŸé€€å‡ºä¸¦é‡æ–°å•Ÿå‹•。 + <usetemplate name="okcancelbuttons" notext="ä¸çµæŸé€€å‡º" yestext="çµæŸé€€å‡º"/> </notification> <notification label="" name="NoClassifieds"> Creation and editing of Classifieds is only available in Advanced mode. Would you like to quit and change modes? The mode selector can be found on the login screen. - <usetemplate name="okcancelbuttons" notext="Don't Quit" yestext="Quit"/> + <usetemplate name="okcancelbuttons" notext="ä¸çµæŸé€€å‡º" yestext="çµæŸé€€å‡º"/> </notification> <notification label="" name="NoGroupInfo"> Creation and editing of Groups is only available in Advanced mode. Would you like to quit and change modes? The mode selector can be found on the login screen. - <usetemplate name="okcancelbuttons" notext="Don't Quit" yestext="Quit"/> + <usetemplate name="okcancelbuttons" notext="ä¸çµæŸé€€å‡º" yestext="çµæŸé€€å‡º"/> </notification> <notification label="" name="NoPicks"> Creation and editing of Picks is only available in Advanced mode. Would you like to quit and change modes? The mode selector can be found on the login screen. - <usetemplate name="okcancelbuttons" notext="Don't Quit" yestext="Quit"/> + <usetemplate name="okcancelbuttons" notext="ä¸çµæŸé€€å‡º" yestext="çµæŸé€€å‡º"/> </notification> <notification label="" name="NoWorldMap"> Viewing of the world map is only available in Advanced mode. Would you like to quit and change modes? The mode selector can be found on the login screen. - <usetemplate name="okcancelbuttons" notext="Don't Quit" yestext="Quit"/> + <usetemplate name="okcancelbuttons" notext="ä¸çµæŸé€€å‡º" yestext="çµæŸé€€å‡º"/> </notification> <notification label="" name="NoVoiceCall"> Voice calls are only available in Advanced mode. Would you like to logout and change modes? - <usetemplate name="okcancelbuttons" notext="Don't Quit" yestext="Quit"/> + <usetemplate name="okcancelbuttons" notext="ä¸çµæŸé€€å‡º" yestext="çµæŸé€€å‡º"/> </notification> <notification label="" name="NoAvatarShare"> Sharing is only available in Advanced mode. Would you like to logout and change modes? - <usetemplate name="okcancelbuttons" notext="Don't Quit" yestext="Quit"/> + <usetemplate name="okcancelbuttons" notext="ä¸çµæŸé€€å‡º" yestext="çµæŸé€€å‡º"/> </notification> <notification label="" name="NoAvatarPay"> Paying other residents is only available in Advanced mode. Would you like to logout and change modes? - <usetemplate name="okcancelbuttons" notext="Don't Quit" yestext="Quit"/> + <usetemplate name="okcancelbuttons" notext="ä¸çµæŸé€€å‡º" yestext="çµæŸé€€å‡º"/> </notification> <global name="UnsupportedCPU"> - Your CPU speed does not meet the minimum requirements. @@ -2937,7 +2937,7 @@ If you continue to have problems, please visit the [SUPPORT_SITE]. 510 </global> <global name="UnsupportedGPU"> - - Your graphics card does not meet the minimum requirements. + - ä½ çš„é¡¯ç¤ºå¡æœªé”系統最低é…å‚™è¦æ±‚。 </global> <global name="UnsupportedRAM"> - Your system memory does not meet the minimum requirements. diff --git a/indra/newview/skins/default/xui/zh/panel_active_object_row.xml b/indra/newview/skins/default/xui/zh/panel_active_object_row.xml index 0905cc30b6189c0987ab5941c046381218d7769e..42a4aa9e85f70feeb6aed0540c2798aedc0c01e1 100644 --- a/indra/newview/skins/default/xui/zh/panel_active_object_row.xml +++ b/indra/newview/skins/default/xui/zh/panel_active_object_row.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_activeim_row"> <text name="object_name"> - Unnamed Object + 未命å物件 </text> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/zh/panel_adhoc_control_panel.xml index 641d0eba930cbc95924cefefc15d79fe93eea673..7d16ac4129c2e592447635df1d9523fa84325e9a 100644 --- a/indra/newview/skins/default/xui/zh/panel_adhoc_control_panel.xml +++ b/indra/newview/skins/default/xui/zh/panel_adhoc_control_panel.xml @@ -2,13 +2,13 @@ <panel name="panel_im_control_panel"> <layout_stack name="vertical_stack"> <layout_panel name="call_btn_panel"> - <button label="Call" name="call_btn"/> + <button label="通話" name="call_btn"/> </layout_panel> <layout_panel name="end_call_btn_panel"> - <button label="Leave Call" name="end_call_btn"/> + <button label="離開通話" name="end_call_btn"/> </layout_panel> <layout_panel name="voice_ctrls_btn_panel"> - <button label="Voice Controls" name="voice_ctrls_btn"/> + <button label="語音控制" name="voice_ctrls_btn"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/zh/panel_avatar_list_item.xml index e7a94eafa88d7bcb65184cc27cd987747c0693c8..eccb938f150d796fd9469e33f0984b2fc3c06f97 100644 --- a/indra/newview/skins/default/xui/zh/panel_avatar_list_item.xml +++ b/indra/newview/skins/default/xui/zh/panel_avatar_list_item.xml @@ -21,11 +21,11 @@ <string name="FormatYears"> [COUNT]y </string> - <text name="avatar_name" value="(loading)"/> + <text name="avatar_name" value="(載入)"/> <text name="last_interaction" value="0s"/> - <icon name="permission_edit_theirs_icon" tool_tip="You can edit this friend's objects"/> - <icon name="permission_edit_mine_icon" tool_tip="This friend can edit, delete or take your objects"/> - <icon name="permission_map_icon" tool_tip="This friend can locate you on the map"/> - <icon name="permission_online_icon" tool_tip="This friend can see when you're online"/> - <button name="profile_btn" tool_tip="View profile"/> + <icon name="permission_edit_theirs_icon" tool_tip="ä½ ä¸èƒ½ç·¨è¼¯é€™ä½æœ‹å‹çš„物件"/> + <icon name="permission_edit_mine_icon" tool_tip="這使œ‹å‹èƒ½ç·¨è¼¯ã€åˆªé™¤æˆ–å–å¾—ä½ çš„ç‰©ä»¶"/> + <icon name="permission_map_icon" tool_tip="這使œ‹å‹èƒ½åœ¨åœ°åœ–ä¸Šæ‰¾åˆ°ä½ çš„ä½ç½®"/> + <icon name="permission_online_icon" tool_tip="這使œ‹å‹ç•¶ä½ 上線能看到訊æ¯"/> + <button name="profile_btn" tool_tip="察看檔案"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml index d8327683dd10d674c0f96250c5c78f129688ee33..9ef4258f0bd3d58bc9deeae448de223c09a90f9c 100644 --- a/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="block_list_panel"> <text name="title_text"> - Block List + å°éŽ–æ¸…å–® </text> <scroll_list name="blocked" tool_tip="List of currently blocked Residents"/> <button label="Block person" name="Block resident..." tool_tip="Pick a Resident to block"/> diff --git a/indra/newview/skins/default/xui/zh/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/zh/panel_body_parts_list_item.xml index 1fb0f210fe89e034b922acf91ff39a23bd2e5559..550868e5e5e22d0dcec20f11d58b7d7a0d165858 100644 --- a/indra/newview/skins/default/xui/zh/panel_body_parts_list_item.xml +++ b/indra/newview/skins/default/xui/zh/panel_body_parts_list_item.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="wearable_item"> <text name="item_name" value="..."/> - <panel name="btn_lock" tool_tip="You don't have permission to edit"/> + <panel name="btn_lock" tool_tip="ä½ ä¸¦æ²’æœ‰æ¬Šé™é€²è¡Œç·¨è¼¯"/> <panel name="btn_edit_panel"> - <button name="btn_edit" tool_tip="Edit this shape"/> + <button name="btn_edit" tool_tip="編輯這個體形"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_bottomtray.xml b/indra/newview/skins/default/xui/zh/panel_bottomtray.xml index 4e7f261e63fbee73316a877cfd6e9f8d064ef03f..2b0cd7c0a65568b6c7645982d87d8563ad34b2f6 100644 --- a/indra/newview/skins/default/xui/zh/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/zh/panel_bottomtray.xml @@ -10,7 +10,7 @@ </talk_button> </layout_panel> <layout_panel name="gesture_panel"> - <gesture_combo_list label="Gesture" name="Gesture" tool_tip="顯示 / éš±è— å§¿å‹¢"/> + <gesture_combo_list label="å§¿å‹¢" name="Gesture" tool_tip="顯示 / éš±è— å§¿å‹¢"/> </layout_panel> <layout_panel name="movement_panel"> <bottomtray_button label="移動" name="movement_btn" tool_tip="顯示 / éš±è— ç§»å‹•æŽ§åˆ¶"/> @@ -40,7 +40,7 @@ </layout_panel> <layout_panel name="notification_well_panel"> <chiclet_notification name="notification_well"> - <button name="Unread" tool_tip="Notifications"/> + <button name="Unread" tool_tip="通知"/> </chiclet_notification> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/zh/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/zh/panel_bottomtray_lite.xml index 22f3731a6f5ee865ec7436964b1cd0ac9dda0286..9833e9ef8b6140e62c8cd27e965b8d07ab1bc095 100644 --- a/indra/newview/skins/default/xui/zh/panel_bottomtray_lite.xml +++ b/indra/newview/skins/default/xui/zh/panel_bottomtray_lite.xml @@ -2,7 +2,7 @@ <panel name="bottom_tray_lite"> <layout_stack name="toolbar_stack_lite"> <layout_panel name="gesture_panel"> - <gesture_combo_list label="Gesture" name="Gesture" tool_tip="顯示 / éš±è— å§¿å‹¢"/> + <gesture_combo_list label="å§¿å‹¢" name="Gesture" tool_tip="顯示 / éš±è— å§¿å‹¢"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_classified_info.xml b/indra/newview/skins/default/xui/zh/panel_classified_info.xml index 6ddfbdaf4f7e4f353e3d2c0f088b49ba5e4294a0..94edb7ab712cf2078fa3c3897f579f56558575f7 100644 --- a/indra/newview/skins/default/xui/zh/panel_classified_info.xml +++ b/indra/newview/skins/default/xui/zh/panel_classified_info.xml @@ -10,7 +10,7 @@ L$[PRICE] </panel.string> <panel.string name="click_through_text_fmt"> - [TELEPORT] teleport, [MAP] map, [PROFILE] profile + [TELEPORT] 瞬間傳é€ï¼Œ[MAP] 地圖,[PROFILE] 檔案 </panel.string> <panel.string name="date_fmt"> [mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt] @@ -54,7 +54,7 @@ <panel name="buttons"> <layout_stack name="layout_stack1"> <layout_panel name="layout_panel1"> - <button label="Teleport" name="teleport_btn"/> + <button label="瞬間傳é€" name="teleport_btn"/> </layout_panel> <layout_panel name="show_on_map_btn_lp"> <button label="地圖" name="show_on_map_btn"/> diff --git a/indra/newview/skins/default/xui/zh/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/zh/panel_clothing_list_button_bar.xml index 7a74f07743c272392cd0fc3828fc3c5815ef9577..ba63dada760477193f79279e807a1d155bd6dbcd 100644 --- a/indra/newview/skins/default/xui/zh/panel_clothing_list_button_bar.xml +++ b/indra/newview/skins/default/xui/zh/panel_clothing_list_button_bar.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="clothing_list_button_bar_panel"> - <button label="Add +" name="add_btn"/> + <button label="æ·»åŠ +" name="add_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/zh/panel_clothing_list_item.xml index eba6fa7c293f78416cf4482b4147a2d879ba1508..1185336a2d60db26f9e991b6b0552d3c5b6b3f78 100644 --- a/indra/newview/skins/default/xui/zh/panel_clothing_list_item.xml +++ b/indra/newview/skins/default/xui/zh/panel_clothing_list_item.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="wearable_item"> - <button name="btn_delete" tool_tip="Remove from outfit"/> + <button name="btn_delete" tool_tip="ç”±è£æ‰®ç§»é™¤"/> <text name="item_name" value="..."/> - <panel name="btn_lock" tool_tip="You don't have permission to edit"/> + <panel name="btn_lock" tool_tip="ä½ ä¸¦æ²’æœ‰æ¬Šé™åŽ»ç·¨è¼¯"/> <panel name="btn_edit_panel"> <button name="btn_edit" tool_tip="Edit this wearable"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_cof_wearables.xml b/indra/newview/skins/default/xui/zh/panel_cof_wearables.xml index 9e63b9a3a8753c44ddc61694e6717a74bf48261c..309ab1c0d483c7885b7cd4d983703451018e6124 100644 --- a/indra/newview/skins/default/xui/zh/panel_cof_wearables.xml +++ b/indra/newview/skins/default/xui/zh/panel_cof_wearables.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="cof_wearables"> <accordion name="cof_wearables_accordion"> - <accordion_tab name="tab_clothing" title="Clothing"/> + <accordion_tab name="tab_clothing" title="æœè£"/> <accordion_tab name="tab_attachments" title="Attachments"/> - <accordion_tab name="tab_body_parts" title="Body Parts"/> + <accordion_tab name="tab_body_parts" title="身體部ä½"/> </accordion> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/zh/panel_deletable_wearable_list_item.xml index 59bff5f3e99c82d2699081bda4a5572cfec0c3f8..a9e65419c268385bbfdff498f9463a6fd59d1f61 100644 --- a/indra/newview/skins/default/xui/zh/panel_deletable_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/zh/panel_deletable_wearable_list_item.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="deletable_wearable_item"> - <button name="btn_delete" tool_tip="Remove from outfit"/> + <button name="btn_delete" tool_tip="ç”±è£æ‰®ç§»é™¤"/> <text name="item_name" value="..."/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/zh/panel_dummy_clothing_list_item.xml index 6558eda2538e4b71ba60f4f9dcf9156ed0717e87..6377bf413525337f574256ce0c57da67a8b02246 100644 --- a/indra/newview/skins/default/xui/zh/panel_dummy_clothing_list_item.xml +++ b/indra/newview/skins/default/xui/zh/panel_dummy_clothing_list_item.xml @@ -2,6 +2,6 @@ <panel name="dummy_clothing_item"> <text name="item_name" value="..."/> <panel name="btn_add_panel"> - <button name="btn_add" tool_tip="Add more items of this type"/> + <button name="btn_add" tool_tip="æ·»åŠ æ›´å¤šç‰©å“到這個類型"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_edit_classified.xml b/indra/newview/skins/default/xui/zh/panel_edit_classified.xml index 9478ec49a6a9c8a19cb6df3c626acd3b16386c45..e749d9e3e7de0d294148372e49429133c10f3c15 100644 --- a/indra/newview/skins/default/xui/zh/panel_edit_classified.xml +++ b/indra/newview/skins/default/xui/zh/panel_edit_classified.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Edit Classified" name="panel_edit_classified"> <panel.string name="location_notice"> - (will update after save) + (儲å˜å¾Œå°‡æœƒæ›´æ–°ï¼‰ </panel.string> <string name="publish_label"> Publish @@ -15,7 +15,7 @@ <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> <panel name="snapshot_panel"> - <icon label="" name="edit_icon" tool_tip="Click to select an image"/> + <icon label="" name="edit_icon" tool_tip="é»žæ“Šä»¥é¸æ“‡åœ–åƒ"/> </panel> <text name="Name:"> Title: @@ -47,7 +47,7 @@ <button label="[LABEL]" name="save_changes_btn"/> </layout_panel> <layout_panel name="show_on_map_btn_lp"> - <button label="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" name="cancel_btn"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_edit_gloves.xml b/indra/newview/skins/default/xui/zh/panel_edit_gloves.xml index c6648808981b34406ae9849a29008226852595f6..9c542366bcb6c320168c9a953e5b133c3a0a9e8f 100644 --- a/indra/newview/skins/default/xui/zh/panel_edit_gloves.xml +++ b/indra/newview/skins/default/xui/zh/panel_edit_gloves.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_gloves_panel"> <panel name="avatar_gloves_color_panel"> - <texture_picker label="Texture" name="Fabric" tool_tip="點擊以挑é¸åœ–片"/> + <texture_picker label="æè³ª" name="Fabric" tool_tip="點擊以挑é¸åœ–片"/> <color_swatch label="Color/Tint" name="Color/Tint" tool_tip="Click to open color picker"/> </panel> <panel name="accordion_panel"> diff --git a/indra/newview/skins/default/xui/zh/panel_edit_hair.xml b/indra/newview/skins/default/xui/zh/panel_edit_hair.xml index 0709ad4e67a3f136b48867e42cf24743c2b457c4..d9ddafac3b2c57b8871ba8d280c78e8f0a502a30 100644 --- a/indra/newview/skins/default/xui/zh/panel_edit_hair.xml +++ b/indra/newview/skins/default/xui/zh/panel_edit_hair.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_hair_panel"> <panel name="avatar_hair_color_panel"> - <texture_picker label="Texture" name="Texture" tool_tip="點擊以挑é¸åœ–片"/> + <texture_picker label="æè³ª" name="Texture" tool_tip="點擊以挑é¸åœ–片"/> </panel> <panel name="accordion_panel"> <accordion name="wearable_accordion"> - <accordion_tab name="hair_color_tab" title="Color"/> + <accordion_tab name="hair_color_tab" title="é¡è‰²"/> <accordion_tab name="hair_style_tab" title="Style"/> <accordion_tab name="hair_eyebrows_tab" title="Eyebrows"/> <accordion_tab name="hair_facial_tab" title="Facial"/> diff --git a/indra/newview/skins/default/xui/zh/panel_edit_jacket.xml b/indra/newview/skins/default/xui/zh/panel_edit_jacket.xml index 388fee9eb3f65947dafa18e83b373e044ca6473a..df85f7deb2a06e96e039318085cf1a5d4d9a389d 100644 --- a/indra/newview/skins/default/xui/zh/panel_edit_jacket.xml +++ b/indra/newview/skins/default/xui/zh/panel_edit_jacket.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_jacket_panel"> <panel name="avatar_jacket_color_panel"> - <texture_picker label="Upper Texture" name="Upper Fabric" tool_tip="點擊以挑é¸åœ–片"/> - <texture_picker label="Lower Texture" name="Lower Fabric" tool_tip="點擊以挑é¸åœ–片"/> + <texture_picker label="上åŠèº«æè³ª" name="Upper Fabric" tool_tip="點擊以挑é¸åœ–片"/> + <texture_picker label="下åŠèº«æè³ª" name="Lower Fabric" tool_tip="點擊以挑é¸åœ–片"/> <color_swatch label="Color/Tint" name="Color/Tint" tool_tip="Click to open color picker"/> </panel> <panel name="accordion_panel"> diff --git a/indra/newview/skins/default/xui/zh/panel_edit_pants.xml b/indra/newview/skins/default/xui/zh/panel_edit_pants.xml index d21c1181957f55d08e3c0cf321c6794bdf423d69..76560256f7a73e4669146592fe0d51e2b052beb9 100644 --- a/indra/newview/skins/default/xui/zh/panel_edit_pants.xml +++ b/indra/newview/skins/default/xui/zh/panel_edit_pants.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_pants_panel"> <panel name="avatar_pants_color_panel"> - <texture_picker label="Texture" name="Fabric" tool_tip="點擊以挑é¸åœ–片"/> - <color_swatch label="Color/Tint" name="Color/Tint" tool_tip="Click to open color picker"/> + <texture_picker label="æè³ª" name="Fabric" tool_tip="點擊以挑é¸åœ–片"/> + <color_swatch label="Color/Tint" name="Color/Tint" tool_tip="點擊以開啟é¡è‰²æŒ‘é¸å™¨"/> </panel> <panel name="accordion_panel"> <accordion name="wearable_accordion"> diff --git a/indra/newview/skins/default/xui/zh/panel_edit_pick.xml b/indra/newview/skins/default/xui/zh/panel_edit_pick.xml index 2dd0ed2015614a066ff93d66d35458ae05c9b732..6ac7226185a51848f5a47c7ca9ee7dc570c540d6 100644 --- a/indra/newview/skins/default/xui/zh/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/zh/panel_edit_pick.xml @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Edit Pick" name="panel_edit_pick"> +<panel label="編輯精é¸åœ°é»ž" name="panel_edit_pick"> <panel.string name="location_notice"> - (will update after save) + (將在儲å˜å¾Œæ›´æ–°ï¼‰ </panel.string> <text name="title"> - Edit Pick + 編輯精é¸åœ°é»ž </text> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> - <icon label="" name="edit_icon" tool_tip="Click to select an image"/> + <icon label="" name="edit_icon" tool_tip="é»žæ“Šä»¥é¸æ“‡åœ–åƒ"/> <text name="Name:"> - Title: + 標題: </text> <text name="description_label"> æè¿°ï¼š @@ -21,16 +21,16 @@ <text name="pick_location"> 載入ä¸... </text> - <button label="Set to Current Location" name="set_to_curr_location_btn"/> + <button label="è¨å®šç‚ºç›®å‰ä½ç½®" name="set_to_curr_location_btn"/> </panel> </scroll_container> <panel label="bottom_panel" name="bottom_panel"> <layout_stack name="layout_stack1"> <layout_panel name="layout_panel1"> - <button label="Save Pick" name="save_changes_btn"/> + <button label="儲å˜ç²¾é¸åœ°é»ž" name="save_changes_btn"/> </layout_panel> <layout_panel name="layout_panel1"> - <button label="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" name="cancel_btn"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_edit_profile.xml b/indra/newview/skins/default/xui/zh/panel_edit_profile.xml index 24ed9b9acb9780daa147115e857efd6fb6aa8793..2258e51b856a1eea56857d47c1995d4e2b5dfb55 100644 --- a/indra/newview/skins/default/xui/zh/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/zh/panel_edit_profile.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Profile Edit" name="edit_profile_panel"> +<panel label="檔案編輯" name="edit_profile_panel"> <string name="CaptionTextAcctInfo"> [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION] @@ -27,41 +27,41 @@ <panel name="scroll_content_panel"> <panel name="data_panel"> <text name="display_name_label" value="Display Name:"/> - <text name="solo_username_label" value="Username:"/> + <text name="solo_username_label" value="使用者å稱:"/> <button name="set_name" tool_tip="Set Display Name"/> - <text name="user_label" value="Username:"/> + <text name="user_label" value="使用者å稱:"/> <panel name="lifes_images_panel"> <panel name="second_life_image_panel"> <text name="second_life_photo_title_text" value="[SECOND_LIFE]:"/> </panel> - <icon label="" name="2nd_life_edit_icon" tool_tip="Click to select an image"/> + <icon label="" name="2nd_life_edit_icon" tool_tip="é»žæ“Šä»¥é¸æ“‡åœ–åƒ"/> </panel> <panel name="first_life_image_panel"> - <text name="real_world_photo_title_text" value="Real World:"/> + <text name="real_world_photo_title_text" value="真實世界:"/> </panel> - <icon label="" name="real_world_edit_icon" tool_tip="Click to select an image"/> + <icon label="" name="real_world_edit_icon" tool_tip="é»žæ“Šä»¥é¸æ“‡åœ–åƒ"/> <text name="title_homepage_text"> - Homepage: + 首é : </text> <line_editor name="homepage_edit" value="http://"/> - <text name="title_acc_status_text" value="My Account:"/> + <text name="title_acc_status_text" value="我的帳戶:"/> <text_editor name="acc_status_text" value="Resident. No payment info on file."/> - <text name="my_account_link" value="[[URL] Go to My Dashboard]"/> - <text name="title_partner_text" value="My Partner:"/> + <text name="my_account_link" value="[[URL] å‰å¾€æˆ‘的塗鴉牆]"/> + <text name="title_partner_text" value="我的é…å¶ï¼š"/> <panel name="partner_data_panel"> <text initial_value="(retrieving)" name="partner_text"/> </panel> - <text name="partner_edit_link" value="[[URL] Edit]"/> + <text name="partner_edit_link" value="[[URL] 編輯]"/> </panel> </panel> </scroll_container> <panel name="profile_me_buttons_panel"> <layout_stack name="bottom_panel_ls"> <layout_panel name="save_changes_btn_lp"> - <button label="Save Changes" name="save_btn"/> + <button label="儲å˜è®Šæ›´" name="save_btn"/> </layout_panel> <layout_panel name="show_on_map_btn_lp"> - <button label="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" name="cancel_btn"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_edit_shape.xml b/indra/newview/skins/default/xui/zh/panel_edit_shape.xml index da6049ea7568a7344db441de021e90d90f676301..f249100786f41ace8a3f48a4035da26cc58132c2 100644 --- a/indra/newview/skins/default/xui/zh/panel_edit_shape.xml +++ b/indra/newview/skins/default/xui/zh/panel_edit_shape.xml @@ -1,25 +1,25 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_shape_panel"> <string name="meters"> - Meters + 公尺 </string> <string name="feet"> - Feet + 英呎 </string> <string name="height"> - Height: + 身高: </string> <panel label="襯衫" name="accordion_panel"> <accordion name="wearable_accordion"> - <accordion_tab name="shape_body_tab" title="Body"/> - <accordion_tab name="shape_head_tab" title="Head"/> + <accordion_tab name="shape_body_tab" title="身體"/> + <accordion_tab name="shape_head_tab" title="é 部"/> <accordion_tab name="shape_eyes_tab" title="眼ç›"/> - <accordion_tab name="shape_ears_tab" title="Ears"/> - <accordion_tab name="shape_nose_tab" title="Nose"/> - <accordion_tab name="shape_mouth_tab" title="Mouth"/> - <accordion_tab name="shape_chin_tab" title="Chin"/> - <accordion_tab name="shape_torso_tab" title="Torso"/> - <accordion_tab name="shape_legs_tab" title="Legs"/> + <accordion_tab name="shape_ears_tab" title="耳朵"/> + <accordion_tab name="shape_nose_tab" title="é¼»å"/> + <accordion_tab name="shape_mouth_tab" title="嘴巴"/> + <accordion_tab name="shape_chin_tab" title="下巴"/> + <accordion_tab name="shape_torso_tab" title="軀幹"/> + <accordion_tab name="shape_legs_tab" title="腿部"/> </accordion> </panel> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_edit_shirt.xml b/indra/newview/skins/default/xui/zh/panel_edit_shirt.xml index 44b93504d1d52b06adf1ea3edc5205ebf3a4c70d..ecfc1e2fad29523f453588d0f980ae5203b265fe 100644 --- a/indra/newview/skins/default/xui/zh/panel_edit_shirt.xml +++ b/indra/newview/skins/default/xui/zh/panel_edit_shirt.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_shirt_panel"> <panel name="avatar_shirt_color_panel"> - <texture_picker label="Texture" name="Fabric" tool_tip="點擊以挑é¸åœ–片"/> - <color_swatch label="Color/Tint" name="Color/Tint" tool_tip="Click to open color picker"/> + <texture_picker label="æè³ª" name="Fabric" tool_tip="點擊以挑é¸åœ–片"/> + <color_swatch label="Color/Tint" name="Color/Tint" tool_tip="點擊以開啟é¡è‰²æŒ‘é¸å™¨"/> </panel> <panel name="accordion_panel"> <accordion name="wearable_accordion"> diff --git a/indra/newview/skins/default/xui/zh/panel_edit_shoes.xml b/indra/newview/skins/default/xui/zh/panel_edit_shoes.xml index d1ba9625f18ce8bf8162d8c2a0bd09cb087c0d63..7bf923b4ca4d8085e627107aa5c91c9f73e9ec9f 100644 --- a/indra/newview/skins/default/xui/zh/panel_edit_shoes.xml +++ b/indra/newview/skins/default/xui/zh/panel_edit_shoes.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_shoes_panel"> <panel name="avatar_shoes_color_panel"> - <texture_picker label="Texture" name="Fabric" tool_tip="點擊以挑é¸åœ–片"/> + <texture_picker label="æè³ª" name="Fabric" tool_tip="點擊以挑é¸åœ–片"/> <color_swatch label="Color/Tint" name="Color/Tint" tool_tip="Click to open color picker"/> </panel> <panel name="accordion_panel"> diff --git a/indra/newview/skins/default/xui/zh/panel_edit_skirt.xml b/indra/newview/skins/default/xui/zh/panel_edit_skirt.xml index 303aa80e114d407ae3e8a3eb682b0be0dfeb9904..5c46f94fe948956751ccbe955410372a2b6a270e 100644 --- a/indra/newview/skins/default/xui/zh/panel_edit_skirt.xml +++ b/indra/newview/skins/default/xui/zh/panel_edit_skirt.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_skirt_panel"> <panel name="avatar_skirt_color_panel"> - <texture_picker label="Texture" name="Fabric" tool_tip="點擊以挑é¸åœ–片"/> - <color_swatch label="Color/Tint" name="Color/Tint" tool_tip="Click to open color picker"/> + <texture_picker label="æè³ª" name="Fabric" tool_tip="點擊以挑é¸åœ–片"/> + <color_swatch label="Color/Tint" name="Color/Tint" tool_tip="點擊以開啟é¡è‰²æŒ‘é¸å™¨"/> </panel> <panel name="accordion_panel"> <accordion name="wearable_accordion"> diff --git a/indra/newview/skins/default/xui/zh/panel_edit_socks.xml b/indra/newview/skins/default/xui/zh/panel_edit_socks.xml index 1e61a65788ec5c6068b37e09c7821b7a2b484ab8..09c888f226e98aefcda9799a3546aaa6ffe6425b 100644 --- a/indra/newview/skins/default/xui/zh/panel_edit_socks.xml +++ b/indra/newview/skins/default/xui/zh/panel_edit_socks.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_socks_panel"> <panel name="avatar_socks_color_panel"> - <texture_picker label="Texture" name="Fabric" tool_tip="點擊以挑é¸åœ–片"/> - <color_swatch label="Color/Tint" name="Color/Tint" tool_tip="Click to open color picker"/> + <texture_picker label="æè³ª" name="Fabric" tool_tip="點擊以挑é¸åœ–片"/> + <color_swatch label="Color/Tint" name="Color/Tint" tool_tip="點擊以開啟é¡è‰²æŒ‘é¸å™¨"/> </panel> <panel name="accordion_panel"> <accordion name="wearable_accordion"> diff --git a/indra/newview/skins/default/xui/zh/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/zh/panel_edit_tattoo.xml index d183e6897d5c9cc155e4808a531ad37459a60625..946f8b22dce8f731375f33a39309c7ef27acf13b 100644 --- a/indra/newview/skins/default/xui/zh/panel_edit_tattoo.xml +++ b/indra/newview/skins/default/xui/zh/panel_edit_tattoo.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_tattoo_panel"> <panel name="avatar_tattoo_color_panel"> - <texture_picker label="Head Tattoo" name="Head Tattoo" tool_tip="點擊以挑é¸åœ–片"/> - <texture_picker label="Upper Tattoo" name="Upper Tattoo" tool_tip="Click to choose a picture"/> - <texture_picker label="Lower Tattoo" name="Lower Tattoo" tool_tip="點擊以挑é¸åœ–片"/> - <color_swatch label="Color/Tint" name="Color/Tint" tool_tip="Click to open color picker"/> + <texture_picker label="é 部刺é’" name="Head Tattoo" tool_tip="點擊以挑é¸åœ–片"/> + <texture_picker label="上åŠèº«åˆºé’" name="Upper Tattoo" tool_tip="點擊以挑é¸ç…§ç‰‡"/> + <texture_picker label="下åŠèº«åˆºé’" name="Lower Tattoo" tool_tip="點擊以挑é¸åœ–片"/> + <color_swatch label="Color/Tint" name="Color/Tint" tool_tip="點擊以開啟é¡è‰²æŒ‘é¸å™¨"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_edit_underpants.xml b/indra/newview/skins/default/xui/zh/panel_edit_underpants.xml index 47d5db4fca9e7b3d517f640a0d9df7e24313cefc..82ab70bafc4a3911ae8b1de13af2859b870dacd9 100644 --- a/indra/newview/skins/default/xui/zh/panel_edit_underpants.xml +++ b/indra/newview/skins/default/xui/zh/panel_edit_underpants.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_underpants_panel"> <panel name="avatar_underpants_color_panel"> - <texture_picker label="Texture" name="Fabric" tool_tip="點擊以挑é¸åœ–片"/> + <texture_picker label="æè³ª" name="Fabric" tool_tip="點擊以挑é¸åœ–片"/> <color_swatch label="Color/Tint" name="Color/Tint" tool_tip="Click to open color picker"/> </panel> <panel name="accordion_panel"> diff --git a/indra/newview/skins/default/xui/zh/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/zh/panel_edit_undershirt.xml index cbfdcaae8e0ee4b214dcb2cbfe952c215029aafe..b28466877711cb81bb89f017cf840d8fd43d4a70 100644 --- a/indra/newview/skins/default/xui/zh/panel_edit_undershirt.xml +++ b/indra/newview/skins/default/xui/zh/panel_edit_undershirt.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_undershirt_panel"> <panel name="avatar_undershirt_color_panel"> - <texture_picker label="Texture" name="Fabric" tool_tip="點擊以挑é¸åœ–片"/> + <texture_picker label="æè³ª" name="Fabric" tool_tip="點擊以挑é¸åœ–片"/> <color_swatch label="Color/Tint" name="Color/Tint" tool_tip="Click to open Color Picker"/> </panel> <panel name="accordion_panel"> diff --git a/indra/newview/skins/default/xui/zh/panel_edit_wearable.xml b/indra/newview/skins/default/xui/zh/panel_edit_wearable.xml index d68767d4d2f38a7c817fa8092a165ed93c07db57..936a2651ab338148ea63b80e07dbeee3b880320e 100644 --- a/indra/newview/skins/default/xui/zh/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/zh/panel_edit_wearable.xml @@ -49,16 +49,16 @@ Editing Physics </string> <string name="shape_desc_text"> - Shape: + 體形: </string> <string name="skin_desc_text"> - Skin: + 皮膚: </string> <string name="hair_desc_text"> - Hair: + é 髮: </string> <string name="eyes_desc_text"> - Eyes: + 眼ç›ï¼š </string> <string name="shirt_desc_text"> 襯衫: @@ -96,16 +96,16 @@ <string name="physics_desc_text"> Physics: </string> - <labeled_back_button label="儲å˜" name="back_btn" tool_tip="Return to Edit Outfit"/> - <text name="edit_wearable_title" value="Editing Shape"/> + <labeled_back_button label="儲å˜" name="back_btn" tool_tip="å›žåˆ°ç·¨è¼¯è£æ‰®"/> + <text name="edit_wearable_title" value="體形編輯ä¸"/> <panel label="襯衫" name="wearable_type_panel"> - <text name="description_text" value="Shape:"/> + <text name="description_text" value="體形:"/> <radio_group name="sex_radio"> <radio_item label="" name="sex_male" tool_tip="男性" value="1"/> - <radio_item label="" name="sex_female" tool_tip="Female" value="0"/> + <radio_item label="" name="sex_female" tool_tip="女性" value="0"/> </radio_group> <icon name="male_icon" tool_tip="男性"/> - <icon name="female_icon" tool_tip="Female"/> + <icon name="female_icon" tool_tip="女性"/> </panel> <panel name="button_panel"> <layout_stack name="button_panel_ls"> diff --git a/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml b/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml index 9ba578c1a11f62fa0973b670ac920c9120af842d..1e3c18f522bbbbfce7a8dc17e072afd78539996c 100644 --- a/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml +++ b/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml @@ -2,7 +2,7 @@ <panel name="panel_im_control_panel"> <layout_stack name="vertical_stack"> <layout_panel name="group_info_btn_panel"> - <button label="Group Profile" name="group_info_btn"/> + <button label="社團檔案" name="group_info_btn"/> </layout_panel> <layout_panel name="call_btn_panel"> <button label="Call Group" name="call_btn"/> diff --git a/indra/newview/skins/default/xui/zh/panel_group_general.xml b/indra/newview/skins/default/xui/zh/panel_group_general.xml index c65b139cb5343f61b7923867865da764c10c6fe0..a97a35056bb1f51d1771204c269ccc074db8758c 100644 --- a/indra/newview/skins/default/xui/zh/panel_group_general.xml +++ b/indra/newview/skins/default/xui/zh/panel_group_general.xml @@ -6,7 +6,7 @@ Hover your mouse over the options for more help. </panel.string> <panel.string name="group_info_unchanged"> - General group information has changed + 一般社團資訊已經被變更 </panel.string> <panel.string name="incomplete_member_data_str"> Retrieving member data @@ -17,7 +17,7 @@ Hover your mouse over the options for more help. 創辦人: </text> <text name="join_cost_text"> - Free + å…è²» </text> <button label="ç¾åœ¨å°±åŠ å…¥!!" name="btn_join"/> </panel> @@ -25,33 +25,33 @@ Hover your mouse over the options for more help. Group Charter </text_editor> <name_list name="visible_members"> - <name_list.columns label="Member" name="name"/> - <name_list.columns label="Title" name="title"/> - <name_list.columns label="Status" name="status"/> + <name_list.columns label="æˆå“¡" name="name"/> + <name_list.columns label="é 銜" name="title"/> + <name_list.columns label="狀態" name="status"/> </name_list> <text name="my_group_settngs_label"> 自己 </text> <text name="active_title_label"> - My title: + 我的é 銜: </text> <combo_box name="active_title" tool_tip="Sets the title that appears in your avatar's name tag when this group is active."/> - <check_box label="Receive group notices" name="receive_notices" tool_tip="Sets whether you want to receive Notices from this group. Uncheck this box if this group is spamming you."/> - <check_box label="Show in my profile" name="list_groups_in_profile" tool_tip="Sets whether you want to show this group in your profile"/> + <check_box label="接å—社團通知" name="receive_notices" tool_tip="Sets whether you want to receive Notices from this group. Uncheck this box if this group is spamming you."/> + <check_box label="顯示在我的檔案ä¸" name="list_groups_in_profile" tool_tip="Sets whether you want to show this group in your profile"/> <panel name="preferences_container"> <text name="group_settngs_label"> - Group + 社團 </text> - <check_box label="Anyone can join" name="open_enrollement" tool_tip="Sets whether this group allows new members to join without being invited."/> - <check_box label="Cost to join" name="check_enrollment_fee" tool_tip="Sets whether to require an enrollment fee to join the group"/> + <check_box label="任何人都å¯ä»¥åŠ å…¥" name="open_enrollement" tool_tip="Sets whether this group allows new members to join without being invited."/> + <check_box label="åŠ å…¥è²»ç”¨" name="check_enrollment_fee" tool_tip="Sets whether to require an enrollment fee to join the group"/> <spinner label="L$" name="spin_enrollment_fee" tool_tip="New members must pay this fee to join the group when Enrollment Fee is checked."/> <combo_box name="group_mature_check" tool_tip="Sets whether your group contains information rated as Moderate"> <combo_item name="select_mature"> - - Select maturity rating - + - 鏿“‡å…§å®¹åˆ†ç´š - </combo_item> <combo_box.item label="Moderate Content" name="mature"/> - <combo_box.item label="General Content" name="pg"/> + <combo_box.item label="一般內容" name="pg"/> </combo_box> - <check_box initial_value="true" label="Show in search" name="show_in_group_list" tool_tip="Let people see this group in search results"/> + <check_box initial_value="true" label="顯示在æœå°‹ä¸" name="show_in_group_list" tool_tip="Let people see this group in search results"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml index 90797e1473329dc595073e59ada3c22561601bec..320645ea5e2650892862bc0b55ccaa013c2445b0 100644 --- a/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Group Profile" name="GroupInfo"> +<panel label="社團檔案" name="GroupInfo"> <panel.string name="default_needs_apply_text"> There are unsaved changes </panel.string> @@ -20,9 +20,9 @@ <layout_panel name="group_accordions"> <accordion name="groups_accordion"> <accordion_tab name="group_general_tab" title="一般"/> - <accordion_tab name="group_roles_tab" title="Roles"/> - <accordion_tab name="group_notices_tab" title="Notices"/> - <accordion_tab name="group_land_tab" title="Land/Assets"/> + <accordion_tab name="group_roles_tab" title="角色"/> + <accordion_tab name="group_notices_tab" title="通知"/> + <accordion_tab name="group_land_tab" title="土地 / 資產"/> </accordion> </layout_panel> </layout_stack> @@ -35,7 +35,7 @@ </layout_panel> <layout_panel name="btn_apply_lp"> <button label="儲å˜" label_selected="儲å˜" name="btn_apply"/> - <button label="Create Group" name="btn_create" tool_tip="Create a new Group"/> + <button label="å‰µé€ ç¤¾åœ˜" name="btn_create" tool_tip="å‰µé€ ä¸€å€‹æ–°ç¤¾åœ˜"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_group_invite.xml b/indra/newview/skins/default/xui/zh/panel_group_invite.xml index 576760f747a29655bb4ff332065d5868994c3ccd..a1395f454b86f8d76ab7a1fc21d7f0adc4bf934d 100644 --- a/indra/newview/skins/default/xui/zh/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/zh/panel_group_invite.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Invite a Member" name="invite_panel"> +<panel label="邀請一個æˆå“¡" name="invite_panel"> <panel.string name="confirm_invite_owner_str"> Are you sure you want to invite new owner(s)? This action is permanent! </panel.string> @@ -19,9 +19,9 @@ Choose what Role to assign them to: </text> <combo_box name="role_name" tool_tip="Choose from the list of Roles you are allowed to assign members to"/> - <button label="Send Invitations" name="ok_button"/> - <button label="å–銷" name="cancel_button"/> + <button label="é€å‡ºé‚€è«‹" name="ok_button"/> + <button label="å–æ¶ˆ" name="cancel_button"/> <string name="GroupInvitation"> - Group Invitation + 社團邀請 </string> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_group_land_money.xml b/indra/newview/skins/default/xui/zh/panel_group_land_money.xml index 08a5e711d1f28458a7582a71c718d73f840f096c..58022c227942c4d1521288b39ea726fe132ce29f 100644 --- a/indra/newview/skins/default/xui/zh/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/zh/panel_group_land_money.xml @@ -22,9 +22,9 @@ <scroll_list name="group_parcel_list"> <scroll_list.columns label="地段" name="name"/> <scroll_list.columns label="地å€" name="location"/> - <scroll_list.columns label="Type" name="type"/> - <scroll_list.columns label="Area" name="area"/> - <scroll_list.columns label="Hidden" name="hidden"/> + <scroll_list.columns label="類型" name="type"/> + <scroll_list.columns label="å€åŸŸ" name="area"/> + <scroll_list.columns label="éš±è—" name="hidden"/> </scroll_list> <text name="total_contributed_land_label"> Total contribution: @@ -58,7 +58,7 @@ More land credits are needed to support land in use </text> <text name="group_money_heading"> - Group L$ + 社團 L$ </text> </panel> <tab_container name="group_money_tab_container"> diff --git a/indra/newview/skins/default/xui/zh/panel_group_list_item.xml b/indra/newview/skins/default/xui/zh/panel_group_list_item.xml index 147c4859c6c315645854f1d93e762400bfba223c..175293cdf7fa8e9583ef0a99431e300107b53d40 100644 --- a/indra/newview/skins/default/xui/zh/panel_group_list_item.xml +++ b/indra/newview/skins/default/xui/zh/panel_group_list_item.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="group_list_item"> <text name="group_name" value="未知"/> - <button name="profile_btn" tool_tip="View profile"/> + <button name="profile_btn" tool_tip="察看檔案"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_group_notices.xml b/indra/newview/skins/default/xui/zh/panel_group_notices.xml index a007c860636718644942d8bc81ba28f37f99cbc2..65c07e7137d7c186d8e22a6e8a0eb70ed08b8ab8 100644 --- a/indra/newview/skins/default/xui/zh/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/zh/panel_group_notices.xml @@ -1,30 +1,30 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Notices" name="notices_tab"> +<panel label="通知" name="notices_tab"> <panel.string name="help_text"> Notices let you send a message and an optionally attached item. Notices only go to group members in Roles with the ability to receive Notices. You can turn off Notices on the General tab. </panel.string> <panel.string name="no_notices_text"> - There are no past notices + 沒有éŽåŽ»çš„é€šçŸ¥ </panel.string> <text name="lbl2"> - Notices are kept for 14 days. -Maximum 200 per group daily + 通知ä¿ç•™ 14 天。 +æ¯å€‹ç¤¾åœ˜ä¸€å¤©æœ€å¤š 200 則 </text> <scroll_list name="notice_list"> - <scroll_list.columns label="Subject" name="subject"/> - <scroll_list.columns label="From" name="from"/> - <scroll_list.columns label="Date" name="date"/> + <scroll_list.columns label="主旨" name="subject"/> + <scroll_list.columns label="ç”±" name="from"/> + <scroll_list.columns label="日期" name="date"/> </scroll_list> <text name="notice_list_none_found"> - None found + 沒發ç¾ã€‚ </text> - <button label="New Notice" name="create_new_notice" tool_tip="Create a new notice"/> + <button label="新通知" name="create_new_notice" tool_tip="建立一個新通知"/> <button name="refresh_notices" tool_tip="Refresh list of notices"/> - <panel label="Create New Notice" name="panel_create_new_notice"> + <panel label="建立新通知" name="panel_create_new_notice"> <text name="lbl"> - Create a Notice + 建立一個通知 </text> <text name="lbl3"> 主旨: @@ -36,26 +36,26 @@ Maximum 200 per group daily 附件: </text> <text name="string"> - Drag and drop item here to attach it: + å°‡ç‰©å“æ‹–曳並丟於æ¤è™•ä»¥æ·»åŠ ç‚ºé™„ä»¶ï¼š </text> - <button label="Inventory" name="open_inventory" tool_tip="Open Inventory"/> - <button name="remove_attachment" tool_tip="Remove attachment from your notification"/> - <button label="Send" label_selected="Send" name="send_notice"/> + <button label="æ”¶ç´å€" name="open_inventory" tool_tip="開啟收ç´å€"/> + <button name="remove_attachment" tool_tip="ç”±ä½ çš„é€šçŸ¥ç§»é™¤é™„ä»¶"/> + <button label="é€å‡º" label_selected="é€å‡º" name="send_notice"/> <group_drop_target name="drop_target" tool_tip="Drag an inventory item onto this target box to send it with this notice. You must have permission to copy and transfer the item in order to attach it."/> </panel> - <panel label="View Past Notice" name="panel_view_past_notice"> + <panel label="察看éŽåŽ»çš„é€šçŸ¥" name="panel_view_past_notice"> <text name="lbl"> - Archived Notice + å˜æª”的通知 </text> <text name="lbl2"> - To send a new notice, click the + button + è¦é€å‡ºä¸€å€‹æ–°é€šçŸ¥ï¼Œé»žæ“Š + 按鈕 </text> <text name="lbl3"> - Subject: + 主旨: </text> <text name="lbl4"> - Message: + 訊æ¯ï¼š </text> - <button label="Open Attachment" name="open_attachment"/> + <button label="開啟附件" name="open_attachment"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_group_roles.xml b/indra/newview/skins/default/xui/zh/panel_group_roles.xml index 2b15f4813aa07f5e4fd28566a50f617975bc2532..fff43838930c0be6167d6e110535fee393e28e5b 100644 --- a/indra/newview/skins/default/xui/zh/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/zh/panel_group_roles.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Members & Roles" name="roles_tab"> +<panel label="æˆå“¡èˆ‡è§’色" name="roles_tab"> <panel.string name="default_needs_apply_text"> There are unsaved changes </panel.string> @@ -7,7 +7,7 @@ Do you want to save your changes? </panel.string> <tab_container name="roles_tab_container"> - <panel label="MEMBERS" name="members_sub_tab" tool_tip="Members"> + <panel label="æˆå“¡" name="members_sub_tab" tool_tip="æˆå“¡"> <panel.string name="help_text"> You can add or remove Roles assigned to Members. Select multiple Members by holding the Ctrl key and @@ -16,16 +16,16 @@ clicking on their names. <panel.string name="donation_area"> [AREA] m² </panel.string> - <filter_editor label="Filter Members" name="filter_input"/> + <filter_editor label="æˆå“¡éŽæ¿¾å™¨" name="filter_input"/> <name_list name="member_list"> - <name_list.columns label="Member" name="name"/> - <name_list.columns label="Donation" name="donated"/> - <name_list.columns label="Status" name="online"/> + <name_list.columns label="æˆå“¡" name="name"/> + <name_list.columns label="ææ¬¾" name="donated"/> + <name_list.columns label="狀態" name="online"/> </name_list> - <button label="Invite" name="member_invite"/> - <button label="Eject" name="member_eject"/> + <button label="邀請" name="member_invite"/> + <button label="踢出" name="member_eject"/> </panel> - <panel label="ROLES" name="roles_sub_tab"> + <panel label="角色" name="roles_sub_tab"> <panel.string name="help_text"> Roles have a title and an allowed list of Abilities that Members can perform. Members can belong to @@ -35,21 +35,21 @@ including the Everyone and Owner Roles. <panel.string name="cant_delete_role"> The 'Everyone' and 'Owners' Roles are special and can't be deleted. </panel.string> - <filter_editor label="Filter Roles" name="filter_input"/> + <filter_editor label="è§’è‰²éŽæ¿¾å™¨" name="filter_input"/> <scroll_list name="role_list"> - <scroll_list.columns label="Role" name="name"/> - <scroll_list.columns label="Title" name="title"/> + <scroll_list.columns label="角色" name="name"/> + <scroll_list.columns label="é 銜" name="title"/> <scroll_list.columns label="#" name="members"/> </scroll_list> - <button label="New Role" name="role_create"/> - <button label="Delete Role" name="role_delete"/> + <button label="新角色" name="role_create"/> + <button label="刪除角色" name="role_delete"/> </panel> - <panel label="ABILITIES" name="actions_sub_tab" tool_tip="You can view an Ability's Description and which Roles and Members can execute the Ability."> + <panel label="能力" name="actions_sub_tab" tool_tip="You can view an Ability's Description and which Roles and Members can execute the Ability."> <panel.string name="help_text"> Abilities allow Members in Roles to do specific things in this group. There's a broad variety of Abilities. </panel.string> - <filter_editor label="Filter Abilities" name="filter_input"/> + <filter_editor label="èƒ½åŠ›éŽæ¿¾å™¨" name="filter_input"/> <scroll_list name="action_list" tool_tip="Select an Ability to view more details"/> </panel> </tab_container> @@ -64,13 +64,13 @@ things in this group. There's a broad variety of Abilities. </panel> <panel name="roles_footer"> <text name="static"> - Role Name + 角色å稱 </text> <text name="static3"> - Role Title + 角色é 銜 </text> <text name="static2"> - Description + æè¿° </text> <text name="static4"> Assigned Members diff --git a/indra/newview/skins/default/xui/zh/panel_im_control_panel.xml b/indra/newview/skins/default/xui/zh/panel_im_control_panel.xml index 8fdecad4205dc268ec51e6fd4b02cc978106c188..703182e04d39d3b9cf42fa6a48f8df220f0f1f3b 100644 --- a/indra/newview/skins/default/xui/zh/panel_im_control_panel.xml +++ b/indra/newview/skins/default/xui/zh/panel_im_control_panel.xml @@ -2,28 +2,28 @@ <panel name="panel_im_control_panel"> <layout_stack name="button_stack"> <layout_panel name="view_profile_btn_panel"> - <button label="Profile" name="view_profile_btn"/> + <button label="檔案" name="view_profile_btn"/> </layout_panel> <layout_panel name="add_friend_btn_panel"> <button label="åŠ ç‚ºæœ‹å‹" name="add_friend_btn"/> </layout_panel> <layout_panel name="teleport_btn_panel"> - <button label="Teleport" name="teleport_btn" tool_tip="Offer to teleport this person"/> + <button label="瞬間傳é€" name="teleport_btn" tool_tip="Offer to teleport this person"/> </layout_panel> <layout_panel name="share_btn_panel"> <button label="分享" name="share_btn"/> </layout_panel> <layout_panel name="pay_btn_panel"> - <button label="Pay" name="pay_btn"/> + <button label="支付" name="pay_btn"/> </layout_panel> <layout_panel name="call_btn_panel"> - <button label="Call" name="call_btn"/> + <button label="通話" name="call_btn"/> </layout_panel> <layout_panel name="end_call_btn_panel"> - <button label="End Call" name="end_call_btn"/> + <button label="çµæŸé€šè©±" name="end_call_btn"/> </layout_panel> <layout_panel name="voice_ctrls_btn_panel"> - <button label="Voice Controls" name="voice_ctrls_btn"/> + <button label="語音控制" name="voice_ctrls_btn"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_landmark_info.xml b/indra/newview/skins/default/xui/zh/panel_landmark_info.xml index 16119f9e2cfb790f405c9d718ffdb852fa7b7a3a..d86ba7bc7ce1b5226104e70d8bfc1d549d5e0f6c 100644 --- a/indra/newview/skins/default/xui/zh/panel_landmark_info.xml +++ b/indra/newview/skins/default/xui/zh/panel_landmark_info.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="landmark_info"> - <string name="title_create_landmark" value="Create Landmark"/> - <string name="title_edit_landmark" value="Edit Landmark"/> - <string name="title_landmark" value="Landmark"/> + <string name="title_create_landmark" value="å‰µé€ åœ°æ¨™"/> + <string name="title_edit_landmark" value="編輯地標"/> + <string name="title_landmark" value="地標"/> <string name="not_available" value="(N\A)"/> <string name="unknown" value="(未知)"/> <string name="public" value="(公開)"/> @@ -19,7 +19,7 @@ [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] </string> <button name="back_btn" tool_tip="Back"/> - <text name="title" value="Place Profile"/> + <text name="title" value="地點檔案"/> <scroll_container name="place_scroll"> <panel name="scrolling_panel"> <text name="region_title" value="SampleRegion"/> @@ -29,12 +29,12 @@ <panel name="landmark_info_panel"> <text name="owner_label" value="æ“æœ‰è€…:"/> <text name="creator_label" value="å‰µé€ è€…ï¼š"/> - <text name="created_label" value="Created:"/> + <text name="created_label" value="å‰µé€ æ–¼ï¼š"/> </panel> <panel name="landmark_edit_panel"> <text name="title_label" value="Title:"/> <text name="notes_label" value="My notes:"/> - <text name="folder_label" value="Landmark location:"/> + <text name="folder_label" value="地標ä½ç½®ï¼š"/> </panel> </panel> </scroll_container> diff --git a/indra/newview/skins/default/xui/zh/panel_landmarks.xml b/indra/newview/skins/default/xui/zh/panel_landmarks.xml index 45f8edc3554e14fd08f962de532a91bd9907d85b..fa907e3d9068f7551255199a92c37020c200a481 100644 --- a/indra/newview/skins/default/xui/zh/panel_landmarks.xml +++ b/indra/newview/skins/default/xui/zh/panel_landmarks.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="Landmarks"> <accordion name="landmarks_accordion"> - <accordion_tab name="tab_favorites" title="Favorites bar"/> - <accordion_tab name="tab_landmarks" title="My Landmarks"/> - <accordion_tab name="tab_inventory" title="My Inventory"/> + <accordion_tab name="tab_favorites" title="最愛列"/> + <accordion_tab name="tab_landmarks" title="我的地標"/> + <accordion_tab name="tab_inventory" title="我的收ç´å€"/> <accordion_tab name="tab_library" title="Library"/> </accordion> <panel name="bottom_panel"> @@ -12,10 +12,10 @@ <menu_button name="options_gear_btn" tool_tip="Show additional options"/> </layout_panel> <layout_panel name="add_btn_panel"> - <button name="add_btn" tool_tip="Add new landmark"/> + <button name="add_btn" tool_tip="æ·»åŠ æ–°åœ°æ¨™"/> </layout_panel> <layout_panel name="trash_btn_panel"> - <dnd_button name="trash_btn" tool_tip="Remove selected landmark"/> + <dnd_button name="trash_btn" tool_tip="ç§»é™¤æ‰€é¸æ“‡çš„地標"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_main_inventory.xml b/indra/newview/skins/default/xui/zh/panel_main_inventory.xml index 2533b902033d6de587f6dda70954c86dfc4512a1..f7dada226f04da54ef6b51ec51933ce8bcd16a09 100644 --- a/indra/newview/skins/default/xui/zh/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/zh/panel_main_inventory.xml @@ -4,25 +4,25 @@ Fetching [ITEM_COUNT] Items... [FILTER] </panel.string> <panel.string name="ItemcountCompleted"> - [ITEM_COUNT] Items [FILTER] + [ITEM_COUNT] ç‰©å“ [FILTER] </panel.string> <text name="ItemcountText"> - Items: + 物å“: </text> - <filter_editor label="Filter Inventory" name="inventory search editor"/> + <filter_editor label="æ”¶ç´å€éŽæ¿¾å™¨" name="inventory search editor"/> <tab_container name="inventory filter tabs"> - <inventory_panel label="MY INVENTORY" name="All Items"/> - <recent_inventory_panel label="RECENT" name="Recent Items"/> + <inventory_panel label="我的收ç´å€" name="All Items"/> + <recent_inventory_panel label="最近" name="Recent Items"/> </tab_container> <layout_stack name="bottom_panel"> <layout_panel name="options_gear_btn_panel"> - <menu_button name="options_gear_btn" tool_tip="Show additional options"/> + <menu_button name="options_gear_btn" tool_tip="顯示é¡å¤–é¸é …"/> </layout_panel> <layout_panel name="add_btn_panel"> - <button name="add_btn" tool_tip="Add new item"/> + <button name="add_btn" tool_tip="æ·»åŠ æ–°ç‰©å“"/> </layout_panel> <layout_panel name="trash_btn_panel"> - <dnd_button name="trash_btn" tool_tip="Remove selected item"/> + <dnd_button name="trash_btn" tool_tip="ç§»é™¤æ‰€é¸æ“‡çš„物å“"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_me.xml b/indra/newview/skins/default/xui/zh/panel_me.xml index 7a176a92c69e71e19a69767578646506263315dd..a236dfc17abc3dc530da143c519072594c307bee 100644 --- a/indra/newview/skins/default/xui/zh/panel_me.xml +++ b/indra/newview/skins/default/xui/zh/panel_me.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="My Profile" name="panel_me"> +<panel label="我的檔案" name="panel_me"> <tab_container name="tabs"> - <panel label="MY PROFILE" name="panel_profile"/> - <panel label="MY PICKS" name="panel_picks"/> + <panel label="我的檔案" name="panel_profile"/> + <panel label="我的精é¸åœ°é»ž" name="panel_picks"/> </tab_container> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_media_settings_general.xml b/indra/newview/skins/default/xui/zh/panel_media_settings_general.xml index 9e72dc9daffdc43dd5b0faa2ca96ba7f0cccba6d..059a78cf7decd1871f75fdcd0a7de0462075b7df 100644 --- a/indra/newview/skins/default/xui/zh/panel_media_settings_general.xml +++ b/indra/newview/skins/default/xui/zh/panel_media_settings_general.xml @@ -11,7 +11,7 @@ é 覽 </text> <text name="current_url_label"> - Current Page: + ç›®å‰é é¢ï¼š </text> <text name="current_url" tool_tip="The current page for this media source" value=""/> <button label="Reset" name="current_url_reset_btn"/> @@ -24,7 +24,7 @@ </text> <check_box initial_value="false" label="Auto Scale Media on Face of Object" name="auto_scale"/> <text name="size_label"> - Size: + 尺寸: </text> <text name="X_label"> X diff --git a/indra/newview/skins/default/xui/zh/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/zh/panel_media_settings_permissions.xml index b682ffda7dc90ddcc1464cc745f32883ba9f41be..3645f471ceefbf14bb0241cf861e1e7a4be4379c 100644 --- a/indra/newview/skins/default/xui/zh/panel_media_settings_permissions.xml +++ b/indra/newview/skins/default/xui/zh/panel_media_settings_permissions.xml @@ -1,29 +1,29 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="自訂" name="Media settings for controls"> <text name="controls_label"> - Controls: + 控制: </text> <combo_box name="controls"> <combo_item name="Standard"> - Standard + 標準 </combo_item> <combo_item name="Mini"> - Mini + è¿·ä½ </combo_item> </combo_box> <text name="owner_label"> - Owner + æ“æœ‰è€… </text> <check_box initial_value="false" label="Allow Navigation & Interactivity" name="perms_owner_interact"/> - <check_box initial_value="false" label="Show Control Bar" name="perms_owner_control"/> + <check_box initial_value="false" label="顯示控制列" name="perms_owner_control"/> <text name="group_label"> - Group: + 社團: </text> <check_box initial_value="false" label="Allow Navigation & Interactivity" name="perms_group_interact"/> - <check_box initial_value="false" label="Show Control Bar" name="perms_group_control"/> + <check_box initial_value="false" label="顯示控制列" name="perms_group_control"/> <text name="anyone_label"> - Anyone + 任何人 </text> <check_box initial_value="false" label="Allow Navigation & Interactivity" name="perms_anyone_interact"/> - <check_box initial_value="false" label="Show Control Bar" name="perms_anyone_control"/> + <check_box initial_value="false" label="顯示控制列" name="perms_anyone_control"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_my_profile.xml b/indra/newview/skins/default/xui/zh/panel_my_profile.xml index f36608efb53224dc048ba4bf47cdf76a17f4f82f..e26ccdef73f82b4fbc453205c3994ba47fece2f3 100644 --- a/indra/newview/skins/default/xui/zh/panel_my_profile.xml +++ b/indra/newview/skins/default/xui/zh/panel_my_profile.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Profile" name="panel_profile"> +<panel label="檔案" name="panel_profile"> <string name="CaptionTextAcctInfo"> [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION] @@ -33,7 +33,7 @@ <text name="name_descr_text"> Display Name </text> - <button label="Profile" name="see_profile_btn" tool_tip="See profile for this avatar"/> + <button label="檔案" name="see_profile_btn" tool_tip="察看這ä½åŒ–身的檔案"/> </panel> </panel> </scroll_container> diff --git a/indra/newview/skins/default/xui/zh/panel_navigation_bar.xml b/indra/newview/skins/default/xui/zh/panel_navigation_bar.xml index c4bcf605e3756e6dfb9e354a8879d510f5cf75f6..1748d117f46e05a247def0f7bce749f75d8b04cd 100644 --- a/indra/newview/skins/default/xui/zh/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/zh/panel_navigation_bar.xml @@ -1,18 +1,18 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="navigation_bar"> <panel name="navigation_panel"> - <pull_button name="back_btn" tool_tip="Go back to previous location"/> - <pull_button name="forward_btn" tool_tip="Go forward one location"/> - <button name="home_btn" tool_tip="Teleport to my home location"/> - <location_input label="Location" name="location_combo"/> - <search_combo_box label="Search" name="search_combo_box" tool_tip="Search"> - <combo_editor label="Search [SECOND_LIFE]" name="search_combo_editor"/> + <pull_button name="back_btn" tool_tip="å‰å¾€ä¸Šä¸€å€‹ä½ç½®"/> + <pull_button name="forward_btn" tool_tip="å‰å¾€ä¸‹ä¸€å€‹ä½ç½®"/> + <button name="home_btn" tool_tip="瞬間傳é€åˆ°æˆ‘å®¶çš„ä½ç½®"/> + <location_input label="ä½ç½®" name="location_combo"/> + <search_combo_box label="æœå°‹" name="search_combo_box" tool_tip="æœå°‹"> + <combo_editor label="æœå°‹ [SECOND_LIFE]" name="search_combo_editor"/> </search_combo_box> </panel> <favorites_bar name="favorite" tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!"> <label name="favorites_bar_label" tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!"> - Favorites Bar + 最愛列 </label> - <chevron_button name=">>" tool_tip="Show more of My Favorites"/> + <chevron_button name=">>" tool_tip="顯示更多我的最愛"/> </favorites_bar> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/zh/panel_nearby_chat_bar.xml index 724cd54bf199af8d0bd6373bc800a098ee3a5657..3cabfcfabaa9419b8acc290c966e8bb4e3096006 100644 --- a/indra/newview/skins/default/xui/zh/panel_nearby_chat_bar.xml +++ b/indra/newview/skins/default/xui/zh/panel_nearby_chat_bar.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="chat_bar"> - <line_editor label="點擊æ¤è™•é–‹å§‹èŠå¤©ã€‚" name="chat_box" tool_tip="Press Enter to say, Ctrl+Enter to shout"/> - <button name="show_nearby_chat" tool_tip="顯示 / éš±è— é™„è¿‘èŠå¤©ç´€éŒ„"/> + <line_editor label="點擊æ¤è™•é–‹å§‹èŠå¤©ã€‚" name="chat_box" tool_tip="按下 Enter éµä¾†èªªæˆ–按下 Ctrl+Enter 來喊å«"/> + <button name="show_nearby_chat" tool_tip="顯示 / éš±è— é™„è¿‘çš„èŠå¤©ç´€éŒ„"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_nearby_media.xml b/indra/newview/skins/default/xui/zh/panel_nearby_media.xml index 0b8a7a5f42e0d5434a97113a100d11376c64ce95..5ab6837569d591195d716468f77296523b8bfb68 100644 --- a/indra/newview/skins/default/xui/zh/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/zh/panel_nearby_media.xml @@ -44,13 +44,13 @@ <panel name="media_controls_panel"> <layout_stack name="media_controls"> <layout_panel name="stop"> - <button name="stop_btn" tool_tip="Stop selected media"/> + <button name="stop_btn" tool_tip="åœæ¢æ‰€é¸æ“‡åª’é«”"/> </layout_panel> <layout_panel name="play"> - <button name="play_btn" tool_tip="Play selected media"/> + <button name="play_btn" tool_tip="æ’æ”¾æ‰€é¸æ“‡çš„媒體"/> </layout_panel> <layout_panel name="pause"> - <button name="pause_btn" tool_tip="Pause selected media"/> + <button name="pause_btn" tool_tip="æš«åœæ‰€é¸æ“‡çš„媒體"/> </layout_panel> <layout_panel name="volume_slider_ctrl"> <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Audio volume for selected media"/> diff --git a/indra/newview/skins/default/xui/zh/panel_notes.xml b/indra/newview/skins/default/xui/zh/panel_notes.xml index 12182b521ef397671c4776e1442a12354001ed94..f68fd74d1f6529c2f55a81de43b60bbaf4991181 100644 --- a/indra/newview/skins/default/xui/zh/panel_notes.xml +++ b/indra/newview/skins/default/xui/zh/panel_notes.xml @@ -5,10 +5,10 @@ <scroll_container name="profile_scroll"> <panel name="profile_scroll_panel"> <text name="status_message" value="My private notes:"/> - <text name="status_message2" value="Allow this person to:"/> - <check_box label="See my online status" name="status_check"/> - <check_box label="See me on the map" name="map_check"/> - <check_box label="Edit, delete or take my objects" name="objects_check"/> + <text name="status_message2" value="å…許這個人å¯ä»¥ï¼š"/> + <check_box label="看到我上線狀態" name="status_check"/> + <check_box label="在地圖上看見我" name="map_check"/> + <check_box label="邊輯,刪除或å–下我的物件" name="objects_check"/> </panel> </scroll_container> </layout_panel> @@ -18,16 +18,16 @@ <button label="åŠ ç‚ºæœ‹å‹" name="add_friend" tool_tip="Offer friendship to the Resident"/> </layout_panel> <layout_panel name="im_btn_lp"> - <button label="IM" name="im" tool_tip="Open instant message session"/> + <button label="IM" name="im" tool_tip="é–‹å•Ÿå³æ™‚è¨Šæ¯æœƒè©±"/> </layout_panel> <layout_panel name="call_btn_lp"> - <button label="Call" name="call" tool_tip="Call this Resident"/> + <button label="通話" name="call" tool_tip="與這ä½å±…民通話"/> </layout_panel> <layout_panel name="show_on_map_btn_lp"> <button label="地圖" name="show_on_map_btn" tool_tip="Show the Resident on the map"/> </layout_panel> <layout_panel name="teleport_btn_lp"> - <button label="Teleport" name="teleport" tool_tip="Offer teleport"/> + <button label="瞬間傳é€" name="teleport" tool_tip="Offer teleport"/> </layout_panel> </layout_stack> </layout_panel> diff --git a/indra/newview/skins/default/xui/zh/panel_notify_textbox.xml b/indra/newview/skins/default/xui/zh/panel_notify_textbox.xml index bdbc89f71cf6c65fe6da85904537b6c5e4bb94df..01a82103381581ee2e065eb8c98ef93adbbc2620 100644 --- a/indra/newview/skins/default/xui/zh/panel_notify_textbox.xml +++ b/indra/newview/skins/default/xui/zh/panel_notify_textbox.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="instant_message" name="panel_notify_textbox"> +<panel label="峿™‚訊æ¯" name="panel_notify_textbox"> <string name="message_max_lines_count" value="7"/> <panel label="info_panel" name="info_panel"> - <text_editor name="message" value="message"/> + <text_editor name="message" value="訊æ¯"/> </panel> <panel label="control_panel" name="control_panel"> - <button label="Submit" name="btn_submit"/> + <button label="æäº¤" name="btn_submit"/> <button label="忽視" name="ignore_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_online_status_toast.xml b/indra/newview/skins/default/xui/zh/panel_online_status_toast.xml index fdc489f375ec6eabd344b633f4fb6eb00c3ccef3..a5d3afccb9e91ced3c180021595842f925a05b4a 100644 --- a/indra/newview/skins/default/xui/zh/panel_online_status_toast.xml +++ b/indra/newview/skins/default/xui/zh/panel_online_status_toast.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="friend_online_status" name="friend_online_status"/> +<panel label="朋å‹_上線_狀態" name="friend_online_status"/> diff --git a/indra/newview/skins/default/xui/zh/panel_outfit_edit.xml b/indra/newview/skins/default/xui/zh/panel_outfit_edit.xml index 97e423b8cc3821da1ffbca581aeeab3efd1f2841..263106d13ad290ef1c98e0f7602a83115ae7614d 100644 --- a/indra/newview/skins/default/xui/zh/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/zh/panel_outfit_edit.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!-- Side tray Outfit Edit panel --> <panel name="outfit_edit"> - <string name="No Outfit" value="No Outfit"/> - <string name="unsaved_changes" value="Unsaved Changes"/> - <string name="now_editing" value="Now Editing"/> + <string name="No Outfit" value="ç„¡è£æ‰®"/> + <string name="unsaved_changes" value="變更未儲å˜"/> + <string name="now_editing" value="ç¾åœ¨ç·¨è¼¯ä¸"/> <panel.string name="not_available"> (N\A) </panel.string> @@ -11,15 +11,15 @@ (未知) </panel.string> <string name="Filter.All" value="全部"/> - <string name="Filter.Clothes/Body" value="Clothes/Body"/> - <string name="Filter.Objects" value="Objects"/> - <string name="Filter.Clothing" value="Clothing"/> - <string name="Filter.Bodyparts" value="Body parts"/> - <string name="replace_body_part" value="Click to replace your existing shape"/> - <text name="title" value="Edit Outfit"/> + <string name="Filter.Clothes/Body" value="è¡£æœ / 身體"/> + <string name="Filter.Objects" value="物件"/> + <string name="Filter.Clothing" value="æœè£"/> + <string name="Filter.Bodyparts" value="身體部ä½"/> + <string name="replace_body_part" value="點擊以å–ä»£ä½ ç¾å˜çš„體形"/> + <text name="title" value="ç·¨è¼¯è£æ‰®"/> <panel name="header_panel"> <panel name="outfit_name_and_status"> - <text name="status" value="Now editing..."/> + <text name="status" value="ç¾åœ¨ç·¨è¼¯ä¸..."/> <text name="curr_outfit_name" value="[Current Outfit]"/> </panel> </panel> @@ -27,15 +27,15 @@ <layout_panel name="outfit_wearables_panel"> <layout_stack name="filter_panels"> <layout_panel name="add_button_and_combobox"> - <button label="Add More..." name="show_add_wearables_btn" tool_tip="Open/Close"/> + <button label="æ·»åŠ æ›´å¤š..." name="show_add_wearables_btn" tool_tip="開啟 / 關閉"/> </layout_panel> <layout_panel name="filter_panel"> - <filter_editor label="Filter Inventory Wearables" name="look_item_filter"/> + <filter_editor label="æ”¶ç´å€å¯ç©¿è‘—éŽæ¿¾å™¨" name="look_item_filter"/> </layout_panel> </layout_stack> </layout_panel> <layout_panel name="add_wearables_panel"> - <button label="Wear Item" name="plus_btn"/> + <button label="穿上物å“" name="plus_btn"/> </layout_panel> </layout_stack> <panel name="no_add_wearables_button_bar"> diff --git a/indra/newview/skins/default/xui/zh/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/zh/panel_outfits_inventory.xml index 486b81e02405564c3b71356179f1125a07b6858e..dfd81a85cc1ce2717aafe87fcbb5510208ee188b 100644 --- a/indra/newview/skins/default/xui/zh/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/zh/panel_outfits_inventory.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Things" name="Outfits"> <panel.string name="wear_outfit_tooltip"> - Wear selected outfit + ç©¿ä¸Šæ‰€é¸æ“‡çš„è£æ‰® </panel.string> <panel.string name="wear_items_tooltip"> Wear selected items </panel.string> <tab_container name="appearance_tabs"> - <panel label="MY OUTFITS" name="outfitslist_tab"/> + <panel label="æˆ‘çš„è£æ‰®" name="outfitslist_tab"/> <panel label="WEARING" name="cof_tab"/> </tab_container> <panel name="bottom_panel"> diff --git a/indra/newview/skins/default/xui/zh/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/zh/panel_outfits_inventory_gear_default.xml index af417a79eff518976e4d4d5d0763ff01208ebb2e..92ec774f9bcd20e0e7f8c3b3fe254558fe0e0e85 100644 --- a/indra/newview/skins/default/xui/zh/panel_outfits_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/zh/panel_outfits_inventory_gear_default.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_gear_default"> - <menu_item_call label="Replace Current Outfit" name="wear"/> - <menu_item_call label="Remove From Current Outfit" name="remove"/> + <menu_item_call label="å–代目å‰çš„è£æ‰®" name="wear"/> + <menu_item_call label="由目å‰çš„è£æ‰®ç§»é™¤" name="remove"/> <menu_item_call label="æ›´å" name="rename"/> - <menu_item_call label="Remove Link" name="remove_link"/> - <menu_item_call label="Delete Outfit" name="delete"/> + <menu_item_call label="移除è¯çµ" name="remove_link"/> + <menu_item_call label="åˆªé™¤è£æ‰®" name="delete"/> </menu> diff --git a/indra/newview/skins/default/xui/zh/panel_outfits_list.xml b/indra/newview/skins/default/xui/zh/panel_outfits_list.xml index 36770c52c7249f7a98311b95ffcc5dd2137ae75a..a4b041469b609b48bda5ecddf536dc7b3a1647e0 100644 --- a/indra/newview/skins/default/xui/zh/panel_outfits_list.xml +++ b/indra/newview/skins/default/xui/zh/panel_outfits_list.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="Outfits"> <panel name="bottom_panel"> - <menu_button name="options_gear_btn" tool_tip="Show additional options"/> - <button name="trash_btn" tool_tip="Delete selected outfit"/> + <menu_button name="options_gear_btn" tool_tip="顯示é¡å¤–é¸é …"/> + <button name="trash_btn" tool_tip="åˆªé™¤æ‰€é¸æ“‡çš„è£æ‰®"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_people.xml b/indra/newview/skins/default/xui/zh/panel_people.xml index 49c36614dbbc2d74098e1960954de942f6fbf325..8da75e334e6537494070c70d6bb87d2170e3aeec 100644 --- a/indra/newview/skins/default/xui/zh/panel_people.xml +++ b/indra/newview/skins/default/xui/zh/panel_people.xml @@ -5,8 +5,8 @@ <string name="no_filtered_recent_people" value="Didn't find what you're looking for? Try [secondlife:///app/search/people/[SEARCH_TERM] Search]."/> <string name="no_one_near" value="No one nearby. Looking for people to hang out with? Try [secondlife:///app/search/people Search] or the [secondlife:///app/worldmap World Map]."/> <string name="no_one_filtered_near" value="Didn't find what you're looking for? Try [secondlife:///app/search/people/[SEARCH_TERM] Search]."/> - <string name="no_friends_online" value="No friends online"/> - <string name="no_friends" value="No friends"/> + <string name="no_friends_online" value="無朋å‹ä¸Šç·š"/> + <string name="no_friends" value="無朋å‹"/> <string name="no_friends_msg"> Find friends using [secondlife:///app/search/people Search] or right-click on a Resident to add them as a friend. Looking for people to hang out with? Try the [secondlife:///app/worldmap World Map]. @@ -22,13 +22,13 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M <string name="AltMiniMapToolTipMsg" value="[REGION](Double-click to teleport, shift-drag to pan)"/> <filter_editor label="Filter" name="filter_input"/> <tab_container name="tabs"> - <panel label="NEARBY" name="nearby_panel"> + <panel label="附近" name="nearby_panel"> <panel label="bottom_panel" name="bottom_panel"> - <menu_button name="nearby_view_sort_btn" tool_tip="Options"/> + <menu_button name="nearby_view_sort_btn" tool_tip="é¸é …"/> <button name="add_friend_btn" tool_tip="Add selected Resident to your friends List"/> </panel> </panel> - <panel label="MY FRIENDS" name="friends_panel"> + <panel label="我的朋å‹" name="friends_panel"> <accordion name="friends_accordion"> <accordion_tab name="tab_online" title="上線"/> <accordion_tab name="tab_all" title="全部"/> @@ -36,7 +36,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M <panel label="bottom_panel" name="bottom_panel"> <layout_stack name="bottom_panel"> <layout_panel name="options_gear_btn_panel"> - <menu_button name="friends_viewsort_btn" tool_tip="Show additional options"/> + <menu_button name="friends_viewsort_btn" tool_tip="顯示é¡å¤–é¸é …"/> </layout_panel> <layout_panel name="add_btn_panel"> <button name="add_btn" tool_tip="Offer friendship to a Resident"/> @@ -47,16 +47,16 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M </layout_stack> </panel> </panel> - <panel label="MY GROUPS" name="groups_panel"> + <panel label="我的社團" name="groups_panel"> <panel label="bottom_panel" name="bottom_panel"> - <menu_button name="groups_viewsort_btn" tool_tip="Options"/> + <menu_button name="groups_viewsort_btn" tool_tip="é¸é …"/> <button name="plus_btn" tool_tip="Join group/Create new group"/> <button name="activate_btn" tool_tip="Activate selected group"/> </panel> </panel> <panel label="RECENT" name="recent_panel"> <panel label="bottom_panel" name="bottom_panel"> - <menu_button name="recent_viewsort_btn" tool_tip="Options"/> + <menu_button name="recent_viewsort_btn" tool_tip="é¸é …"/> <button name="add_friend_btn" tool_tip="Add selected Resident to your friends List"/> </panel> </panel> @@ -64,27 +64,27 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M <panel name="button_bar"> <layout_stack name="bottom_bar_ls"> <layout_panel name="view_profile_btn_lp"> - <button label="Profile" name="view_profile_btn" tool_tip="Show picture, groups, and other Residents information"/> + <button label="檔案" name="view_profile_btn" tool_tip="Show picture, groups, and other Residents information"/> </layout_panel> <layout_panel name="chat_btn_lp"> - <button label="IM" name="im_btn" tool_tip="Open instant message session"/> + <button label="IM" name="im_btn" tool_tip="é–‹å•Ÿå³æ™‚è¨Šæ¯æœƒè©±"/> </layout_panel> <layout_panel name="chat_btn_lp"> - <button label="Call" name="call_btn" tool_tip="Call this Resident"/> + <button label="通話" name="call_btn" tool_tip="Call this Resident"/> </layout_panel> <layout_panel name="chat_btn_lp"> - <button label="分享" name="share_btn" tool_tip="Share an inventory item"/> + <button label="分享" name="share_btn" tool_tip="分享一個收ç´å€ç‰©å“"/> </layout_panel> <layout_panel name="chat_btn_lp"> - <button label="Teleport" name="teleport_btn" tool_tip="Offer teleport"/> + <button label="瞬間傳é€" name="teleport_btn" tool_tip="Offer teleport"/> </layout_panel> </layout_stack> <layout_stack name="bottom_bar_ls1"> <layout_panel name="group_info_btn_lp"> - <button label="Group Profile" name="group_info_btn" tool_tip="Show group information"/> + <button label="社團檔案" name="group_info_btn" tool_tip="顯示社團資訊"/> </layout_panel> <layout_panel name="chat_btn_lp"> - <button label="Group Chat" name="chat_btn" tool_tip="Open chat session"/> + <button label="Group Chat" name="chat_btn" tool_tip="開啟èŠå¤©æœƒè©±"/> </layout_panel> <layout_panel name="group_call_btn_lp"> <button label="Group Call" name="group_call_btn" tool_tip="Call this group"/> diff --git a/indra/newview/skins/default/xui/zh/panel_pick_info.xml b/indra/newview/skins/default/xui/zh/panel_pick_info.xml index 75ecdb99a59fb3b4f678730411d15551f56a989e..cd4cdbf999b3422363cef73348cfabb6397e3d39 100644 --- a/indra/newview/skins/default/xui/zh/panel_pick_info.xml +++ b/indra/newview/skins/default/xui/zh/panel_pick_info.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_pick_info"> - <text name="title" value="Pick Info"/> + <text name="title" value="ç²¾é¸åœ°é»žè³‡è¨Š"/> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> <text_editor name="pick_name" value="[name]"/> @@ -11,7 +11,7 @@ <panel name="buttons"> <layout_stack name="layout_stack1"> <layout_panel name="layout_panel1"> - <button label="Teleport" name="teleport_btn"/> + <button label="瞬間傳é€" name="teleport_btn"/> </layout_panel> <layout_panel name="show_on_map_btn_lp"> <button label="地圖" name="show_on_map_btn"/> diff --git a/indra/newview/skins/default/xui/zh/panel_picks.xml b/indra/newview/skins/default/xui/zh/panel_picks.xml index 28a47ed003334b0f9359649ae6eac2ca85bf7a8a..a233092dc2e5ae4d7c728f89a0fb8da6d0777b6a 100644 --- a/indra/newview/skins/default/xui/zh/panel_picks.xml +++ b/indra/newview/skins/default/xui/zh/panel_picks.xml @@ -1,28 +1,28 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Picks" name="panel_picks"> - <string name="no_picks" value="No Picks"/> +<panel label="ç²¾é¸åœ°é»ž" name="panel_picks"> + <string name="no_picks" value="ç„¡ç²¾é¸åœ°é»ž"/> <string name="no_classifieds" value="No Classifieds"/> <accordion name="accordion"> - <accordion_tab name="tab_picks" title="Picks"/> + <accordion_tab name="tab_picks" title="ç²¾é¸åœ°é»ž"/> <accordion_tab name="tab_classifieds" title="Classifieds"/> </accordion> <panel label="bottom_panel" name="edit_panel"> <layout_stack name="edit_panel_ls"> <layout_panel name="gear_menu_btn"> - <button name="new_btn" tool_tip="Create a new pick or classified at the current location"/> + <button name="new_btn" tool_tip="以目å‰ä½ç½®å»ºç«‹æ–°çš„ç²¾é¸åœ°é»žæˆ–個人廣告"/> </layout_panel> </layout_stack> </panel> <panel name="buttons_cucks"> <layout_stack name="buttons_cucks_ls"> <layout_panel name="info_btn_lp"> - <button label="資訊" name="info_btn" tool_tip="Show pick information"/> + <button label="資訊" name="info_btn" tool_tip="顯示精é¸åœ°é»žè³‡è¨Š"/> </layout_panel> <layout_panel name="teleport_btn_lp"> - <button label="Teleport" name="teleport_btn" tool_tip="Teleport to the corresponding area"/> + <button label="瞬間傳é€" name="teleport_btn" tool_tip="瞬間傳é€åˆ°ç›¸å°æ‡‰çš„å€åŸŸ"/> </layout_panel> <layout_panel name="show_on_map_btn_lp"> - <button label="地圖" name="show_on_map_btn" tool_tip="Show the corresponding area on the World Map"/> + <button label="地圖" name="show_on_map_btn" tool_tip="åœ¨ä¸–ç•Œåœ°åœ–ä¸Šé¡¯ç¤ºç›¸å°æ‡‰çš„å€åŸŸ"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_place_profile.xml b/indra/newview/skins/default/xui/zh/panel_place_profile.xml index cef56eb907c29240034189b3c31a90b4419a4a4d..aa7b036398ac840e574eeb20a3530434fb71db4e 100644 --- a/indra/newview/skins/default/xui/zh/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/zh/panel_place_profile.xml @@ -5,18 +5,18 @@ <string name="anyone" value="Anyone"/> <string name="available" value="available"/> <string name="allocated" value="allocated"/> - <string name="title_place" value="Place Profile"/> - <string name="title_teleport_history" value="Teleport History"/> + <string name="title_place" value="地點檔案"/> + <string name="title_teleport_history" value="çž¬é–“å‚³é€æ·å²ç´€éŒ„"/> <string name="not_available" value="(N\A)"/> <string name="unknown" value="(未知)"/> <string name="public" value="(公開)"/> <string name="none_text" value="(無)"/> - <string name="sale_pending_text" value="(Sale Pending)"/> - <string name="group_owned_text" value="(Group Owned)"/> + <string name="sale_pending_text" value="(擱置銷售)"/> + <string name="group_owned_text" value="ï¼ˆç¤¾åœ˜æ‰€æ“æœ‰ï¼‰"/> <string name="price_text" value="L$"/> <string name="area_text" value="m²"/> <string name="all_residents_text" value="全部居民"/> - <string name="group_text" value="Group"/> + <string name="group_text" value="社團"/> <string name="can_resell"> Purchased land in this region may be resold. </string> @@ -42,7 +42,7 @@ [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] </string> <button name="back_btn" tool_tip="Back"/> - <text name="title" value="Place Profile"/> + <text name="title" value="地點檔案"/> <scroll_container name="place_scroll"> <panel name="scrolling_panel"> <text name="region_title" value="SampleRegion"/> @@ -58,13 +58,13 @@ <text name="rating_value" value="未知"/> <text name="voice_label" value="Voice:"/> <text name="voice_value" value="On"/> - <text name="fly_label" value="Fly:"/> + <text name="fly_label" value="飛行:"/> <text name="fly_value" value="On"/> - <text name="push_label" value="Push:"/> + <text name="push_label" value="推撞:"/> <text name="push_value" value="Off"/> - <text name="build_label" value="Build:"/> + <text name="build_label" value="å»ºé€ ï¼š"/> <text name="build_value" value="On"/> - <text name="scripts_label" value="Scripts:"/> + <text name="scripts_label" value="腳本:"/> <text name="scripts_value" value="On"/> <text name="damage_label" value="Damage:"/> <text name="damage_value" value="Off"/> @@ -78,10 +78,10 @@ <text name="region_type_label" value="類型:"/> <text name="region_type" value="Moose"/> <text name="region_rating_label" value="分級:"/> - <text name="region_rating" value="Adult"/> + <text name="region_rating" value="æˆäºº"/> <text name="region_owner_label" value="æ“æœ‰è€…:"/> <text name="region_owner" value="moose Van Moose extra long name moose"/> - <text name="region_group_label" value="Group:"/> + <text name="region_group_label" value="社團:"/> <text name="region_group"> The Mighty Moose of mooseville soundvillemoose </text> @@ -103,7 +103,7 @@ <text name="area_label" value="é¢ç©ï¼š"/> <text name="traffic_label" value="æµé‡ï¼š"/> <text name="primitives_label" value="Primitives:"/> - <text name="parcel_scripts_label" value="Scripts:"/> + <text name="parcel_scripts_label" value="腳本:"/> <text name="terraform_limits_label" value="Terraform limits:"/> <text name="subdivide_label" value="Subdivide/Join ability:"/> <text name="resale_label" value="ReSale ability:"/> diff --git a/indra/newview/skins/default/xui/zh/panel_places.xml b/indra/newview/skins/default/xui/zh/panel_places.xml index 9a038c8b043f8e094e9256078b69a430e175e639..c141201ab2eed953cd1dec9fa5fefb3f8f2d917b 100644 --- a/indra/newview/skins/default/xui/zh/panel_places.xml +++ b/indra/newview/skins/default/xui/zh/panel_places.xml @@ -1,14 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Places" name="places panel"> - <string name="landmarks_tab_title" value="MY LANDMARKS"/> - <string name="teleport_history_tab_title" value="TELEPORT HISTORY"/> - <filter_editor label="Filter My Places" name="Filter"/> +<panel label="地點" name="places panel"> + <string name="landmarks_tab_title" value="我的地標"/> + <string name="teleport_history_tab_title" value="çž¬é–“å‚³é€æ·å²ç´€éŒ„"/> + <filter_editor label="æˆ‘çš„åœ°é»žéŽæ¿¾å™¨" name="Filter"/> <panel name="button_panel"> <layout_stack name="bottom_bar_ls0"> <layout_panel name="lp1"> <layout_stack name="bottom_bar_ls1"> <layout_panel name="teleport_btn_lp"> - <button label="Teleport" name="teleport_btn" tool_tip="Teleport to the selected area"/> + <button label="瞬間傳é€" name="teleport_btn" tool_tip="瞬間傳é€åˆ°æ‰€é¸æ“‡çš„å€åŸŸ"/> </layout_panel> <layout_panel name="chat_btn_lp"> <button label="地圖" name="map_btn" tool_tip="Show the corresponding area on the World Map"/> @@ -18,15 +18,15 @@ <layout_panel name="lp2"> <layout_stack name="bottom_bar_ls3"> <layout_panel name="edit_btn_lp"> - <button label="編輯" name="edit_btn" tool_tip="Edit landmark information"/> + <button label="編輯" name="edit_btn" tool_tip="編輯地標資訊"/> </layout_panel> <layout_panel name="overflow_btn_lp"> - <menu_button name="overflow_btn" tool_tip="Show additional options"/> + <menu_button name="overflow_btn" tool_tip="顯示é¡å¤–é¸é …"/> </layout_panel> </layout_stack> <layout_stack name="bottom_bar_ls3"> <layout_panel name="profile_btn_lp"> - <button label="Profile" name="profile_btn" tool_tip="Show place profile"/> + <button label="檔案" name="profile_btn" tool_tip="顯示地點檔案"/> </layout_panel> </layout_stack> <layout_stack name="bottom_bar_close_ls3"> @@ -41,7 +41,7 @@ <button label="儲å˜" name="save_btn"/> </layout_panel> <layout_panel name="cancel_btn_lp"> - <button label="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" name="cancel_btn"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/zh/panel_preferences_advanced.xml index ad137e9dd4f305854ae2211d2838dfe9bc9a8abf..c5dce10d638740c7611e409b91786b191cbb4f46 100644 --- a/indra/newview/skins/default/xui/zh/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_advanced.xml @@ -9,7 +9,7 @@ <check_box label="é¡¯ç¤ºè…³æœ¬éŒ¯èª¤è¨Šæ¯æ–¼ï¼š" name="show_script_errors"/> <radio_group name="show_location"> <radio_item label="附近的èŠå¤©ä¸" name="0"/> - <radio_item label="分開的試窗ä¸" name="1"/> + <radio_item label="分開的視窗ä¸" name="1"/> </radio_group> <check_box label="å…è¨±åŒæ™‚執行多個ç€è¦½å™¨" name="allow_multiple_viewer_check"/> <check_box label="ç™»å…¥æ™‚é¡¯ç¤ºç¶²æ ¼é¸æ“‡" name="show_grid_selection_check"/> diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml b/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml index cad8d75470b98b8572dd92ff7a7be22cc1e5f56a..c691edb11cb429d4de8d0f7bad38548533d89368 100644 --- a/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml @@ -9,16 +9,16 @@ <radio_item label="大" name="radio3" value="2"/> </radio_group> <check_box initial_value="true" label="èŠå¤©æ™‚æ’æ”¾æ‰“å—動作" name="play_typing_animation"/> - <check_box label="Email me IMs when I'm offline" name="send_im_to_email"/> + <check_box label="當我離線時將收到的 IM 訊æ¯éƒµå¯„給我" name="send_im_to_email"/> <check_box label="Enable plain text IM and chat history" name="plain_text_chat_history"/> <check_box label="èŠå¤©æ³¡æ³¡" name="bubble_text_chat"/> <text name="show_ims_in_label"> - Show IMs in: + 顯示 IMs 於: </text> <text name="requires_restart_label"> ï¼ˆé ˆé‡æ–°å•Ÿå‹•) </text> - <radio_group name="chat_window" tool_tip="Show your Instant Messages in separate floaters, or in one floater with many tabs (Requires restart)"> + <radio_group name="chat_window" tool_tip="é¡¯ç¤ºä½ çš„å³æ™‚訊æ¯åœ¨åˆ†é–‹çš„æµ®å‹•視窗,或是使用很多é ç±¤çš„å–®ä¸€æµ®å‹•è¦–çª—ï¼ˆé ˆé‡æ–°å•Ÿå‹•)"> <radio_item label="分開視窗" name="radio" value="0"/> <radio_item label="é 籤" name="radio2" value="1"/> </radio_group> @@ -26,14 +26,14 @@ Enable incoming chat popups: </text> <check_box label="Group Chats" name="EnableGroupChatPopups" tool_tip="Check to see popups when a Group Chat message arrives"/> - <check_box label="IM Chats" name="EnableIMChatPopups" tool_tip="Check to see popups when an instant message arrives"/> + <check_box label="IM èŠå¤©" name="EnableIMChatPopups" tool_tip="Check to see popups when an instant message arrives"/> <spinner label="Nearby chat toasts life time:" name="nearby_toasts_lifetime"/> <spinner label="Nearby chat toasts fading time:" name="nearby_toasts_fadingtime"/> <text name="translate_chb_label"> Use machine translation while chatting (powered by Google) </text> <text name="translate_language_text"> - Translate chat into: + èŠå¤©ç¿»è¯ç‚ºï¼š </text> <combo_box name="translate_language_combobox"> <combo_box.item label="系統é è¨" name="System Default Language"/> diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_colors.xml b/indra/newview/skins/default/xui/zh/panel_preferences_colors.xml index 261622d1365e2bfc6e89c9cd595efd3b1f9cdfb3..8d92eadd203c87be3277a5d0b8d776078f7c0c8b 100644 --- a/indra/newview/skins/default/xui/zh/panel_preferences_colors.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_colors.xml @@ -34,7 +34,7 @@ <color_swatch name="background" tool_tip="挑é¸å稱標籤é¡è‰²"/> <slider label="ä¸é€æ˜Žåº¦ï¼š" name="bubble_chat_opacity" tool_tip="挑é¸å稱標籤ä¸é€æ˜Žåº¦"/> <text name="floater_opacity"> - Floater Opacity: + 浮動視窗ä¸é€æ˜Žåº¦ï¼š </text> <slider label="啟用:" name="active"/> <slider label="åœç”¨ï¼š" name="inactive"/> diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_general.xml b/indra/newview/skins/default/xui/zh/panel_preferences_general.xml index 32b3508af5ba3d4c88cc01abcc6c240369742bb4..b7449dad10c5fe0227d7df418bd644b3441ea111 100644 --- a/indra/newview/skins/default/xui/zh/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_general.xml @@ -17,10 +17,10 @@ <combo_box.item label="日本語 (Japanese) - Beta" name="(Japanese)"/> </combo_box> <text name="language_textbox2"> - (Requires restart) + ï¼ˆé ˆé‡æ–°å•Ÿå‹•) </text> <text name="maturity_desired_prompt"> - I want to access content rated: + 我想è¦èƒ½é€²å‡ºå…§å®¹åˆ†ç´šçš„地å€ç‚ºï¼š </text> <combo_box name="maturity_desired_combobox"> <combo_box.item label="General, Moderate, Adult" name="Desired_Adult"/> @@ -36,34 +36,34 @@ </combo_box> <check_box initial_value="true" label="登入時顯示" name="show_location_checkbox"/> <text name="name_tags_textbox"> - Name tags: + å稱標籤: </text> <radio_group name="Name_Tag_Preference"> <radio_item label="Off" name="radio" value="0"/> <radio_item label="On" name="radio2" value="1"/> - <radio_item label="Show briefly" name="radio3" value="2"/> + <radio_item label="ç°¡çŸé¡¯ç¤º" name="radio3" value="2"/> </radio_group> - <check_box label="My name" name="show_my_name_checkbox1"/> - <check_box label="Usernames" name="show_slids" tool_tip="Show username, like bobsmith123"/> - <check_box label="Group titles" name="show_all_title_checkbox1" tool_tip="Show group titles, like Officer or Member"/> - <check_box label="Highlight friends" name="show_friends" tool_tip="Highlight the name tags of your friends"/> + <check_box label="我的åå—" name="show_my_name_checkbox1"/> + <check_box label="使用者å稱" name="show_slids" tool_tip="顯示使用者åç¨±ï¼Œå°±åƒ bobsmith123 這類的"/> + <check_box label="社團é 銜" name="show_all_title_checkbox1" tool_tip="顯示社團é éŠœï¼Œåƒæ˜¯ Officer 或æˆå“¡"/> + <check_box label="高亮顯示朋å‹" name="show_friends" tool_tip="é«˜äº®é¡¯ç¤ºä½ æœ‹å‹çš„å稱標籤"/> <check_box label="View Display Names" name="display_names_check" tool_tip="Check to use display names in chat, IM, name tags, etc."/> <text name="inworld_typing_rg_label"> - Pressing letter keys: + æŒ‰ä¸‹å—æ¯éµï¼š </text> <radio_group name="inworld_typing_preference"> - <radio_item label="Starts local chat" name="radio_start_chat" value="1"/> - <radio_item label="Affects movement (i.e. WASD)" name="radio_move" value="0"/> + <radio_item label="開始本地èŠå¤©" name="radio_start_chat" value="1"/> + <radio_item label="影響移動(例如 WASDéµï¼‰" name="radio_move" value="0"/> </radio_group> <text name="title_afk_text"> - Away timeout: + 離開逾時è¨å®šï¼š </text> - <combo_box label="Away timeout:" name="afk"> - <combo_box.item label="2 minutes" name="item0"/> - <combo_box.item label="5 minutes" name="item1"/> - <combo_box.item label="10 minutes" name="item2"/> - <combo_box.item label="30 minutes" name="item3"/> - <combo_box.item label="never" name="item4"/> + <combo_box label="離開逾時è¨å®šï¼š" name="afk"> + <combo_box.item label="2 分é˜" name="item0"/> + <combo_box.item label="5 分é˜" name="item1"/> + <combo_box.item label="10 分é˜" name="item2"/> + <combo_box.item label="30 分é˜" name="item3"/> + <combo_box.item label="絕ä¸" name="item4"/> </combo_box> <text name="text_box3"> 忙碌模å¼å›žæ‡‰ï¼š diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml index 642edff33644456695f2f1371af3d60b6ca37d0d..8c728bf7792c6ed8bc21ce241202b93b5a011d3f 100644 --- a/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Graphics" name="Display panel"> +<panel label="圖形" name="Display panel"> <text name="QualitySpeed"> Quality and speed: </text> @@ -21,7 +21,7 @@ <text name="ShadersPrefText4"> Ultra </text> - <panel label="CustomGraphics" name="CustomGraphics Panel"> + <panel label="自訂圖形" name="CustomGraphics Panel"> <text name="ShadersText"> Shaders: </text> @@ -35,15 +35,15 @@ <combo_box name="Reflections"> <combo_box.item label="Minimal" name="0"/> <combo_box.item label="Terrain and trees" name="1"/> - <combo_box.item label="All static objects" name="2"/> - <combo_box.item label="All avatars and objects" name="3"/> + <combo_box.item label="å…¨éƒ¨éœæ…‹ç‰©ä»¶" name="2"/> + <combo_box.item label="全部化身與物件" name="3"/> <combo_box.item label="Everything" name="4"/> </combo_box> <slider label="Avatar Physics:" name="AvatarPhysicsDetail"/> <text name="AvatarPhysicsDetailText"> Low </text> - <slider label="Draw distance:" name="DrawDistance"/> + <slider label="æç¹ªè·é›¢ï¼š" name="DrawDistance"/> <text name="DrawDistanceMeterText2"> m </text> diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_move.xml b/indra/newview/skins/default/xui/zh/panel_preferences_move.xml index acd0a54ebfa10039032e02cd83227dc0c241e57e..de296f72f3d12351f5d32f7ee472ef32c6b7f2e7 100644 --- a/indra/newview/skins/default/xui/zh/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_move.xml @@ -13,11 +13,11 @@ Mouselook mouse sensitivity: </text> <check_box label="å轉" name="invert_mouse"/> - <check_box label="Arrow keys always move me" name="arrow_keys_move_avatar_check"/> + <check_box label="總是使用方å‘éµç§»å‹•" name="arrow_keys_move_avatar_check"/> <check_box label="Tap-tap-hold to run" name="tap_tap_hold_to_run"/> - <check_box label="Double-Click to:" name="double_click_chkbox"/> + <check_box label="雙擊以D:" name="double_click_chkbox"/> <radio_group name="double_click_action"> - <radio_item label="Teleport" name="radio_teleport"/> + <radio_item label="瞬間傳é€" name="radio_teleport"/> <radio_item label="Auto-pilot" name="radio_autopilot"/> </radio_group> <button label="å…¶ä»–è¨å‚™" name="joystick_setup_button"/> diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml index 847798e7a02f6a3e84378caea15772158f69f1bd..89a1a48abf218e3d45d9bb7e98ac916595ea7658 100644 --- a/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml @@ -1,22 +1,22 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="æºé€š" name="im"> <panel.string name="log_in_to_change"> - log in to change + 登入以改變 </panel.string> <button label="清除æ·å²ç´€éŒ„" name="clear_cache" tool_tip="清除登入圖åƒã€æœ€å¾Œä½ç½®ã€çž¬é–“傳é€ç´€éŒ„ã€ç¶²é åŠæè³ªå¿«å–"/> <text name="cache_size_label_l"> - (ä½ç½®ã€åœ–åƒã€ç¶²é ã€æœå°‹çš„æ·ä½¿ç´€éŒ„ï¼‰ + (ä½ç½®ã€åœ–åƒã€ç¶²é ã€æœå°‹çš„æ·å²ç´€éŒ„) </text> <check_box label="將我顯示在æœå°‹çš„çµæžœä¸" name="online_searchresults"/> <check_box label="åªæœ‰æˆ‘的朋å‹å’Œç¤¾åœ˜çŸ¥é“我在線上" name="online_visibility"/> - <check_box label="Only friends and groups can call or IM me" name="voice_call_friends_only_check"/> - <check_box label="Switch off microphone when ending calls" name="auto_disengage_mic_check"/> - <check_box label="Show my Favorite Landmarks at Login (via 'Start At' drop-down menu)" name="favorites_on_login_check"/> + <check_box label="åªæœ‰æˆ‘的朋å‹å’Œç¤¾åœ˜å¯ä»¥ IM 或與我通話。" name="voice_call_friends_only_check"/> + <check_box label="ç•¶é€šè©±çµæŸæ™‚關閉麥克風" name="auto_disengage_mic_check"/> + <check_box label="登入時顯示我最愛的地標ä½ç½®ï¼ˆç¶“ç”± 'é–‹å§‹æ–¼' 的下拉å¼é¸å–®ï¼‰" name="favorites_on_login_check"/> <text name="Logs:"> èŠå¤©ç´€éŒ„: </text> <check_box label="儲å˜é™„è¿‘çš„èŠå¤©ç´€éŒ„到我的電腦" name="log_nearby_chat"/> - <check_box label="Save IM logs on my computer" name="log_instant_messages"/> + <check_box label="å„²å˜ IM 紀錄到我的電腦ä¸" name="log_instant_messages"/> <check_box label="æ·»åŠ æ™‚é–“æˆ³è¨˜åˆ°èŠå¤©ç´€éŒ„çš„æ¯ä¸€è¡Œ" name="show_timestamps_check_im"/> <check_box label="æ·»åŠ æ™‚é–“æˆ³è¨˜åˆ°ç´€éŒ„æª”æª”å。" name="logfile_name_datestamp"/> <text name="log_path_desc"> diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_sound.xml b/indra/newview/skins/default/xui/zh/panel_preferences_sound.xml index 0c6d8386e4def7f7098caa52178c5c0464893a8c..305d1e2ac9b1dc4958ced070d9f30b7e07ef3452 100644 --- a/indra/newview/skins/default/xui/zh/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_sound.xml @@ -10,29 +10,29 @@ </text> <slider label="按éµéŸ³" name="UI Volume"/> <slider label="Ambient" name="Wind Volume"/> - <slider label="Sound Effects" name="SFX Volume"/> - <slider label="Streaming music" name="Music Volume"/> - <check_box label="Enabled" name="enable_music"/> - <slider label="Media" name="Media Volume"/> - <check_box label="Enabled" name="enable_media"/> - <slider label="Voice Chat" name="Voice Volume"/> - <check_box label="Enabled" name="enable_voice_check"/> - <check_box label="Allow Media to auto-play" name="media_auto_play_btn" tool_tip="Check this to let media auto-play if it wants" value="true"/> - <check_box label="Play media attached to other avatars" name="media_show_on_others_btn" tool_tip="Uncheck this to hide media attached to other avatars nearby" value="true"/> + <slider label="音效" name="SFX Volume"/> + <slider label="串æµéŸ³æ¨‚" name="Music Volume"/> + <check_box label="已啟用" name="enable_music"/> + <slider label="媒體" name="Media Volume"/> + <check_box label="已啟用" name="enable_media"/> + <slider label="語音èŠå¤©" name="Voice Volume"/> + <check_box label="已啟用" name="enable_voice_check"/> + <check_box label="å…è¨±åª’é«”è‡ªå‹•æ’æ”¾" name="media_auto_play_btn" tool_tip="è‹¥ä½ æƒ³è¦ï¼Œå¯ä»¥å‹¾é¸é€™å€‹å…è¨±åª’é«”è‡ªå‹•æ’æ”¾" value="true"/> + <check_box label="æ’æ”¾é™„åŠ åˆ°å…¶ä»–åŒ–èº«èº«ä¸Šçš„åª’é«”" name="media_show_on_others_btn" tool_tip="Uncheck this to hide media attached to other avatars nearby" value="true"/> <text name="voice_chat_settings"> - Voice Chat Settings + 語音èŠå¤©è¨å®š </text> <text name="Listen from"> - Listen from: + 傾è½ä½ç½®ï¼š </text> <radio_group name="ear_location"> - <radio_item label="Camera position" name="0"/> - <radio_item label="Avatar position" name="1"/> + <radio_item label="æ”影機ä½ç½®" name="0"/> + <radio_item label="化身ä½ç½®" name="1"/> </radio_group> - <check_box label="Move avatar lips when speaking" name="enable_lip_sync"/> + <check_box label="èªªè©±æ™‚åŒæ¥ç§»å‹•化身嘴唇" name="enable_lip_sync"/> <check_box label="Toggle speak on/off when I press:" name="push_to_talk_toggle_check" tool_tip="When in toggle mode, press and release the trigger key ONCE to switch your microphone on or off. When not in toggle mode, the microphone broadcasts your voice only while the trigger is being held down."/> <line_editor label="Push-to-Speak trigger" name="modifier_combo"/> - <button label="Set Key" name="set_voice_hotkey_button"/> + <button label="è¨å®šæŒ‰éµ" name="set_voice_hotkey_button"/> <button name="set_voice_middlemouse_button" tool_tip="Reset to Middle Mouse Button"/> <button label="輸入 / 輸出è¨å‚™" name="device_settings_btn"/> <panel label="è¨å‚™è¨å®š" name="device_settings_panel"> @@ -49,11 +49,11 @@ 輸入 </text> <text name="My volume label"> - My volume: + 我的音é‡ï¼š </text> <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Change the volume using this slider"/> <text name="wait_text"> - Please wait + è«‹ç¨å€™ </text> <text name="Output"> 輸出 diff --git a/indra/newview/skins/default/xui/zh/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/zh/panel_prim_media_controls.xml index 71de9f861ac04756c7c901650af5952a013b6df9..8d0e2a635593178881364ab44e779c182683ea15 100644 --- a/indra/newview/skins/default/xui/zh/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/zh/panel_prim_media_controls.xml @@ -40,7 +40,7 @@ <button name="home_btn" tool_tip="Home page"/> </layout_panel> <layout_panel name="media_stop"> - <button name="media_stop_btn" tool_tip="Stop media"/> + <button name="media_stop_btn" tool_tip="åœæ¢åª’é«”"/> </layout_panel> <layout_panel name="reload"> <button name="reload_btn" tool_tip="Reload"/> diff --git a/indra/newview/skins/default/xui/zh/panel_profile.xml b/indra/newview/skins/default/xui/zh/panel_profile.xml index 88cd3a0e161f5769535dabe5530c9650000357c2..fcf7bb64db03104dea6802e07811594f5f8b0c4f 100644 --- a/indra/newview/skins/default/xui/zh/panel_profile.xml +++ b/indra/newview/skins/default/xui/zh/panel_profile.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Profile" name="panel_profile"> +<panel label="檔案" name="panel_profile"> <string name="CaptionTextAcctInfo"> [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION] @@ -30,15 +30,15 @@ <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/> </panel> <panel name="first_life_image_panel"> - <text name="title_rw_descr_text" value="Real World:"/> + <text name="title_rw_descr_text" value="真實世界:"/> </panel> - <text name="title_member_text" value="Resident Since:"/> - <text name="title_acc_status_text" value="Account Status:"/> - <text name="title_partner_text" value="Partner:"/> + <text name="title_member_text" value="æˆç‚ºå±…民自:"/> + <text name="title_acc_status_text" value="帳戶狀態:"/> + <text name="title_partner_text" value="é…å¶ï¼š"/> <panel name="partner_data_panel"> <text initial_value="(retrieving)" name="partner_text"/> </panel> - <text name="title_groups_text" value="Groups:"/> + <text name="title_groups_text" value="社團:"/> </panel> </scroll_container> </layout_panel> @@ -50,16 +50,16 @@ <button label="åŠ ç‚ºæœ‹å‹" name="add_friend" tool_tip="Offer friendship to the Resident"/> </layout_panel> <layout_panel name="im_btn_lp"> - <button label="IM" name="im" tool_tip="Open instant message session"/> + <button label="IM" name="im" tool_tip="é–‹å•Ÿå³æ™‚è¨Šæ¯æœƒè©±"/> </layout_panel> <layout_panel name="call_btn_lp"> - <button label="Call" name="call" tool_tip="Call this Resident"/> + <button label="通話" name="call" tool_tip="與這ä½å±…民通話"/> </layout_panel> <layout_panel name="chat_btn_lp"> - <button label="Teleport" name="teleport" tool_tip="Offer teleport"/> + <button label="瞬間傳é€" name="teleport" tool_tip="Offer teleport"/> </layout_panel> <layout_panel name="overflow_btn_lp"> - <menu_button label="â–¼" name="overflow_btn" tool_tip="Pay money to or share inventory with the Resident"/> + <menu_button label="â–¼" name="overflow_btn" tool_tip="支付金錢,或分享收ç´å€çµ¦å±…æ°‘"/> </layout_panel> </layout_stack> </layout_panel> diff --git a/indra/newview/skins/default/xui/zh/panel_profile_view.xml b/indra/newview/skins/default/xui/zh/panel_profile_view.xml index 0f30d5dcbe7feed9ce9e92da4771b1a26dd120fe..12fe776e450943513505f7615344c1c2b94d2fb3 100644 --- a/indra/newview/skins/default/xui/zh/panel_profile_view.xml +++ b/indra/newview/skins/default/xui/zh/panel_profile_view.xml @@ -7,14 +7,14 @@ Offline </string> <text name="display_name_label" value="Display Name:"/> - <text name="solo_username_label" value="Username:"/> + <text name="solo_username_label" value="使用者å稱:"/> <text name="status" value="Online"/> <text name="user_name_small" value="Jack oh look at me this is a super duper long name"/> <button name="copy_to_clipboard" tool_tip="覆製到剪貼簿"/> - <text name="user_label" value="Username:"/> + <text name="user_label" value="使用者å稱:"/> <tab_container name="tabs"> - <panel label="PROFILE" name="panel_profile"/> - <panel label="PICKS" name="panel_picks"/> + <panel label="檔案" name="panel_profile"/> + <panel label="ç²¾é¸åœ°é»ž" name="panel_picks"/> <panel label="NOTES & PRIVACY" name="panel_notes"/> </tab_container> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_region_covenant.xml b/indra/newview/skins/default/xui/zh/panel_region_covenant.xml index 2e52efb804a750f68be409117fe62ae3f740995a..315bc0ac8eace178d5e5f7a74b01a17dc42937b3 100644 --- a/indra/newview/skins/default/xui/zh/panel_region_covenant.xml +++ b/indra/newview/skins/default/xui/zh/panel_region_covenant.xml @@ -62,18 +62,18 @@ 分級: </text> <text name="region_maturity_text"> - Adult + æˆäºº </text> <text name="resellable_lbl"> - Resale: + 轉售: </text> <text name="resellable_clause"> - Land in this region may not be resold. + 這地å€çš„土地ä¸èƒ½è½‰å”®ã€‚ </text> <text name="changeable_lbl"> - Subdivide: + 分割: </text> <text name="changeable_clause"> - Land in this region may not be joined/subdivided. + 這地å€çš„土地ä¸èƒ½åˆä½µæˆ–分割。 </text> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_region_debug.xml b/indra/newview/skins/default/xui/zh/panel_region_debug.xml index 892b743f57276d04fabf149e577dd77fe2c69543..1ffbcbf8fd00380f19fe0a6d1150657298cac92a 100644 --- a/indra/newview/skins/default/xui/zh/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/zh/panel_region_debug.xml @@ -6,29 +6,29 @@ <text name="region_text"> 未知 </text> - <check_box label="Disable Scripts" name="disable_scripts_check" tool_tip="Disable all scripts in this region"/> + <check_box label="關閉腳本" name="disable_scripts_check" tool_tip="關閉這個地å€ç¾åœ¨çš„全部腳本"/> <check_box label="Disable Collisions" name="disable_collisions_check" tool_tip="Disable non-avatar collisions in this region"/> <check_box label="Disable Physics" name="disable_physics_check" tool_tip="Disable all physics in this region"/> <button label="套用" name="apply_btn"/> <text name="objret_text_lbl"> - Object Return + 物件退回 </text> <text name="resident_text_lbl"> - Resident: + 居民: </text> <line_editor name="target_avatar_name"> (無) </line_editor> - <button label="Choose" name="choose_avatar_btn"/> + <button label="鏿“‡" name="choose_avatar_btn"/> <text name="options_text_lbl"> - Options: + é¸é …: </text> - <check_box label="With scripts" name="return_scripts" tool_tip="Return only objects which have scripts"/> + <check_box label="With scripts" name="return_scripts" tool_tip="åªé€€å›žR包å«è…³æœ¬çš„物件"/> <check_box label="On someone else's land" name="return_other_land" tool_tip="Return only objects which are on land belonging to someone else"/> <check_box label="In every region of this estate" name="return_estate_wide" tool_tip="Return objects in all of the regions that make up this estate"/> - <button label="Return" name="return_btn"/> + <button label="退回" name="return_btn"/> <button label="Get Top Colliders..." name="top_colliders_btn" tool_tip="List of objects experiencing the most potential collisions"/> <button label="Get Top Scripts..." name="top_scripts_btn" tool_tip="List of objects spending the most time running scripts"/> - <button label="Restart Region" name="restart_btn" tool_tip="Give 2 minute countdown and restart region"/> - <button label="Delay Restart" name="cancel_restart_btn" tool_tip="Delay region restart by one hour"/> + <button label="地å€é‡æ–°å•Ÿå‹•" name="restart_btn" tool_tip="給予兩分é˜å€’æ•¸è¨ˆæ™‚ä¸¦é‡æ–°å•Ÿå‹•"/> + <button label="å»¶é²é‡æ–°å•Ÿå‹•" name="cancel_restart_btn" tool_tip="å»¶é²åœ°å€é‡æ–°å•Ÿå‹•䏀尿™‚"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_region_estate.xml b/indra/newview/skins/default/xui/zh/panel_region_estate.xml index 687135bf659488519d99b476905d758323859db1..1f1676167bbb4fadd9efdc8378e993494d6b9825 100644 --- a/indra/newview/skins/default/xui/zh/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/zh/panel_region_estate.xml @@ -24,29 +24,29 @@ </text> <check_box label="Payment Information on File" name="limit_payment" tool_tip="Ban unidentified Residents"/> <check_box label="年齡驗è‰" name="limit_age_verified" tool_tip="Ban Residents who have not verified their age. See the [SUPPORT_SITE] for more information."/> - <check_box label="Allow Voice Chat" name="voice_chat_check"/> - <check_box label="Allow Direct Teleport" name="allow_direct_teleport"/> + <check_box label="å…許語音èŠå¤©" name="voice_chat_check"/> + <check_box label="å…許直接瞬間傳é€" name="allow_direct_teleport"/> <button label="套用" name="apply_btn"/> - <button label="Send Message To Estate..." name="message_estate_btn"/> - <button label="Kick Resident from Estate..." name="kick_user_from_estate_btn"/> + <button label="é€å‡ºè¨Šæ¯åˆ°é ˜åœ°..." name="message_estate_btn"/> + <button label="ç”±é ˜åœ°å°‡å±…æ°‘è¸¢å‡º..." name="kick_user_from_estate_btn"/> <text name="estate_manager_label"> é ˜åœ°ç®¡ç†å“¡ï¼š </text> - <button label="Remove..." name="remove_estate_manager_btn"/> - <button label="Add..." name="add_estate_manager_btn"/> + <button label="移除..." name="remove_estate_manager_btn"/> + <button label="æ·»åŠ ..." name="add_estate_manager_btn"/> <text name="allow_resident_label"> - Allowed Residents: + å…許的居民: </text> - <button label="Remove..." name="remove_allowed_avatar_btn"/> - <button label="Add..." name="add_allowed_avatar_btn"/> + <button label="移除..." name="remove_allowed_avatar_btn"/> + <button label="æ·»åŠ ..." name="add_allowed_avatar_btn"/> <text name="allow_group_label"> - Allowed Groups: + å…許的社團: </text> - <button label="Remove..." name="remove_allowed_group_btn"/> - <button label="Add..." name="add_allowed_group_btn"/> + <button label="移除..." name="remove_allowed_group_btn"/> + <button label="æ·»åŠ ..." name="add_allowed_group_btn"/> <text name="ban_resident_label"> - Banned Residents: + 被å°éŽ–çš„å±…æ°‘ï¼š </text> - <button label="Remove..." name="remove_banned_avatar_btn"/> - <button label="Add..." name="add_banned_avatar_btn"/> + <button label="移除..." name="remove_banned_avatar_btn"/> + <button label="æ·»åŠ ..." name="add_banned_avatar_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_region_general.xml b/indra/newview/skins/default/xui/zh/panel_region_general.xml index ce69ec59c4796f57a64bc6edfc4ad406f4af64e3..dce75c997df4df30c4e9358f28f9c5df9a4aeaf5 100644 --- a/indra/newview/skins/default/xui/zh/panel_region_general.xml +++ b/indra/newview/skins/default/xui/zh/panel_region_general.xml @@ -7,7 +7,7 @@ 未知 </text> <text name="version_channel_text_lbl"> - Version: + 版本: </text> <text name="version_channel_text"> 未知 @@ -22,22 +22,22 @@ <check_box label="Block Fly" name="block_fly_check"/> <check_box label="Allow Damage" name="allow_damage_check"/> <check_box label="Restrict Pushing" name="restrict_pushobject"/> - <check_box label="Allow Land Resell" name="allow_land_resell_check"/> - <check_box label="Allow Land Join/Divide" name="allow_parcel_changes_check"/> - <check_box label="Block Land Show in Search" name="block_parcel_search_check" tool_tip="Let people see this region and its parcels in search results"/> - <spinner label="Agent Limit" name="agent_limit_spin"/> + <check_box label="å…許土地轉售" name="allow_land_resell_check"/> + <check_box label="å…許土地 åˆä½µ/分割" name="allow_parcel_changes_check"/> + <check_box label="阻擋土地顯示於æœå°‹ä¸" name="block_parcel_search_check" tool_tip="Let people see this region and its parcels in search results"/> + <spinner label="人數上é™" name="agent_limit_spin"/> <spinner label="Object Bonus" name="object_bonus_spin"/> <text label="Maturity" name="access_text"> 分級: </text> <icons_combo_box label="Moderate" name="access_combo"> - <icons_combo_box.item label="Adult" name="Adult" value="42"/> + <icons_combo_box.item label="æˆäºº" name="Adult" value="42"/> <icons_combo_box.item label="Moderate" name="Mature" value="21"/> <icons_combo_box.item label="一般" name="PG" value="13"/> </icons_combo_box> <button label="套用" name="apply_btn"/> - <button label="Teleport Home One Resident..." name="kick_btn"/> - <button label="Teleport Home All Residents..." name="kick_all_btn"/> - <button label="Send Message To Region..." name="im_btn"/> - <button label="Manage Telehub..." name="manage_telehub_btn"/> + <button label="強制瞬間傳é€ä¸€ä½å±…民回家..." name="kick_btn"/> + <button label="å¼·åˆ¶çž¬é–“å‚³é€æ‰€æœ‰å±…民回家..." name="kick_all_btn"/> + <button label="é€å‡ºè¨Šæ¯åˆ°åœ°å€..." name="im_btn"/> + <button label="管ç†çž¬é–“傳é€ä¸å¿ƒ..." name="manage_telehub_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_region_terrain.xml b/indra/newview/skins/default/xui/zh/panel_region_terrain.xml index 0269c8f7345c5b7398bfeb970ccbeac02101ac24..0622cb4e739f4adbe1e6aa2227c35e97ae483d87 100644 --- a/indra/newview/skins/default/xui/zh/panel_region_terrain.xml +++ b/indra/newview/skins/default/xui/zh/panel_region_terrain.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Terrain" name="Terrain"> +<panel label="地形" name="Terrain"> <text name="region_text_lbl"> 地å€ï¼š </text> @@ -14,6 +14,6 @@ <slider label="Phase" name="sun_hour_slider"/> <button label="套用" name="apply_btn"/> <button label="Download RAW terrain..." name="download_raw_btn" tool_tip="Available only to estate owners, not managers"/> - <button label="Upload RAW terrain..." name="upload_raw_btn" tool_tip="Available only to estate owners, not managers"/> + <button label="上傳 RAW 地形檔..." name="upload_raw_btn" tool_tip="Available only to estate owners, not managers"/> <button label="Bake Terrain" name="bake_terrain_btn" tool_tip="Set current terrain as mid-point for raise/lower limits"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_region_texture.xml b/indra/newview/skins/default/xui/zh/panel_region_texture.xml index 42d70fddb8a5b4cfa319f85b1a0a5b953b9c278f..7b6152121fb91a44f2e6a0b16f0dbf96aae41cb8 100644 --- a/indra/newview/skins/default/xui/zh/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/zh/panel_region_texture.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Ground Textures" name="Textures"> +<panel label="åœ°é¢æè³ª" name="Textures"> <text name="region_text_lbl"> 地å€ï¼š </text> @@ -7,7 +7,7 @@ 未知 </text> <text name="detail_texture_text"> - Terrain Textures (requires 512x512, 24 bit .tga files) + 地形æè³ªï¼ˆé ˆ 512x512,24 ä½å…ƒ .tga æª”æ ¼å¼ï¼‰ </text> <text name="height_text_lbl"> 1 (Low) diff --git a/indra/newview/skins/default/xui/zh/panel_script_ed.xml b/indra/newview/skins/default/xui/zh/panel_script_ed.xml index b0f1bdb337139d112552810fc0eab3905ec9ac4a..e42d904f32c636c267ff42a6a527c2d6b0839973 100644 --- a/indra/newview/skins/default/xui/zh/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/zh/panel_script_ed.xml @@ -10,38 +10,38 @@ Public Objects cannot run scripts </panel.string> <panel.string name="script_running"> - Running + åŸ·è¡Œä¸ </panel.string> <panel.string name="Title"> - Script: [NAME] + 腳本:[NAME] </panel.string> <panel.string name="external_editor_not_set"> Select an editor by setting the environment variable LL_SCRIPT_EDITOR or the ExternalEditor setting. </panel.string> <menu_bar name="script_menu"> - <menu label="File" name="File"> + <menu label="檔案" name="File"> <menu_item_call label="儲å˜" name="Save"/> - <menu_item_call label="Revert All Changes" name="Revert All Changes"/> + <menu_item_call label="還原全部變更" name="Revert All Changes"/> </menu> <menu label="編輯" name="Edit"> <menu_item_call label="復原" name="Undo"/> - <menu_item_call label="Redo" name="Redo"/> + <menu_item_call label="é‡åš" name="Redo"/> <menu_item_call label="剪下" name="Cut"/> <menu_item_call label="覆製" name="Copy"/> <menu_item_call label="貼上" name="Paste"/> <menu_item_call label="å…¨é¸" name="Select All"/> - <menu_item_call label="Deselect" name="Deselect"/> + <menu_item_call label="å–æ¶ˆé¸æ“‡" name="Deselect"/> <menu_item_call label="æœå°‹ / å–代..." name="Search / Replace..."/> </menu> - <menu label="Help" name="Help"> - <menu_item_call label="Help..." name="Help..."/> - <menu_item_call label="Keyword Help..." name="Keyword Help..."/> + <menu label="幫助" name="Help"> + <menu_item_call label="幫助..." name="Help..."/> + <menu_item_call label="é—œéµå—幫助..." name="Keyword Help..."/> </menu> </menu_bar> <text_editor name="Script Editor"> 載入ä¸... </text_editor> - <combo_box label="Insert..." name="Insert..."/> + <combo_box label="æ’å…¥..." name="Insert..."/> <button label="儲å˜" label_selected="儲å˜" name="Save_btn"/> <button label="編輯..." name="Edit_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/zh/panel_script_limits_my_avatar.xml index 52764661174607880c4df7418db3100b661280f1..32cc2f9a5df4f97db301be519077d3a6c190e74c 100644 --- a/indra/newview/skins/default/xui/zh/panel_script_limits_my_avatar.xml +++ b/indra/newview/skins/default/xui/zh/panel_script_limits_my_avatar.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="MY AVATAR" name="script_limits_my_avatar_panel"> +<panel label="我的化身" name="script_limits_my_avatar_panel"> <text name="script_memory"> Avatar Script Usage </text> @@ -7,10 +7,10 @@ 載入ä¸... </text> <scroll_list name="scripts_list"> - <scroll_list.columns label="Size (kb)" name="size"/> + <scroll_list.columns label="尺寸(kb)" name="size"/> <scroll_list.columns label="URLs" name="urls"/> <scroll_list.columns label="物件å稱" name="name"/> - <scroll_list.columns label="Location" name="location"/> + <scroll_list.columns label="ä½ç½®" name="location"/> </scroll_list> <button label="Refresh List" name="refresh_list_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/zh/panel_script_limits_region_memory.xml index 1dc8278db18c38c73910581d9d5ff3813b2a4c59..950abbfb4c6745a0730039bdf493d1e239174dc7 100644 --- a/indra/newview/skins/default/xui/zh/panel_script_limits_region_memory.xml +++ b/indra/newview/skins/default/xui/zh/panel_script_limits_region_memory.xml @@ -1,20 +1,20 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="REGION MEMORY" name="script_limits_region_memory_panel"> +<panel label="地å€è¨˜æ†¶é«”" name="script_limits_region_memory_panel"> <text name="script_memory"> - Parcel Script Memory + 地段腳本記憶體 </text> <text name="loading_text"> 載入ä¸... </text> <scroll_list name="scripts_list"> - <scroll_list.columns label="Size (kb)" name="size"/> + <scroll_list.columns label="尺寸(kb)" name="size"/> <scroll_list.columns label="URLs" name="urls"/> <scroll_list.columns label="物件å稱" name="name"/> - <scroll_list.columns label="Object Owner" name="owner"/> + <scroll_list.columns label="ç‰©ä»¶æ“æœ‰è€…" name="owner"/> <scroll_list.columns label="地段" name="parcel"/> - <scroll_list.columns label="Location" name="location"/> + <scroll_list.columns label="ä½ç½®" name="location"/> </scroll_list> <button label="Refresh List" name="refresh_list_btn"/> <button label="Highlight" name="highlight_btn"/> - <button label="Return" name="return_btn"/> + <button label="退回" name="return_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_side_tray.xml b/indra/newview/skins/default/xui/zh/panel_side_tray.xml index d99450b5be5f1d3e030d184ebc692ba980b44e5c..625213e376ded39aa3e08381fc4ab61eff66243c 100644 --- a/indra/newview/skins/default/xui/zh/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/zh/panel_side_tray.xml @@ -2,28 +2,28 @@ <!-- Side tray cannot show background because it is always partially on screen to hold tab buttons. --> <side_tray name="sidebar"> - <sidetray_tab description="Toggle Sidebar." name="sidebar_openclose" tab_title="Toggle Sidebar"/> + <sidetray_tab description="å´é‚Šæ¬„切æ›ã€‚" name="sidebar_openclose" tab_title="å´é‚Šæ¬„切æ›"/> <sidetray_tab description="首é 。" name="sidebar_home" tab_title="首é "> <panel label="首é " name="panel_home"/> </sidetray_tab> - <sidetray_tab description="Edit your public profile and Picks." name="sidebar_me" tab_title="My Profile"> + <sidetray_tab description="ç·¨è¼¯ä½ çš„å…¬é–‹æª”æ¡ˆåŠç²¾é¸åœ°é»žã€‚" name="sidebar_me" tab_title="我的檔案"> <panel_container name="panel_container"> <panel label="自己" name="panel_me"/> </panel_container> </sidetray_tab> <sidetray_tab description="Find your friends, contacts and people nearby." name="sidebar_people" tab_title="People"> <panel_container name="panel_container"> - <panel label="Group Profile" name="panel_group_info_sidetray"/> + <panel label="社團檔案" name="panel_group_info_sidetray"/> <panel label="Blocked Residents & Objects" name="panel_block_list_sidetray"/> </panel_container> </sidetray_tab> - <sidetray_tab description="Find places to go and places you've visited before." label="Places" name="sidebar_places" tab_title="Places"> - <panel label="Places" name="panel_places"/> + <sidetray_tab description="Find places to go and places you've visited before." label="地點" name="sidebar_places" tab_title="地點"> + <panel label="地點" name="panel_places"/> </sidetray_tab> - <sidetray_tab description="Browse your inventory." name="sidebar_inventory" tab_title="My Inventory"> - <panel label="Edit Inventory" name="sidepanel_inventory"/> + <sidetray_tab description="ç€è¦½ä½ 的收ç´å€ã€‚" name="sidebar_inventory" tab_title="我的收ç´å€"> + <panel label="編輯收ç´å€" name="sidepanel_inventory"/> </sidetray_tab> - <sidetray_tab description="Change your appearance and current look." name="sidebar_appearance" tab_title="My Appearance"> - <panel label="Edit Appearance" name="sidepanel_appearance"/> + <sidetray_tab description="è®Šæ›´ä½ çš„å¤–è§€èˆ‡ç›®å‰æ¨£è²Œã€‚" name="sidebar_appearance" tab_title="我的外觀"> + <panel label="編輯外觀" name="sidepanel_appearance"/> </sidetray_tab> </side_tray> diff --git a/indra/newview/skins/default/xui/zh/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/zh/panel_side_tray_tab_caption.xml index 822b2b5894b9a1c2cbe649c9fd5a4d2d61d3fc3d..cdd79da30c3c9e650b76a7ff06d97ca99cf9da8c 100644 --- a/indra/newview/skins/default/xui/zh/panel_side_tray_tab_caption.xml +++ b/indra/newview/skins/default/xui/zh/panel_side_tray_tab_caption.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="sidetray_tab_panel"> <text name="sidetray_tab_title" value="å´é‚Šæ¬„"/> - <button name="undock" tool_tip="Undock"/> - <button name="dock" tool_tip="Dock"/> - <button name="show_help" tool_tip="Show Help"/> + <button name="undock" tool_tip="ä¸åœæ³Šå›ºå®š"/> + <button name="dock" tool_tip="åœæ³Šå›ºå®š"/> + <button name="show_help" tool_tip="顯示幫助"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/zh/panel_stand_stop_flying.xml index 279a9869a896a5cdfb84664d1e00914580a48c8d..1dd3acef5d0abdf64d2e18c3b1c127b5d247b39b 100644 --- a/indra/newview/skins/default/xui/zh/panel_stand_stop_flying.xml +++ b/indra/newview/skins/default/xui/zh/panel_stand_stop_flying.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!-- Width and height of this panel should be synchronized with "panel_modes" in the floater_moveview.xml--> <panel name="panel_stand_stop_flying"> - <button label="Stand" name="stand_btn" tool_tip="Click here to stand up."/> - <button label="Stop Flying" name="stop_fly_btn" tool_tip="Stop flying"/> + <button label="站立" name="stand_btn" tool_tip="點擊æ¤è™•起立。"/> + <button label="åœæ¢é£›è¡Œ" name="stop_fly_btn" tool_tip="åœæ¢é£›è¡Œ"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_status_bar.xml b/indra/newview/skins/default/xui/zh/panel_status_bar.xml index 65740f1b6d202df585563afeb591f4f2f27b894f..9a59d627d08818068e8fefcfa51dbb7c153e4a70 100644 --- a/indra/newview/skins/default/xui/zh/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/zh/panel_status_bar.xml @@ -17,11 +17,11 @@ </panel.string> <panel name="balance_bg"> <text name="balance" tool_tip="Click to refresh your L$ balance" value="L$20"/> - <button label="購買 L$" name="buyL" tool_tip="Click to buy more L$"/> + <button label="購買 L$" name="buyL" tool_tip="點擊以購買更多 L$"/> </panel> - <text name="TimeText" tool_tip="Current time (Pacific)"> + <text name="TimeText" tool_tip="ç›®å‰æ™‚å€ï¼ˆå¤ªå¹³æ´‹ï¼‰"> 24:00 AM PST </text> - <button name="media_toggle_btn" tool_tip="Start/Stop All Media (Music, Video, Web pages)"/> + <button name="media_toggle_btn" tool_tip="é–‹å§‹ / åœæ¢å…¨éƒ¨åª’體(音樂ã€å½±ç‰‡ã€ç¶²é )"/> <button name="volume_btn" tool_tip="Global Volume Control"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_teleport_history.xml b/indra/newview/skins/default/xui/zh/panel_teleport_history.xml index 872a4584bfd4956ec7e85adb0f6aa9c3660b4059..a2a63db0007e53569efeb2cceb56b093f8898f34 100644 --- a/indra/newview/skins/default/xui/zh/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/zh/panel_teleport_history.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="Teleport History"> <accordion name="history_accordion"> - <no_matched_tabs_text name="no_matched_teleports_msg" value="Didn't find what you're looking for? Try [secondlife:///app/search/places/[SEARCH_TERM] Search]."/> - <no_visible_tabs_text name="no_teleports_msg" value="Teleport history is empty. Try [secondlife:///app/search/places/ Search]."/> + <no_matched_tabs_text name="no_matched_teleports_msg" value="沒有發ç¾ä½ è¦æ‰¾çš„嗎?試試 [secondlife:///app/search/places/[SEARCH_TERM] æœå°‹]。"/> + <no_visible_tabs_text name="no_teleports_msg" value="瞬間傳é€ç´€éŒ„是空白的。試試 [secondlife:///app/search/places/ Search]。"/> <accordion_tab name="today" title="今天"/> <accordion_tab name="yesterday" title="昨天"/> <accordion_tab name="2_days_ago" title="å‰å¤©"/> @@ -14,6 +14,6 @@ <accordion_tab name="6_months_and_older" title="åŠå¹´å‰æˆ–æ›´ä¹…"/> </accordion> <panel name="bottom_panel"> - <menu_button name="gear_btn" tool_tip="Show additional options"/> + <menu_button name="gear_btn" tool_tip="顯示é¡å¤–é¸é …"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/zh/role_actions.xml b/indra/newview/skins/default/xui/zh/role_actions.xml index 196f8c7a6a6e889d01c46beef0a63fbfaec46866..534c0f39fc0e182206267b8fcb6b22878279e8f0 100644 --- a/indra/newview/skins/default/xui/zh/role_actions.xml +++ b/indra/newview/skins/default/xui/zh/role_actions.xml @@ -2,16 +2,16 @@ <role_actions> <action_set description="These Abilities include powers to add and remove group Members, and allow new Members to join without an invitation." name="Membership"> <action description="Invite People to this Group" longdescription="Invite People to this Group using the 'Invite' button in the Roles section > Members tab." name="member invite" value="1"/> - <action description="Eject Members from this Group" longdescription="Eject Members from this Group using the 'Eject' button in the Roles section > Members tab. An Owner can eject anyone except another Owner. If you're not an Owner, a Member can be ejected from a group if, and only if, they're only in the Everyone Role, and NO other Roles. To remove Members from Roles, you need to have the 'Remove Members from Roles' Ability." name="member eject" value="2"/> + <action description="將會員由這個社團ä¸è¸¢å‡º" longdescription="Eject Members from this Group using the 'Eject' button in the Roles section > Members tab. An Owner can eject anyone except another Owner. If you're not an Owner, a Member can be ejected from a group if, and only if, they're only in the Everyone Role, and NO other Roles. To remove Members from Roles, you need to have the 'Remove Members from Roles' Ability." name="member eject" value="2"/> <action description="Toggle 'Open Enrollment' and change 'Enrollment fee'" longdescription="Toggle 'Open Enrollment' to let new Members join without an invitation, and change the 'Enrollment fee' in the General section." name="member options" value="3"/> </action_set> <action_set description="These Abilities include powers to add, remove, and change group Roles, add and remove Members in Roles, and assign Abilities to Roles." name="Roles"> <action description="Create new Roles" longdescription="Create new Roles in the Roles section > Roles tab." name="role create" value="4"/> - <action description="Delete Roles" longdescription="Delete Roles in the Roles section > Roles tab." name="role delete" value="5"/> + <action description="刪除角色" longdescription="Delete Roles in the Roles section > Roles tab." name="role delete" value="5"/> <action description="Change Role names, titles, descriptions, and whether Role members are publicly revealed" longdescription="Change Role names, titles, descriptions, and whether Role members are publicly revealed. This is done at the bottom of the the Roles section > Roles tab after selecting a Role." name="role properties" value="6"/> <action description="Assign Members to Assigner's Roles" longdescription="Assign Members to Roles in the list of Assigned Roles (Roles section > Members tab). A Member with this Ability can only add Members to a Role that the assigner is already in." name="role assign member limited" value="7"/> <action description="Assign Members to Any Role" longdescription="Assign Members to Any Role in the list of Assigned Roles (Roles section > Members tab). *WARNING* Any Member in a Role with this Ability can assign themselves--and any other non-Owner Member--to Roles that have more powers than they currently have, potentially elevating themselves to near-Owner power. Be sure you know what you're doing before assigning this Ability." name="role assign member" value="8"/> - <action description="Remove Members from Roles" longdescription="Remove Members from Roles in the list of Assigned Roles (Roles section > Members tab). Owners can't be removed." name="role remove member" value="9"/> + <action description="由角色ä¸ç§»é™¤æˆå“¡" longdescription="Remove Members from Roles in the list of Assigned Roles (Roles section > Members tab). Owners can't be removed." name="role remove member" value="9"/> <action description="Assign and Remove Abilities in Roles" longdescription="Assign and Remove Abilities for each Role in the list of Allowed Abilities (Roles section > Roles tab). *WARNING* Any Member in a Role with this Ability can assign themselves--and any other non-Owner Member--all Abilities, potentially elevating themselves to near-Owner power. Be sure you know what you're doing before assigning this Ability." name="role change actions" value="10"/> </action_set> <action_set description="These Abilities include powers to modify this group's identity, such as changing public visibility, charter, and insignia." name="Group Identity"> @@ -37,7 +37,7 @@ <action description="Always allow 'Edit Terrain'" longdescription="Members in a Role with this Ability can edit terrain on a group-owned parcel, even if it's turned off in About Land > Options tab." name="land allow edit land" value="23"/> <action description="Always allow 'Fly'" longdescription="Members in a Role with this Ability can fly on a group-owned parcel, even if it's turned off in About Land > Options tab." name="land allow fly" value="24"/> <action description="Always allow 'Create Objects'" longdescription="Members in a Role with this Ability can create objects on a group-owned parcel, even if it's turned off in About Land > Options tab." name="land allow create" value="25"/> - <action description="Always allow 'Create Landmark'" longdescription="Members in a Role with this Ability can landmark a group-owned parcel, even if it's turned off in About Land > Options tab." name="land allow landmark" value="26"/> + <action description="總是å…許 'å‰µé€ åœ°æ¨™'" longdescription="Members in a Role with this Ability can landmark a group-owned parcel, even if it's turned off in About Land > Options tab." name="land allow landmark" value="26"/> <action description="Allow 'Set Home to Here' on group land" longdescription="Members in a Role with this Ability can use World menu > Landmarks > Set Home to Here on a parcel deeded to this group." name="land allow set home" value="28"/> <action description="Allow 'Event Hosting' on group land" longdescription="Members in a Role with this Ability can select group owned parcels as venus when hosting an event." name="land allow host event" value="41"/> </action_set> @@ -45,7 +45,7 @@ <action description="Manage parcel Access lists" longdescription="Manage parcel Access lists in About Land > Access tab." name="land manage allowed" value="29"/> <action description="Manage parcel Ban lists" longdescription="Manage parcel Ban lists in About Land > Access tab." name="land manage banned" value="30"/> <action description="Change parcel 'Sell passes to' settings" longdescription="Change parcel 'Sell passes to' settings in About Land > Access tab." name="land manage passes" value="31"/> - <action description="Eject and freeze Residents on parcels" longdescription="Members in a Role with this Ability can handle an unwelcome Resident on a group-owned parcel by right-clicking them, then selecting 'Eject' or 'Freeze'." name="land admin" value="32"/> + <action description="將地段內的居民踢出åŠå‡çµ" longdescription="Members in a Role with this Ability can handle an unwelcome Resident on a group-owned parcel by right-clicking them, then selecting 'Eject' or 'Freeze'." name="land admin" value="32"/> </action_set> <action_set description="These Abilities include powers to allow members to return objects and place and move Linden plants. This is useful for Members to clean up litter and do landscaping, but it should also be used with care, because there's no undo for returning objects." name="Parcel Content"> <action description="Return objects owned by group" longdescription="Return objects on group-owned parcels that are owned by the group in About Land > Objects tab." name="land return group owned" value="48"/> @@ -62,8 +62,8 @@ <action description="Pay group liabilities and receive group dividends" longdescription="Members in a Role with this Ability will automatically pay group liabilities and receive group dividends. This means they will receive a portion of group-owned land sales which are distributed daily, as well as contribute towards things like parcel listing fees." name="accounting accountable" value="40"/> </action_set> <action_set description="These Abilities include powers to allow Members to send, receive, and view group Notices." name="Notices"> - <action description="Send Notices" longdescription="Members in a Role with this Ability can send Notices via the Group > Notices section." name="notices send" value="42"/> - <action description="Receive Notices and view past Notices" longdescription="Members in a Role with this Ability can receive Notices and view past Notices in Group > Notices section." name="notices receive" value="43"/> + <action description="é€å‡ºé€šçŸ¥" longdescription="Members in a Role with this Ability can send Notices via the Group > Notices section." name="notices send" value="42"/> + <action description="接收通知與察看éŽåŽ»é€šçŸ¥" longdescription="Members in a Role with this Ability can receive Notices and view past Notices in Group > Notices section." name="notices receive" value="43"/> </action_set> <action_set description="These Abilities include powers to allow or restrict access to group chat sessions and group voice chat." name="Chat"> <action description="Join Group Chat" longdescription="Members in a Role with this Ability can join group chat sessions, for text and voice." name="join group chat" value="16"/> diff --git a/indra/newview/skins/default/xui/zh/sidepanel_appearance.xml b/indra/newview/skins/default/xui/zh/sidepanel_appearance.xml index 18328861353178262bd8c63fb6a6da98a7f20ab7..7d8a502594cb8ba546ccfcd972d454d5a0f38f46 100644 --- a/indra/newview/skins/default/xui/zh/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/zh/sidepanel_appearance.xml @@ -1,19 +1,19 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Outfits" name="appearance panel"> - <string name="No Outfit" value="No Outfit"/> - <string name="Unsaved Changes" value="Unsaved changes"/> - <string name="Now Wearing" value="Now wearing..."/> - <string name="Changing outfits" value="Changing outfits"/> +<panel label="è£æ‰®" name="appearance panel"> + <string name="No Outfit" value="ç„¡è£æ‰®"/> + <string name="Unsaved Changes" value="變更未儲å˜"/> + <string name="Now Wearing" value="ç¾åœ¨ç©¿ä¸Š..."/> + <string name="Changing outfits" value="è®Šæ›´è£æ‰®"/> <panel name="panel_currentlook"> <button label="E" name="editappearance_btn"/> <button label="O" name="openoutfit_btn"/> <text name="currentlook_status"> - (Status) + (狀態) </text> <text name="currentlook_name"> MyOutfit With a really Long Name like MOOSE </text> - <button label="" name="edit_outfit_btn" tool_tip="Edit this outfit"/> + <button label="" name="edit_outfit_btn" tool_tip="ç·¨è¼¯é€™è£æ‰®"/> </panel> - <filter_editor label="Filter Outfits" name="Filter"/> + <filter_editor label="è£æ‰®éŽæ¿¾å™¨" name="Filter"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/sidepanel_inventory.xml b/indra/newview/skins/default/xui/zh/sidepanel_inventory.xml index 4230d60c457d6f9600777f1902b85c40710cf9b7..4cc16ed250205303d00fa9aaf7d4062bbf39220d 100644 --- a/indra/newview/skins/default/xui/zh/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/zh/sidepanel_inventory.xml @@ -4,16 +4,16 @@ <panel name="button_panel"> <layout_stack name="button_panel_ls"> <layout_panel name="info_btn_lp"> - <button label="Profile" name="info_btn" tool_tip="Show object profile"/> + <button label="檔案" name="info_btn" tool_tip="顯示物件檔案"/> </layout_panel> <layout_panel name="share_btn_lp"> <button label="分享" name="share_btn" tool_tip="Share an inventory item"/> </layout_panel> <layout_panel name="shop_btn_lp"> <button label="Shop" name="shop_btn" tool_tip="Open Marketplace webpage"/> - <button label="Wear" name="wear_btn" tool_tip="Wear seleceted outfit"/> + <button label="Wear" name="wear_btn" tool_tip="ç©¿ä¸Šæ‰€é¸æ“‡çš„è£æ‰®"/> <button label="Play" name="play_btn"/> - <button label="Teleport" name="teleport_btn" tool_tip="Teleport to the selected area"/> + <button label="瞬間傳é€" name="teleport_btn" tool_tip="瞬間傳é€åˆ°æ‰€é¸çš„å€åŸŸ"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml b/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml index d1332ddb7c339d67bba362a87ebac14027d973e9..f28638d93df871dda3321bb29ef27562c9166263 100644 --- a/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="item properties" title="Item Profile"> +<panel name="item properties" title="ç‰©å“æª”案"> <panel.string name="unknown"> (未知) </panel.string> @@ -16,13 +16,13 @@ [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] </panel.string> <panel.string name="origin_inventory"> - (Inventory) + (收ç´å€ï¼‰ </panel.string> <panel.string name="origin_inworld"> (Inworld) </panel.string> - <text name="title" value="Item Profile"/> - <text name="origin" value="(Inventory)"/> + <text name="title" value="ç‰©å“æª”案"/> + <text name="origin" value="(收ç´å€ï¼‰"/> <scroll_container name="item_profile_scroll"> <panel label="" name="item_profile"> <text name="LabelItemNameTitle"> @@ -38,7 +38,7 @@ æ“æœ‰è€…: </text> <text name="LabelAcquiredTitle"> - Acquired: + å–得於: </text> <panel name="perms_inv"> <text name="perm_modify"> @@ -52,7 +52,7 @@ </text> <check_box label="覆製" name="CheckEveryoneCopy"/> <text name="GroupLabel"> - Group: + 社團: </text> <check_box label="分享" name="CheckShareWithGroup" tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions."/> <text name="NextOwnerLabel"> @@ -64,13 +64,13 @@ </panel> <check_box label="出售" name="CheckPurchase"/> <combo_box name="combobox sale copy"> - <combo_box.item label="Copy" name="Copy"/> - <combo_box.item label="Original" name="Original"/> + <combo_box.item label="副本" name="Copy"/> + <combo_box.item label="原件" name="Original"/> </combo_box> <spinner label="åƒ¹æ ¼ï¼š L$" name="Edit Cost"/> </panel> </scroll_container> <panel name="button_panel"> - <button label="å–銷" name="cancel_btn"/> + <button label="å–æ¶ˆ" name="cancel_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml b/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml index 14d67d52b85b3c7907ebd42a448a9d3bb4881c4a..f308f2d4d0006cf48c61cc974021e33f86edf013 100644 --- a/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="object properties" title="Object Profile"> +<panel name="object properties" title="物件檔案"> <panel.string name="text deed continued"> Deed </panel.string> @@ -36,7 +36,7 @@ <panel.string name="Sale Mixed"> Mixed Sale </panel.string> - <text name="title" value="Object Profile"/> + <text name="title" value="物件檔案"/> <text name="where" value="(Inworld)"/> <panel label="" name="properties_panel"> <text name="Name:"> @@ -52,24 +52,24 @@ æ“æœ‰è€…: </text> <text name="Group_label"> - Group: + 社團: </text> <button name="button set group" tool_tip="Choose a group to share this object's permissions"/> <name_box initial_value="載入ä¸..." name="Group Name Proxy"/> <button label="Deed" label_selected="Deed" name="button deed" tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer."/> <text name="label click action"> - Click to: + 點擊以: </text> <combo_box name="clickaction"> - <combo_box.item label="Touch (default)" name="Touch/grab(default)"/> - <combo_box.item label="Sit on object" name="Sitonobject"/> - <combo_box.item label="Buy object" name="Buyobject"/> - <combo_box.item label="Pay object" name="Payobject"/> - <combo_box.item label="Open" name="Open"/> + <combo_box.item label="觸碰(é è¨ï¼‰" name="Touch/grab(default)"/> + <combo_box.item label="å在物件上" name="Sitonobject"/> + <combo_box.item label="購買物件" name="Buyobject"/> + <combo_box.item label="支付物件" name="Payobject"/> + <combo_box.item label="開啟" name="Open"/> </combo_box> <panel name="perms_inv"> <text name="perm_modify"> - You can modify this object + ä½ èƒ½ä¿®æ”¹é€™å€‹ç‰©ä»¶ </text> <text name="Anyone can:"> 任何人: @@ -77,7 +77,7 @@ <check_box label="覆製" name="checkbox allow everyone copy"/> <check_box label="移動" name="checkbox allow everyone move"/> <text name="GroupLabel"> - Group: + 社團: </text> <check_box label="分享" name="checkbox share with group" tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions."/> <text name="NextOwnerLabel"> @@ -94,7 +94,7 @@ <combo_box.item label="Original" name="Original"/> </combo_box> <spinner label="åƒ¹æ ¼ï¼š L$" name="Edit Cost"/> - <check_box label="Show in search" name="search_check" tool_tip="Let people see this object in search results"/> + <check_box label="顯示在æœå°‹ä¸" name="search_check" tool_tip="Let people see this object in search results"/> <text name="B:"> B: </text> @@ -115,9 +115,9 @@ </text> </panel> <panel name="button_panel"> - <button label="Open" name="open_btn"/> - <button label="Pay" name="pay_btn"/> + <button label="開啟" name="open_btn"/> + <button label="支付" name="pay_btn"/> <button label="購買" name="buy_btn"/> - <button label="Details" name="details_btn"/> + <button label="細節" name="details_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml index 4eb845d791f739f65546f11c11596e2a6d99be76..986ab825238df0d2307bb6a692ef564c8d650d53 100644 --- a/indra/newview/skins/default/xui/zh/strings.xml +++ b/indra/newview/skins/default/xui/zh/strings.xml @@ -5,37 +5,37 @@ that are returned from one component and may appear in many places--> <strings> <string name="SECOND_LIFE"> - Second Life + 第二人生 </string> <string name="APP_NAME"> - Second Life + 第二人生 </string> <string name="CAPITALIZED_APP_NAME"> - SECOND LIFE + 第二人生 </string> <string name="SECOND_LIFE_GRID"> - Second Life Grid + ç¬¬äºŒäººç”Ÿç¶²æ ¼ </string> <string name="SUPPORT_SITE"> - Second Life Support Portal + 第二人生支æ´å…¥å£ </string> <string name="StartupDetectingHardware"> - Detecting hardware... + ç¡¬é«”åµæ¸¬ä¸... </string> <string name="StartupLoading"> - Loading [APP_NAME]... + [APP_NAME] 載入ä¸... </string> <string name="StartupClearingCache"> - Clearing cache... + å¿«å–æ¸…除ä¸... </string> <string name="StartupInitializingTextureCache"> - Initializing Texture Cache... + æè³ªå¿«å–åˆå§‹åŒ–ä¸... </string> <string name="StartupInitializingVFS"> - Initializing VFS... + VFS åˆå§‹åŒ–ä¸... </string> <string name="ProgressRestoring"> - Restoring... + 回å˜ä¸... </string> <string name="ProgressChangingResolution"> Changing Resolution... @@ -59,46 +59,46 @@ Previous login attempt failed. Logging in, attempt [NUMBER] </string> <string name="LoginPrecaching"> - Loading world... + 世界載入ä¸... </string> <string name="LoginInitializingBrowser"> - Initializing embedded web browser... + 內嵌å¼ç¶²é ç€è¦½å™¨åˆå§‹åŒ–ä¸... </string> <string name="LoginInitializingMultimedia"> - Initializing multimedia... + 多媒體åˆå§‹åŒ–ä¸... </string> <string name="LoginInitializingFonts"> - Loading fonts... + å—型載入ä¸... </string> <string name="LoginVerifyingCache"> - Verifying cache files (can take 60-90 seconds)... + é©—è‰å¿«å–檔案(約需 60-90 ç§’å·¦å³ï¼‰... </string> <string name="LoginProcessingResponse"> - Processing Response... + 回應處ç†ä¸... </string> <string name="LoginInitializingWorld"> - Initializing World... + 世界åˆå§‹åŒ–ä¸... </string> <string name="LoginDecodingImages"> - Decoding images... + 圖åƒè§£ç¢¼ä¸... </string> <string name="LoginInitializingQuicktime"> - Initializing QuickTime... + QuickTime åˆå§‹åŒ–ä¸... </string> <string name="LoginQuicktimeNotFound"> - QuickTime not found - unable to initialize. + QuickTime æœªç™¼ç¾ - 無法進行åˆå§‹åŒ–。 </string> <string name="LoginQuicktimeOK"> - QuickTime initialized successfully. + QuickTime å·²æˆåŠŸåˆå§‹åŒ–。 </string> <string name="LoginWaitingForRegionHandshake"> - Waiting for region handshake... + 地å€äº¤æ¡ç‰å¾…ä¸... </string> <string name="LoginConnectingToRegion"> - Connecting to region... + 地å€è¯çµä¸... </string> <string name="LoginDownloadingClothing"> - Downloading clothing... + æœè£ä¸‹è¼‰ä¸... </string> <string name="InvalidCertificate"> The server returned an invalid or corrupt certificate. Please contact the Grid administrator. @@ -122,37 +122,37 @@ Network Error: Could not establish connection, please check your network connection. </string> <string name="LoginFailed"> - Login failed. + 登入失敗。 </string> <string name="Quit"> - Quit + çµæŸé€€å‡º </string> <string name="create_account_url"> http://join.secondlife.com/ </string> <string name="AgentLostConnection"> - This region may be experiencing trouble. Please check your connection to the Internet. + 這個地å€å¯èƒ½éé‡å•é¡Œï¼Œè«‹æª¢æŸ¥ä½ çš„ç¶²è·¯é€£ç·šã€‚ </string> <string name="SavingSettings"> - Saving your settings... + ä½ çš„è¨å®šå„²å˜ä¸... </string> <string name="LoggingOut"> - Logging out... + 登出ä¸... </string> <string name="ShuttingDown"> - Shutting down... + 關閉ä¸... </string> <string name="YouHaveBeenDisconnected"> - You have been disconnected from the region you were in. + ä½ å·²ç¶“è¢«æ‰€åœ¨çš„åœ°å€ä¸æ–·è¯çµã€‚ </string> <string name="SentToInvalidRegion"> You were sent to an invalid region. </string> <string name="TestingDisconnect"> - Testing viewer disconnect + 測試ç€è¦½å™¨æ–·ç·š </string> <string name="TooltipPerson"> - Person + 人 </string> <string name="TooltipNoName"> (no name) @@ -164,7 +164,7 @@ Public </string> <string name="TooltipIsGroup"> - (Group) + (社團) </string> <string name="TooltipForSaleL$"> 出售: L$[AMOUNT] @@ -173,41 +173,41 @@ Group Build </string> <string name="TooltipFlagNoBuild"> - No Build + ç¦æ¢å»ºé€ </string> <string name="TooltipFlagNoEdit"> - Group Build + ç¤¾åœ˜å»ºé€ </string> <string name="TooltipFlagNotSafe"> - Not Safe + éžå®‰å…¨ </string> <string name="TooltipFlagNoFly"> - No Fly + ç¦æ¢é£›è¡Œ </string> <string name="TooltipFlagGroupScripts"> - Group Scripts + 社團腳本 </string> <string name="TooltipFlagNoScripts"> - No Scripts + ç¦æ¢è…³æœ¬ </string> <string name="TooltipLand"> - Land: + 土地: </string> <string name="TooltipMustSingleDrop"> - Only a single item can be dragged here + åªæœ‰ä¸€å€‹ç‰©å“å¯ä»¥è¢«æ‹–曳到æ¤è™• </string> <string name="TooltipPrice" value="L$[AMOUNT]:"/> <string name="TooltipHttpUrl"> - Click to view this web page + 點擊以察看這個網é </string> <string name="TooltipSLURL"> - Click to view this location's information + 點擊以察看這個ä½ç½®è³‡è¨Š </string> <string name="TooltipAgentUrl"> - Click to view this Resident's profile + 點擊以察看這個居民檔案 </string> <string name="TooltipAgentInspect"> - Learn more about this Resident + çžè§£æ›´å¤šæœ‰é—œé€™å€‹å±…æ°‘ </string> <string name="TooltipAgentMute"> Click to mute this Resident @@ -216,10 +216,10 @@ Click to unmute this Resident </string> <string name="TooltipAgentIM"> - Click to IM this Resident + 點擊開始 IM 這ä½å±…æ°‘ </string> <string name="TooltipAgentPay"> - Click to Pay this Resident + 點擊以支付這ä½å±…æ°‘ </string> <string name="TooltipAgentOfferTeleport"> Click to offer a teleport request to this Resident @@ -253,7 +253,7 @@ </string> <string name="CurrentURL" value="CurrentURL: [CurrentURL]"/> <string name="SLurlLabelTeleport"> - Teleport to + 瞬間傳é€åˆ° </string> <string name="SLurlLabelShowOnMap"> Show Map for @@ -268,43 +268,43 @@ IM </string> <string name="SLappAgentPay"> - Pay + 支付 </string> <string name="SLappAgentOfferTeleport"> Offer Teleport to </string> <string name="SLappAgentRequestFriend"> - Friend Request + 交å‹è¦æ±‚ </string> <string name="BUTTON_CLOSE_DARWIN"> - Close (⌘W) + 關閉(⌘W) </string> <string name="BUTTON_CLOSE_WIN"> - Close (Ctrl+W) + 關閉(Ctrl+W) </string> <string name="BUTTON_CLOSE_CHROME"> 關閉 </string> <string name="BUTTON_RESTORE"> - Restore + 還原 </string> <string name="BUTTON_MINIMIZE"> - Minimize + 最å°åŒ– </string> <string name="BUTTON_TEAR_OFF"> - Tear Off + 脫下 </string> <string name="BUTTON_DOCK"> Dock </string> <string name="BUTTON_HELP"> - Show Help + 顯示幫助 </string> <string name="Searching"> - Searching... + æœå°‹ä¸... </string> <string name="NoneFound"> - None found. + 未發ç¾ã€‚ </string> <string name="RetrievingData"> Retrieving... @@ -331,7 +331,7 @@ Avaline Caller [ORDER] </string> <string name="AssetErrorNone"> - No error + 無錯誤 </string> <string name="AssetErrorRequestFailed"> Asset request: failed @@ -361,31 +361,31 @@ Viewer and server do not agree on price </string> <string name="AssetErrorUnknownStatus"> - Unknown status + 未知狀態 </string> <string name="texture"> - texture + æè³ª </string> <string name="sound"> - sound + è²éŸ³ </string> <string name="calling card"> calling card </string> <string name="landmark"> - landmark + 地標 </string> <string name="legacy script"> legacy script </string> <string name="clothing"> - clothing + æœè£ </string> <string name="object"> - object + 物件 </string> <string name="note card"> - notecard + è¨˜äº‹å¡ </string> <string name="folder"> 資料夾 @@ -400,31 +400,31 @@ LSL bytecode </string> <string name="tga texture"> - tga texture + tga æè³ª </string> <string name="body part"> - body part + èº«é«”éƒ¨ä½ </string> <string name="snapshot"> - snapshot + å¿«ç…§ </string> <string name="lost and found"> Lost and Found </string> <string name="targa image"> - targa image + targa åœ–åƒ </string> <string name="trash"> - Trash + 垃圾桶 </string> <string name="jpeg image"> - jpeg image + jpeg åœ–åƒ </string> <string name="animation"> - animation + 動作 </string> <string name="gesture"> - gesture + å§¿å‹¢ </string> <string name="simstate"> simstate @@ -439,13 +439,13 @@ folder link </string> <string name="AvatarEditingAppearance"> - (Editing Appearance) + (外觀編輯ä¸ï¼‰ </string> <string name="AvatarAway"> - Away + 離開 </string> <string name="AvatarBusy"> - Busy + 忙碌 </string> <string name="AvatarMuted"> Blocked @@ -661,13 +661,13 @@ 載入ä¸... </string> <string name="worldmap_offline"> - Offline + 離線 </string> <string name="worldmap_item_tooltip_format"> [AREA] m² L$[PRICE] </string> <string name="worldmap_results_none_found"> - None found. + 沒有發ç¾ã€‚ </string> <string name="Ok"> 確定 @@ -748,10 +748,10 @@ Moderate </string> <string name="SIM_ACCESS_ADULT"> - Adult + æˆäºº </string> <string name="SIM_ACCESS_DOWN"> - Offline + 離線 </string> <string name="SIM_ACCESS_MIN"> 未知 @@ -760,43 +760,43 @@ (未知) </string> <string name="Estate / Full Region"> - Estate / Full Region + é ˜åœ° / å®Œæ•´åœ°å€ </string> <string name="Estate / Homestead"> - Estate / Homestead + é ˜åœ° / 家園 </string> <string name="Mainland / Homestead"> - Mainland / Homestead + 大陸 / 家園 </string> <string name="Mainland / Full Region"> - Mainland / Full Region + 大陸 / å®Œæ•´åœ°å€ </string> <string name="all_files"> - All Files + 全部檔案 </string> <string name="sound_files"> - Sounds + è²éŸ³ </string> <string name="animation_files"> - Animations + 動作 </string> <string name="image_files"> - Images + åœ–åƒ </string> <string name="save_file_verb"> - Save + å„²å˜ </string> <string name="load_file_verb"> - Load + 載入 </string> <string name="targa_image_files"> - Targa Images + Targa åœ–åƒ </string> <string name="bitmap_image_files"> - Bitmap Images + Bitmap åœ–åƒ </string> <string name="avi_movie_file"> - AVI Movie File + AVI 影片檔案 </string> <string name="xaf_animation_file"> XAF Anim File @@ -808,34 +808,34 @@ RAW File </string> <string name="compressed_image_files"> - Compressed Images + å£“ç¸®çš„åœ–åƒ </string> <string name="load_files"> - Load Files + 載入檔案 </string> <string name="choose_the_directory"> - Choose Directory + 鏿“‡ç›®éŒ„ </string> <string name="AvatarSetNotAway"> - Not Away + éžé›¢é–‹ </string> <string name="AvatarSetAway"> - Away + 離開 </string> <string name="AvatarSetNotBusy"> - Not Busy + éžå¿™ç¢Œ </string> <string name="AvatarSetBusy"> - Busy + 忙碌 </string> <string name="shape"> - Shape + 體形 </string> <string name="skin"> - Skin + 皮膚 </string> <string name="hair"> - Hair + é é«® </string> <string name="eyes"> çœ¼ç› @@ -877,118 +877,118 @@ Physics </string> <string name="invalid"> - invalid + 無效 </string> <string name="none"> ç„¡ </string> <string name="shirt_not_worn"> - Shirt not worn + 襯衫未穿 </string> <string name="pants_not_worn"> - Pants not worn + è¤²åæœªç©¿ </string> <string name="shoes_not_worn"> - Shoes not worn + éž‹åæœªç©¿ </string> <string name="socks_not_worn"> - Socks not worn + è¥ªåæœªç©¿ </string> <string name="jacket_not_worn"> - Jacket not worn + 夾克未穿 </string> <string name="gloves_not_worn"> - Gloves not worn + 手套未穿 </string> <string name="undershirt_not_worn"> - Undershirt not worn + 內衣未穿 </string> <string name="underpants_not_worn"> - Underpants not worn + 內褲未穿 </string> <string name="skirt_not_worn"> - Skirt not worn + è£™åæœªç©¿ </string> <string name="alpha_not_worn"> Alpha not worn </string> <string name="tattoo_not_worn"> - Tattoo not worn + åˆºé’æœªç©¿ </string> <string name="physics_not_worn"> Physics not worn </string> <string name="invalid_not_worn"> - invalid + 無效 </string> <string name="create_new_shape"> - Create new shape + å‰µé€ æ–°é«”å½¢ </string> <string name="create_new_skin"> - Create new skin + å‰µé€ æ–°çš®è†š </string> <string name="create_new_hair"> - Create new hair + å‰µé€ æ–°é é«® </string> <string name="create_new_eyes"> - Create new eyes + å‰µé€ æ–°çœ¼ç› </string> <string name="create_new_shirt"> - Create new shirt + å‰µé€ æ–°è¥¯è¡« </string> <string name="create_new_pants"> - Create new pants + å‰µé€ æ–°è¤²å </string> <string name="create_new_shoes"> - Create new shoes + å‰µé€ æ–°éž‹å </string> <string name="create_new_socks"> - Create new socks + å‰µé€ æ–°è¥ªå </string> <string name="create_new_jacket"> - Create new jacket + å‰µé€ æ–°å¤¾å…‹ </string> <string name="create_new_gloves"> - Create new gloves + å‰µé€ æ–°æ‰‹å¥— </string> <string name="create_new_undershirt"> - Create new undershirt + å‰µé€ æ–°å…§è¡£ </string> <string name="create_new_underpants"> - Create new underpants + å‰µé€ æ–°å…§è¤² </string> <string name="create_new_skirt"> - Create new skirt + å‰µé€ æ–°è£™å </string> <string name="create_new_alpha"> Create new alpha </string> <string name="create_new_tattoo"> - Create new tattoo + å‰µé€ æ–°åˆºé’ </string> <string name="create_new_physics"> Create new physics </string> <string name="create_new_invalid"> - invalid + 無效 </string> <string name="NewWearable"> - New [WEARABLE_ITEM] + æ–° [WEARABLE_ITEM] </string> <string name="next"> - Next + 下一個 </string> <string name="ok"> 確定 </string> <string name="GroupNotifyGroupNotice"> - Group Notice + 社團通知 </string> <string name="GroupNotifyGroupNotices"> - Group Notices + 社團通知 </string> <string name="GroupNotifySentBy"> - Sent by + é€å‡ºç”± </string> <string name="GroupNotifyAttached"> Attached: @@ -1006,16 +1006,16 @@ Teleport offering </string> <string name="StartUpNotifications"> - New notifications arrived while you were away. + ç•¶ä½ é›¢é–‹æ™‚æœ‰æ–°çš„é€šçŸ¥é€é”。 </string> <string name="OverflowInfoChannelString"> - You have %d more notification + ä½ æœ‰ç´„ %d 通知 </string> <string name="BodyPartsRightArm"> Right Arm </string> <string name="BodyPartsHead"> - Head + é 部 </string> <string name="BodyPartsLeftArm"> Left Arm @@ -1024,7 +1024,7 @@ Left Leg </string> <string name="BodyPartsTorso"> - Torso + 軀幹 </string> <string name="BodyPartsRightLeg"> Right Leg @@ -1060,7 +1060,7 @@ <string name="link" value="(link)"/> <string name="broken_link" value="(broken_link)"/> <string name="LoadingContents"> - Loading contents... + 內容載入ä¸... </string> <string name="NoContents"> No contents @@ -1073,31 +1073,31 @@ <string name="PermNo"> å¦ </string> - <string name="Chat Message" value="Chat :"/> - <string name="Sound" value="Sound :"/> - <string name="Wait" value="--- Wait :"/> - <string name="AnimFlagStop" value="Stop Animation :"/> - <string name="AnimFlagStart" value="Start Animation :"/> + <string name="Chat Message" value="èŠå¤©ï¼š"/> + <string name="Sound" value="è²éŸ³ï¼š"/> + <string name="Wait" value="--- ç‰å¾…:"/> + <string name="AnimFlagStop" value="åœæ¢å‹•作:"/> + <string name="AnimFlagStart" value="開始動作:"/> <string name="Wave" value="Wave"/> <string name="GestureActionNone" value="ç„¡"/> <string name="HelloAvatar" value="Hello, avatar!"/> <string name="ViewAllGestures" value="察看全部 >>"/> - <string name="GetMoreGestures" value="Get More >>"/> - <string name="Animations" value="Animations,"/> + <string name="GetMoreGestures" value="å–得更多 >>"/> + <string name="Animations" value="動作,"/> <string name="Calling Cards" value="Calling Cards,"/> - <string name="Clothing" value="Clothing,"/> - <string name="Gestures" value="Gestures,"/> - <string name="Landmarks" value="Landmarks,"/> - <string name="Notecards" value="Notecards,"/> - <string name="Objects" value="Objects,"/> - <string name="Scripts" value="Scripts,"/> - <string name="Sounds" value="Sounds,"/> - <string name="Textures" value="Textures,"/> + <string name="Clothing" value="æœè£,"/> + <string name="Gestures" value="å§¿å‹¢,"/> + <string name="Landmarks" value="地標,"/> + <string name="Notecards" value="記事å¡,"/> + <string name="Objects" value="物件,"/> + <string name="Scripts" value="腳本,"/> + <string name="Sounds" value="è²éŸ³,"/> + <string name="Textures" value="æè³ª,"/> <string name="Snapshots" value="Snapshots,"/> <string name="No Filters" value="No"/> - <string name="Since Logoff" value="- Since Logoff"/> + <string name="Since Logoff" value="- 自上次登出"/> <string name="InvFolder My Inventory"> - My Inventory + 我的收ç´å€ </string> <string name="InvFolder My Favorites"> My Favorites @@ -1106,46 +1106,46 @@ Library </string> <string name="InvFolder Textures"> - Textures + æè³ª </string> <string name="InvFolder Sounds"> - Sounds + è²éŸ³ </string> <string name="InvFolder Calling Cards"> Calling Cards </string> <string name="InvFolder Landmarks"> - Landmarks + 地標 </string> <string name="InvFolder Scripts"> - Scripts + 腳本 </string> <string name="InvFolder Clothing"> - Clothing + æœè£ </string> <string name="InvFolder Objects"> - Objects + 物件 </string> <string name="InvFolder Notecards"> - Notecards + è¨˜äº‹å¡ </string> <string name="InvFolder New Folder"> 新資料夾 </string> <string name="InvFolder Inventory"> - Inventory + æ”¶ç´å€ </string> <string name="InvFolder Uncompressed Images"> Uncompressed Images </string> <string name="InvFolder Body Parts"> - Body Parts + èº«é«”éƒ¨ä½ </string> <string name="InvFolder Trash"> - Trash + 垃圾桶 </string> <string name="InvFolder Photo Album"> - Photo Album + 相簿 </string> <string name="InvFolder Lost And Found"> Lost And Found @@ -1154,10 +1154,10 @@ Uncompressed Sounds </string> <string name="InvFolder Animations"> - Animations + 動作 </string> <string name="InvFolder Gestures"> - Gestures + å§¿å‹¢ </string> <string name="InvFolder Favorite"> Favorites @@ -1166,19 +1166,19 @@ Favorites </string> <string name="InvFolder Current Outfit"> - Current Outfit + ç›®å‰è£æ‰® </string> <string name="InvFolder Initial Outfits"> - Initial Outfits + åˆå§‹è£æ‰® </string> <string name="InvFolder My Outfits"> - My Outfits + æˆ‘çš„è£æ‰® </string> <string name="InvFolder Accessories"> - Accessories + é…ä»¶ </string> <string name="InvFolder Friends"> - Friends + æœ‹å‹ </string> <string name="InvFolder All"> 全部 @@ -1250,25 +1250,25 @@ Pelvis </string> <string name="Mouth"> - Mouth + 嘴 </string> <string name="Chin"> - Chin + 下巴 </string> <string name="Left Ear"> - Left Ear + 左耳 </string> <string name="Right Ear"> - Right Ear + å³è€³ </string> <string name="Left Eyeball"> - Left Eyeball + å·¦çœ¼çƒ </string> <string name="Right Eyeball"> - Right Eyeball + å³çœ¼çƒ </string> <string name="Nose"> - Nose + é¼»å </string> <string name="R Upper Arm"> R Upper Arm @@ -1328,55 +1328,55 @@ [AGEDAYS] old </string> <string name="TodayOld"> - Joined today + é«˜æ—¥å‰›åŠ å…¥ </string> <string name="AgeYearsA"> - [COUNT] year + [COUNT] å¹´ </string> <string name="AgeYearsB"> - [COUNT] years + [COUNT] å¹´ </string> <string name="AgeYearsC"> - [COUNT] years + [COUNT] å¹´ </string> <string name="AgeMonthsA"> - [COUNT] month + [COUNT] 月 </string> <string name="AgeMonthsB"> - [COUNT] months + [COUNT] 月 </string> <string name="AgeMonthsC"> - [COUNT] months + [COUNT] 月 </string> <string name="AgeWeeksA"> - [COUNT] week + [COUNT] 週 </string> <string name="AgeWeeksB"> - [COUNT] weeks + [COUNT] 週 </string> <string name="AgeWeeksC"> - [COUNT] weeks + [COUNT] 週 </string> <string name="AgeDaysA"> - [COUNT] day + [COUNT] 天 </string> <string name="AgeDaysB"> - [COUNT] days + [COUNT] 天 </string> <string name="AgeDaysC"> - [COUNT] days + [COUNT] 天 </string> <string name="GroupMembersA"> - [COUNT] member + [COUNT] æˆå“¡ </string> <string name="GroupMembersB"> - [COUNT] members + [COUNT] æˆå“¡ </string> <string name="GroupMembersC"> - [COUNT] members + [COUNT] æˆå“¡ </string> <string name="AcctTypeResident"> - Resident + å±…æ°‘ </string> <string name="AcctTypeTrial"> Trial @@ -1457,28 +1457,28 @@ reset </string> <string name="RunQueueTitle"> - Set Running Progress + è¨å®šåŸ·è¡Œä¸ç¨‹åº </string> <string name="RunQueueStart"> - set running + è¨ç‚ºåŸ·è¡Œä¸ </string> <string name="NotRunQueueTitle"> - Set Not Running Progress + è¨å®šéžåŸ·è¡Œä¸ç¨‹åº </string> <string name="NotRunQueueStart"> - set not running + è¨ç‚ºéžåŸ·è¡Œä¸ </string> <string name="CompileSuccessful"> - Compile successful! + ç·¨è¯æˆåŠŸ!! </string> <string name="CompileSuccessfulSaving"> - Compile successful, saving... + ç·¨è¯æˆåŠŸï¼Œå„²å˜ä¸... </string> <string name="SaveComplete"> - Save complete. + 儲å˜å®Œç•¢ã€‚ </string> <string name="ObjectOutOfRange"> - Script (object out of range) + 腳本(物件超出範åœï¼‰ </string> <string name="GodToolsObjectOwnedBy"> Object [OBJECT] owned by [OWNER] @@ -1486,14 +1486,14 @@ <string name="GroupsNone"> ç„¡ </string> - <string name="Group" value="(group)"/> + <string name="Group" value="(社團)"/> <string name="Unknown"> (未知) </string> <string name="SummaryForTheWeek" value="Summary for this week, beginning on"/> <string name="NextStipendDay" value="The next stipend day is"/> <string name="GroupIndividualShare" value="Group Individual Share"/> - <string name="GroupColumn" value="Group"/> + <string name="GroupColumn" value="社團"/> <string name="Balance"> Balance </string> @@ -1522,10 +1522,10 @@ error </string> <string name="RegionInfoAllEstatesOwnedBy"> - all estates owned by [OWNER] + [OWNER] æ‰€æ“æœ‰çš„çš„å…¨éƒ¨é ˜åœ° </string> <string name="RegionInfoAllEstatesYouOwn"> - all estates that you own + ä½ æ‰€æ“æœ‰çš„å…¨éƒ¨é ˜åœ° </string> <string name="RegionInfoAllEstatesYouManage"> all estates that you manage for [OWNER] @@ -1537,7 +1537,7 @@ Allowed groups: ([ALLOWEDGROUPS], max [MAXACCESS]) </string> <string name="ScriptLimitsParcelScriptMemory"> - Parcel Script Memory + 地段腳本記憶體 </string> <string name="ScriptLimitsParcelsOwned"> Parcels Listed: [PARCELS] @@ -1579,7 +1579,7 @@ Chest </string> <string name="ATTACH_HEAD"> - Head + é 部 </string> <string name="ATTACH_LSHOULDER"> Left Shoulder @@ -1609,7 +1609,7 @@ Mouth </string> <string name="ATTACH_CHIN"> - Chin + 下巴 </string> <string name="ATTACH_LEAR"> Left Ear @@ -1618,13 +1618,13 @@ Right Ear </string> <string name="ATTACH_LEYE"> - Left Eye + 左眼 </string> <string name="ATTACH_REYE"> - Right Eye + å³çœ¼ </string> <string name="ATTACH_NOSE"> - Nose + é¼»å </string> <string name="ATTACH_RUARM"> Right Upper Arm @@ -1711,16 +1711,16 @@ The Resident you messaged is in 'busy mode' which means they have requested not to be disturbed. Your message will still be shown in their IM panel for later viewing. </string> <string name="MuteByName"> - (By name) + (由å稱) </string> <string name="MuteAgent"> - (Resident) + (居民) </string> <string name="MuteObject"> - (Object) + (物件) </string> <string name="MuteGroup"> - (Group) + (社團) </string> <string name="MuteExternal"> (External) @@ -1733,12 +1733,12 @@ </string> <string name="covenant_last_modified" value="Last Modified:"/> <string name="none_text" value="(無)"/> - <string name="never_text" value="(never)"/> + <string name="never_text" value="(絕ä¸ï¼‰"/> <string name="GroupOwned"> - Group Owned + ç¤¾åœ˜æ‰€æ“æœ‰ </string> <string name="Public"> - Public + 公開 </string> <string name="ClassifiedClicksTxt"> Clicks: [TELEPORT] teleport, [MAP] map, [PROFILE] profile @@ -1750,7 +1750,7 @@ You haven't created any Picks or Classifieds. Click the Plus button below to create a Pick or Classified. </string> <string name="NoAvatarPicksClassifiedsText"> - User has no picks or classifieds + 使用者無精é¸åœ°é»žæˆ–個人廣告 </string> <string name="PicksClassifiedsLoadingText"> 載入ä¸... @@ -1819,17 +1819,17 @@ Acquired Items </string> <string name="Cancel"> - å–銷 + å–æ¶ˆ </string> <string name="UploadingCosts"> - Uploading [NAME] costs L$ [AMOUNT] + 花費 L$ [AMOUNT] 上傳 [NAME] </string> <string name="BuyingCosts"> - Buying this costs L$ [AMOUNT] + 花費 L$ [AMOUNT] 購買這個 </string> <string name="UnknownFileExtension"> - Unknown file extension .%s -Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh + 未知的副檔å .%s +é æœŸç‚º .wav, .tga, .bmp, .jpg, .jpeg, or .bvh 類型 </string> <string name="MuteObject2"> Block @@ -1844,10 +1844,10 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Unblock </string> <string name="AddLandmarkNavBarMenu"> - Add to My Landmarks... + æ·»åŠ åˆ°æˆ‘çš„åœ°æ¨™... </string> <string name="EditLandmarkNavBarMenu"> - Edit my Landmark... + 編輯我的地標... </string> <string name="accel-mac-control"> ⌃ @@ -1871,10 +1871,10 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Shift+ </string> <string name="FileSaved"> - File Saved + æª”æ¡ˆå·²å„²å˜ </string> <string name="Receiving"> - Receiving + æŽ¥æ”¶ä¸ </string> <string name="AM"> AM @@ -1919,7 +1919,7 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Down </string> <string name="Any Category"> - Any Category + 任何類別 </string> <string name="Shopping"> Shopping @@ -1955,7 +1955,7 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Linden Location </string> <string name="Adult"> - Adult + æˆäºº </string> <string name="Arts&Culture"> Arts & Culture @@ -1994,7 +1994,7 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Any </string> <string name="You"> - You + ä½ </string> <string name=":"> : @@ -2128,7 +2128,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. 5 O'Clock Shadow </string> <string name="All White"> - All White + 全白 </string> <string name="Anime Eyes"> Anime Eyes @@ -2392,7 +2392,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Chest Size </string> <string name="Chin Angle"> - Chin Angle + 下巴角度 </string> <string name="Chin Cleft"> Chin Cleft @@ -2629,7 +2629,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Glove Length </string> <string name="Hair"> - Hair + é é«® </string> <string name="Hair Back"> Hair: Back @@ -3544,16 +3544,16 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Wrinkles </string> <string name="LocationCtrlAddLandmarkTooltip"> - Add to My Landmarks + æ·»åŠ åˆ°æˆ‘çš„åœ°æ¨™ </string> <string name="LocationCtrlEditLandmarkTooltip"> - Edit my Landmark + 編輯我的地標 </string> <string name="LocationCtrlInfoBtnTooltip"> - See more info about the current location + 察看更多關於目å‰ä½ç½®çš„資訊 </string> <string name="LocationCtrlComboBtnTooltip"> - My location history + 我的ä½ç½®æ·å²ç´€éŒ„ </string> <string name="LocationCtrlForSaleTooltip"> 購買這塊土地 @@ -3562,10 +3562,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Voice not available here </string> <string name="LocationCtrlFlyTooltip"> - Flying not allowed + ä¸å…許飛行 </string> <string name="LocationCtrlPushTooltip"> - No pushing + ç¦æ¢æŽ¨æ’ž </string> <string name="LocationCtrlBuildTooltip"> Building/dropping objects not allowed @@ -3577,43 +3577,43 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Health </string> <string name="LocationCtrlAdultIconTooltip"> - Adult Region + æˆäººåœ°å€ </string> <string name="LocationCtrlModerateIconTooltip"> Moderate Region </string> <string name="LocationCtrlGeneralIconTooltip"> - General Region + ä¸€èˆ¬åœ°å€ </string> <string name="UpdaterWindowTitle"> - [APP_NAME] Update + [APP_NAME] æ›´æ–° </string> <string name="UpdaterNowUpdating"> - Now updating [APP_NAME]... + [APP_NAME] ç¾æ›´æ–°ä¸... </string> <string name="UpdaterNowInstalling"> - Installing [APP_NAME]... + [APP_NAME] 安è£ä¸... </string> <string name="UpdaterUpdatingDescriptive"> Your [APP_NAME] Viewer is being updated to the latest release. This may take some time, so please be patient. </string> <string name="UpdaterProgressBarTextWithEllipses"> - Downloading update... + 更新下載ä¸... </string> <string name="UpdaterProgressBarText"> - Downloading update + 更新下載 </string> <string name="UpdaterFailDownloadTitle"> - Failed to download update + å¤è¼‰æ›´æ–°å¤±æ•— </string> <string name="UpdaterFailUpdateDescriptive"> An error occurred while updating [APP_NAME]. Please download the latest version from www.secondlife.com. </string> <string name="UpdaterFailInstallTitle"> - Failed to install update + å®‰è£æ›´æ–°å¤±æ•— </string> <string name="UpdaterFailStartTitle"> - Failed to start viewer + 啟動ç€è¦½å™¨å¤±æ•— </string> <string name="ItemsComingInTooFastFrom"> [APP_NAME]: Items coming in too fast from [FROM_NAME], automatic preview disabled for [TIME] seconds @@ -3625,7 +3625,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. -- Instant message logging enabled -- </string> <string name="IM_typing_start_string"> - [NAME] is typing... + [NAME] æ£åœ¨è¼¸å…¥... </string> <string name="Unnamed"> (Unnamed) @@ -3664,7 +3664,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. [NAME] started a voice call </string> <string name="ringing-im"> - Joining voice call... + åŠ å…¥èªžéŸ³é€šè©±... </string> <string name="connected-im"> Connected, click Leave Call to hang up @@ -3688,13 +3688,13 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Drag items from inventory here </string> <string name="no_session_message"> - (IM Session Doesn't Exist) + (IM 會話ä¸å˜åœ¨ï¼‰ </string> <string name="only_user_message"> You are the only user in this session. </string> <string name="offline_message"> - [NAME] is offline. + [NAME] 離線。 </string> <string name="invite_message"> Click the [BUTTON NAME] button to accept/connect to this voice chat. @@ -3712,7 +3712,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. You do not have sufficient permissions. </string> <string name="session_does_not_exist_error"> - The session no longer exists + æ¤æœƒè©±ä¸å†å˜åœ¨ </string> <string name="no_ability_error"> You do not have that ability. @@ -3793,13 +3793,13 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. for deeding land </string> <string name="to create a group"> - to create a group + ä»¥å‰µé€ ç¤¾åœ˜ </string> <string name="to join a group"> - to join a group + ä»¥åŠ å…¥ç¤¾åœ˜ </string> <string name="to upload"> - to upload + 以上傳 </string> <string name="to publish a classified ad"> to publish a classified ad @@ -3808,7 +3808,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Giving L$ [AMOUNT] </string> <string name="uploading_costs"> - Uploading costs L$ [AMOUNT] + 上傳花費 L$ [AMOUNT] </string> <string name="this_costs"> This costs L$ [AMOUNT] @@ -3820,7 +3820,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. This object costs L$ [AMOUNT] </string> <string name="group_role_everyone"> - Everyone + 任何人 </string> <string name="group_role_officers"> Officers @@ -3829,24 +3829,24 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Owners </string> <string name="group_member_status_online"> - Online + 上線 </string> <string name="uploading_abuse_report"> - Uploading... + 上傳ä¸... -Abuse Report +èˆ‰å ±æ¿«ç”¨ </string> <string name="New Shape"> - New Shape + 新體形 </string> <string name="New Skin"> - New Skin + 新皮膚 </string> <string name="New Hair"> - New Hair + æ–°é é«® </string> <string name="New Eyes"> - New Eyes + æ–°çœ¼ç› </string> <string name="New Shirt"> 新襯衫 @@ -3879,7 +3879,7 @@ Abuse Report New Alpha </string> <string name="New Tattoo"> - New Tattoo + æ–°åˆºé’ </string> <string name="New Physics"> New Physics @@ -3888,37 +3888,37 @@ Abuse Report Invalid Wearable </string> <string name="New Gesture"> - New Gesture + æ–°å§¿å‹¢ </string> <string name="New Script"> - New Script + 新腳本 </string> <string name="New Note"> - New Note + æ–°è¨˜äº‹å¡ </string> <string name="New Folder"> 新資料夾 </string> <string name="Contents"> - Contents + 內容 </string> <string name="Gesture"> Gesture </string> <string name="Male Gestures"> - Male Gestures + 男性姿勢 </string> <string name="Female Gestures"> - Female Gestures + 女性姿勢 </string> <string name="Other Gestures"> - Other Gestures + å…¶ä»–å§¿å‹¢ </string> <string name="Speech Gestures"> - Speech Gestures + 演說姿勢 </string> <string name="Common Gestures"> - Common Gestures + 一般姿勢 </string> <string name="Male - Excuse me"> Male - Excuse me @@ -4014,7 +4014,7 @@ Abuse Report ç„¡/ç„¡ </string> <string name="texture_load_dimensions_error"> - Can't load images larger than [WIDTH]*[HEIGHT] + 無法載入圖åƒå¤§æ–¼ [WIDTH]*[HEIGHT] </string> <string name="words_separator" value=","/> <string name="server_is_down"> @@ -4051,7 +4051,7 @@ Abuse Report Membership </string> <string name="Roles"> - Roles + 角色 </string> <string name="Group Identity"> Group Identity @@ -4081,7 +4081,7 @@ Abuse Report Accounting </string> <string name="Notices"> - Notices + 通知 </string> <string name="Chat"> èŠå¤© @@ -4093,7 +4093,7 @@ Abuse Report Delete selected item? </string> <string name="EmptyOutfitText"> - There are no items in this outfit + 沒有任何物å“åœ¨é€™å€‹è£æ‰®å…§ </string> <string name="ExternalEditorNotSet"> Select an editor using the ExternalEditor setting. diff --git a/indra/newview/skins/default/xui/zh/teleport_strings.xml b/indra/newview/skins/default/xui/zh/teleport_strings.xml index 33640f5feea4410060564d661df7f38275f234a6..b18eb4a3907b6116801e0ecadd61c4f335628db4 100644 --- a/indra/newview/skins/default/xui/zh/teleport_strings.xml +++ b/indra/newview/skins/default/xui/zh/teleport_strings.xml @@ -39,7 +39,7 @@ Try again in a moment. Unable to find teleport destination. The destination may be temporarily unavailable or no longer exists. Please try again in a few minutes. </message> <message name="no_inventory_host"> - The inventory system is currently unavailable. + æ”¶ç´å€åŠŸèƒ½ç›®å‰ç„¡æ³•使用。 </message> </message_set> <message_set name="progress"> @@ -53,28 +53,28 @@ Try again in a moment. Relaying to destination. </message> <message name="sending_home"> - Sending home location request. + é€å‡ºå®¶ä½ç½®çš„è¦æ±‚。 </message> <message name="sending_landmark"> - Sending landmark location request. + 地標ä½ç½®è¦æ±‚瞬間傳é€ä¸ã€‚ </message> <message name="completing"> - Completing teleport. + 瞬間傳é€å®Œæˆã€‚ </message> <message name="completed_from"> - Teleport completed from [T_SLURL] + ç”± [T_SLURL] 瞬間傳é€å®Œæˆã€‚ </message> <message name="resolving"> - Resolving destination. + 目的地解決ä¸ã€‚ </message> <message name="contacting"> - Contacting new region. + è¯ç¹«åˆ°æ–°çš„地å€ã€‚ </message> <message name="arriving"> 抵é”ä¸... </message> <message name="requesting"> - Requesting Teleport... + 瞬間傳é€è¦æ±‚ä¸... </message> </message_set> </teleport_messages> diff --git a/indra/newview/skins/minimal/xui/da/floater_camera.xml b/indra/newview/skins/minimal/xui/da/floater_camera.xml new file mode 100644 index 0000000000000000000000000000000000000000..5b7ef6db5460f829908dfb6938e3a2172437f79c --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/floater_camera.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="camera_floater" title=""> + <floater.string name="rotate_tooltip"> + Roter kamera omkring fokus + </floater.string> + <floater.string name="zoom_tooltip"> + Zoom kamera mod fokus + </floater.string> + <floater.string name="move_tooltip"> + Flyt kamera op og ned, til venstre og højre + </floater.string> + <floater.string name="camera_modes_title"> + Kamera valg + </floater.string> + <floater.string name="pan_mode_title"> + Kredsløb zoom panorering + </floater.string> + <floater.string name="presets_mode_title"> + Forvalg + </floater.string> + <floater.string name="free_mode_title"> + Se objekt + </floater.string> + <panel name="controls"> + <panel name="preset_views_list"> + <panel_camera_item name="front_view"> + <panel_camera_item.text name="front_view_text"> + Se forfra + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="group_view"> + <panel_camera_item.text name="side_view_text"> + Se fra siden + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="rear_view"> + <panel_camera_item.text name="rear_view_text"> + Se bagfra + </panel_camera_item.text> + </panel_camera_item> + </panel> + <panel name="camera_modes_list"> + <panel_camera_item name="object_view"> + <panel_camera_item.text name="object_view_text"> + Se fra objekt + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="mouselook_view"> + <panel_camera_item.text name="mouselook_view_text"> + Førsteperson + </panel_camera_item.text> + </panel_camera_item> + </panel> + <panel name="zoom" tool_tip="Zoom kamera mod fokus"> + <joystick_rotate name="cam_rotate_stick" tool_tip="Kamera kredser rundt om fokus"/> + <slider_bar name="zoom_slider" tool_tip="Zoom kamera mod fokus"/> + <joystick_track name="cam_track_stick" tool_tip="Flyt kamera op og ned, venstre og højre"/> + </panel> + </panel> + <panel name="buttons"> + <button label="" name="presets_btn" tool_tip="Forvalg"/> + <button label="" name="pan_btn" tool_tip="Kredsløb zoom panorering"/> + <button label="" name="avatarview_btn" tool_tip="Kamera valg"/> + </panel> +</floater> diff --git a/indra/newview/skins/minimal/xui/da/floater_help_browser.xml b/indra/newview/skins/minimal/xui/da/floater_help_browser.xml new file mode 100644 index 0000000000000000000000000000000000000000..0e2918e4e2d10b4ccbb63546a1cbdbd64f6f5866 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/floater_help_browser.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_help_browser" title="HVORDAN"> + <floater.string name="loading_text"> + Henter... + </floater.string> + <layout_stack name="stack1"> + <layout_panel name="external_controls"/> + </layout_stack> +</floater> diff --git a/indra/newview/skins/minimal/xui/da/floater_media_browser.xml b/indra/newview/skins/minimal/xui/da/floater_media_browser.xml new file mode 100644 index 0000000000000000000000000000000000000000..42fbdeaa9ea44e8f6db8fb03d1724fb1cea9f2be --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/floater_media_browser.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_about" title="MEDIA BROWSER"> + <floater.string name="home_page_url"> + http://www.secondlife.com + </floater.string> + <floater.string name="support_page_url"> + http://support.secondlife.com + </floater.string> + <layout_stack name="stack1"> + <layout_panel name="nav_controls"> + <button label="Tilbage" name="back"/> + <button label="Frem" name="forward"/> + <button label="Genlæs" name="reload"/> + <button label="Go" name="go"/> + </layout_panel> + <layout_panel name="time_controls"> + <button label="tilbage" name="rewind"/> + <button label="stop" name="stop"/> + <button label="fremad" name="seek"/> + </layout_panel> + <layout_panel name="parcel_owner_controls"> + <button label="Send denne side til parcel" name="assign"/> + </layout_panel> + <layout_panel name="external_controls"> + <button label="Ã…ben i min internetbrowser" name="open_browser"/> + <check_box label="Ã…ben altid i min internetbrowser" name="open_always"/> + <button label="Luk" name="close"/> + </layout_panel> + </layout_stack> +</floater> diff --git a/indra/newview/skins/minimal/xui/da/floater_nearby_chat.xml b/indra/newview/skins/minimal/xui/da/floater_nearby_chat.xml new file mode 100644 index 0000000000000000000000000000000000000000..bd17224259a7ea66a7e0cb07dbf36b369c2f7575 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/floater_nearby_chat.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="nearby_chat" title="CHAT NÆRVED"> + <check_box label="Oversæt chat (hÃ¥ndteret af Google)" name="translate_chat_checkbox"/> +</floater> diff --git a/indra/newview/skins/minimal/xui/da/floater_web_content.xml b/indra/newview/skins/minimal/xui/da/floater_web_content.xml new file mode 100644 index 0000000000000000000000000000000000000000..0410f743246a1094bf99e1c5d0702dbaf4bb711c --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/floater_web_content.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_web_content" title=""> + <layout_stack name="stack1"> + <layout_panel name="nav_controls"> + <button name="back" tool_tip="GÃ¥ bagud"/> + <button name="forward" tool_tip="GÃ¥ frem"/> + <button name="stop" tool_tip="Stop"/> + <button name="reload" tool_tip="Genindlæs side"/> + <combo_box name="address" tool_tip="Indtast URL her"/> + <icon name="media_secure_lock_flag" tool_tip="Sikker browsing"/> + <button name="popexternal" tool_tip="Ã…ben denne URL i din normale internet browser"/> + </layout_panel> + </layout_stack> +</floater> diff --git a/indra/newview/skins/minimal/xui/da/inspect_avatar.xml b/indra/newview/skins/minimal/xui/da/inspect_avatar.xml new file mode 100644 index 0000000000000000000000000000000000000000..dc1ed562eb2fb9abe58ac166d9e286c7b35da626 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/inspect_avatar.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<!-- + Not can_close / no title to avoid window chrome + Single instance - only have one at a time, recycle it each spawn +--> +<floater name="inspect_avatar"> + <string name="Subtitle"> + [AGE] + </string> + <string name="Details"> + [SL_PROFILE] + </string> + <text name="user_details"> + Dette er min second life beskrivelse og jeg synes den er rigtig god. Men af en eller ande grund er min beskrivelse meget lang fordi jeg taler en hel masse + </text> + <slider name="volume_slider" tool_tip="Stemme lydstyrke" value="0.5"/> + <button label="Tilføj ven" name="add_friend_btn"/> + <button label="IM" name="im_btn"/> + <button label="Profil" name="view_profile_btn"/> + <panel name="moderator_panel"> + <button label="SlÃ¥ stemme-chat fra" name="disable_voice"/> + <button label="SlÃ¥ stemme-chat til" name="enable_voice"/> + </panel> +</floater> diff --git a/indra/newview/skins/minimal/xui/da/inspect_object.xml b/indra/newview/skins/minimal/xui/da/inspect_object.xml new file mode 100644 index 0000000000000000000000000000000000000000..78ccc5b8699c3a7aa8b96354f0c81c251958e0f8 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/inspect_object.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<!-- + Not can_close / no title to avoid window chrome + Single instance - only have one at a time, recycle it each spawn +--> +<floater name="inspect_object"> + <string name="Creator"> + Af [CREATOR] + </string> + <string name="CreatorAndOwner"> + Af [CREATOR] +Owner [OWNER] + </string> + <string name="Price"> + L$[AMOUNT] + </string> + <string name="PriceFree"> + Gratis! + </string> + <string name="Touch"> + Berør + </string> + <string name="Sit"> + Sid + </string> + <text name="object_name" value="Test objekt navn der reelt er to linier og meget lang"/> + <text name="price_text"> + L$30,000 + </text> + <text name="object_description"> + Dette er en meget lang beskrivelse af et objekt udformet sÃ¥ den fylder mindst 80 karakterer i længden eller endda nærmere 120 pÃ¥ dette sted. Man kan aldrig vide.... + </text> + <button label="Køb" name="buy_btn"/> + <button label="Betal" name="pay_btn"/> + <button label="Tag kopi" name="take_free_copy_btn"/> + <button label="Berør" name="touch_btn"/> + <button label="Sid" name="sit_btn"/> + <button label="Ã…ben" name="open_btn"/> + <icon name="secure_browsing" tool_tip="Sikker Browsing"/> + <button label="Mere" name="more_info_btn"/> +</floater> diff --git a/indra/newview/skins/minimal/xui/da/menu_add_wearable_gear.xml b/indra/newview/skins/minimal/xui/da/menu_add_wearable_gear.xml new file mode 100644 index 0000000000000000000000000000000000000000..1e8301dc4cb412448cb04f7b780abc65ca09a2dc --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_add_wearable_gear.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="Add Wearable Gear Menu"> + <menu_item_check label="Sortér efter nyeste" name="sort_by_most_recent"/> + <menu_item_check label="Sortér efter navn" name="sort_by_name"/> + <menu_item_check label="Sortér efter type" name="sort_by_type"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_attachment_other.xml b/indra/newview/skins/minimal/xui/da/menu_attachment_other.xml new file mode 100644 index 0000000000000000000000000000000000000000..ca7b18494248bf85eb568999aa60af14fd378106 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_attachment_other.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<!-- *NOTE: See also menu_avatar_other.xml --> +<context_menu name="Avatar Pie"> + <menu_item_call label="Profil" name="Profile..."/> + <menu_item_call label="Tilføj ven" name="Add Friend"/> + <menu_item_call label="Send besked" name="Send IM..."/> + <menu_item_call label="Opkald" name="Call"/> + <menu_item_call label="Invitér til gruppe" name="Invite..."/> + <menu_item_call label="Blokér" name="Avatar Mute"/> + <menu_item_call label="Rapportér" name="abuse"/> + <menu_item_call label="Frys" name="Freeze..."/> + <menu_item_call label="Smid ud" name="Eject..."/> + <menu_item_call label="Debug teksturer" name="Debug..."/> + <menu_item_call label="Zoom ind" name="Zoom In"/> + <menu_item_call label="Betal" name="Pay..."/> + <menu_item_call label="Objekt profil" name="Object Inspect"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_attachment_self.xml b/indra/newview/skins/minimal/xui/da/menu_attachment_self.xml new file mode 100644 index 0000000000000000000000000000000000000000..35ba27f9e23c06730764a83a679c426ab6e9498b --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_attachment_self.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Attachment Pie"> + <menu_item_call label="Berør" name="Attachment Object Touch"/> + <menu_item_call label="Redigér" name="Edit..."/> + <menu_item_call label="Tag af" name="Detach"/> + <menu_item_call label="Sid ned" name="Sit Down Here"/> + <menu_item_call label="StÃ¥ op" name="Stand Up"/> + <menu_item_call label="Udseende" name="Change Outfit"/> + <menu_item_call label="Redigér mit sæt" name="Edit Outfit"/> + <menu_item_call label="Redigér min figur" name="Edit My Shape"/> + <menu_item_call label="Venner" name="Friends..."/> + <menu_item_call label="Grupper" name="Groups..."/> + <menu_item_call label="Profil" name="Profile..."/> + <menu_item_call label="Debug teksturer" name="Debug..."/> + <menu_item_call label="Smid" name="Drop"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_avatar_icon.xml b/indra/newview/skins/minimal/xui/da/menu_avatar_icon.xml new file mode 100644 index 0000000000000000000000000000000000000000..26b58ce1ab41bc477562b3fa24039da6e9528550 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_avatar_icon.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="Avatar Icon Menu"> + <menu_item_call label="Profil" name="Show Profile"/> + <menu_item_call label="Send besked..." name="Send IM"/> + <menu_item_call label="Tilføj ven..." name="Add Friend"/> + <menu_item_call label="Fjern ven..." name="Remove Friend"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_avatar_other.xml b/indra/newview/skins/minimal/xui/da/menu_avatar_other.xml new file mode 100644 index 0000000000000000000000000000000000000000..a778dedf0bcbe9fe2ef14f6281db19679178f041 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_avatar_other.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<!-- *NOTE: See also menu_attachment_other.xml --> +<context_menu name="Avatar Pie"> + <menu_item_call label="Profil" name="Profile..."/> + <menu_item_call label="Tilføj ven" name="Add Friend"/> + <menu_item_call label="Besked" name="Send IM..."/> + <menu_item_call label="Opkald" name="Call"/> + <menu_item_call label="Invitér til gruppe" name="Invite..."/> + <menu_item_call label="Blokér" name="Avatar Mute"/> + <menu_item_call label="Rapportér" name="abuse"/> + <menu_item_call label="Frys" name="Freeze..."/> + <menu_item_call label="Smid ud" name="Eject..."/> + <menu_item_call label="Debug Teksturer" name="Debug..."/> + <menu_item_call label="Zoom ind" name="Zoom In"/> + <menu_item_call label="Betal" name="Pay..."/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_avatar_self.xml b/indra/newview/skins/minimal/xui/da/menu_avatar_self.xml new file mode 100644 index 0000000000000000000000000000000000000000..0080f7a59ea368aded975102d0b2c9a668af1e2b --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_avatar_self.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Self Pie"> + <menu_item_call label="Sid ned" name="Sit Down Here"/> + <menu_item_call label="StÃ¥ op" name="Stand Up"/> + <context_menu label="Tag af" name="Take Off >"> + <context_menu label="Tøj" name="Clothes >"> + <menu_item_call label="Trøje" name="Shirt"/> + <menu_item_call label="Bukser" name="Pants"/> + <menu_item_call label="Nederdel" name="Skirt"/> + <menu_item_call label="Sko" name="Shoes"/> + <menu_item_call label="Strømper" name="Socks"/> + <menu_item_call label="Jakke" name="Jacket"/> + <menu_item_call label="Handsker" name="Gloves"/> + <menu_item_call label="Undertrøje" name="Self Undershirt"/> + <menu_item_call label="Underbukser" name="Self Underpants"/> + <menu_item_call label="Tatovering" name="Self Tattoo"/> + <menu_item_call label="Alpha" name="Self Alpha"/> + <menu_item_call label="Alt tøj" name="All Clothes"/> + </context_menu> + <context_menu label="HUD" name="Object Detach HUD"/> + <context_menu label="Tag af" name="Object Detach"/> + <menu_item_call label="Tag alt af" name="Detach All"/> + </context_menu> + <menu_item_call label="Mit udseende" name="Chenge Outfit"/> + <menu_item_call label="Redigér mit sæt" name="Edit Outfit"/> + <menu_item_call label="Redigér min form" name="Edit My Shape"/> + <menu_item_call label="Venner" name="Friends..."/> + <menu_item_call label="Grupper" name="Groups..."/> + <menu_item_call label="Profil" name="Profile..."/> + <menu_item_call label="Debug teksturer" name="Debug..."/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_bottomtray.xml b/indra/newview/skins/minimal/xui/da/menu_bottomtray.xml new file mode 100644 index 0000000000000000000000000000000000000000..9ac296904a839aedc858915563ca7d58a7c3462c --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_bottomtray.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="hide_camera_move_controls_menu"> + <menu_item_check label="Stemme aktiveret" name="EnableVoiceChat"/> + <menu_item_check label="Faste bevægelser" name="ShowGestureButton"/> + <menu_item_check label="Bevægelse knap" name="ShowMoveButton"/> + <menu_item_check label="Vis knap" name="ShowCameraButton"/> + <menu_item_check label="Foto knap" name="ShowSnapshotButton"/> + <menu_item_check label="Bygge knap" name="ShowBuildButton"/> + <menu_item_check label="Søge knap" name="ShowSearchButton"/> + <menu_item_check label="Kort knap" name="ShowWorldMapButton"/> + <menu_item_check label="Mini-Map button" name="ShowMiniMapButton"/> + <menu_item_call label="Klip" name="NearbyChatBar_Cut"/> + <menu_item_call label="Kopiér" name="NearbyChatBar_Copy"/> + <menu_item_call label="Sæt ind" name="NearbyChatBar_Paste"/> + <menu_item_call label="Slet" name="NearbyChatBar_Delete"/> + <menu_item_call label="Vælg alt" name="NearbyChatBar_Select_All"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_cof_attachment.xml b/indra/newview/skins/minimal/xui/da/menu_cof_attachment.xml new file mode 100644 index 0000000000000000000000000000000000000000..9d7fc0f2239d0c679c0d58a467b57fb1ec212a04 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_cof_attachment.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="COF Attachment"> + <menu_item_call label="Tag af" name="detach"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_cof_body_part.xml b/indra/newview/skins/minimal/xui/da/menu_cof_body_part.xml new file mode 100644 index 0000000000000000000000000000000000000000..0e90d5a3aebdbe0cf1d34a520f4f5b3e9fc14d19 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_cof_body_part.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="COF Body"> + <menu_item_call label="Erstat" name="replace"/> + <menu_item_call label="Redigér" name="edit"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_cof_clothing.xml b/indra/newview/skins/minimal/xui/da/menu_cof_clothing.xml new file mode 100644 index 0000000000000000000000000000000000000000..16c225b7d9953ae1bfbc2b3c8a8d7b72de452941 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_cof_clothing.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="COF Clothing"> + <menu_item_call label="Tag af" name="take_off"/> + <menu_item_call label="Redigér" name="edit"/> + <menu_item_call label="Erstat" name="replace"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_cof_gear.xml b/indra/newview/skins/minimal/xui/da/menu_cof_gear.xml new file mode 100644 index 0000000000000000000000000000000000000000..f44369fd843e6d68eb582d5aa712b22e31cc3c29 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_cof_gear.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="Gear COF"> + <menu label="Nyt tøj" name="COF.Gear.New_Clothes"/> + <menu label="Nye kropsdele" name="COF.Geear.New_Body_Parts"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_edit.xml b/indra/newview/skins/minimal/xui/da/menu_edit.xml new file mode 100644 index 0000000000000000000000000000000000000000..3752f42b1c4055ebc7f8feb416c7f4e5fc619fc2 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_edit.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu label="Redigér" name="Edit"> + <menu_item_call label="Fortryd" name="Undo"/> + <menu_item_call label="Gendan" name="Redo"/> + <menu_item_call label="Klip" name="Cut"/> + <menu_item_call label="Kopiér" name="Copy"/> + <menu_item_call label="Sæt ind" name="Paste"/> + <menu_item_call label="Slet" name="Delete"/> + <menu_item_call label="Duplikér" name="Duplicate"/> + <menu_item_call label="Marker alt" name="Select All"/> + <menu_item_call label="Fjern markering" name="Deselect"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_favorites.xml b/indra/newview/skins/minimal/xui/da/menu_favorites.xml new file mode 100644 index 0000000000000000000000000000000000000000..a4793e294cbfeb553c34408686d841c75eefa81d --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_favorites.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="Popup"> + <menu_item_call label="Teleportér" name="Teleport To Landmark"/> + <menu_item_call label="Vis/ret landemærke" name="Landmark Open"/> + <menu_item_call label="Kopiér SLurl" name="Copy slurl"/> + <menu_item_call label="Vis pÃ¥ kort" name="Show On Map"/> + <menu_item_call label="Kopiér" name="Landmark Copy"/> + <menu_item_call label="Sæt ind" name="Landmark Paste"/> + <menu_item_call label="Slet" name="Delete"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_gesture_gear.xml b/indra/newview/skins/minimal/xui/da/menu_gesture_gear.xml new file mode 100644 index 0000000000000000000000000000000000000000..a9010e99b65c085ceaff6f97c2fdc5734277068e --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_gesture_gear.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="menu_gesture_gear"> + <menu_item_call label="Tilføj/fjern fra favoritter" name="activate"/> + <menu_item_call label="Kopiér" name="copy_gesture"/> + <menu_item_call label="Sæt ind" name="paste"/> + <menu_item_call label="Kopiér UUID" name="copy_uuid"/> + <menu_item_call label="Gem til nuværende sæt" name="save_to_outfit"/> + <menu_item_call label="Editér" name="edit_gesture"/> + <menu_item_call label="Undersøg" name="inspect"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_group_plus.xml b/indra/newview/skins/minimal/xui/da/menu_group_plus.xml new file mode 100644 index 0000000000000000000000000000000000000000..97fbec1ed1d9b84ef2fcd44a7f7de8aa1bbc8538 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_group_plus.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="menu_group_plus"> + <menu_item_call label="Meld ind i gruppe..." name="item_join"/> + <menu_item_call label="Ny gruppe..." name="item_new"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_hide_navbar.xml b/indra/newview/skins/minimal/xui/da/menu_hide_navbar.xml new file mode 100644 index 0000000000000000000000000000000000000000..d96a8a8a17e2f95a13d5bed11c12c86482c3a990 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_hide_navbar.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="hide_navbar_menu"> + <menu_item_check label="Vis navigationsbjælke" name="ShowNavbarNavigationPanel"/> + <menu_item_check label="Vis favoritbjælke" name="ShowNavbarFavoritesPanel"/> + <menu_item_check label="Vis min lokation bjælke" name="ShowMiniLocationPanel"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_im_well_button.xml b/indra/newview/skins/minimal/xui/da/menu_im_well_button.xml new file mode 100644 index 0000000000000000000000000000000000000000..4889230919b28cec0dbb62efdcd33201725015d6 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_im_well_button.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="IM Well Button Context Menu"> + <menu_item_call label="Luk alle" name="Close All"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_imchiclet_adhoc.xml b/indra/newview/skins/minimal/xui/da/menu_imchiclet_adhoc.xml new file mode 100644 index 0000000000000000000000000000000000000000..f64a6ad455ea277e47ab2ca567cc3775c240bcfb --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_imchiclet_adhoc.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="IMChiclet AdHoc Menu"> + <menu_item_call label="Afslut" name="End Session"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_imchiclet_group.xml b/indra/newview/skins/minimal/xui/da/menu_imchiclet_group.xml new file mode 100644 index 0000000000000000000000000000000000000000..b89d9a57895d47b5bb036a50380747d5341fbac0 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_imchiclet_group.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="IMChiclet Group Menu"> + <menu_item_call label="Gruppe info" name="Show Profile"/> + <menu_item_call label="Vis session" name="Chat"/> + <menu_item_call label="Afslut session" name="End Session"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_imchiclet_p2p.xml b/indra/newview/skins/minimal/xui/da/menu_imchiclet_p2p.xml new file mode 100644 index 0000000000000000000000000000000000000000..6ebc40a8dd05a142c03b19d97aaa877411690813 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_imchiclet_p2p.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="IMChiclet P2P Menu"> + <menu_item_call label="Profil" name="Show Profile"/> + <menu_item_call label="Tilføj ven" name="Add Friend"/> + <menu_item_call label="Vis session" name="Send IM"/> + <menu_item_call label="Afslut session" name="End Session"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_inspect_avatar_gear.xml b/indra/newview/skins/minimal/xui/da/menu_inspect_avatar_gear.xml new file mode 100644 index 0000000000000000000000000000000000000000..8da35adb1b3a33cf60f901a9917491db7c6daaab --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_inspect_avatar_gear.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<toggleable_menu name="Gear Menu"> + <menu_item_call label="Profil" name="view_profile"/> + <menu_item_call label="Tilføj ven" name="add_friend"/> + <menu_item_call label="Besked" name="im"/> + <menu_item_call label="Opkald" name="call"/> + <menu_item_call label="Teleportér" name="teleport"/> + <menu_item_call label="Invitér til gruppe" name="invite_to_group"/> + <menu_item_call label="Blokér" name="block"/> + <menu_item_call label="Fjern blokering" name="unblock"/> + <menu_item_call label="Rapportér" name="report"/> + <menu_item_call label="Frys" name="freeze"/> + <menu_item_call label="Smid ud" name="eject"/> + <menu_item_call label="Spark" name="kick"/> + <menu_item_call label="CSR" name="csr"/> + <menu_item_call label="Debug teksturer" name="debug"/> + <menu_item_call label="Find pÃ¥ kort" name="find_on_map"/> + <menu_item_call label="Zoom ind" name="zoom_in"/> + <menu_item_call label="Betal" name="pay"/> + <menu_item_call label="Del" name="share"/> +</toggleable_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_inspect_object_gear.xml b/indra/newview/skins/minimal/xui/da/menu_inspect_object_gear.xml new file mode 100644 index 0000000000000000000000000000000000000000..e28842836ddb35fdab1ba4ef11f6de20d943af6e --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_inspect_object_gear.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu name="Gear Menu"> + <menu_item_call label="Berør" name="touch"/> + <menu_item_call label="Sid her" name="sit"/> + <menu_item_call label="betal" name="pay"/> + <menu_item_call label="Køb" name="buy"/> + <menu_item_call label="Tag" name="take"/> + <menu_item_call label="tag kopi" name="take_copy"/> + <menu_item_call label="Ã…ben" name="open"/> + <menu_item_call label="Redigér" name="edit"/> + <menu_item_call label="Tag pÃ¥" name="wear"/> + <menu_item_call label="Tilføj" name="add"/> + <menu_item_call label="Rapportér" name="report"/> + <menu_item_call label="Blokér" name="block"/> + <menu_item_call label="Zoom ind" name="zoom_in"/> + <menu_item_call label="Fjern" name="remove"/> + <menu_item_call label="Mere info" name="more_info"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_inspect_self_gear.xml b/indra/newview/skins/minimal/xui/da/menu_inspect_self_gear.xml new file mode 100644 index 0000000000000000000000000000000000000000..887c6484bc3b4d2292f5b8ca5c3d4c8167ee7650 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_inspect_self_gear.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="Gear Menu"> + <menu_item_call label="Sid ned" name="Sit Down Here"/> + <menu_item_call label="StÃ¥ op" name="Stand Up"/> + <context_menu label="Tag af" name="Take Off >"> + <context_menu label="Tøj" name="Clothes >"> + <menu_item_call label="Trøje" name="Shirt"/> + <menu_item_call label="Bukser" name="Pants"/> + <menu_item_call label="Nederdel" name="Skirt"/> + <menu_item_call label="Sko" name="Shoes"/> + <menu_item_call label="Strømper" name="Socks"/> + <menu_item_call label="Jakke" name="Jacket"/> + <menu_item_call label="Handsker" name="Gloves"/> + <menu_item_call label="Undertrøje" name="Self Undershirt"/> + <menu_item_call label="Underbukser" name="Self Underpants"/> + <menu_item_call label="Tatovering" name="Self Tattoo"/> + <menu_item_call label="Alpha" name="Self Alpha"/> + <menu_item_call label="Alt tøj" name="All Clothes"/> + </context_menu> + <context_menu label="HUD" name="Object Detach HUD"/> + <context_menu label="Tag af" name="Object Detach"/> + <menu_item_call label="Tag alt af" name="Detach All"/> + </context_menu> + <menu_item_call label="Skift sæt" name="Chenge Outfit"/> + <menu_item_call label="Redigér sæt" name="Edit Outfit"/> + <menu_item_call label="Redigér min figur" name="Edit My Shape"/> + <menu_item_call label="Mine venner" name="Friends..."/> + <menu_item_call label="Mine grupper" name="Groups..."/> + <menu_item_call label="Min profil" name="Profile..."/> + <menu_item_call label="Debug teksturer" name="Debug..."/> +</toggleable_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_inv_offer_chiclet.xml b/indra/newview/skins/minimal/xui/da/menu_inv_offer_chiclet.xml new file mode 100644 index 0000000000000000000000000000000000000000..c3b03232bf1dd81ff23ac51fcc05716a3e825fe1 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_inv_offer_chiclet.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="InvOfferChiclet Menu"> + <menu_item_call label="Luk" name="Close"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_inventory.xml b/indra/newview/skins/minimal/xui/da/menu_inventory.xml new file mode 100644 index 0000000000000000000000000000000000000000..35551318d170125a5f1dbe39d7f8ebbf2516c3fe --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_inventory.xml @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="Popup"> + <menu_item_call label="Del" name="Share"/> + <menu_item_call label="Køb" name="Task Buy"/> + <menu_item_call label="Ã¥ben" name="Task Open"/> + <menu_item_call label="Afspil" name="Task Play"/> + <menu_item_call label="Egenskaber" name="Task Properties"/> + <menu_item_call label="Omdøb" name="Task Rename"/> + <menu_item_call label="Slet" name="Task Remove"/> + <menu_item_call label="Tøm papirkurv" name="Empty Trash"/> + <menu_item_call label="Tøm 'Lost and found'" name="Empty Lost And Found"/> + <menu_item_call label="Ny mappe" name="New Folder"/> + <menu_item_call label="Nyt script" name="New Script"/> + <menu_item_call label="Ny note" name="New Note"/> + <menu_item_call label="Ny bevægelse" name="New Gesture"/> + <menu label="Nyt tøj" name="New Clothes"> + <menu_item_call label="Ny trøje" name="New Shirt"/> + <menu_item_call label="Nye bukser" name="New Pants"/> + <menu_item_call label="Nye sko" name="New Shoes"/> + <menu_item_call label="Nye strømper" name="New Socks"/> + <menu_item_call label="Ny jakke" name="New Jacket"/> + <menu_item_call label="Ny nederdel" name="New Skirt"/> + <menu_item_call label="Nye handsker" name="New Gloves"/> + <menu_item_call label="Ny undertrøje" name="New Undershirt"/> + <menu_item_call label="Nye underbukser" name="New Underpants"/> + <menu_item_call label="Nyt alpha lag" name="New Alpha Mask"/> + <menu_item_call label="Ny tatovering" name="New Tattoo"/> + </menu> + <menu label="Nye kropsdele" name="New Body Parts"> + <menu_item_call label="Ny figur" name="New Shape"/> + <menu_item_call label="Nyt hud" name="New Skin"/> + <menu_item_call label="Nyt hÃ¥r" name="New Hair"/> + <menu_item_call label="Nye øjne" name="New Eyes"/> + </menu> + <menu label="Ændre type" name="Change Type"> + <menu_item_call label="Standard" name="Default"/> + <menu_item_call label="Handsker" name="Gloves"/> + <menu_item_call label="Jakke" name="Jacket"/> + <menu_item_call label="Bukser" name="Pants"/> + <menu_item_call label="Kropsbygning" name="Shape"/> + <menu_item_call label="Sko" name="Shoes"/> + <menu_item_call label="Trøje" name="Shirt"/> + <menu_item_call label="Nederdel" name="Skirt"/> + <menu_item_call label="Underbukser" name="Underpants"/> + <menu_item_call label="Undertrøje" name="Undershirt"/> + </menu> + <menu_item_call label="Teleport" name="Landmark Open"/> + <menu_item_call label="Ã¥ben" name="Animation Open"/> + <menu_item_call label="Ã¥ben" name="Sound Open"/> + <menu_item_call label="Erstat pÃ¥klædning" name="Replace Outfit"/> + <menu_item_call label="Tilføj til pÃ¥klædning" name="Add To Outfit"/> + <menu_item_call label="Slet ting" name="Purge Item"/> + <menu_item_call label="Genskab ting" name="Restore Item"/> + <menu_item_call label="Ã¥ben" name="Open"/> + <menu_item_call label="Ã…ben original" name="Open Original"/> + <menu_item_call label="Egenskaber" name="Properties"/> + <menu_item_call label="Omdøb" name="Rename"/> + <menu_item_call label="Kopiér asset UUID" name="Copy Asset UUID"/> + <menu_item_call label="Kopiér" name="Copy"/> + <menu_item_call label="Indsæt" name="Paste"/> + <menu_item_call label="Sæt ind som link" name="Paste As Link"/> + <menu_item_call label="Slet" name="Remove Link"/> + <menu_item_call label="Slet" name="Delete"/> + <menu_item_call label="Slet systemfolder" name="Delete System Folder"/> + <menu_item_call label="start konference chat" name="Conference Chat Folder"/> + <menu_item_call label="Afspil" name="Sound Play"/> + <menu_item_call label="Om landemærke" name="About Landmark"/> + <menu_item_call label="Afspil i verden" name="Animation Play"/> + <menu_item_call label="Afspil lokalt" name="Animation Audition"/> + <menu_item_call label="Send privat besked (IM)" name="Send Instant Message"/> + <menu_item_call label="Tilbyd teleport..." name="Offer Teleport..."/> + <menu_item_call label="start konference Chat" name="Conference Chat"/> + <menu_item_call label="Aktivér" name="Activate"/> + <menu_item_call label="Deaktivér" name="Deactivate"/> + <menu_item_call label="Gem som" name="Save As"/> + <menu_item_call label="Tag af dig selv" name="Detach From Yourself"/> + <menu_item_call label="Tag pÃ¥" name="Wearable And Object Wear"/> + <menu label="Vedhæft" name="Attach To"/> + <menu label="Vedhæft til HUD" name="Attach To HUD"/> + <menu_item_call label="Redigér" name="Wearable Edit"/> + <menu_item_call label="Tilføj" name="Wearable Add"/> + <menu_item_call label="Tag af" name="Take Off"/> + <menu_item_call label="--ingen valg--" name="--no options--"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_inventory_add.xml b/indra/newview/skins/minimal/xui/da/menu_inventory_add.xml new file mode 100644 index 0000000000000000000000000000000000000000..07f70d7190dcf2a6b5f85d711596cf85be3bc28b --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_inventory_add.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="menu_inventory_add"> + <menu label="Hent" name="upload"> + <menu_item_call label="Billede (L$[COST])..." name="Upload Image"/> + <menu_item_call label="Lyd (L$[COST])..." name="Upload Sound"/> + <menu_item_call label="Animation (L$[COST])..." name="Upload Animation"/> + <menu_item_call label="Hent mange (L$[COST] pr. fil)..." name="Bulk Upload"/> + <menu_item_call label="Sæt standardværdier for upload rettigheder" name="perm prefs"/> + </menu> + <menu_item_call label="Ny mappe" name="New Folder"/> + <menu_item_call label="Nyt script" name="New Script"/> + <menu_item_call label="Ny note" name="New Note"/> + <menu_item_call label="Ny bevægelse" name="New Gesture"/> + <menu label="Nyt tøj" name="New Clothes"> + <menu_item_call label="Ny trøje" name="New Shirt"/> + <menu_item_call label="Nye bukser" name="New Pants"/> + <menu_item_call label="Nye sko" name="New Shoes"/> + <menu_item_call label="Nye strømper" name="New Socks"/> + <menu_item_call label="Ny jakke" name="New Jacket"/> + <menu_item_call label="Ny nederdel" name="New Skirt"/> + <menu_item_call label="Nye handsker" name="New Gloves"/> + <menu_item_call label="Ny undertrøje" name="New Undershirt"/> + <menu_item_call label="Nye underbukser" name="New Underpants"/> + <menu_item_call label="Nyt alpha lag" name="New Alpha"/> + <menu_item_call label="Ny tatovering" name="New Tattoo"/> + </menu> + <menu label="Nye kropsdele" name="New Body Parts"> + <menu_item_call label="Ny kropsbygning" name="New Shape"/> + <menu_item_call label="Ny hud" name="New Skin"/> + <menu_item_call label="Nyt hÃ¥r" name="New Hair"/> + <menu_item_call label="Nye øjne" name="New Eyes"/> + </menu> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_inventory_gear_default.xml b/indra/newview/skins/minimal/xui/da/menu_inventory_gear_default.xml new file mode 100644 index 0000000000000000000000000000000000000000..4809b2446356463d22dfe64f284a35ee19fe16c8 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_inventory_gear_default.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="menu_gear_default"> + <menu_item_call label="Nyt vindue" name="new_window"/> + <menu_item_check label="Sortér efter navn" name="sort_by_name"/> + <menu_item_check label="Sortér efter nyeste" name="sort_by_recent"/> + <menu_item_check label="Sortér altid mapper efter navn" name="sort_folders_by_name"/> + <menu_item_check label="Vis System mapper øverst" name="sort_system_folders_to_top"/> + <menu_item_call label="Vis filtre" name="show_filters"/> + <menu_item_call label="Nulstil filtre" name="reset_filters"/> + <menu_item_call label="Luk alle mapper" name="close_folders"/> + <menu_item_call label="Tøm "fundne genstande"" name="empty_lostnfound"/> + <menu_item_call label="Gem tekstur som" name="Save Texture As"/> + <menu_item_call label="Del" name="Share"/> + <menu_item_call label="Find original" name="Find Original"/> + <menu_item_call label="Find alle links" name="Find All Links"/> + <menu_item_call label="Tøm papirkurv" name="empty_trash"/> +</toggleable_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_land.xml b/indra/newview/skins/minimal/xui/da/menu_land.xml new file mode 100644 index 0000000000000000000000000000000000000000..1548f18f8979e0a1db50f130537eabf826aae44f --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_land.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Land Pie"> + <menu_item_call label="Om land" name="Place Information..."/> + <menu_item_call label="Sid her" name="Sit Here"/> + <menu_item_call label="Køb" name="Land Buy"/> + <menu_item_call label="Køb adgang" name="Land Buy Pass"/> + <menu_item_call label="Byg" name="Create"/> + <menu_item_call label="Tilpas terræn" name="Edit Terrain"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_landmark.xml b/indra/newview/skins/minimal/xui/da/menu_landmark.xml new file mode 100644 index 0000000000000000000000000000000000000000..3cf2ffe375c95d0561b6a2dca5fc40694251844d --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_landmark.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="landmark_overflow_menu"> + <menu_item_call label="Kopiér SLurl" name="copy"/> + <menu_item_call label="Slet" name="delete"/> + <menu_item_call label="Opret favorit" name="pick"/> + <menu_item_call label="Tilføj til favorit bjælke" name="add_to_favbar"/> +</toggleable_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_login.xml b/indra/newview/skins/minimal/xui/da/menu_login.xml new file mode 100644 index 0000000000000000000000000000000000000000..0b7a5040ae4ff911f8fa2b31638e3042d6c86df9 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_login.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu_bar name="Login Menu"> + <menu label="Mig" name="File"> + <menu_item_call label="Indstillinger" name="Preferences..."/> + <menu_item_call label="Afslut [APP_NAME]" name="Quit"/> + </menu> + <menu label="Hjælp" name="Help"> + <menu_item_call label="[SECOND_LIFE] hjælp" name="Second Life Help"/> + <menu_item_call label="Om [APP_NAME]" name="About Second Life"/> + </menu> + <menu_item_check label="Vis debug menu" name="Show Debug Menu"/> + <menu label="Debug" name="Debug"> + <menu_item_call label="Vis debug opsætning" name="Debug Settings"/> + <menu_item_call label="UI/farve opsætning" name="UI/Color Settings"/> + <menu label="UI tests" name="UI Tests"/> + <menu_item_call label="Sæt vinduesstørrelse" name="Set Window Size..."/> + <menu_item_call label="Vis betingelser" name="TOS"/> + <menu_item_call label="Vis vigtig besked" name="Critical"/> + <menu_item_call label="Media Browser Test" name="Web Browser Test"/> + <menu_item_call label="Web Content Floater Test" name="Web Content Floater Test"/> + <menu_item_check label="Vis gitter vælger" name="Show Grid Picker"/> + <menu_item_call label="Vis notifikationskonsol" name="Show Notifications Console"/> + </menu> +</menu_bar> diff --git a/indra/newview/skins/minimal/xui/da/menu_mini_map.xml b/indra/newview/skins/minimal/xui/da/menu_mini_map.xml new file mode 100644 index 0000000000000000000000000000000000000000..186dbd476ae10e3ef8ea4f23f409fed0a30e07e5 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_mini_map.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="Popup"> + <menu_item_call label="Zoom tæt" name="Zoom Close"/> + <menu_item_call label="Zoom mellem" name="Zoom Medium"/> + <menu_item_call label="Zoom langt" name="Zoom Far"/> + <menu_item_call label="Zoom standard" name="Zoom Default"/> + <menu_item_check label="Rotér kort" name="Rotate Map"/> + <menu_item_check label="Auto centrér" name="Auto Center"/> + <menu_item_call label="Fjern ref." name="Stop Tracking"/> + <menu_item_call label="Verdenskort" name="World Map"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_navbar.xml b/indra/newview/skins/minimal/xui/da/menu_navbar.xml new file mode 100644 index 0000000000000000000000000000000000000000..c04206824ac20f21d297423f12ba58b364815b96 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_navbar.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="Navbar Menu"> + <menu_item_check label="Vis koordinater" name="Show Coordinates"/> + <menu_item_check label="Vis oplysninger om parcel" name="Show Parcel Properties"/> + <menu_item_call label="Landemærke" name="Landmark"/> + <menu_item_call label="Klip" name="Cut"/> + <menu_item_call label="Kopiér" name="Copy"/> + <menu_item_call label="Sæt ind" name="Paste"/> + <menu_item_call label="Slet" name="Delete"/> + <menu_item_call label="Vælg alt" name="Select All"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_nearby_chat.xml b/indra/newview/skins/minimal/xui/da/menu_nearby_chat.xml new file mode 100644 index 0000000000000000000000000000000000000000..be532ad406d5d80a23efd7fb504dc1c255a60221 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_nearby_chat.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="NearBy Chat Menu"> + <menu_item_call label="Vis personer tæt pÃ¥..." name="nearby_people"/> + <menu_item_check label="Vis blokeret tekst" name="muted_text"/> + <menu_item_check label="Vis venne-ikoner" name="show_buddy_icons"/> + <menu_item_check label="Vis navne" name="show_names"/> + <menu_item_check label="Vis ikoner og navne" name="show_icons_and_names"/> + <menu_item_call label="Font størrelse" name="font_size"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_notification_well_button.xml b/indra/newview/skins/minimal/xui/da/menu_notification_well_button.xml new file mode 100644 index 0000000000000000000000000000000000000000..40b35b5fdd201adc51bb732f335c3a88987812f9 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_notification_well_button.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Notification Well Button Context Menu"> + <menu_item_call label="Luk alle" name="Close All"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_object.xml b/indra/newview/skins/minimal/xui/da/menu_object.xml new file mode 100644 index 0000000000000000000000000000000000000000..ba62ccf90ce47591ef93d97c37f93f8413a2b37f --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_object.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Object Pie"> + <menu_item_call label="Berør" name="Object Touch"> + <menu_item_call.on_enable name="EnableTouch" parameter="Berør"/> + </menu_item_call> + <menu_item_call label="Redigér" name="Edit..."/> + <menu_item_call label="Byg" name="Build"/> + <menu_item_call label="Ã…ben" name="Open"/> + <menu_item_call label="Sid her" name="Object Sit"/> + <menu_item_call label="StÃ¥ op" name="Object Stand Up"/> + <menu_item_call label="Objekt profil" name="Object Inspect"/> + <menu_item_call label="Zoom In" name="Zoom In"/> + <context_menu label="Tag pÃ¥" name="Put On"> + <menu_item_call label="Tag pÃ¥" name="Wear"/> + <menu_item_call label="Tilføj" name="Add"/> + <context_menu label="Vedhæft" name="Object Attach"/> + <context_menu label="Vedhæft HUD" name="Object Attach HUD"/> + </context_menu> + <context_menu label="Administrér" name="Remove"> + <menu_item_call label="Rapportér misbrug" name="Report Abuse..."/> + <menu_item_call label="Blokér" name="Object Mute"/> + <menu_item_call label="Returnér" name="Return..."/> + </context_menu> + <menu_item_call label="Tag" name="Pie Object Take"/> + <menu_item_call label="Tag kopi" name="Take Copy"/> + <menu_item_call label="Betal" name="Pay..."/> + <menu_item_call label="Køb" name="Buy..."/> + <menu_item_call label="Slet" name="Delete"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_object_icon.xml b/indra/newview/skins/minimal/xui/da/menu_object_icon.xml new file mode 100644 index 0000000000000000000000000000000000000000..08aeb633b64031abb71a809b1a07c4e656f4d8cb --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_object_icon.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="Object Icon Menu"> + <menu_item_call label="Objekt Profil..." name="Object Profile"/> + <menu_item_call label="Blokér..." name="Block"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_outfit_gear.xml b/indra/newview/skins/minimal/xui/da/menu_outfit_gear.xml new file mode 100644 index 0000000000000000000000000000000000000000..8b4c776496f7a549b22bb65c0f1c73804b92cb7d --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_outfit_gear.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="Gear Outfit"> + <menu_item_call label="Tag pÃ¥ - Erstat nuværende sæt" name="wear"/> + <menu_item_call label="Tag pÃ¥ - Tilføj til nuværende sæt" name="wear_add"/> + <menu_item_call label="Tag af - Fjern fra nuværende sæt" name="take_off"/> + <menu label="Nyt tøj" name="New Clothes"> + <menu_item_call label="Ny trøje" name="New Shirt"/> + <menu_item_call label="Nye bukser" name="New Pants"/> + <menu_item_call label="Nye sko" name="New Shoes"/> + <menu_item_call label="Nye strømper" name="New Socks"/> + <menu_item_call label="Ny jakke" name="New Jacket"/> + <menu_item_call label="Ny nederdel" name="New Skirt"/> + <menu_item_call label="Nye handsker" name="New Gloves"/> + <menu_item_call label="Ny undertrøje" name="New Undershirt"/> + <menu_item_call label="Nye underbukser" name="New Underpants"/> + <menu_item_call label="Ny alpha" name="New Alpha"/> + <menu_item_call label="Ny tatovering" name="New Tattoo"/> + </menu> + <menu label="Nye kropsdele" name="New Body Parts"> + <menu_item_call label="Ny figur" name="New Shape"/> + <menu_item_call label="Nyt hud" name="New Skin"/> + <menu_item_call label="Nyt hÃ¥r" name="New Hair"/> + <menu_item_call label="Nye øjne" name="New Eyes"/> + </menu> + <menu_item_call label="Omdøb sæt" name="rename"/> + <menu_item_call label="Slet sæt" name="delete_outfit"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_outfit_tab.xml b/indra/newview/skins/minimal/xui/da/menu_outfit_tab.xml new file mode 100644 index 0000000000000000000000000000000000000000..d6a6f2724fe730bfce24b38f1319fcb09ed54c2f --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_outfit_tab.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Outfit"> + <menu_item_call label="Tag pÃ¥ - Erstat nuværende sæt" name="wear_replace"/> + <menu_item_call label="Tag pÃ¥ - Tilføj til nuværende sæt" name="wear_add"/> + <menu_item_call label="Tag af - Fjern fra nuværende sæt" name="take_off"/> + <menu_item_call label="Redigér sæt" name="edit"/> + <menu_item_call label="Omdøb sæt" name="rename"/> + <menu_item_call label="Slet sæt" name="delete"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_participant_list.xml b/indra/newview/skins/minimal/xui/da/menu_participant_list.xml new file mode 100644 index 0000000000000000000000000000000000000000..5951d3ffb9858aca1c8ac65c3a87d78717db597f --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_participant_list.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Participant List Context Menu"> + <menu_item_check label="Sortér efter navn" name="SortByName"/> + <menu_item_check label="Sortér efter nylige talere" name="SortByRecentSpeakers"/> + <menu_item_call label="Profil" name="View Profile"/> + <menu_item_call label="Tilføj ven" name="Add Friend"/> + <menu_item_call label="Send besked" name="IM"/> + <menu_item_call label="Opkald" name="Call"/> + <menu_item_call label="Del" name="Share"/> + <menu_item_call label="Betal" name="Pay"/> + <menu_item_check label="Se person ikoner" name="View Icons"/> + <menu_item_check label="Blokér stemme" name="Block/Unblock"/> + <menu_item_check label="Blokér tekst" name="MuteText"/> + <context_menu label="Moderator valg" name="Moderator Options"> + <menu_item_check label="Tillad tekst chat" name="AllowTextChat"/> + <menu_item_call label="Sluk for denne deltager" name="ModerateVoiceMuteSelected"/> + <menu_item_call label="Fjern slukning for denne deltager" name="ModerateVoiceUnMuteSelected"/> + <menu_item_call label="Sluk lyd for alle" name="ModerateVoiceMute"/> + <menu_item_call label="Tænd lyd for alle" name="ModerateVoiceUnmute"/> + </context_menu> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_people_friends_view_sort.xml b/indra/newview/skins/minimal/xui/da/menu_people_friends_view_sort.xml new file mode 100644 index 0000000000000000000000000000000000000000..32c5e6a6c7fa7336afe46b94f51e05d8c200494a --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_people_friends_view_sort.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="menu_group_plus"> + <menu_item_check label="Sortér efter navn" name="sort_name"/> + <menu_item_check label="Sortér efter status" name="sort_status"/> + <menu_item_check label="Vis person ikoner" name="view_icons"/> + <menu_item_check label="Vis tildelte rettigheder" name="view_permissions"/> + <menu_item_call label="Vis blokerede beboere og objekter" name="show_blocked_list"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_people_groups.xml b/indra/newview/skins/minimal/xui/da/menu_people_groups.xml new file mode 100644 index 0000000000000000000000000000000000000000..841f58b61914a678177b59075c289d88d292c261 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_people_groups.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="menu_group_plus"> + <menu_item_call label="Se info" name="View Info"/> + <menu_item_call label="Chat" name="Chat"/> + <menu_item_call label="Opkald" name="Call"/> + <menu_item_call label="Aktivér" name="Activate"/> + <menu_item_call label="Forlad" name="Leave"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_people_groups_view_sort.xml b/indra/newview/skins/minimal/xui/da/menu_people_groups_view_sort.xml new file mode 100644 index 0000000000000000000000000000000000000000..0b9a791530da06da6220ed17c0adfca81c6d0dc0 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_people_groups_view_sort.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="menu_group_plus"> + <menu_item_check label="Vis gruppe ikoner" name="Display Group Icons"/> + <menu_item_call label="Forlad valgte gruppe" name="Leave Selected Group"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_people_nearby.xml b/indra/newview/skins/minimal/xui/da/menu_people_nearby.xml new file mode 100644 index 0000000000000000000000000000000000000000..220ab8724f59155b228f35febd0aee4a91a4812b --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_people_nearby.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Avatar Context Menu"> + <menu_item_call label="Vis profil" name="View Profile"/> + <menu_item_call label="Tilføj som ven" name="Add Friend"/> + <menu_item_call label="Fjern venskab" name="Remove Friend"/> + <menu_item_call label="IM" name="IM"/> + <menu_item_call label="Opkald" name="Call"/> + <menu_item_call label="Kort" name="Map"/> + <menu_item_call label="Del" name="Share"/> + <menu_item_call label="Betal" name="Pay"/> + <menu_item_check label="Blokér/Fjern blokering" name="Block/Unblock"/> + <menu_item_call label="Tilbyd teleport" name="teleport"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_people_nearby_multiselect.xml b/indra/newview/skins/minimal/xui/da/menu_people_nearby_multiselect.xml new file mode 100644 index 0000000000000000000000000000000000000000..9318a0e3409c6fbd534d1b93e5dc9c7bdad2a9ac --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_people_nearby_multiselect.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Multi-Selected People Context Menu"> + <menu_item_call label="Tilføj venner" name="Add Friends"/> + <menu_item_call label="Fjern venner" name="Remove Friend"/> + <menu_item_call label="Besked" name="IM"/> + <menu_item_call label="Opkald" name="Call"/> + <menu_item_call label="Del" name="Share"/> + <menu_item_call label="Betal" name="Pay"/> + <menu_item_call label="tilbyd teleport" name="teleport"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_people_nearby_view_sort.xml b/indra/newview/skins/minimal/xui/da/menu_people_nearby_view_sort.xml new file mode 100644 index 0000000000000000000000000000000000000000..2f35ff3c92cd7b958abd58709fd21e4759f7d2a6 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_people_nearby_view_sort.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="menu_group_plus"> + <menu_item_check label="Sortér efter tidligere talere" name="sort_by_recent_speakers"/> + <menu_item_check label="Sortér efter navn" name="sort_name"/> + <menu_item_check label="Sortér efter afstand" name="sort_distance"/> + <menu_item_check label="Se ikoner for personer" name="view_icons"/> + <menu_item_call label="Vis blokerede beboere og objekter" name="show_blocked_list"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_people_recent_view_sort.xml b/indra/newview/skins/minimal/xui/da/menu_people_recent_view_sort.xml new file mode 100644 index 0000000000000000000000000000000000000000..d081f637f22602d85e54bb0f03c6dc7c18b808ea --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_people_recent_view_sort.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="menu_group_plus"> + <menu_item_check label="Sortér efter nyeste" name="sort_most"/> + <menu_item_check label="Sortér efter navn" name="sort_name"/> + <menu_item_check label="Vis person ikoner" name="view_icons"/> + <menu_item_call label="Vis blokerede beboere og objekter" name="show_blocked_list"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_picks.xml b/indra/newview/skins/minimal/xui/da/menu_picks.xml new file mode 100644 index 0000000000000000000000000000000000000000..81ee900773cfaceebf1a26d0b8fab52c92fa7632 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_picks.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Picks"> + <menu_item_call label="Info" name="pick_info"/> + <menu_item_call label="Redigér" name="pick_edit"/> + <menu_item_call label="Teleportér" name="pick_teleport"/> + <menu_item_call label="Vis pÃ¥ kort" name="pick_map"/> + <menu_item_call label="Slet" name="pick_delete"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_picks_plus.xml b/indra/newview/skins/minimal/xui/da/menu_picks_plus.xml new file mode 100644 index 0000000000000000000000000000000000000000..d95071fbbb01cb69fe6ad852adc18158b26d7f39 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_picks_plus.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="picks_plus_menu"> + <menu_item_call label="Ny favorit" name="create_pick"/> + <menu_item_call label="Ny annonce" name="create_classified"/> +</toggleable_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_place.xml b/indra/newview/skins/minimal/xui/da/menu_place.xml new file mode 100644 index 0000000000000000000000000000000000000000..b87964ac1427e6fcf668e63f711d9945efc99d30 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_place.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="place_overflow_menu"> + <menu_item_call label="Opret et landemærke" name="landmark"/> + <menu_item_call label="Opret favorit" name="pick"/> + <menu_item_call label="Køb adgang" name="pass"/> + <menu_item_call label="Redigér" name="edit"/> +</toggleable_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_place_add_button.xml b/indra/newview/skins/minimal/xui/da/menu_place_add_button.xml new file mode 100644 index 0000000000000000000000000000000000000000..7ad22535503e4c0e11ae0655521ca2ad5fdea13a --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_place_add_button.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="menu_folder_gear"> + <menu_item_call label="Opret mappe" name="add_folder"/> + <menu_item_call label="Tilføj landemærke" name="add_landmark"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_places_gear_folder.xml b/indra/newview/skins/minimal/xui/da/menu_places_gear_folder.xml new file mode 100644 index 0000000000000000000000000000000000000000..5f573c2363e97e123c149b063b59491165089bb1 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_places_gear_folder.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="menu_folder_gear"> + <menu_item_call label="Tilføj landemærke" name="add_landmark"/> + <menu_item_call label="Tilføj mappe" name="add_folder"/> + <menu_item_call label="Gendan genstand" name="restore_item"/> + <menu_item_call label="Klip" name="cut"/> + <menu_item_call label="Kopiér" name="copy_folder"/> + <menu_item_call label="Sæt ind" name="paste"/> + <menu_item_call label="Omdøb" name="rename"/> + <menu_item_call label="Slet" name="delete"/> + <menu_item_call label="Udvid" name="expand"/> + <menu_item_call label="Luk" name="collapse"/> + <menu_item_call label="Udvid alle mapper" name="expand_all"/> + <menu_item_call label="Luk alle mapper" name="collapse_all"/> + <menu_item_check label="Sortér efter dato" name="sort_by_date"/> +</toggleable_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_places_gear_landmark.xml b/indra/newview/skins/minimal/xui/da/menu_places_gear_landmark.xml new file mode 100644 index 0000000000000000000000000000000000000000..13dbcdd42e2645f8139b129d06c03db340c9b299 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_places_gear_landmark.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="menu_ladmark_gear"> + <menu_item_call label="Teleportér" name="teleport"/> + <menu_item_call label="Mere information" name="more_info"/> + <menu_item_call label="Vis pÃ¥ kort" name="show_on_map"/> + <menu_item_call label="Tilføj landemærke" name="add_landmark"/> + <menu_item_call label="Tilføj mappe" name="add_folder"/> + <menu_item_call label="Gendan genstand" name="restore_item"/> + <menu_item_call label="Klip" name="cut"/> + <menu_item_call label="Kopiér landemærke" name="copy_landmark"/> + <menu_item_call label="Kopiér SLurl" name="copy_slurl"/> + <menu_item_call label="Sæt ind" name="paste"/> + <menu_item_call label="Omdøb" name="rename"/> + <menu_item_call label="Slet" name="delete"/> + <menu_item_call label="Ã…ben alle mapper" name="expand_all"/> + <menu_item_call label="Luk alle mapper" name="collapse_all"/> + <menu_item_check label="Sortér efter dato" name="sort_by_date"/> + <menu_item_call label="Opret favorit" name="create_pick"/> +</toggleable_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_profile_overflow.xml b/indra/newview/skins/minimal/xui/da/menu_profile_overflow.xml new file mode 100644 index 0000000000000000000000000000000000000000..6745007c996451c9210851f99518d2883caa3f40 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_profile_overflow.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="profile_overflow_menu"> + <menu_item_call label="Kort" name="show_on_map"/> + <menu_item_call label="Betal" name="pay"/> + <menu_item_call label="Del" name="share"/> + <menu_item_call label="Blokér" name="block"/> + <menu_item_call label="Fjern blokering" name="unblock"/> + <menu_item_call label="Spark" name="kick"/> + <menu_item_call label="Frys" name="freeze"/> + <menu_item_call label="Fjern frys" name="unfreeze"/> + <menu_item_call label="Kundeservicemedarbejder (CSR)" name="csr"/> +</toggleable_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_save_outfit.xml b/indra/newview/skins/minimal/xui/da/menu_save_outfit.xml new file mode 100644 index 0000000000000000000000000000000000000000..188229b58684921babd8529880ac1fe7fad0da74 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_save_outfit.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="save_outfit_menu"> + <menu_item_call label="Gem" name="save_outfit"/> + <menu_item_call label="Gem som" name="save_as_new_outfit"/> +</toggleable_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_script_chiclet.xml b/indra/newview/skins/minimal/xui/da/menu_script_chiclet.xml new file mode 100644 index 0000000000000000000000000000000000000000..cdd3212373d3792671634cd7dae968b31497a47b --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_script_chiclet.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="ScriptChiclet Menu"> + <menu_item_call label="Luk" name="Close"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_slurl.xml b/indra/newview/skins/minimal/xui/da/menu_slurl.xml new file mode 100644 index 0000000000000000000000000000000000000000..a9302e111eadc4e04ae3bed35a79505fe95d0f85 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_slurl.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="Popup"> + <menu_item_call label="Om URL" name="about_url"/> + <menu_item_call label="Teleportér til URL" name="teleport_to_url"/> + <menu_item_call label="Kort" name="show_on_map"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_teleport_history_gear.xml b/indra/newview/skins/minimal/xui/da/menu_teleport_history_gear.xml new file mode 100644 index 0000000000000000000000000000000000000000..a1c25fea690d407d9702e17342351101573a8302 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_teleport_history_gear.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="Teleport History Gear Context Menu"> + <menu_item_call label="Udvid alle mapper" name="Expand all folders"/> + <menu_item_call label="Luk alle mapper" name="Collapse all folders"/> + <menu_item_call label="Nulstil teleport historik" name="Clear Teleport History"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_teleport_history_item.xml b/indra/newview/skins/minimal/xui/da/menu_teleport_history_item.xml new file mode 100644 index 0000000000000000000000000000000000000000..dbaec62087e21e9fecc04e7b94f84134476b9ad2 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_teleport_history_item.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Teleport History Item Context Menu"> + <menu_item_call label="Teleportér" name="Teleport"/> + <menu_item_call label="Mere information" name="More Information"/> + <menu_item_call label="Kopiér til udklipsholder" name="CopyToClipboard"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_teleport_history_tab.xml b/indra/newview/skins/minimal/xui/da/menu_teleport_history_tab.xml new file mode 100644 index 0000000000000000000000000000000000000000..c4d4bb4b5b4be49458aba45a2771d7e071b29338 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_teleport_history_tab.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Teleport History Item Context Menu"> + <menu_item_call label="Ã…ben" name="TabOpen"/> + <menu_item_call label="Luk" name="TabClose"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_text_editor.xml b/indra/newview/skins/minimal/xui/da/menu_text_editor.xml new file mode 100644 index 0000000000000000000000000000000000000000..3ff31ea232f99383bbc37a5d993aee120074802e --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_text_editor.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Text editor context menu"> + <menu_item_call label="Klip" name="Cut"/> + <menu_item_call label="Kopiér" name="Copy"/> + <menu_item_call label="Sæt ind" name="Paste"/> + <menu_item_call label="Slet" name="Delete"/> + <menu_item_call label="Vælg alt" name="Select All"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_topinfobar.xml b/indra/newview/skins/minimal/xui/da/menu_topinfobar.xml new file mode 100644 index 0000000000000000000000000000000000000000..08d1c25d6f21c475ba1b4dec2e85e5095051beae --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_topinfobar.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="menu_topinfobar"> + <menu_item_check label="Vis koordinater" name="Show Coordinates"/> + <menu_item_check label="Vis egenskaber for parcel" name="Show Parcel Properties"/> + <menu_item_call label="Landemærke" name="Landmark"/> + <menu_item_call label="Kopi" name="Copy"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_url_agent.xml b/indra/newview/skins/minimal/xui/da/menu_url_agent.xml new file mode 100644 index 0000000000000000000000000000000000000000..491586f3b469b6d2d718f590cab7583ad13b7dd1 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_url_agent.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="Vis beboer profil" name="show_agent"/> + <menu_item_call label="Kopiér navn til udklipsholder" name="url_copy_label"/> + <menu_item_call label="Kopiér SLurl til udklipsholder" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_url_group.xml b/indra/newview/skins/minimal/xui/da/menu_url_group.xml new file mode 100644 index 0000000000000000000000000000000000000000..c776159b0a239c87592596cf8d14f1a9720b0ef6 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_url_group.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="Vis gruppeinformation" name="show_group"/> + <menu_item_call label="Kopiér gruppe til udklipsholder" name="url_copy_label"/> + <menu_item_call label="Kopiér SLurl til udklipsholder" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_url_http.xml b/indra/newview/skins/minimal/xui/da/menu_url_http.xml new file mode 100644 index 0000000000000000000000000000000000000000..4398777a3913098778a1dda0e0cc0c2ee60e0bcf --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_url_http.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="Indlæs" name="url_open"/> + <menu_item_call label="Ã…ben i intern browser" name="url_open_internal"/> + <menu_item_call label="Ã…ben i ekstern browser" name="url_open_external"/> + <menu_item_call label="Kopiér URL til udklipsholder" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_url_inventory.xml b/indra/newview/skins/minimal/xui/da/menu_url_inventory.xml new file mode 100644 index 0000000000000000000000000000000000000000..9a7de23e0654a50e77bab540159c60445480bb1d --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_url_inventory.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="Vis beholdningsgenstand" name="show_item"/> + <menu_item_call label="Kopiér navn til udklipsholder" name="url_copy_label"/> + <menu_item_call label="Kopiér SLurl til udklipsholder" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_url_map.xml b/indra/newview/skins/minimal/xui/da/menu_url_map.xml new file mode 100644 index 0000000000000000000000000000000000000000..ff4a4d5174fcfc4dff2e6e7591911c1f4badfbdc --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_url_map.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="Vis pÃ¥ kort" name="show_on_map"/> + <menu_item_call label="Teleport til lokation" name="teleport_to_location"/> + <menu_item_call label="Kopiér SLurl til udklipsholder" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_url_objectim.xml b/indra/newview/skins/minimal/xui/da/menu_url_objectim.xml new file mode 100644 index 0000000000000000000000000000000000000000..e27cf8495934a405581f4ce03deb7ab2032fcf3b --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_url_objectim.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="Vis objekt information" name="show_object"/> + <menu_item_call label="Vis pÃ¥ kort" name="show_on_map"/> + <menu_item_call label="Teleportér til objekt lokation" name="teleport_to_object"/> + <menu_item_call label="Kopiér objekt navn til udklipsholder" name="url_copy_label"/> + <menu_item_call label="Kopiér SLurl til udklipsholder" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_url_parcel.xml b/indra/newview/skins/minimal/xui/da/menu_url_parcel.xml new file mode 100644 index 0000000000000000000000000000000000000000..0f21e14f6614230db6ece887ddcaef3e6ad03964 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_url_parcel.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="Vis information om parcel" name="show_parcel"/> + <menu_item_call label="Vis pÃ¥ kort" name="show_on_map"/> + <menu_item_call label="Kopiér SLurl til udklipsholder" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_url_slapp.xml b/indra/newview/skins/minimal/xui/da/menu_url_slapp.xml new file mode 100644 index 0000000000000000000000000000000000000000..dd25db2aa7159968f7dd858ee91880ad81005a19 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_url_slapp.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="Kør denne kommando" name="run_slapp"/> + <menu_item_call label="Kopiér SLurl til udklipsholder" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_url_slurl.xml b/indra/newview/skins/minimal/xui/da/menu_url_slurl.xml new file mode 100644 index 0000000000000000000000000000000000000000..8d84a138bb7e9570b588456de0729f34ce3c6ad1 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_url_slurl.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="Vis information" name="show_place"/> + <menu_item_call label="Vis pÃ¥ kort" name="show_on_map"/> + <menu_item_call label="Teleportér til lokation" name="teleport_to_location"/> + <menu_item_call label="Kopiér SLurl til udklipsholder" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_url_teleport.xml b/indra/newview/skins/minimal/xui/da/menu_url_teleport.xml new file mode 100644 index 0000000000000000000000000000000000000000..e0ca7b920dbd6b0f0582c9c938c34f5a7d0290ec --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_url_teleport.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Url Popup"> + <menu_item_call label="Teleport" name="teleport"/> + <menu_item_call label="Vis pÃ¥ kort" name="show_on_map"/> + <menu_item_call label="Kopiér SLurl til udklipsholder" name="url_copy"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_viewer.xml b/indra/newview/skins/minimal/xui/da/menu_viewer.xml new file mode 100644 index 0000000000000000000000000000000000000000..93b247f8414f4022dc26f4abf1cfcbe31ba0932e --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_viewer.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu_bar name="Main Menu"> + <menu label="Hjælp" name="Help"> + <menu_item_call label="[SECOND_LIFE] Help" name="Second Life Help"/> + </menu> + <menu label="Avanceret" name="Advanced"> + <menu label="Shortcuts" name="Shortcuts"> + <menu_item_check label="Flyv" name="Fly"/> + <menu_item_call label="Luk vindue" name="Close Window"/> + <menu_item_call label="Luk alle vinduer" name="Close All Windows"/> + <menu_item_call label="Nulstil udsyn" name="Reset View"/> + </menu> + </menu> +</menu_bar> diff --git a/indra/newview/skins/minimal/xui/da/menu_wearable_list_item.xml b/indra/newview/skins/minimal/xui/da/menu_wearable_list_item.xml new file mode 100644 index 0000000000000000000000000000000000000000..63f4b0b38849cdb60770137ef4f52f64a5879c12 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_wearable_list_item.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Outfit Wearable Context Menu"> + <menu_item_call label="Erstat" name="wear_replace"/> + <menu_item_call label="Tag pÃ¥" name="wear_wear"/> + <menu_item_call label="Tilføj" name="wear_add"/> + <menu_item_call label="Tag af" name="take_off_or_detach"/> + <menu_item_call label="Tag af" name="detach"/> + <context_menu label="Vedhæft til" name="wearable_attach_to"/> + <context_menu label="Vedhæft til HUD" name="wearable_attach_to_hud"/> + <menu_item_call label="Tag af" name="take_off"/> + <menu_item_call label="Redigér" name="edit"/> + <menu_item_call label="Genstandsprofil" name="object_profile"/> + <menu_item_call label="Vis original" name="show_original"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_wearing_gear.xml b/indra/newview/skins/minimal/xui/da/menu_wearing_gear.xml new file mode 100644 index 0000000000000000000000000000000000000000..515a15b287ea9a122af3176b1bc8cab204cbbbcc --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_wearing_gear.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="Gear Wearing"> + <menu_item_call label="Redigér sæt" name="edit"/> + <menu_item_call label="Tag af" name="takeoff"/> +</menu> diff --git a/indra/newview/skins/minimal/xui/da/menu_wearing_tab.xml b/indra/newview/skins/minimal/xui/da/menu_wearing_tab.xml new file mode 100644 index 0000000000000000000000000000000000000000..c0db7b68426012c915339b32dfd5093ae60ea9d9 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/menu_wearing_tab.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Wearing"> + <menu_item_call label="Tag af" name="take_off"/> + <menu_item_call label="Tag af" name="detach"/> + <menu_item_call label="Redigér sæt" name="edit"/> +</context_menu> diff --git a/indra/newview/skins/minimal/xui/da/notifications.xml b/indra/newview/skins/minimal/xui/da/notifications.xml new file mode 100644 index 0000000000000000000000000000000000000000..e77eeee8df4db3db23c82095ba96b93a72118853 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/notifications.xml @@ -0,0 +1,1831 @@ +<?xml version="1.0" encoding="utf-8"?> +<notifications> + <global name="skipnexttime"> + Vis ikke dette igen + </global> + <global name="alwayschoose"> + Vælg altid dette + </global> + <global name="implicitclosebutton"> + Luk + </global> + <template name="okbutton"> + <form> + <button name="OK_okbutton" text="$yestext"/> + </form> + </template> + <template name="okignore"> + <form> + <button name="OK_okignore" text="$yestext"/> + </form> + </template> + <template name="okcancelbuttons"> + <form> + <button name="OK_okcancelbuttons" text="$yestext"/> + <button name="Cancel_okcancelbuttons" text="$notext"/> + </form> + </template> + <template name="okcancelignore"> + <form> + <button name="OK_okcancelignore" text="$yestext"/> + <button name="Cancel_okcancelignore" text="$notext"/> + </form> + </template> + <template name="okhelpbuttons"> + <form> + <button name="OK_okhelpbuttons" text="$yestext"/> + <button name="Help" text="$helptext"/> + </form> + </template> + <template name="yesnocancelbuttons"> + <form> + <button name="Yes" text="$yestext"/> + <button name="No" text="$notext"/> + <button name="Cancel_yesnocancelbuttons" text="$canceltext"/> + </form> + </template> + <notification functor="GenericAcknowledge" label="Ukendt notificeringsbesked" name="MissingAlert"> + Din version af [APP_NAME] kan ikke vise den besked den lige modtog. Undersøg venligst at du har den nyester version af klienten installeret. + +Fejl detaljer: Beskeden kaldet '[_NAME]' blev ikke fundet i notifications.xml. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="FloaterNotFound"> + Floater error: Kunne ikke finde følgende kontrol: + +[CONTROLS] + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="TutorialNotFound"> + Der er i øjeblikket ingen tilgængelig guide. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="GenericAlert"> + [MESSAGE] + </notification> + <notification name="GenericAlertYesCancel"> + [MESSAGE] + <usetemplate name="okcancelbuttons" notext="Annullér" yestext="Ja"/> + </notification> + <notification name="BadInstallation"> + Der opstod en fejl ved opdatering af [APP_NAME]. Please [http://get.secondlife.com download the latest version] of the Viewer. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="LoginFailedNoNetwork"> + Kunne ikke tilslutte til [SECOND_LIFE_GRID]. + '[DIAGNOSTIC]' +Check at Internet forbindelsen fungerer korrekt. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="MessageTemplateNotFound"> + Besked template [PATH] kunne ikke findes. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="WearableSave"> + Gem ændringer til nuværende tøj/krops del? + <usetemplate canceltext="Annullér" name="yesnocancelbuttons" notext="Gem ikke" yestext="Gem"/> + </notification> + <notification name="CompileQueueSaveText"> + Der var problemer med upload af teksten til et script af følgende Ã¥rsager: [REASON]. Prøv igen senere. + </notification> + <notification name="CompileQueueSaveBytecode"> + Der var problemer med at uploade den kompileret script af følgende Ã¥rsager: [REASON]. Prøv igen senere. + </notification> + <notification name="WriteAnimationFail"> + Der var et problem med skrivning af animations data. Prøv igen senere. + </notification> + <notification name="UploadAuctionSnapshotFail"> + Der var problemer med at uploade billedet til auktionen af følgende Ã¥rsager: [REASON] + </notification> + <notification name="UnableToViewContentsMoreThanOne"> + Ude af stand til at se indholdet af mere end ét element ad gangen. +Vælg kun en genstand, og prøv igen. + </notification> + <notification name="SaveClothingBodyChanges"> + Gem alle ændringer til tøj/krops dele? + <usetemplate canceltext="Annullér" name="yesnocancelbuttons" notext="Gem Ikke" yestext="Gem Alt"/> + </notification> + <notification name="FriendsAndGroupsOnly"> + 'Ikke-venner' vil ikke vide, at du har valgt at ignorere deres opkald og personlige beskeder (IM) + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="FavoritesOnLogin"> + Bemærk: NÃ¥r du aktiverer dette valg, kan enhver der bruger denne computer se dine favorit lokationer. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="GrantModifyRights"> + Tildeling af ændre-rettigheder til andre beboere, tillader dem at ændre, slette eller tage ETHVERT objekt du mÃ¥tte have. Vær MEGET forsigtig ved tildeling af denne rettighed. +Ønsker du at give ændre-rettgheder til [NAME]? + <usetemplate name="okcancelbuttons" notext="Nej" yestext="Ja"/> + </notification> + <notification name="GrantModifyRightsMultiple"> + At give redigerings rettigheder til en anden beboer, giver dem mulighed for at ændre, slette eller tage ALLE genstande, du mÃ¥tte have i verden. Vær MEGET forsigtig nÃ¥r uddeler denne tilladelse. +Ønsker du at ændre rettigheder for de valgte beboere? + <usetemplate name="okcancelbuttons" notext="Nej" yestext="Ja"/> + </notification> + <notification name="RevokeModifyRights"> + Ønsker du at tilbagekalder ændre-rettigheder for [NAME]? + <usetemplate name="okcancelbuttons" notext="Nej" yestext="Ja"/> + </notification> + <notification name="RevokeModifyRightsMultiple"> + Vil du tilbagekalde rettighederne for de valgte beboere? + <usetemplate name="okcancelbuttons" notext="Nej" yestext="Ja"/> + </notification> + <notification name="UnableToCreateGroup"> + Kunne ikke oprette gruppe. +[MESSAGE] + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="PanelGroupApply"> + [NEEDS_APPLY_MESSAGE] +[WANT_APPLY_MESSAGE] + <usetemplate canceltext="Annullér" name="yesnocancelbuttons" notext="Ignorer Ændringer" yestext="Godkend Ændringer"/> + </notification> + <notification name="MustSpecifyGroupNoticeSubject"> + Du skal angive et emne for at sende en gruppe besked. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="AddGroupOwnerWarning"> + Du er ved at tilføje medlemmer til rollen som [ROLE_NAME]. +Medlemmer ikke kan fjernes fra denne rolle. +Medlemmerne skal fratræde sin rolle selv. +Er du sikker pÃ¥ du vil fortsætte? + <usetemplate ignoretext="Bekræft, før jeg tilføjer en ny gruppe ejer" name="okcancelignore" notext="Nej" yestext="Ja"/> + </notification> + <notification name="AssignDangerousActionWarning"> + Du er ved at tilføje muligheden for '[ACTION_NAME]' til +rollen '[ROLE_NAME]'. + +*ADVARSEL* +Ethvert medlem i en rolle med denne evne kan tildele sig selv -- og et andet medlem - roller med flere beføjelser, end de har i øjeblikket, potentielt kan de ophøje sig selv til nær-Ejer magt. Være sikker pÃ¥, at du ved, hvad du laver, før tildeling af denne evne. + +Add this Ability to '[ROLE_NAME]'? + <usetemplate name="okcancelbuttons" notext="Nej" yestext="Ja"/> + </notification> + <notification name="AttachmentDrop"> + Du er ved at smide et vedhæng. + Er du sikker pÃ¥ at du vil fortsætte? + <usetemplate ignoretext="Bekræft før vedhæng smides" name="okcancelignore" notext="Nej" yestext="Ja"/> + </notification> + <notification name="JoinGroupNoCost"> + Du melder dig ind i gruppen [NAME]. +Ønsker du at fortsætte? + <usetemplate name="okcancelbuttons" notext="Annullér" yestext="Bliv medlem"/> + </notification> + <notification name="JoinGroupCannotAfford"> + Tilmelding til denne gruppe koster L$[COST]. +Du har ikke nok L$ til denne tilmelding. + </notification> + <notification name="CreateGroupCost"> + Oprettelse af denne gruppe vil koste L$100. +Grupper skal have mindst 2 medlemmer, ellers slettes de for altid. +Invitér venligst medlemmer indenfor 48 timer. + <usetemplate canceltext="Annullér" name="okcancelbuttons" notext="Annullér" yestext="Oprete en gruppe for L$100"/> + </notification> + <notification name="ConfirmLandSaleToAnyoneChange"> + ADVARSEL: Ved at vælge 'sælg til enhver' bliver til land tilgængeligt for alle i hele [SECOND_LIFE], ogsÃ¥ de som ikke er i denne region. + +Det valgte antal [LAND_SIZE] m² land bliver sat til salg. +Salgprisen vil være [SALE_PRICE]L$ og vil være til salg til [NAME]. + </notification> + <notification name="MultipleFacesSelected"> + Flere overflader er valgt for øjeblikket. +Hvis du fortsætter med denne aktion, vil flere instanser af media blive vist pÃ¥ overfladerne pÃ¥ objektet. +Hvis media kun skal vises pÃ¥ en overflade, vælg 'Vælg overflade' og klik pÃ¥ den relevante overflade og klik pÃ¥ tilføj. + <usetemplate ignoretext="Media vil blive sat pÃ¥ flere valgte overflader" name="okcancelignore" notext="Annullér" yestext="OK"/> + </notification> + <notification name="PromptMissingSubjMsg"> + E-mail dette billede med standard emne eller besked? + <usetemplate name="okcancelbuttons" notext="Annullér" yestext="OK"/> + </notification> + <notification name="ErrorUploadingPostcard"> + Der var et problem med at sende billedet pÃ¥ grund af følgende: [REASON] + </notification> + <notification name="MaxAttachmentsOnOutfit"> + Kunne ikke vedhæfte objekt. +Overskrider vedhæftnings begrænsning pÃ¥ [MAX_ATTACHMENTS] objekter. Tag venligst en anden vedhæftning af først. + </notification> + <notification name="MustHaveAccountToLogIn"> + Ups. Noget mangler at blive udfyldt. +Du skal indtaste brugernavnet for din avatar. + +Du skal bruge en konto for at benytte [SECOND_LIFE]. Ønsker du at oprette en konto nu? + <usetemplate name="okcancelbuttons" notext="Prøv igen" yestext="Lav ny konto"/> + </notification> + <notification name="InvalidCredentialFormat"> + Du skal indtaste enten dit brugernavn eller bÃ¥de dit fornavn og efternavn for din avatar i brugernavn feltet, derefter log pÃ¥ igen. + </notification> + <notification name="DeleteMedia"> + Du har valgt at slette media tilknyttet denne overflade. +Er du sikker pÃ¥ at du vil fortsætte? + <usetemplate ignoretext="Bekræft før jeg slette media i et objekt" name="okcancelignore" notext="Nej" yestext="Ja"/> + </notification> + <notification name="ClassifiedInsufficientFunds"> + Ikke nok penge til at oprette annonce. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="DeleteAvatarPick"> + Slet favorit <nolink>[PICK]</nolink>? + </notification> + <notification name="DeleteOutfits"> + Slet valgte sæt? + <usetemplate name="okcancelbuttons" notext="Annullér" yestext="OK"/> + </notification> + <notification name="CacheWillClear"> + Cache vil blive tømt ved næste genstart af [APP_NAME]. + </notification> + <notification name="CacheWillBeMoved"> + Cache vil blive fjernet ved næste genstart af [APP_NAME]. +Note: This will clear the cache. + </notification> + <notification name="ChangeConnectionPort"> + Port ændringer vil blive effektueret ved næste genstart af [APP_NAME]. + </notification> + <notification name="ChangeSkin"> + Den nye hud vil blive vist ved næste genstart af [APP_NAME]. + </notification> + <notification name="ChangeLanguage"> + Ændring af sprog vil først have effekt efter genstart af [APP_NAME]. + </notification> + <notification name="StartRegionEmpty"> + Ups, din start region er ikke angivet. +Indtast venligst navn pÃ¥ region i Start lokation feltet eller vælg "Min sidste lokation" eller "Hjem". + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="UnsupportedHardware"> + Din computer opfylder ikke minimumskravene til [APP_NAME]. Du kan risikere nedsat hastighed. Desværre kan [SUPPORT_SITE] ikke tilbyde teknisk support til konfigurationer der ikke er understøttet. + +Besøg [_URL] for yderligere information? + <usetemplate ignoretext="Din computer hardware understøttes ikke" name="okcancelignore" notext="No" yestext="Yes"/> + </notification> + <notification name="UnknownGPU"> + Dit system indeholder et grafikkort som [APP_NAME] ikke kan genkende. +Dette skyldes ofte nyt hardware som endnu ikke er blevet testet med [APP_NAME]. Kortet vil sandsynligvis virke fint, med det kan være nødvendigt at justere grafik opsætningen. +(Mig > Indstillinger > Grafik). + <form name="form"> + <ignore name="ignore" text="Dit grafikkort kunne ikke identificeres"/> + </form> + </notification> + <notification name="DisplaySettingsNoShaders"> + [APP_NAME] gik ned ved inititalisering af grafik drivere. +Grafik kvaliteten sættes til 'lav' for at undgÃ¥ typiske problemer med drivere. Dette vil slÃ¥ visse grafik funktioner fra. +Vi anbefaler at opdatere driverne til dit grafikkort. +Grafik kvaliteten kan forbedres i indstillinger > Grafik. + </notification> + <notification name="CannotCopyWarning"> + Du har ikke rettigheder til at kopiere følgende genstande: +[ITEMS] +og du vil miste dem fra din beholdning hvis du forærer dem væk. Er du sikker pÃ¥ at du vil tilbyde disse genstande? + </notification> + <notification name="CannotGiveCategory"> + Du har ikke tilladelse til at videreføre den valgte mappe. + </notification> + <notification name="EjectAvatarFromGroup"> + Du har smidt [AVATAR_NAME] ud af gruppen [GROUP_NAME] + </notification> + <notification name="PromptGoToCurrencyPage"> + [EXTRA] + +GÃ¥ til [_URL] for information om køb af L$? + </notification> + <notification name="SoundFileInvalidChunkSize"> + Fejl i WAV fil (chunk size): +[FILE] + </notification> + <notification name="CannotEncodeFile"> + Kunne ikke 'forstÃ¥' filen: [FILE] + </notification> + <notification name="CorruptedProtectedDataStore"> + Vi kan ikke udfylde dit brugernavn og password. Dette kan ske hvis du ændrer netværksopsætning + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="DoNotSupportBulkAnimationUpload"> + [APP_NAME] understøtter p.t. ikke at send flere animationsfiler ad gangen. + </notification> + <notification name="LandmarkCreated"> + Du har tilføjet "[LANDMARK_NAME]" til din [FOLDER_NAME] mappe. + </notification> + <notification name="LandmarkAlreadyExists"> + Du har allerede et landemærke for denne lokation. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="CannotOpenScriptObjectNoMod"> + Ikke muligt at Ã¥bne script i objekt uden 'Redigére' rettigheder. + </notification> + <notification name="CouldNotTeleportReason"> + Teleport fejlede. +[REASON] + </notification> + <notification name="invalid_tport"> + Der opstod et problem ved din teleport. Det kan være nødvendigt at logge ind igen, før du kan teleporte. +Hvis du bliver ved med at fÃ¥ denne fejl, check venligst [SUPPORT_SITE]. + </notification> + <notification name="invalid_region_handoff"> + Der opstod et problem ved skift til ny region. Det kan være nødvendigt at logge ind igen, før du kan skifte til andre regioner. +Hvis du bliver ved med at fÃ¥ denne fejl, check venligst [SUPPORT_SITE]. + </notification> + <notification name="blocked_tport"> + Beklager, teleport er blokeret lige nu. Prøv igen senere. +Hvis du stadig ikke kan teleporte, prøv venligst at logge ud og ligge ind for at løse dette problem. + </notification> + <notification name="nolandmark_tport"> + Beklager, systemet kunne ikke finde landmærke destinationen. + </notification> + <notification name="timeout_tport"> + Beklager, systemet kunne ikke fuldføre teleport forbindelse. +Prøv igen om lidt. + </notification> + <notification name="noaccess_tport"> + Beklager, du har ikke adgang til denne teleport destination. + </notification> + <notification name="missing_attach_tport"> + Dine vedhæng er ikke ankommet endnu. Prøv at vente lidt endnu eller log ud og ind igen før du prøver at teleporte igen. + </notification> + <notification name="too_many_uploads_tport"> + Tekniske problemer hindrer at din teleport kan gennemføres. +Prøv venligst igen om lidt eller vælg et mindre travlt omrÃ¥de. + </notification> + <notification name="expired_tport"> + Beklager, men systemet kunne ikke fuldføre din teleport i rimelig tid. Prøv venligst igen om lidt. + </notification> + <notification name="expired_region_handoff"> + Beklager, men systemet kunne ikke fuldføre skift til anden region i rimelig tid. Prøv venligst igen om lidt. + </notification> + <notification name="no_host"> + Ikke muligt at fine teleport destination. Destinationen kan være midlertidig utilgængelig eller findes ikke mere. +Prøv evt. igen om lidt. + </notification> + <notification name="no_inventory_host"> + Beholdningssystemet er ikke tilgængelig lige nu. + </notification> + <notification name="ForceOwnerAuctionWarning"> + Denne parcel er sat pÃ¥ auktion. Gennemtving ejerskab vil annullere denne auktion og mÃ¥ske irritere nogen beboere hvis bud allerede er afgivet. +Gennemtving ejerskab? + </notification> + <notification name="CannotBuyLandNoRegion"> + Ikke i stand til at købe land: +Kan ikke finde region som dette land er i. + </notification> + <notification name="CannotCloseFloaterBuyLand"> + Du kan ikke lukke 'Køb land' vinduet før [APP_NAME] har vurderet en pris pÃ¥ denne transaktion. + </notification> + <notification name="CannotDeedLandNoRegion"> + Land kunne ikke dedikeres: +Kunne ikke finde den region land ligger i. + </notification> + <notification name="CannotReleaseLandRegionNotFound"> + Kunne ikke efterlade land: +Kan ikke finde den region landet ligger i. + </notification> + <notification name="CannotDivideLandNoRegion"> + Kunne ikke opdele land: +Kan ikke finde den region landet ligger i. + </notification> + <notification name="CannotJoinLandNoRegion"> + Kunne ikke opdele land: +Kan ikke finde den region landet ligger i. + </notification> + <notification name="CannotSaveToAssetStore"> + Kunne ikke gemme [NAME] i den centrale database. +Dette er typisk en midlertidig fejl. Venligst rediger og gem igen om et par minutter. + </notification> + <notification name="YouHaveBeenLoggedOut"> + Du er blevet logget af [SECOND_LIFE] + [MESSAGE] + <usetemplate name="okcancelbuttons" notext="Afslut" yestext="Se PB & Chat"/> + </notification> + <notification label="Tilføj ven" name="AddFriendWithMessage"> + Venner kan give tilladelse til at følge hinanden +pÃ¥ Verdenskortet eller modtage status opdateringer. + +Tilbyd venskab til [NAME]? + <form name="form"> + <input name="message"> + Vil du være min ven? + </input> + <button name="Offer" text="OK"/> + <button name="Cancel" text="Annullér"/> + </form> + </notification> + <notification label="Gem sæt" name="SaveOutfitAs"> + Gem det som jeg har pÃ¥ som nyt sæt: + <form name="form"> + <input name="message"> + [DESC] (ny) + </input> + <button name="OK" text="OK"/> + <button name="Cancel" text="Annullér"/> + </form> + </notification> + <notification label="Gem" name="SaveWearableAs"> + Gem genstand til beholdning som: + <form name="form"> + <input name="message"> + [DESC] (ny) + </input> + <button name="OK" text="OK"/> + <button name="Cancel" text="Annullér"/> + </form> + </notification> + <notification label="Omdøb sæt" name="RenameOutfit"> + Nyt navn til sæt: + <form name="form"> + <input name="new_name"> + [NAME] + </input> + <button name="OK" text="OK"/> + <button name="Cancel" text="Annullér"/> + </form> + </notification> + <notification name="RemoveFromFriends"> + Ønsker du at fjerne [NAME] fra din venneliste? + </notification> + <notification name="ConfirmItemDeleteHasLinks"> + Mindst en af genstandene har lænkede genstande der peger pÃ¥ den. Hvis du sletter denne genstand, vil lænkninger ikke virke mere. Det anbefales kraftigt at fjerne lænkninger først. + +Er du sikker pÃ¥ at du vil slette disse genstande? + <usetemplate name="okcancelbuttons" notext="Annullér" yestext="OK"/> + </notification> + <notification name="DeedLandToGroupWithContribution"> + Ved at dedikere denne parcel, vil gruppen skulle have og vedblive med at have nok kreditter til brug af land. +Dedikeringen vil inkludere samtidige bidrag til gruppen fra '[NAME]'. +Købsprisen for dette land er ikke refunderet til ejeren. Hvis en dedikeret parvel sælges, vil salgsprisen blive delt ligeligt mellem gruppe medlemmerne. + +Dediker disse [AREA] m² land til gruppen '[GROUP_NAME]'? + </notification> + <notification name="ErrorMessage"> + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="AvatarMovedDesired"> + Den ønskede lokation er ikke tilgængelig lige nu. +Du er blevet flyttet til en region in nærheden. + </notification> + <notification name="AvatarMovedLast"> + Din sidste lokation er ikke tilgængelig for øjeblikket. +Du er blevet flyttet til en region in nærheden. + </notification> + <notification name="AvatarMovedHome"> + Din hjemme lokation er ikke tilgængelig for øjeblikket. +Du er blevet flyttet til en region in nærheden. +Du kan mÃ¥ske ønske at sætte en ny hjemme lokation. + </notification> + <notification name="ClothingLoading"> + Dit tøj hentes stadig ned. +Du kan bruge [SECOND_LIFE] normalt og andre personer vil se dig korrekt. + <form name="form"> + <ignore name="ignore" text="Det tager lang tid at hente tøj"/> + </form> + </notification> + <notification name="FirstRun"> + [APP_NAME] installationen er færdig. + +Hvis det er første gang du bruger [SECOND_LIFE], skal du først oprette en konto for at logge pÃ¥. +Vend tilbage til [http://join.secondlife.com secondlife.com] for at oprette en ny konto? + </notification> + <notification name="LoginPacketNeverReceived"> + Der er problemer med at koble pÃ¥. Der kan være et problem med din Internet forbindelse eller [SECOND_LIFE_GRID]. + +Du kan enten checke din Internet forbindelse og prøve igen om lidt, klikke pÃ¥ Hjælp for at se [SUPPORT_SITE] siden, eller klikke pÃ¥ Teleport for at forsøge at teleportere hjem. + </notification> + <notification name="CantTeleportToGrid"> + Kunne ikke teleportere til [SLURL] da den er pÃ¥ et andet net ([GRID]) end det nuværende net ([CURRENT_GRID]). Luk venligst din klient og prøv igen. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="GeneralCertificateError"> + Kunne ikke opnÃ¥ forbindelse til server. +[REASON] + +Vedrørende: [SUBJECT_NAME_STRING] +Fra: [ISSUER_NAME_STRING] +Valid fra: [VALID_FROM] +Valid til: [VALID_TO] +MD5 Fingerprint: [SHA1_DIGEST] +SHA1 Fingerprint: [MD5_DIGEST] +Key Usage: [KEYUSAGE] +Extended Key Usage: [EXTENDEDKEYUSAGE] +Subject Key Identifier: [SUBJECTKEYIDENTIFIER] + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="TrustCertificateError"> + Certifikationsmyndighed for denne server er ikke kendt. + +Certifikat information: +Vedrørende: [SUBJECT_NAME_STRING] +Fra: [ISSUER_NAME_STRING] +Valid fra: [VALID_FROM] +Valid til: [VALID_TO] +MD5 Fingerprint: [SHA1_DIGEST] +SHA1 Fingerprint: [MD5_DIGEST] +Key Usage: [KEYUSAGE] +Extended Key Usage: [EXTENDEDKEYUSAGE] +Subject Key Identifier: [SUBJECTKEYIDENTIFIER] + +Ønsker du at stole pÃ¥ denne myndighed? + <usetemplate name="okcancelbuttons" notext="Annullér" yestext="Stol pÃ¥"/> + </notification> + <notification name="NotEnoughCurrency"> + [NAME] L$ [PRICE] Du har ikke nok L$ til dette. + </notification> + <notification name="GrantedModifyRights"> + [NAME] har givet dig rettighed til at redigere sine objekter. + </notification> + <notification name="RevokedModifyRights"> + Dinne rettigheder til at redigere objekter ejet af [NAME] er fjernet + </notification> + <notification name="BuyOneObjectOnly"> + Ikke muligt at købe mere end et objekt ad gangen. Vælg kun ét objekt og prøv igen. + </notification> + <notification name="DownloadWindowsMandatory"> + En ny version af [APP_NAME] er tilgængelig. +[MESSAGE] +Du skal hente denne version for at bruge [APP_NAME]. + </notification> + <notification name="DownloadWindows"> + En opdateret version af [APP_NAME] er tilgængelig. +[MESSAGE] +Denne opdatering er ikke pÃ¥krævet, men det anbefales at installere den for at opnÃ¥ øget hastighed og forbedret stabilitet. + </notification> + <notification name="DownloadWindowsReleaseForDownload"> + En opdateret version af [APP_NAME] er tilgængelig. +[MESSAGE] +Denne opdatering er ikke pÃ¥krævet, men det anbefales at installere den for at opnÃ¥ øget hastighed og forbedret stabilitet. + </notification> + <notification name="DownloadLinuxMandatory"> + En ny version af [APP_NAME] er tilgængelig. +[MESSAGE] +Du skal hente denne version for at kunne benytte [APP_NAME]. + <usetemplate name="okcancelbuttons" notext="Afslut" yestext="Hent"/> + </notification> + <notification name="DownloadLinux"> + En opdateret version af [APP_NAME] er tilgængelig. +[MESSAGE] +Denne opdatering er ikke pÃ¥krævet, men det anbefales at installere den for at opnÃ¥ øget hastighed og forbedret stabilitet. + <usetemplate name="okcancelbuttons" notext="Fortsæt" yestext="Hent"/> + </notification> + <notification name="DownloadLinuxReleaseForDownload"> + En opdateret version af [APP_NAME] er tilgængelig. +[MESSAGE] +Denne opdatering er ikke pÃ¥krævet, men det anbefales at installere den for at opnÃ¥ øget hastighed og forbedret stabilitet. + <usetemplate name="okcancelbuttons" notext="Fortsæt" yestext="Hent"/> + </notification> + <notification name="DownloadMacMandatory"> + En ny version af [APP_NAME] er tilgængelig. +[MESSAGE] +Du skal hente denne opdatering for at bruge [APP_NAME]. + +Download til dit Program bibliotek? + </notification> + <notification name="DownloadMac"> + En opdateret version af [APP_NAME] er tilgængelig. +[MESSAGE] +Denne opdatering er ikke pÃ¥krævet, men det anbefales at installere den for at opnÃ¥ øget hastighed og forbedret stabilitet. + +Download til dit Program bibliotek? + </notification> + <notification name="DownloadMacReleaseForDownload"> + En opdateret version af [APP_NAME] er tilgængelig. +[MESSAGE] +Denne opdatering er ikke pÃ¥krævet, men det anbefales at installere den for at opnÃ¥ øget hastighed og forbedret stabilitet. + +Download til dit Program bibliotek? + </notification> + <notification name="FailedUpdateInstall"> + Der opstod en fejl ved installation af opdatering. +Hent og installér venligst den nyeste version fra +http://secondlife.com/download. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="FailedRequiredUpdateInstall"> + Vi kunne ikke installere en pÃ¥krævet opdatering. +Du kan ikke logge pÃ¥ før [APP_NAME] er blevet opdateret. + +Hent og installer venligst den nyeste klien fra +http://secondlife.com/download. + <usetemplate name="okbutton" yestext="Afslut"/> + </notification> + <notification name="UpdaterServiceNotRunning"> + Dette er en pÃ¥krævet opdatering af din Second Life installation. + +Du kan downloade opdateringen fra http://www.secondlife.com/downloads +eller du kan installere den nu. + <usetemplate name="okcancelbuttons" notext="Afslut Second Life" yestext="Hent og installér nu"/> + </notification> + <notification name="DownloadBackgroundTip"> + Vi har hentet en opdatering til din [APP_NAME] installation. +Version [VERSION] [[RELEASE_NOTES_FULL_URL] Information about this update] + <usetemplate name="okcancelbuttons" notext="Senere..." yestext="Installér nu og genstart [APP_NAME]"/> + </notification> + <notification name="DownloadBackgroundDialog"> + Vi har hentet en opdatering til din [APP_NAME] installation. +Version [VERSION] [[RELEASE_NOTES_FULL_URL] Information about this update] + <usetemplate name="okcancelbuttons" notext="Senere..." yestext="Installér nu og genstart [APP_NAME]"/> + </notification> + <notification name="RequiredUpdateDownloadedVerboseDialog"> + Vi har hentet en pÃ¥krævet opdatering. +Version [VERSION] + +Du skal genstarte [APP_NAME] for at installere denne opdatering. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="RequiredUpdateDownloadedDialog"> + Du skal genstarte [APP_NAME] for at installere opdateringen. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="DeedObjectToGroup"> + <usetemplate ignoretext="Bekræft før jeg dedikerer et objekt til en gruppe" name="okcancelignore" notext="Cancel" yestext="Deed"/> + </notification> + <notification name="WebLaunchExternalTarget"> + Ønsker du at Ã¥bne din web browser for at se dette indhold? + <usetemplate ignoretext="Start min browser for at se hjemmesider" name="okcancelignore" notext="Cancel" yestext="OK"/> + </notification> + <notification name="WebLaunchJoinNow"> + GÃ¥ til [http://secondlife.com/account/ Dashboard] for at administrere din konto? + <usetemplate ignoretext="Start min browser for at administrere min konto" name="okcancelignore" notext="Cancel" yestext="OK"/> + </notification> + <notification name="WebLaunchSecurityIssues"> + <usetemplate ignoretext="Start min browser for at lære hvordan man rapporterer sikkerhedsproblemer" name="okcancelignore" notext="Cancel" yestext="OK"/> + </notification> + <notification name="WebLaunchQAWiki"> + <usetemplate ignoretext="Start min browser for at se QA Wiki" name="okcancelignore" notext="Cancel" yestext="OK"/> + </notification> + <notification name="WebLaunchPublicIssue"> + <usetemplate ignoretext="Start min browser for at bruge det Linden Labs sagsstyring" name="okcancelignore" notext="Cancel" yestext="Go to page"/> + </notification> + <notification name="WebLaunchSupportWiki"> + <usetemplate ignoretext="Start min browser for at se bloggen" name="okcancelignore" notext="Cancel" yestext="OK"/> + </notification> + <notification name="WebLaunchLSLGuide"> + Ønsker du at Ã¥bne 'Scripting Guide' for hjælp til scripting? + <usetemplate ignoretext="Start min browser for at se Scripting Guide" name="okcancelignore" notext="Cancel" yestext="OK"/> + </notification> + <notification name="WebLaunchLSLWiki"> + Ønsker du at besøge LSL portalen for hjælp til scripting? + <usetemplate ignoretext="Start min browser for at besøge LSL Portalen" name="okcancelignore" notext="Cancel" yestext="Go to page"/> + </notification> + <notification name="ReturnToOwner"> + <usetemplate ignoretext="Bekræft før objekter returneres til deres ejere" name="okcancelignore" notext="Cancel" yestext="OK"/> + </notification> + <notification name="ConfirmKick"> + Er du SIKKER pÃ¥ at du vil sparke alle beboere ud? + <usetemplate name="okcancelbuttons" notext="Cancel" yestext="Spark alle beboere ud"/> + </notification> + <notification name="MuteLinden"> + Beklager, men du kan ikke blokere en Linden. + </notification> + <notification name="CannotStartAuctionAlreadyForSale"> + Du kan ikke starte en auktion pÃ¥ en parcel som allerede er sat til salg. Fjern 'til salg' muligheden hvis du ønsker at starte en auktion. + </notification> + <notification label="Blokering af objekt via navn mislykkedes" name="MuteByNameFailed"> + Du har allerede blokeret dette navn. + </notification> + <notification name="BusyModeSet"> + Sat til 'optaget'. +Chat og personlige beskeder vil blive skjult. Personlige beskeder vil fÃ¥ din 'optaget' besked. Alle teleport invitationer vil blive afvist. Alle objekter sendt til dig vil ende i papirkurven. + <usetemplate ignoretext="Jeg skrifter min status til 'optaget" name="okignore" yestext="OK"/> + </notification> + <notification name="JoinedTooManyGroupsMember"> + Du er oppe pÃ¥ det maksimale antal grupper. Forlad venligst en anden gruppe inden du melder dig ind i denne, eller afvis tilbuddet. +[NAME] har inviteret dig til en gruppe. + </notification> + <notification name="JoinedTooManyGroups"> + Du er oppe pÃ¥ det maksimale antal grupper. Forlad venligst en gruppe inden du melder dig ind i enndnu en gruppe eller opretter en ny. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="KickUser"> + Spark beboere ud med hvilken besked? + </notification> + <notification name="FreezeUser"> + Frys beboeren med hvilken besked? + </notification> + <notification name="UnFreezeUser"> + Fjern frysning af beboeren med hvilken besked? + </notification> + <notification name="SetDisplayNameSuccess"> + Hej [DISPLAY_NAME]! + +Præcist som i virkeligheden tager det et stykke tid at vænne sig til et nyt navn. Det kan tage flere dage for [http://wiki.secondlife.com/wiki/Setting_your_display_name your name to update] i objekter, scripts, søgninger m.v. + </notification> + <notification name="SetDisplayNameBlocked"> + Beklager, du kan ikke ændre dit visningsnavn. Hvis du mener dette skyldes en fejl, kontakt venligst support. + </notification> + <notification name="SetDisplayNameFailedLength"> + Beklager, mavnet er for langt. Visningsnavne kan ikke indholde mere end [LENGTH] karakterer. + +Prøv venligst med et kortere navn. + </notification> + <notification name="SetDisplayNameFailedGeneric"> + Beklager, vi kunne ikke sætte dit visningsnavn. Prøv venligst igen senere. + </notification> + <notification name="SetDisplayNameMismatch"> + Visningsnavnene du angav matcher ikke. Prøv at taste ind igen. + </notification> + <notification name="AgentDisplayNameUpdateThresholdExceeded"> + Beklager, du er nødt til at vente længere, inden du kan ændre visningsnavn. + +Se mere under http://wiki.secondlife.com/wiki/Setting_your_display_name + +Prøv venligst igen senere. + </notification> + <notification name="AgentDisplayNameSetBlocked"> + Beklager, vi kunne ikke sætte dit valgte navn da det indholder et ikke tilladt ord. + + Prøv med et andet navn. + </notification> + <notification name="AgentDisplayNameSetInvalidUnicode"> + Visningsnavnet du prøver at angive indeholder ugyldige karakterer. + </notification> + <notification name="AgentDisplayNameSetOnlyPunctuation"> + Dit vinsningsnavn skal indeholde andre bogstaver end tegnsætningstegn. + </notification> + <notification name="DisplayNameUpdate"> + [OLD_NAME] ([SLID]) er nu kendt som [NEW_NAME]. + </notification> + <notification name="OfferTeleport"> + Tilbyd en teleport til din position med følgende besked? + <form name="form"> + <input name="message"> + Mød mig i [REGION] + </input> + <button name="OK" text="OK"/> + <button name="Cancel" text="Annullér"/> + </form> + </notification> + <notification name="OfferTeleportFromGod"> + Tilkald beboer til din lokation? + </notification> + <notification name="TeleportFromLandmark"> + Er du sikker pÃ¥ at du vil teleportere til <nolink>[LOCATION]</nolink>? + <usetemplate ignoretext="Bekræft at jeg vil teleportere til et landemærke" name="okcancelignore" notext="Cancel" yestext="Teleport"/> + </notification> + <notification name="TeleportToPick"> + Teleport til [PICK]? + <usetemplate ignoretext="Bekræft at jeg ønsker at teleportere til et sted i favoritter" name="okcancelignore" notext="Annullér" yestext="Teleport"/> + </notification> + <notification name="TeleportToClassified"> + Teleport til [CLASSIFIED]? + <usetemplate ignoretext="Bekræft at du ønsker at teleportere til lokation in annoncer" name="okcancelignore" notext="Annullér" yestext="Teleport"/> + </notification> + <notification name="TeleportToHistoryEntry"> + Teleport til [HISTORY_ENTRY]? + <usetemplate ignoretext="Bekræft at du ønsker at teleportere til en lokation i din historik" name="okcancelignore" notext="Annullér" yestext="Teleport"/> + </notification> + <notification label="Change Linden Estate" name="ChangeLindenEstate"> + Du er i færd med at ændre et Linden ejet estate (mainland, teeen grid, orientation etc.). + +Dette er EKSTREMT FARLIGT da det kan ændre beboernes oplevelse fundamentalt. PÃ¥ mainland vil dette betyde ændring af tusinder af regioner og fÃ¥ spaceserveren til at kløjs i det. + +Fortsæt? + </notification> + <notification name="RegionEntryAccessBlocked"> + Du har ikke adgang til denne region pÃ¥ grund af din valgte indholdsrating. Dette kan skyldes manglende validering af din alder. + +Undersøg venligst om du har installeret den nyeste [APP_NAME] klient, og gÃ¥ til 'Knowledge Base' for yderligere detaljer om adgang til omrÃ¥der med denne indholdsrating. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="RegionEntryAccessBlocked_KB"> + Du har ikke adgang til denne region pÃ¥ grund af din valgte indholdsrating. + +GÃ¥ til 'Knowledge Base' for mere information om indholdsratings. + <url name="url"> + https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=6010 + </url> + <usetemplate ignoretext="Ikke adgang til denne region pÃ¥ grund af begrænsninger i min indholdsrating" name="okcancelignore" notext="Luk" yestext="GÃ¥ til 'Knowledge Base'"/> + </notification> + <notification name="RegionEntryAccessBlocked_Notify"> + Du har ikke adgang til denne region pÃ¥ grund af din valgte indholdsrating. + </notification> + <notification name="RegionEntryAccessBlocked_Change"> + Du har ikke adgang til denne region pÃ¥ grund af din opsætning af indholdsrating. + +For at fÃ¥ adgang til den ønskede region skal du ændre din indholdsrating. Dette vil give dig ret til at søge og fÃ¥r tilgang til indhold af typen [REGIONMATURITY]. For at omgøre ændringer gÃ¥ til Mig > Indstillinger > Generelt. + <form name="form"> + <button name="OK" text="Ændre indstillinger"/> + <button name="Cancel" text="Luk"/> + <ignore name="ignore" text="Din valgte indholdsrating forhindrer dig i at kommer til en region"/> + </form> + </notification> + <notification name="PreferredMaturityChanged"> + Din indholdsrating er nu [RATING]. + </notification> + <notification name="LandClaimAccessBlocked"> + Du kan ikke kræve dette land pÃ¥ grund af din nuværende indholdsrating indstillinge . Dette kan skyldes manglende validering af din alder. + +Undersøg om du har den nyeste [APP_NAME] klient og gÃ¥ venligst til 'Knowledge Base' for yderligere detaljer om adgang til omrÃ¥der med denne indholdsrating. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="LandClaimAccessBlocked_KB"> + Du kan ikke kræve dette land pÃ¥ grund af din nuværende indholdsrating indstilling.. + +GÃ¥ venligst til 'Knowledge Base' for yderligere information om indholdsrating. + <url name="url"> + https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=6010 + </url> + <usetemplate ignoretext="Du kan ikke kræve dette land, pÃ¥ grund af begrænsninger i indholdsrating" name="okcancelignore" notext="Luk" yestext="GÃ¥ til 'Knowledge Base'"/> + </notification> + <notification name="LandClaimAccessBlocked_Notify"> + Du kan ikke kræve dette land pÃ¥ grund af din indholdsrating. + </notification> + <notification name="LandClaimAccessBlocked_Change"> + Du kan ikke kræve dette land, pÃ¥ grund af begrænsninger i din opsætning af indholdsrating. + +Du kan klikke pÃ¥ 'Ændre præference' for at ændre din indholdsrating nu og dermed opnÃ¥ adgang. Du vil sÃ¥ fÃ¥ mulighed for at søge og tilgÃ¥ [REGIONMATURITY] fra da af. Hvis du senere ønsker at ændre denne opsætning tilbage, gÃ¥ til Mig > Indstillinger > Generelt. + <usetemplate ignoretext="Din valgte indholdsrating forhindrer dig i at kræve land" name="okcancelignore" notext="Luk" yestext="Ændre præferencer"/> + </notification> + <notification name="LandBuyAccessBlocked"> + Du kan ikke købe dette land pÃ¥ grund af din nuværende indholdsrating indstillinge . Dette kan skyldes manglende validering af din alder. + +Undersøg om du har den nyeste [APP_NAME] klient og gÃ¥ venligst til 'Knowledge Base' for yderligere detaljer om adgang til omrÃ¥der med denne indholdsrating. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="LandBuyAccessBlocked_KB"> + Du kan ikke købe dette land pÃ¥ grund af din nuværende indholdsrating. + +GÃ¥ til 'Knowledge Base' for yderligere detaljer om indholdsrating. + <url name="url"> + https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=6010 + </url> + <usetemplate ignoretext="Du kan ikke købe dette land, pÃ¥ grund af begrænsninger i indholdsrating" name="okcancelignore" notext="Luk" yestext="GÃ¥ til 'Knowledge Base'"/> + </notification> + <notification name="LandBuyAccessBlocked_Notify"> + Du kan ikke købe dette land pÃ¥ grund af din nuværende indholdsrating indstilling. + </notification> + <notification name="LandBuyAccessBlocked_Change"> + Du kan ikke købe dette land, pÃ¥ grund af begrænsninger i din opsætning af indholdsrating. + +Du kan klikke pÃ¥ 'Ændre præference' for at ændre din indholdsrating nu og dermed opnÃ¥ adgang. Du vil sÃ¥ fÃ¥ mulighed for at søge og tilgÃ¥ [REGIONMATURITY] fra da af. Hvis du senere ønsker at ændre denne opsætning tilbage, gÃ¥ til Mig > Indstillinger > Generelt. + <usetemplate ignoretext="Din valgte rating forhindrer dig i at købe land" name="okcancelignore" notext="Luk" yestext="Ændre præferencer"/> + </notification> + <notification name="TooManyPrimsSelected"> + Der er valgt for mange prims. Vælg venligst [MAX_PRIM_COUNT] eller færre og prøv igen + </notification> + <notification name="UnableToLoadNotecardAsset"> + Kunne ikke hente notecard indhold. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="SetClassifiedMature"> + Indeholder denne annonce 'Mature' indhold? + <usetemplate canceltext="Annullér" name="yesnocancelbuttons" notext="Nej" yestext="Ja"/> + </notification> + <notification name="SetGroupMature"> + Indeholder denne gruppe 'Mature' indhold? + <usetemplate canceltext="Annullér" name="yesnocancelbuttons" notext="Nej" yestext="Ja"/> + </notification> + <notification label="Changed Region Maturity" name="RegionMaturityChange"> + Ratingen for denne region er ændret. +Det kan tage noget tid inden ændringen slÃ¥r igennem pÃ¥ kortet. + +For at fÃ¥ adgang til voksen regioner, skal beboere være alders-checket, enten via aldersverifikation eller betalingsverifikation. + </notification> + <notification label="Voice Version Mismatch" name="VoiceVersionMismatch"> + Denne version af [APP_NAME] er ikke kompatibel med stemme chat funktionen i denne region. For at kunne fÃ¥ stemme chat til at fungere skal du opdatere [APP_NAME]. + </notification> + <notification name="MoveInventoryFromObject"> + <usetemplate ignoretext="Advar mig før jeg flytter 'ikke-kopiérbare' genstande fra et objekt" name="okcancelignore" notext="Cancel" yestext="OK"/> + </notification> + <notification name="MoveInventoryFromScriptedObject"> + <usetemplate ignoretext="Advar mig før jeg flytter 'ikke-kopiérbare' genstande, hvor det kan medføre at ødelægge et scriptet objekt" name="okcancelignore" notext="Cancel" yestext="OK"/> + </notification> + <notification name="ClickActionNotPayable"> + Advarsel: 'Betal objekt' klik-aktionen er blevet aktiveret, men det vil kun virke, hvis et script med et 'money()' event er tilføjet. + <form name="form"> + <ignore name="ignore" text="I set the action 'Pay object' when building an object without a money() script"/> + </form> + </notification> + <notification name="WebLaunchAccountHistory"> + GÃ¥ til [http://secondlife.com/account/ Dashboard] for at se konto-historik? + <usetemplate ignoretext="Start min browser for at se min konto historik" name="okcancelignore" notext="Cancel" yestext="Go to page"/> + </notification> + <notification name="ConfirmQuit"> + Er du sikker pÃ¥ at du vil afslutte? + <usetemplate ignoretext="Bekræft før jeg afslutter" name="okcancelignore" notext="Afslut ikke" yestext="Quit"/> + </notification> + <notification name="DeleteItems"> + [QUESTION] + <usetemplate ignoretext="Bekræft før sletning af genstande" name="okcancelignore" notext="Annullér" yestext="OK"/> + </notification> + <notification name="HelpReportAbuseEmailLL"> + Benyt dette værktøj til at rapportere krænkninger af [http://secondlife.com/corporate/tos.php Terms of Service] og [http://secondlife.com/corporate/cs.php Community Standards]. + +Alle rapporter om krænkninger vil blive undersøgt og behandlet. + </notification> + <notification name="HelpReportAbuseContainsCopyright"> + Kære beboer, + +Det ser ud til at du indrapporterer krænkelse af ophavsret. Check venligst at du rapporterer korrekt: + +(1) Krænkelsesproces. Du mÃ¥ sende en rapport, hvis du mener at en beboer udnytter [SECOND_LIFE] rettighedssystemet, for eksempel via CopyBot eller lignende værktøjer, til at overtræde ophavsretten til objekter. + +(2) DCMA (â€Digital Millennium Copyright Actâ€) eller fjernelsesproces. For at kræve at indhold fjernes fra [SECOND_LIFE], SKAL du sende en gyldig besked om overtrædelse som beskrevet i [http://secondlife.com/corporate/dmca.php DMCA Policy]. + +Hvis du stadig ønsker at fortsætte med rapportering om overtrædelse, luk venligst dette vindue og afslut afsendelse af rapporten. Du skal muligvis vælge en specifik kategori 'CopyBot or Permissions Exploit'. + +Mange tak + +Linden Lab + </notification> + <notification label="Replace Existing Attachment" name="ReplaceAttachment"> + <form name="form"> + <ignore name="ignore" text="Erstat et eksisterende vedhæng med den valgte genstand"/> + </form> + </notification> + <notification label="Busy Mode Warning" name="BusyModePay"> + <form name="form"> + <ignore name="ignore" text="Jeg er ved at betale en person eller et objekt mens jeg er 'optaget'"/> + </form> + </notification> + <notification name="ConfirmDeleteProtectedCategory"> + Mappen '[FOLDERNAME]' er en system mappe. At slette denne mappe kan medføre ustabilitet. Er du sikker pÃ¥ at du vil slette den? + <usetemplate ignoretext="Bekræft, inden en system mappe slettes" name="okcancelignore" notext="Annullér" yestext="OK"/> + </notification> + <notification name="ConfirmEmptyTrash"> + Er du sikker pÃ¥ at du ønsker at tømme papirkurven? + <usetemplate ignoretext="Bekræft før papirkurv i beholdning tømmes" name="okcancelignore" notext="Cancel" yestext="OK"/> + </notification> + <notification name="ConfirmClearBrowserCache"> + Er du sikker pÃ¥ at du ønsker at slette din historik om besøg, web og søgninger? + <usetemplate name="okcancelbuttons" notext="Cancel" yestext="OK"/> + </notification> + <notification name="ConfirmClearCookies"> + Er du sikker pÃ¥ du vil slette alle cookies? + </notification> + <notification name="ConfirmEmptyLostAndFound"> + Er du sikker pÃ¥ at du vil slette indholdet i din 'Fundne genstande'? + <usetemplate ignoretext="Bekræft før sletning af 'Fundne genstande' mappe i beholdning" name="okcancelignore" notext="No" yestext="Yes"/> + </notification> + <notification name="CopySLURL"> + Følgende SLurl er blevet kopieret til din udklipsholder: + [SLURL] + +Henvis til dette fra en hjemmeside for at give andre nem adgang til denne lokation, eller prøv det selv ved at indsætte det i adresselinien i en web-browser. + <form name="form"> + <ignore name="ignore" text="SLurl er kopieret til min udklipsholder"/> + </form> + </notification> + <notification name="NewSkyPreset"> + <form name="form"> + <input name="message"> + Ny forudindstilling + </input> + <button name="OK" text="OK"/> + <button name="Cancel" text="Annullér"/> + </form> + </notification> + <notification name="NewWaterPreset"> + <form name="form"> + <input name="message"> + Ny forudindstilling + </input> + <button name="OK" text="OK"/> + <button name="Cancel" text="Annullér"/> + </form> + </notification> + <notification name="ChatterBoxSessionStartError"> + Ikke i stand til at start chat med [RECIPIENT]. +[REASON] + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="Cannot_Purchase_an_Attachment"> + Du kan ikke købe en genstand mens den er vedhæftet. + </notification> + <notification name="AutoWearNewClothing"> + Vil du automatisk tage det tøj pÃ¥ du er ved at lave? + <usetemplate ignoretext="Tag det tøj pÃ¥ jeg laver, mens jeg ændrer udseende" name="okcancelignore" notext="No" yestext="Yes"/> + </notification> + <notification name="NotAgeVerified"> + Du skal være alders-checket for at besøge dette omrÃ¥de. Ønsker du at gÃ¥ til [SECOND_LIFE] hjemmesiden og bekræfte din alder? + +[_URL] + <usetemplate ignoretext="Jeg har ikke bekræftet min alder" name="okcancelignore" notext="No" yestext="Yes"/> + </notification> + <notification name="Cannot enter parcel: no payment info on file"> + Du skal være betalende medlem for at besøge dette omrÃ¥de. Ønsker du at gÃ¥ til [SECOND_LIFE] hjemmesiden for at blive dette? + +[_URL] + <usetemplate ignoretext="Du mangler at være betalende medlem" name="okcancelignore" notext="No" yestext="Yes"/> + </notification> + <notification name="SystemMessageTip"> + [MESSAGE] + </notification> + <notification name="IMSystemMessageTip"> + [MESSAGE] + </notification> + <notification name="Cancelled"> + Annulléret + </notification> + <notification name="CancelledSit"> + Annulléret sid + </notification> + <notification name="CancelledAttach"> + Annulléreret vedhæft + </notification> + <notification name="ReplacedMissingWearable"> + Erstattet manglende tøj/kropsdele med standard. + </notification> + <notification name="FriendOnline"> + [NAME] er logget pÃ¥ + </notification> + <notification name="FriendOffline"> + [NAME] er logget af + </notification> + <notification name="AddSelfFriend"> + Selvom du nok er meget sød, kan du ikke tilføje dig selv som ven. + </notification> + <notification name="UploadingAuctionSnapshot"> + Uploader billeder fra verdenen og www... +(Tager omkring 5 minutter.) + </notification> + <notification name="UploadPayment"> + Du betalte L$[AMOUNT] for at uploade. + </notification> + <notification name="UploadWebSnapshotDone"> + Billeder fra www er uploadet. + </notification> + <notification name="UploadSnapshotDone"> + Billeder fra verdenen er uploadet + </notification> + <notification name="TerrainDownloaded"> + Terrain.raw downloadet + </notification> + <notification name="GestureMissing"> + Bevægelsen [NAME] mangler i databasen. + </notification> + <notification name="UnableToLoadGesture"> + Kunne ikke indlæse læse bevægelse [NAME]. + </notification> + <notification name="LandmarkMissing"> + Landmærke mangler i databasen. + </notification> + <notification name="UnableToLoadLandmark"> + Ikke muligt at indlæse landmærke. Prøv venligst igen. + </notification> + <notification name="CapsKeyOn"> + Din Caps Lock er aktiveret. +Det kan pÃ¥virke din indtastning af password. + </notification> + <notification name="NotecardMissing"> + Note mangler i databasen. + </notification> + <notification name="NotecardNoPermissions"> + Du har ikke rettigheder til at se denne note. + </notification> + <notification name="RezItemNoPermissions"> + Utilstrækkelige tilladelser til at danne genstanden. + </notification> + <notification name="UnableToLoadNotecard"> + Ikke muligt at indlæse note. +Prøv venligst igen. + </notification> + <notification name="ScriptMissing"> + Script mangler i databasen. + </notification> + <notification name="ScriptNoPermissions"> + Utilstrækkelige tilladelser til at se script. + </notification> + <notification name="UnableToLoadScript"> + Ikke muligt at indlæse script. Prøv venligst igen. + </notification> + <notification name="IncompleteInventory"> + Det komplette indhold, du tilbyder, er ikke endnu tilgængelig lokalt. Prøv venligst at tilbyde tingene igen om lidt. + </notification> + <notification name="CannotModifyProtectedCategories"> + Du kan ikke ændre beskyttede kategorier. + </notification> + <notification name="CannotRemoveProtectedCategories"> + Du kan ikke fjerne beskyttede kategorier. + </notification> + <notification name="UnableToBuyWhileDownloading"> + Ikke muligt at købe, imens genstandens data hentes. +Prøv venligst igen. + </notification> + <notification name="UnableToLinkWhileDownloading"> + Ikke muligt at lænke imens genstandens data hentes. +Prøv venligst igen. + </notification> + <notification name="CannotBuyObjectsFromDifferentOwners"> + Du kan kun købe objekter fra én ejer ad gangen. +Vælg venligst et enkelt objekt. + </notification> + <notification name="ObjectNotForSale"> + Dette objekt er ikke til salg. + </notification> + <notification name="EnteringGodMode"> + Starter gud-tilstand, niveau [LEVEL] + </notification> + <notification name="LeavingGodMode"> + Stopper gud-tilstand, niveau [LEVEL] + </notification> + <notification name="CopyFailed"> + Du har ikke rettigheder til at kopiere dette. + </notification> + <notification name="InventoryAccepted"> + [NAME] modtog dit tilbud til hans/hendes beholdning. + </notification> + <notification name="InventoryDeclined"> + [NAME] afviste det du tilbød fra din beholdning. + </notification> + <notification name="ObjectMessage"> + [NAME]: [MESSAGE] + </notification> + <notification name="CallingCardAccepted"> + Dit visitkort blev accepteret. + </notification> + <notification name="CallingCardDeclined"> + Dit visitkort blev afvist. + </notification> + <notification name="TeleportToLandmark"> + Du kan teleportere til lokationer som '[NAME]' ved at Ã¥bne Steder panelet til højre pÃ¥ skærmen, og her vælge landemærker fanen. +Klik pÃ¥ et landemærke og vælg den, derefter +Click on any landmark to select it, then click 'Teleport' at the bottom of the panel. +(You can also double-click on the landmark, or right-click it and choose 'Teleport'.) + </notification> + <notification name="TeleportToPerson"> + Du kan kontakte beboere som '[NAME]' ved at Ã¥bne Personer panelet til højre pÃ¥ skærmen. +Vælg beboeren fra listen og klik sÃ¥ 'IM' i bundet af panelet. +(Du kan ogsÃ¥ dobbelt-klikke pÃ¥ navnet i listen, eller højre-klikke og vælge 'IM'). + </notification> + <notification name="CantSelectLandFromMultipleRegions"> + Kan ikke vælge land pÃ¥ tværs af grænser. +Prøv at vælge mindre stykker land. + </notification> + <notification name="SearchWordBanned"> + Visse ord er fjernet fra din søge-sætning pÃ¥ grund af at disse strider mod de generelle 'Community Standards'. + </notification> + <notification name="NoContentToSearch"> + Vælg venligst mindst en indholdstype for at søge (PG, Mature, or Adult). + </notification> + <notification name="SystemMessage"> + [MESSAGE] + </notification> + <notification name="PaymentReceived"> + [MESSAGE] + </notification> + <notification name="PaymentSent"> + [MESSAGE] + </notification> + <notification name="EventNotification"> + Besked om begivenhed: + +[NAME] +[DATE] + <form name="form"> + <button name="Details" text="Detaljer"/> + <button name="Cancel" text="Annullér"/> + </form> + </notification> + <notification name="TransferObjectsHighlighted"> + Alle genstande pÃ¥ denne grund, som vil blive overført til køberen af denne grund, er nu oplyst. + +* Træer og græs, der vil blive overført, er ikke fremhævet. + <form name="form"> + <button name="Done" text="Færdig"/> + </form> + </notification> + <notification name="DeactivatedGesturesTrigger"> + Deaktiverede bevægelser med samme udløser: [NAMES] + </notification> + <notification name="NoQuickTime"> + Det ser ikke ud til at Apples QuickTime software er installeret pÃ¥ dit system. +Hvis du ønsker at se streaming media pÃ¥ parceller der understøtter dette skal du besøge siden [http://www.apple.com/quicktime QuickTime site] og installere QuickTime Player. + </notification> + <notification name="NoPlugin"> + Ingen Media Plugin blev fundet til at hÃ¥ndtere mime af typen "[MIME_TYPE]". Media af denne type vil ikke være tilgængelig. + </notification> + <notification name="MediaPluginFailed"> + Følgende Media Plugin has fejlede: + [PLUGIN] + +Prøv venligst at geninstallere plugin eller kontakt leverandøren hvis problemerne bliver ved. + <form name="form"> + <ignore name="ignore" text="En Media Plugin kunne ikke afvikles"/> + </form> + </notification> + <notification name="OwnedObjectsReturned"> + De genstande du ejer pÃ¥ det valgte stykke land er blevet returneret til din beholdning. + </notification> + <notification name="OtherObjectsReturned"> + Objekterne pÃ¥ den valgte parcel, ejet af [NAME], er blevet returneret til vedkommendes beholdning. + </notification> + <notification name="OtherObjectsReturned2"> + Objekterne i den valgte parcel, ejet af beboeren '[NAME]', er blevet returneret til deres ejer. + </notification> + <notification name="GroupObjectsReturned"> + Genstandene pÃ¥ det valgte stykke land, delt med gruppen [GROUPNAME], er blevet returneret til deres ejeres beholdninger. +Genstande, som er dedikerede og som kan overføres, er blevet returneret til deres forrige ejere. +Genstande, der ikke kan overføres og som er dedikeret til gruppen, er blevet slettet. + </notification> + <notification name="UnOwnedObjectsReturned"> + Genstandene pÃ¥ det valgte stykke land, der IKKE er ejet af dig, er blevet returneret til deres ejere. + </notification> + <notification name="ServerObjectMessage"> + Besked fra [NAME]: +<nolink>[MSG]</nolink> + </notification> + <notification name="NotSafe"> + Dette land er Ã¥bnet for 'skade'. +Du kan blive skadet her. Hvis du dør, vil du blive teleporteret til din hjemme lokation. + </notification> + <notification name="NoFly"> + Dette sted har ikke aktiveret ret til flyvning. +Du kan ikke flyve her. + </notification> + <notification name="PushRestricted"> + Dette sted tillader ikke skubning. Du kan ikke skubbe andre, med mindre du ejer dette land. + </notification> + <notification name="NoVoice"> + Dette sted har ikke aktiveret stemme-chat. Du vil ikke kunne høre nogen tale. + </notification> + <notification name="NoBuild"> + Dette sted har ikke aktiveret bygge-ret. Du kan ikke bygge eller 'rezze' objekter her. + </notification> + <notification name="ScriptsStopped"> + En administrator har midlertidig stoppet scripts i denne region. + </notification> + <notification name="ScriptsNotRunning"> + Denne region kører ikke nogen scripts. + </notification> + <notification name="NoOutsideScripts"> + Dette sted tillader ikke udefra kommende scripts. + +Ingen scripts vil virke her, udover de som tilhører ejeren af landet. + </notification> + <notification name="ClaimPublicLand"> + Du kan kun kræve land i den region du befinder dig i. + </notification> + <notification name="RegionTPAccessBlocked"> + Du har ikke adgang til denne region pÃ¥ grund af din valgte indholdsrating. Dette kan skyldes manglende validering af din alder eller at du ikke benytter den nyeste [APP_NAME] klient. + +GÃ¥ venligst til 'Knowledge Base' for yderligere detaljer om adgang til omrÃ¥der med denne indholdsrating. + </notification> + <notification name="URBannedFromRegion"> + Du er blokeret i denne region. + </notification> + <notification name="NoTeenGridAccess"> + Du kan ikke tilslutte dig denne 'Teen' region. + </notification> + <notification name="ImproperPaymentStatus"> + Du har ikke de rette betalingsoplysninger til at komme ind i denne region. + </notification> + <notification name="MustGetAgeParcel"> + Du skal være aldersgodkendt for at komme ind pÃ¥ denne parcel. + </notification> + <notification name="NoDestRegion"> + Destinations region ikke fundet. + </notification> + <notification name="NotAllowedInDest"> + Du har ikke adgang til denne destination. + </notification> + <notification name="RegionParcelBan"> + Kan ikke skifte til ny region via en blokeret parcel. Prøv en anden vej ind. + </notification> + <notification name="TelehubRedirect"> + Du er blevet omdirigeret til en telehub. + </notification> + <notification name="CouldntTPCloser"> + Kunne ikke teleportere nærmere til destination. + </notification> + <notification name="TPCancelled"> + Teleport afbrudt. + </notification> + <notification name="FullRegionTryAgain"> + Den region du prøver at komme ind i er fuld for øjeblikket. +Prøv igen om lidt. + </notification> + <notification name="GeneralFailure"> + Generel fejl. + </notification> + <notification name="RoutedWrongRegion"> + Du blev sendt til en forkert region. Prøv igen. + </notification> + <notification name="NoValidAgentID"> + Ikke en gyldig agent ID. + </notification> + <notification name="NoValidSession"> + Ikke noget gyldig sessions-ID + </notification> + <notification name="NoValidCircuit"> + Ingen gyldig kode for kredsløb. + </notification> + <notification name="NoValidTimestamp"> + Ikke et gyldigt klokkeslæt. + </notification> + <notification name="NoPendingConnection"> + Kunne ikke skabe fast forbindelse. + </notification> + <notification name="InternalUsherError"> + Der opstod en intern fejl ved teleportering til din teleport destination.. Der kan være generelle problemer med [SECOND_LIFE] lige nu. + </notification> + <notification name="NoGoodTPDestination"> + Kunne ikke finde et egnet teleport sted i denne region. + </notification> + <notification name="InternalErrorRegionResolver"> + Der opstod en intern fejl ved beregning af globale koordinater for din teleport forespørgsel. Der kan være generelle problemer med [SECOND_LIFE] lige nu. + </notification> + <notification name="NoValidLanding"> + Kunne ikke finde et gyldigt landingspunkt. + </notification> + <notification name="NoValidParcel"> + No valid parcel could be found. + </notification> + <notification name="ObjectGiveItem"> + Et objekt ved navn <nolink>[OBJECTFROMNAME]</nolink> ejet af [NAME_SLURL] tilbyder dig [ITEM_SLURL]. For at bruge denne genstand skal du skifte til avanceret tilstand, hvor du kan finde genstanden i din beholdning. Ønsker du at logge ud for at skifte tilstand? Valg af tilstand findes pÃ¥ login skærmbilledet. + <form name="form"> + <button name="Keep" text="Behold genstand"/> + <button name="Discard" text="Afvis genstand"/> + <button name="Mute" text="Blokér objekt"/> + </form> + </notification> + <notification name="UserGiveItem"> + [NAME_SLURL] tilbyder dig [ITEM_SLURL]. For at bruge denne genstand skal du skifte til avanceret tilstand, hvor du kan finde genstanden i din beholdning. Ønsker du at logge ud for at skifte tilstand? Valg af tilstand findes pÃ¥ login skærmbilledet. + <form name="form"> + <button name="Show" text="Behold genstand"/> + <button name="Discard" text="Afvis genstand"/> + <button name="Mute" text="Blokér bruger"/> + </form> + </notification> + <notification name="GodMessage"> + [NAME] + +[MESSAGE] + </notification> + <notification name="JoinGroup"> + [MESSAGE] + <form name="form"> + <button name="Join" text="Indmeld"/> + <button name="Decline" text="Afvis"/> + <button name="Info" text="Information"/> + </form> + </notification> + <notification name="TeleportOffered"> + [NAME_SLURL] har tilbudt en teleport til deres lokation: + +[MESSAGE] - [MATURITY_STR] <icon>[MATURITY_ICON]</icon> + <form name="form"> + <button name="Teleport" text="Teleportér"/> + <button name="Cancel" text="Annullér"/> + </form> + </notification> + <notification name="TeleportOfferSent"> + Tilbud om teleport sendt til [TO_NAME] + </notification> + <notification name="GotoURL"> + [MESSAGE] +[URL] + <form name="form"> + <button name="Later" text="Senere"/> + <button name="GoNow..." text="GÃ¥ nu..."/> + </form> + </notification> + <notification name="OfferFriendship"> + [NAME_SLURL] tilbyder venskab. + +[MESSAGE] + +(Som udgangspunkt vil I være i stand til at se hinandens online status.) + <form name="form"> + <button name="Accept" text="Acceptér"/> + <button name="Decline" text="Afvis"/> + </form> + </notification> + <notification name="FriendshipOffered"> + Du har tilbudt venskab til [TO_NAME] + </notification> + <notification name="OfferFriendshipNoMessage"> + [NAME_SLURL] tilbyder venskab. + +(Som udgangspunkt, vil du være i stand til at se den andens online status) + </notification> + <notification name="FriendshipAccepted"> + [NAME] accepterede dit tilbud om venskab. + </notification> + <notification name="FriendshipDeclined"> + [NAME] afviste dit tilbud om venskab. + </notification> + <notification name="FriendshipAcceptedByMe"> + Tilbud om venskab accepteret. + </notification> + <notification name="FriendshipDeclinedByMe"> + Tilbud om venskab afvist. + </notification> + <notification name="OfferCallingCard"> + [NAME] tilbyder sit visitkort. +Dette vil tilføje et bogmærke i din beholdning, sÃ¥ du hurtigt kan sende en personlig besked til denne beboer. + <form name="form"> + <button name="Accept" text="Acceptér"/> + <button name="Decline" text="Afvis"/> + </form> + </notification> + <notification name="RegionRestartMinutes"> + Denne region vil genstarte om [MINUTES] minutter. +Hvis du ikke forlader regionen, vil du blive logget af. + </notification> + <notification name="RegionRestartSeconds"> + Denne region genstartes om [SECONDS] sekunder. +Hvis du ikke forlader regionen, vil du blive logget af. + </notification> + <notification name="LoadWebPage"> + Indlæas websiden [URL]? + +[MESSAGE] + +Fra objekt: <nolink>[OBJECTNAME]</nolink>, ejer: [NAME]? + <form name="form"> + <button name="Gotopage" text="GÃ¥ til side"/> + <button name="Cancel" text="Afbryd"/> + </form> + </notification> + <notification name="FailedToFindWearableUnnamed"> + Det lykkedes ikke at finde [TYPE] i databasen. + </notification> + <notification name="FailedToFindWearable"> + Det lykkedes ikke at finde [TYPE] med navnet [DESC] i databasen. + </notification> + <notification name="InvalidWearable"> + Den genstand du prøver at tage pÃ¥ benytter en funktion din klient ikke kan forstÃ¥. Upgradér venligst din version af [APP_NAME] for at kunne tage denne genstand pÃ¥. + </notification> + <notification name="ScriptQuestion"> + '<nolink>[OBJECTNAME]</nolink>', et objekt ved ejet af '[NAME]', ønsker at: + +[QUESTIONS] +Er dette OK? + <form name="form"> + <button name="Yes" text="Ja"/> + <button name="No" text="Nej"/> + <button name="Mute" text="Blokér"/> + </form> + </notification> + <notification name="ScriptQuestionCaution"> + Et objeckt med navn '<nolink>[OBJECTNAME]</nolink>', ejet af '[NAME]' ønsker at: + +[QUESTIONS] +Hvis du ikke stoler pÃ¥ dette objekt og dets skaber, bør du afvise dette ønske. + +Opfyld dette ønske? + <form name="form"> + <button name="Grant" text="Imødekom"/> + <button name="Deny" text="Afvis"/> + <button name="Details" text="Detaljer..."/> + </form> + </notification> + <notification name="ScriptDialog"> + [NAME]'s '<nolink>[TITLE]</nolink>' +[MESSAGE] + <form name="form"> + <button name="Ignore" text="Ignorér"/> + </form> + </notification> + <notification name="ScriptDialogGroup"> + [GROUPNAME]'s '<nolink>[TITLE]</nolink>' +[MESSAGE] + <form name="form"> + <button name="Ignore" text="Ignorér"/> + </form> + </notification> + <notification name="BuyLindenDollarSuccess"> + Tak for din betaling! + +Din L$ balance vil blive opdateret nÃ¥r transaktionen er gennemført. Ved transaktionen tager mere end 20 min., vil den blive annulleret. I sÃ¥ fald vil beløbet blive krediteret din US$ balance. + +Status for din betaling kan ses i din 'Transaction History' side pÃ¥ din [http://secondlife.com/account/ Dashboard] + </notification> + <notification name="FirstOverrideKeys"> + Dine bevælgelsestaster bliver nu hÃ¥ndteret af et objekt. +Brug piletasterne eller AWSD for at se, hvad de gør. +Nogle genstande (som skydevÃ¥ben) kræver at du gÃ¥r ind i musevisning for at bruge dem. +Tryk pÃ¥ 'M' for at gÃ¥re det. + </notification> + <notification name="FirstSandbox"> + Dette er et sandkasse omrÃ¥de. Her kan beboere lære ast bygge. + +De ting du bygger vil blive slettet senere, sÃ¥ glem ikke at højre-klikke og vælge "Tag" for at tage en kopi af din kreation til din beholdning. + </notification> + <notification name="MaxListSelectMessage"> + Du mÃ¥ kun vælge op til [MAX_SELECT] genstande pÃ¥ denne liste. + </notification> + <notification name="VoiceInviteP2P"> + [NAME] inviterer dig til en stemme-chat samtale. +Klik pÃ¥ Acceptér for at deltage eller Afvis for at afvise invitationen. Klik pÃ¥ Blokér for at blokere personen. + <form name="form"> + <button name="Accept" text="Acceptér"/> + <button name="Decline" text="Afvis"/> + <button name="Mute" text="Blokér"/> + </form> + </notification> + <notification name="AutoUnmuteByIM"> + [NAME] har fÃ¥et sendt en besked og blokering er derfor automatisk blevet fjernet. + </notification> + <notification name="AutoUnmuteByMoney"> + [NAME] har fÃ¥et givet penge og blokering er derfor automatisk blevet fjernet. + </notification> + <notification name="AutoUnmuteByInventory"> + [NAME] er blevet tilbud noget fra beholdning og blokering er derfor automatisk blevet fjernet. + </notification> + <notification name="VoiceInviteGroup"> + [NAME] har has sluttet sig til stemme-chaten i gruppen [GROUP]. +Klik pÃ¥ Acceptér for at deltage eller Afvis for at afvise invitationen. Klik pÃ¥ Blokér for at blokere personen. + <form name="form"> + <button name="Accept" text="Acceptér"/> + <button name="Decline" text="Afvis"/> + <button name="Mute" text="Blokér"/> + </form> + </notification> + <notification name="VoiceInviteAdHoc"> + [NAME] har sluttet sig til en stemme-chat med en konference chat. +Klik pÃ¥ Acceptér for at deltage eller Afvis for at afvise invitationen. Klik pÃ¥ Blokér for at blokere personen. + <form name="form"> + <button name="Accept" text="Acceptér"/> + <button name="Decline" text="Afvis"/> + <button name="Mute" text="Blokér"/> + </form> + </notification> + <notification name="InviteAdHoc"> + [NAME] inviterer dig til en konference chat. +Klik pÃ¥ Acceptér for at deltage eller Afvis for at afvise invitationen. Klik pÃ¥ Blokér for at blokere personen. + <form name="form"> + <button name="Accept" text="Acceptér"/> + <button name="Decline" text="Afvis"/> + <button name="Mute" text="Blokér"/> + </form> + </notification> + <notification name="VoiceChannelFull"> + Den stemme-chat, du prøver at tilslutte dig, [VOICE_CHANNEL_NAME], har nÃ¥et maksiumum kapacitet. Prøv venligst igen senere. + </notification> + <notification name="ProximalVoiceChannelFull"> + Vi beklager. Dette omrÃ¥de har nÃ¥et sin maksimale kapacitet for stemme-chat. Prøv venligst at benytte stemme i et andet omrÃ¥de. + </notification> + <notification name="VoiceChannelDisconnected"> + Du er blevet koblet fra [VOICE_CHANNEL_NAME]. Du vil nu blive koblet til almindelig voice-chat. + </notification> + <notification name="VoiceChannelDisconnectedP2P"> + [VOICE_CHANNEL_NAME] har afsluttet samtalen. Du vil nu blive koblet til almindelig voice-chat. + </notification> + <notification name="P2PCallDeclined"> + [VOICE_CHANNEL_NAME] har avist dit opkald. Du vil nu blive koblet til almindelig voice-chat. + </notification> + <notification name="P2PCallNoAnswer"> + [VOICE_CHANNEL_NAME] er ikke tilgængelig til at modtage dit opkald. Du vil nu blive koblet til almindelig voice-chat. + </notification> + <notification name="VoiceChannelJoinFailed"> + Det lykkedes ikke at forbinde til [VOICE_CHANNEL_NAME], prøv venligst igen senere. Du vil nu blive koblet til almindelig voice-chat. + </notification> + <notification name="VoiceLoginRetry"> + Vi laver en stemmekanal til dig. Det kan tage op til et minut. + </notification> + <notification name="VoiceEffectsExpired"> + En eller flere af dine stemme "morphs" er udløbet. +[[URL] Click here] for at forny dit abbonnement. + </notification> + <notification name="VoiceEffectsExpiredInUse"> + Den aktive stemme "morph" er udløbet og din normale stemme opsætning er genaktiveret. +[[URL] Click here] for at forny dit abbonnement. + </notification> + <notification name="VoiceEffectsWillExpire"> + En eller flere af dine stemme "morphs" vil udløbe om mindre end [INTERVAL] dage. +[[URL] Click here] for at forny dit abbonnement. + </notification> + <notification name="VoiceEffectsNew"> + Nye stemme "morphs" er tilgængelige! + </notification> + <notification name="Cannot enter parcel: not a group member"> + Kun medlemmer af en bestemt gruppe kan besøge dette omrÃ¥de. + </notification> + <notification name="Cannot enter parcel: banned"> + Du kan ikke komme ind pÃ¥ omrÃ¥det. Du er blevet udelukket. + </notification> + <notification name="Cannot enter parcel: not on access list"> + Du kan ikke komme ind pÃ¥ omrÃ¥det. Du er ikke pÃ¥ adgangslisten. + </notification> + <notification name="VoiceNotAllowed"> + Du har ikke tilladelse til at tilslutte dig stemme-chat pÃ¥ [VOICE_CHANNEL_NAME]. + </notification> + <notification name="VoiceCallGenericError"> + En fejl er opstÃ¥et under forsøget pÃ¥ at koble sig pÃ¥ stemme chatten [VOICE_CHANNEL_NAME]. PrÃ¥v venligst senere. + </notification> + <notification name="UnsupportedCommandSLURL"> + Den SLurl du klikkede pÃ¥ understøttes ikke. + </notification> + <notification name="BlockedSLURL"> + En SLurl blev modtaget en ikke sikret browser og den er blevet blokeret af sikkerhedsmæssige Ã¥rsager. + </notification> + <notification name="ThrottledSLURL"> + Flere SLurls blev modtaget fra en browser i et kort tidsrum. +De vil blive blokeret nogle fÃ¥ sekunder af sikkerhedsmæssige Ã¥rsager. + </notification> + <notification name="IMToast"> + [MESSAGE] + <form name="form"> + <button name="respondbutton" text="Svar"/> + </form> + </notification> + <notification name="ConfirmCloseAll"> + Er du sikker pÃ¥ at du vil lukke alle personlige samtaler (IM)? + <usetemplate ignoretext="Bekræft før du lukker alle IMer" name="okcancelignore" notext="Annullér" yestext="OK"/> + </notification> + <notification name="AttachmentSaved"> + Vedhæng er blevet gemt. + </notification> + <notification name="UnableToFindHelpTopic"> + Ikke muligt at finde hjælp om dette element. + </notification> + <notification name="ObjectMediaFailure"> + Server fejl: Media opdatering eller "get" fejlede. +'[ERROR]' + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="TextChatIsMutedByModerator"> + Din tekst chat er blevet slukket af moderator. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="VoiceIsMutedByModerator"> + Din stemme er blevet slukket af moderatoren. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="ConfirmClearTeleportHistory"> + Er du sikker pÃ¥ at du vil slette teleport historikken? + <usetemplate name="okcancelbuttons" notext="Annullér" yestext="OK"/> + </notification> + <notification name="BottomTrayButtonCanNotBeShown"> + Den valgte knap kan ikke vises lige nu. +Knappen vil blive vist nÃ¥r der er nok plads til den. + </notification> + <notification name="ShareNotification"> + Vælg beboere at dele med. + </notification> + <notification name="ShareItemsConfirmation"> + Er du sikker pÃ¥ at du vil dele følgende genstande: + +<nolink>[ITEMS]</nolink> + +Me følgende beboere: + +[RESIDENTS] + <usetemplate name="okcancelbuttons" notext="Annullér" yestext="Ok"/> + </notification> + <notification name="ItemsShared"> + Genstande er nu delt. + </notification> + <notification name="DeedToGroupFail"> + Dedikering til gruppe fejlede. + </notification> + <notification name="AvatarRezNotification"> + ( [EXISTENCE] sekunder i live ) +Avatar '[NAME]' var ikke sky mere, efter [TIME] sekunder. + </notification> + <notification name="AvatarRezSelfBakedDoneNotification"> + ( [EXISTENCE] seconds alive ) +Du blev færdig med at fremvise dit sæt efter [TIME] sekunder. + </notification> + <notification name="AvatarRezSelfBakedUpdateNotification"> + ( [EXISTENCE] seconds alive ) +Du sendte en opdatering af dit udseende efter [TIME] sekunder. +[STATUS] + </notification> + <notification name="AvatarRezCloudNotification"> + ( [EXISTENCE] sekunder i live ) +Avatar '[NAME]' blev til "sky". + </notification> + <notification name="AvatarRezArrivedNotification"> + ( [EXISTENCE] sekunder i live ) +Avatar '[NAME]' appeared. + </notification> + <notification name="AvatarRezLeftCloudNotification"> + ( [EXISTENCE] sekunder i live ) +Avatar '[NAME]' forsvandt efter [TIME] sekunder som "sky". + </notification> + <notification name="AvatarRezEnteredAppearanceNotification"> + ( [EXISTENCE] sekunder i live ) +Avatar '[NAME]' skiftede til udseende modus. + </notification> + <notification name="AvatarRezLeftAppearanceNotification"> + ( [EXISTENCE] sekunder i live ) +Avatar '[NAME]' har forladt udseende modus. + </notification> + <notification name="NoConnect"> + Vi har problemer med at oprette forbindelse via [PROTOCOL] [HOSTID]. +Check venligst din netværks- og firewallsetup. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="NoVoiceConnect"> + Vi har problemer med at oprette forbindelse til din stemme server: + +[HOSTID] + +Stemme kommunikation vil ikke være tilgængelig. +Check venligst din netværks- og firewall setup. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="AvatarRezLeftNotification"> + ( [EXISTENCE] sekunder i live ) +Avatar '[NAME]' forsvandt helt "uploaded". + </notification> + <notification name="AvatarRezSelfBakedTextureUploadNotification"> + ( [EXISTENCE] sekunder i live ) +Du uploadede en [RESOLUTION] "bagt" tekstur til '[BODYREGION]' efter [TIME] sekunder. + </notification> + <notification name="AvatarRezSelfBakedTextureUpdateNotification"> + ( [EXISTENCE] sekunder i live ) +Du opdaterede en [RESOLUTION] "bagt" tekstur for '[BODYREGION]' efter [TIME] sekunder. + </notification> + <notification name="ConfirmLeaveCall"> + Er du sikker pÃ¥ at du vil forlade dette opkald? + <usetemplate ignoretext="Bekræft før jeg forlader opkald" name="okcancelignore" notext="Nej" yestext="Ja"/> + </notification> + <notification name="ConfirmMuteAll"> + Du har valgt at slukke for lyden for alle deltagere i gruppeopkaldet. +Dette vil ogsÃ¥ betyde, at alle beboere der slutter sig til opkaldet +vil have lyden slukket - selv efter de har forladt kaldet. + + +Sluk for alles lyd? + <usetemplate ignoretext="Bekræft før jeg slukker for alle deltageres lyd i gruppe-kald" name="okcancelignore" notext="Annullér" yestext="Ok"/> + </notification> + <notification label="Chat" name="HintChat"> + For at deltage i samtalen tast tekst ind i chat feltet nedenfor. + </notification> + <notification label="StÃ¥ op" name="HintSit"> + For at rejse dig op og forlad siddeposition, tryk pÃ¥ "StÃ¥ op" knappen. + </notification> + <notification label="Undersøg verden" name="HintDestinationGuide"> + Destinationsguiden indeholder tusinder af nye steder der kan opleves. Vælg venligst et sted og vælg Teleport for at komme derhen. + </notification> + <notification label="Side panel" name="HintSidePanel"> + FÃ¥ hurtig tilgang til din beholdning, sæt, profiler og andet i dette side panel. + </notification> + <notification label="Flyt" name="HintMove"> + For at gÃ¥ eller løbe, Ã¥ben Flyt panelet for neden og brug pilene til at navigere. Du kan ogsÃ¥ bruge pile-tasterne pÃ¥ dit tastatur. + </notification> + <notification label="Visningsnavn" name="HintDisplayName"> + Angiv dit konfigurérbare visningsnavn her. Dette er i tillæg til dit unikke brugernavn, som ikke kan ændres. Du kan ændre hvordan du ser andre beboeres navne i dine indstillinger. + </notification> + <notification label="Flyt" name="HintMoveArrows"> + For at gÃ¥, brug piletasterne pÃ¥ tastaturet. Du kan løbe ved at trykke to gange pÃ¥ Pil-Op + </notification> + <notification label="Se" name="HintView"> + For at ændre dit kamera-view, benyt kredsløbs og panoreringskontrollerne. Nulstil view ved at trykke Esc eller ved at gÃ¥. + </notification> + <notification label="Beholdning" name="HintInventory"> + Undersøg din beholdning for at finde ting. Nyeste genstand findes lettes under fanen "Nye ting" + </notification> + <notification label="Der er kommet Linden Dollars" name="HintLindenDollar"> + Her er din nuværende balance af L$. Klik pÃ¥ Køb L$ for at købe flere Linden dollars. + </notification> + <notification name="PopupAttempt"> + En pop-up blev hindret i at blive vist. + <form name="form"> + <ignore name="ignore" text="Tillad alle pop-ups"/> + <button name="open" text="Ã…ben pop-up vindue"/> + </form> + </notification> + <notification name="AuthRequest"> + Hjemmesiden pÃ¥ '<nolink>[HOST_NAME]</nolink>' in realm '[REALM]' kræver et brugernavn og password. + <form name="form"> + <input name="username" text="Brugernavn"/> + <input name="password" text="Password"/> + <button name="ok" text="Send"/> + <button name="cancel" text="Annullér"/> + </form> + </notification> + <notification label="" name="ModeChange"> + For at skifte tilstand skal du genstarte programmet. + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <notification label="" name="NoClassifieds"> + Oprettelse og redigering af annoncer er kun muligt i avanceret tilstand. Ønsker du at logge ud for at skifte tilstand? Valg af tilstand findes pÃ¥ login skærmbilledet. + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <notification label="" name="NoGroupInfo"> + Oprettelse og redigering af grupper er kun muligt i avanceret tilstand. Ønsker du at logge ud for at skifte tilstand? Valg af tilstand findes pÃ¥ login skærmbilledet. + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <notification label="" name="NoPicks"> + Oprettelse og redigering af favoritter er kun mulig i avanceret tilstand. Ønsker du at logge ud for at skifte tilstand? Valg af tilstand findes pÃ¥ login skærmbilledet. + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <notification label="" name="NoWorldMap"> + Det er kun muligt at se verdenskortet i avanceret tilstand.Ønsker du at logge ud for at skifte tilstand? Valg af tilstand findes pÃ¥ login skærmbilledet. + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <notification label="" name="NoVoiceCall"> + Stemme kald kan kun benttes i avanceret tilstand. Ønsker du at logge ud for at skifte tilstand? + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <notification label="" name="NoAvatarShare"> + Det er kun mulig at dele i avanceret tilstand. Ønsker du at logge ud for at skifte tilstand? + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <notification label="" name="NoAvatarPay"> + Det er kun muligt at betale andre beboere i avanceret tilstand. Ønsker du at logge ud for at skifte tilstand? + <usetemplate name="okcancelbuttons" notext="Afslut ikke" yestext="Afslut"/> + </notification> + <global name="UnsupportedGLRequirements"> + Det ser ikke ud til at din hardware opfylder minimumskravene til [APP_NAME]. [APP_NAME] kræver et OpenGL grafikkort som understøter 'multitexture'. Check eventuelt om du har de nyeste drivere for grafikkortet, og de nyeste service-packs og patches til dit operativsystem. + +Hvis du bliver ved med at have problemer, besøg venligst [SUPPORT_SITE]. + </global> + <global name="You can only set your 'Home Location' on your land or at a mainland Infohub."> + Hvis du selv ejer land, kan du benytte det til hjemme lokation. +Ellers kan du se pÃ¥ verdenskortet og finde steder markeret med "Infohub". + </global> + <global name="You died and have been teleported to your home location"> + Du døde og er blevet teleporteret til din hjemmelokation. + </global> +</notifications> diff --git a/indra/newview/skins/minimal/xui/da/panel_adhoc_control_panel.xml b/indra/newview/skins/minimal/xui/da/panel_adhoc_control_panel.xml new file mode 100644 index 0000000000000000000000000000000000000000..14250453eb78dea2dccfc33e9216710fb4183e9c --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/panel_adhoc_control_panel.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_im_control_panel"> + <layout_stack name="vertical_stack"> + <layout_panel name="call_btn_panel"> + <button label="Opkald" name="call_btn"/> + </layout_panel> + <layout_panel name="end_call_btn_panel"> + <button label="Forlad samtale" name="end_call_btn"/> + </layout_panel> + <layout_panel name="voice_ctrls_btn_panel"> + <button label="Stemmekontroller" name="voice_ctrls_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/minimal/xui/da/panel_bottomtray.xml b/indra/newview/skins/minimal/xui/da/panel_bottomtray.xml new file mode 100644 index 0000000000000000000000000000000000000000..bd20ece7642cf39b54b15b96e4eda5d283b5cc24 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/panel_bottomtray.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="bottom_tray"> + <string name="DragIndicationImageName" value="Accordion_ArrowOpened_Off"/> + <string name="SpeakBtnToolTip" value="SlÃ¥ mikrofon til/fra"/> + <string name="VoiceControlBtnToolTip" value="Vis/skjul stemme kontrolpanel"/> + <layout_stack name="toolbar_stack"> + <layout_panel name="speak_panel"> + <button label="Tal" name="speak_btn" tool_tip="Tænd og sluk for mikrofon"/> + </layout_panel> + <layout_panel name="speak_flyout_panel"> + <button label="" name="flyout_btn" tool_tip="Ændring af opsætning for lyd"/> + </layout_panel> + <layout_panel name="gesture_panel"> + <gesture_combo_list label="Bevægelse" name="Gesture" tool_tip="Lad din avatar gøre ting"/> + </layout_panel> + <layout_panel name="cam_panel"> + <bottomtray_button label="Vis" name="camera_btn" tool_tip="Kontrollér kameravinkel"/> + </layout_panel> + <layout_panel name="destinations_panel"> + <bottomtray_button label="Destinationer" name="destination_btn" tool_tip="Rejs i Second Life"/> + </layout_panel> + <layout_panel name="avatar_panel"> + <bottomtray_button label="Min avatar" name="avatar_btn" tool_tip="Ændre dit udseende"/> + </layout_panel> + <layout_panel name="people_panel"> + <bottomtray_button label="Personer" name="show_people_button" tool_tip="Find personer i Second Life"/> + </layout_panel> + <layout_panel name="profile_panel"> + <bottomtray_button label="Profil" name="show_profile_btn" tool_tip="Se og rediger din profil"/> + </layout_panel> + <layout_panel name="howto_panel"> + <bottomtray_button label="Hvordan" name="show_help_btn" tool_tip="Vis hjælpeinformation for Second Life"/> + </layout_panel> + <layout_panel name="im_well_panel"> + <chiclet_im_well name="im_well"> + <button name="Unread IM messages" tool_tip="Konversationer"/> + </chiclet_im_well> + </layout_panel> + <layout_panel name="notification_well_panel"> + <chiclet_notification name="notification_well"> + <button name="Unread" tool_tip="Notifikationer"/> + </chiclet_notification> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/minimal/xui/da/panel_group_control_panel.xml b/indra/newview/skins/minimal/xui/da/panel_group_control_panel.xml new file mode 100644 index 0000000000000000000000000000000000000000..23a5e79e228474fd3e28ff9c678df2cf9ec38f43 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/panel_group_control_panel.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_im_control_panel"> + <layout_stack name="vertical_stack"> + <layout_panel name="group_info_btn_panel"> + <button label="Gruppe profil" name="group_info_btn"/> + </layout_panel> + <layout_panel name="call_btn_panel"> + <button label="Opkald gruppe" name="call_btn"/> + </layout_panel> + <layout_panel name="end_call_btn_panel"> + <button label="Forlad samtale" name="end_call_btn"/> + </layout_panel> + <layout_panel name="voice_ctrls_btn_panel"> + <button label="Ã…ben stemme indstillinger" name="voice_ctrls_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/minimal/xui/da/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/da/panel_im_control_panel.xml new file mode 100644 index 0000000000000000000000000000000000000000..b8a7ec0b34a07fe3add48a0b330cc44167c9c248 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/panel_im_control_panel.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_im_control_panel"> + <layout_stack name="button_stack"> + <layout_panel name="view_profile_btn_panel"> + <button label="Profil" name="view_profile_btn"/> + </layout_panel> + <layout_panel name="add_friend_btn_panel"> + <button label="Tilføj ven" name="add_friend_btn"/> + </layout_panel> + <layout_panel name="teleport_btn_panel"> + <button label="Teleport" name="teleport_btn" tool_tip="Tilbyd teleport til denne person"/> + </layout_panel> + <layout_panel name="share_btn_panel"> + <button label="Del" name="share_btn"/> + </layout_panel> + <layout_panel name="pay_btn_panel"> + <button label="Betal" name="pay_btn"/> + </layout_panel> + <layout_panel name="call_btn_panel"> + <button label="Opkald" name="call_btn"/> + </layout_panel> + <layout_panel name="end_call_btn_panel"> + <button label="Afslut samtale" name="end_call_btn"/> + </layout_panel> + <layout_panel name="voice_ctrls_btn_panel"> + <button label="Stemme kontroller" name="voice_ctrls_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/minimal/xui/da/panel_login.xml b/indra/newview/skins/minimal/xui/da/panel_login.xml new file mode 100644 index 0000000000000000000000000000000000000000..2e0f726e1abb826ef9a657713da88a19a35afcac --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/panel_login.xml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_login"> + <panel.string name="create_account_url"> + http://join.secondlife.com/ + </panel.string> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php + </panel.string> + <layout_stack name="login_widgets"> + <layout_panel name="login"> + <text name="username_text"> + Brugernavn: + </text> + <combo_box name="username_combo" tool_tip="Brugernavnet du valgte da du registrerde dig, som f.eks. bobsmith12 or Steller Sunshine"/> + <text name="password_text"> + Password: + </text> + <check_box label="Husk password" name="remember_check"/> + <button label="Log pÃ¥" name="connect_btn"/> + <text name="mode_selection_text"> + Tilstand: + </text> + <combo_box name="mode_combo" tool_tip="Vælg ønsket tilstand. Vælg basis for hurtig og nem udforskning og chat. Vælg avanceret for at fÃ¥ adgang til flere muligheder."> + <combo_box.item label="Basis" name="Basic"/> + <combo_box.item label="Avanceret" name="Advanced"/> + </combo_box> + <text name="start_location_text"> + Start ved: + </text> + <combo_box name="start_location_combo"> + <combo_box.item label="Min sidste lokation" name="MyLastLocation"/> + <combo_box.item label="Hjem" name="MyHome"/> + <combo_box.item label="<Indtast regionnavn>" name="Typeregionname"/> + </combo_box> + </layout_panel> + <layout_panel name="links"> + <text name="create_new_account_text"> + Opret bruger + </text> + <text name="forgot_password_text"> + Har du glemt brugernavn eller password? + </text> + <text name="login_help"> + Hjælp til login + </text> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/minimal/xui/da/panel_navigation_bar.xml b/indra/newview/skins/minimal/xui/da/panel_navigation_bar.xml new file mode 100644 index 0000000000000000000000000000000000000000..2ee87433a462b06caaaa25ed1bba9858ea358457 --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/panel_navigation_bar.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="navigation_bar"> + <panel name="navigation_panel"> + <pull_button name="back_btn" tool_tip="GÃ¥ tilbage til min forrige lokation"/> + <pull_button name="forward_btn" tool_tip="GÃ¥ en lokation fremad"/> + <button name="home_btn" tool_tip="Teleport til min hjemme lokation"/> + <location_input label="Lokation" name="location_combo"/> + <search_combo_box label="Søg" name="search_combo_box" tool_tip="Søg"> + <combo_editor label="Søg [SECOND_LIFE]" name="search_combo_editor"/> + </search_combo_box> + </panel> + <favorites_bar name="favorite" tool_tip="Træk landemærker hertil for at fÃ¥ hurtig adgang til dine favoritsteder i Second Life!"> + <label name="favorites_bar_label" tool_tip="Træk landemærker hertil for at fÃ¥ hurtig adgang til dine favoritsteder i Second Life!"> + Favoritter + </label> + <chevron_button name=">>" tool_tip="Søg mere af mine favoritter"/> + </favorites_bar> +</panel> diff --git a/indra/newview/skins/minimal/xui/da/panel_people.xml b/indra/newview/skins/minimal/xui/da/panel_people.xml new file mode 100644 index 0000000000000000000000000000000000000000..49cd2c71f2194a364f24c199d29ca15b61077f5a --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/panel_people.xml @@ -0,0 +1,94 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<!-- Side tray panel --> +<panel label="Personer" name="people_panel"> + <string name="no_recent_people" value="Ingen nylige personer. Leder du efter personer at være sammen med? Prøv destinationsknappen nedenfor."/> + <string name="no_filtered_recent_people" value="Ingen nylige personer med det navn."/> + <string name="no_one_near" value="Ingen i nærheden. Leder du efter personer at være sammen med? Prøv destinationsknappen nedenfor."/> + <string name="no_one_filtered_near" value="Ingen i nærheden med det navn."/> + <string name="no_friends_online" value="Ingen venner online"/> + <string name="no_friends" value="Ingen venner"/> + <string name="no_friends_msg"> + Højre-klik pÃ¥ en person for at tilføje som ven. +Leder du efter personer at være sammen med? Prøv destinationsknappen nedenfor. + </string> + <string name="no_filtered_friends_msg"> + Fandt du ikke hvad du søgte? Prøv destinationsknappen nedenfor. + </string> + <string name="people_filter_label" value="Filtrér personer"/> + <string name="groups_filter_label" value="Filtrér grupper"/> + <string name="no_filtered_groups_msg" value="Fandt du ikke det du søgte? Prøv [secondlife:///app/search/groups/[SEARCH_TERM] Søg]."/> + <string name="no_groups_msg" value="Leder du efter grupper at være med i? Prøv [secondlife:///app/search/groups Søg]."/> + <string name="MiniMapToolTipMsg" value="[REGION](Dobbelt-klik for at Ã¥bne kort, træk for at panorere)"/> + <string name="AltMiniMapToolTipMsg" value="[REGION](Dobbelt-klik for at teleportere, træk for at panorere)"/> + <filter_editor label="Filtrér" name="filter_input"/> + <tab_container name="tabs"> + <panel label="TÆT PÃ…" name="nearby_panel"> + <panel label="bottom_panel" name="bottom_panel"> + <menu_button name="nearby_view_sort_btn" tool_tip="Valg"/> + <button name="add_friend_btn" tool_tip="Tilføj valgte beboer til din venneliste"/> + </panel> + </panel> + <panel label="MINE VENNER" name="friends_panel"> + <accordion name="friends_accordion"> + <accordion_tab name="tab_online" title="Online"/> + <accordion_tab name="tab_all" title="Alle"/> + </accordion> + <panel label="bottom_panel" name="bottom_panel"> + <layout_stack name="bottom_panel"> + <layout_panel name="options_gear_btn_panel"> + <menu_button name="friends_viewsort_btn" tool_tip="Vis flere valg"/> + </layout_panel> + <layout_panel name="add_btn_panel"> + <button name="add_btn" tool_tip="Tilbyd venskab til en beboer"/> + </layout_panel> + <layout_panel name="trash_btn_panel"> + <dnd_button name="del_btn" tool_tip="Fjern valgte person fra din venneliste"/> + </layout_panel> + </layout_stack> + </panel> + </panel> + <panel label="MINE GRUPPER" name="groups_panel"> + <panel label="bottom_panel" name="bottom_panel"> + <menu_button name="groups_viewsort_btn" tool_tip="Valg"/> + <button name="plus_btn" tool_tip="Bliv medlem af gruppe/Opret ny gruppe"/> + <button name="activate_btn" tool_tip="Activér valgte gruppe"/> + </panel> + </panel> + <panel label="NYLIGE" name="recent_panel"> + <panel label="bottom_panel" name="bottom_panel"> + <menu_button name="recent_viewsort_btn" tool_tip="Valg"/> + <button name="add_friend_btn" tool_tip="Tilføj valgte beboer til din venneliste"/> + </panel> + </panel> + </tab_container> + <panel name="button_bar"> + <layout_stack name="bottom_bar_ls"> + <layout_panel name="view_profile_btn_lp"> + <button label="Profil" name="view_profile_btn" tool_tip="Vis billeder, grupper og anden beboer information"/> + </layout_panel> + <layout_panel name="chat_btn_lp"> + <button label="IM" name="im_btn" tool_tip="Ã…ben session med privat besked (IM)"/> + </layout_panel> + <layout_panel name="chat_btn_lp"> + <button label="Opkald" name="call_btn" tool_tip="Kald til denne beboer"/> + </layout_panel> + <layout_panel name="chat_btn_lp"> + <button label="Del" name="share_btn" tool_tip="Del en genstand fra beholdning"/> + </layout_panel> + <layout_panel name="chat_btn_lp"> + <button label="Teleportér" name="teleport_btn" tool_tip="Tilbyd teleport"/> + </layout_panel> + </layout_stack> + <layout_stack name="bottom_bar_ls1"> + <layout_panel name="group_info_btn_lp"> + <button label="Gruppe profil" name="group_info_btn" tool_tip="Vis gruppe information"/> + </layout_panel> + <layout_panel name="chat_btn_lp"> + <button label="Gruppe chat" name="chat_btn" tool_tip="Ã…ben chat session"/> + </layout_panel> + <layout_panel name="group_call_btn_lp"> + <button label="Gruppe kald" name="group_call_btn" tool_tip="Opkald til denne gruppe"/> + </layout_panel> + </layout_stack> + </panel> +</panel> diff --git a/indra/newview/skins/minimal/xui/da/panel_side_tray_tab_caption.xml b/indra/newview/skins/minimal/xui/da/panel_side_tray_tab_caption.xml new file mode 100644 index 0000000000000000000000000000000000000000..ce3a1d8b4ef480904558778b6113eec9b149f3fc --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/panel_side_tray_tab_caption.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="sidetray_tab_panel"> + <text name="sidetray_tab_title" value="Side bjælke"/> + <button name="undock" tool_tip="Løsriv"/> + <button name="dock" tool_tip="Fastgør"/> + <button name="show_help" tool_tip="Vis hjælp"/> +</panel> diff --git a/indra/newview/skins/minimal/xui/da/panel_status_bar.xml b/indra/newview/skins/minimal/xui/da/panel_status_bar.xml new file mode 100644 index 0000000000000000000000000000000000000000..6e7bdfc1884b382822f25719c1a31df907112c5d --- /dev/null +++ b/indra/newview/skins/minimal/xui/da/panel_status_bar.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="status"> + <panel.string name="StatBarDaysOfWeek"> + Søndag:Mandag:Tirsdag:Onsdag:Torsdag:Fredag:Lørdag + </panel.string> + <panel.string name="StatBarMonthsOfYear"> + Januar:Februar:Marts:April:Maj:Juni:Juli:August:September:Oktober:November:December + </panel.string> + <panel.string name="packet_loss_tooltip"> + Packet Loss + </panel.string> + <panel.string name="bandwidth_tooltip"> + BÃ¥ndbredde + </panel.string> + <panel.string name="time"> + [hour12, datetime, slt]:[min, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt] + </panel.string> + <panel.string name="timeTooltip"> + [weekday, datetime, slt], [day, datetime, slt] [month, datetime, slt] [year, datetime, slt] + </panel.string> + <panel.string name="buycurrencylabel"> + L$ [AMT] + </panel.string> + <panel name="balance_bg"> + <text name="balance" tool_tip="Klik for at opdaterer din L$ balance" value="L$20"/> + <button label="KØB L$" name="buyL" tool_tip="Klik for at købe flere L$"/> + </panel> + <text name="TimeText" tool_tip="Nuværende tid (Pacific)"> + 24:00 PST + </text> + <button name="media_toggle_btn" tool_tip="Start/Stop Alle medier (musik, video, hjemmesider)"/> + <button name="volume_btn" tool_tip="Kontrol for generel lydstyrke"/> +</panel> diff --git a/indra/newview/skins/minimal/xui/de/menu_inspect_avatar_gear.xml b/indra/newview/skins/minimal/xui/de/menu_inspect_avatar_gear.xml index fbc119c4833278ba2c7a41997676438ece734cf6..72ba7fe41dc269a8ef82f3f1c3c8378f470b74d1 100644 --- a/indra/newview/skins/minimal/xui/de/menu_inspect_avatar_gear.xml +++ b/indra/newview/skins/minimal/xui/de/menu_inspect_avatar_gear.xml @@ -3,6 +3,7 @@ <menu_item_call label="Profil anzeigen" name="view_profile"/> <menu_item_call label="Freund hinzufügen" name="add_friend"/> <menu_item_call label="IM" name="im"/> + <menu_item_call label="Anrufen" name="call"/> <menu_item_call label="Teleportieren" name="teleport"/> <menu_item_call label="Ignorieren" name="block"/> <menu_item_call label="Freischalten" name="unblock"/> diff --git a/indra/newview/skins/minimal/xui/de/panel_adhoc_control_panel.xml b/indra/newview/skins/minimal/xui/de/panel_adhoc_control_panel.xml new file mode 100644 index 0000000000000000000000000000000000000000..cc45f42169391982f4893e6fdea4329469d7a1b6 --- /dev/null +++ b/indra/newview/skins/minimal/xui/de/panel_adhoc_control_panel.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_im_control_panel"> + <layout_stack name="vertical_stack"> + <layout_panel name="call_btn_panel"> + <button label="Anrufen" name="call_btn"/> + </layout_panel> + <layout_panel name="end_call_btn_panel"> + <button label="Anruf beenden" name="end_call_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/minimal/xui/de/panel_bottomtray.xml b/indra/newview/skins/minimal/xui/de/panel_bottomtray.xml index a4d80921ece5d14f326bb65fa99b6e2f7cf9ffd2..2278bfb699897857f8d82b1c1fffcabf7c0ff400 100644 --- a/indra/newview/skins/minimal/xui/de/panel_bottomtray.xml +++ b/indra/newview/skins/minimal/xui/de/panel_bottomtray.xml @@ -4,26 +4,32 @@ <string name="SpeakBtnToolTip" value="Schaltet Mikrofon ein/aus"/> <string name="VoiceControlBtnToolTip" value="Voice-Chat-Steuerung anzeigen/ausblenden"/> <layout_stack name="toolbar_stack"> + <layout_panel name="speak_panel"> + <button label="Sprechen" name="speak_btn" tool_tip="Mikrofon ein- und ausschalten"/> + </layout_panel> + <layout_panel name="speak_flyout_panel"> + <button label="" name="flyout_btn" tool_tip="Soundeinstellungen ändern"/> + </layout_panel> <layout_panel name="gesture_panel"> - <gesture_combo_list label="Gesten" name="Gesture" tool_tip="Gesten anzeigen/ausblenden"/> + <gesture_combo_list label="Gesten" name="Gesture" tool_tip="Ihren Avatar bestimmte Aktionen durchführen lassen"/> </layout_panel> <layout_panel name="cam_panel"> - <bottomtray_button label="Ansicht" name="camera_btn" tool_tip="Kamerasteuerung anzeigen/ausblenden"/> + <bottomtray_button label="Ansicht" name="camera_btn" tool_tip="Kamerawinkel steuern"/> </layout_panel> - <layout_panel name="avatar_and_destinations_panel"> - <bottomtray_button label="Ziele" name="destination_btn" tool_tip="Zeigt Leutefenster an"/> + <layout_panel name="destinations_panel"> + <bottomtray_button label="Ziele" name="destination_btn" tool_tip="Durch Second Life reisen"/> </layout_panel> - <layout_panel name="avatar_and_destinations_panel"> - <bottomtray_button label="Mein Avatar" name="avatar_btn"/> + <layout_panel name="avatar_panel"> + <bottomtray_button label="Mein Avatar" name="avatar_btn" tool_tip="Eigenes Aussehen verändern"/> </layout_panel> <layout_panel name="people_panel"> - <bottomtray_button label="Leute" name="show_people_button" tool_tip="Zeigt Leutefenster an"/> + <bottomtray_button label="Leute" name="show_people_button" tool_tip="Personen in Second Life suchen"/> </layout_panel> <layout_panel name="profile_panel"> - <bottomtray_button label="Profil" name="show_profile_btn" tool_tip="Zeigt Profilfenster an"/> + <bottomtray_button label="Profil" name="show_profile_btn" tool_tip="Eigenes Profil anzeigen und bearbeiten"/> </layout_panel> <layout_panel name="howto_panel"> - <bottomtray_button label="Anweisungen" name="show_help_btn" tool_tip="Second Life-Anweisungsthemen öffnen"/> + <bottomtray_button label="Anweisungen" name="show_help_btn" tool_tip="Hilfeinfos zu Second Life anzeigen"/> </layout_panel> <layout_panel name="im_well_panel"> <chiclet_im_well name="im_well"> diff --git a/indra/newview/skins/minimal/xui/de/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/de/panel_im_control_panel.xml index abf8011d9d5a42dc8aa0df45b6430111626800ba..0ef2234fecce596f0aded552d34055214657cf29 100644 --- a/indra/newview/skins/minimal/xui/de/panel_im_control_panel.xml +++ b/indra/newview/skins/minimal/xui/de/panel_im_control_panel.xml @@ -9,7 +9,7 @@ <button label="Freund hinzufügen" name="add_friend_btn"/> </layout_panel> <layout_panel name="teleport_btn_panel"> - <button label="Teleportieren" name="teleport_btn" tool_tip="Dieser Person einen Teleport anbieten."/> + <button label="Teleportieren" name="teleport_btn" tool_tip="Dieser Person einen Teleport anbieten"/> </layout_panel> <layout_panel name="share_btn_panel"> <button label="Teilen" name="share_btn"/> diff --git a/indra/newview/skins/minimal/xui/de/panel_people.xml b/indra/newview/skins/minimal/xui/de/panel_people.xml index c6253e17dee4b9f88ad74e7b43395cc752a1e5b3..4f8f70ad17a72468668e1a40041aa9b0fb8514dd 100644 --- a/indra/newview/skins/minimal/xui/de/panel_people.xml +++ b/indra/newview/skins/minimal/xui/de/panel_people.xml @@ -51,6 +51,9 @@ <layout_panel name="chat_btn_lp"> <button label="IM" name="im_btn" tool_tip="Instant Messenger öffnen"/> </layout_panel> + <layout_panel name="chat_btn_lp"> + <button label="Anrufen" name="call_btn" tool_tip="Diesen Einwohner anrufen"/> + </layout_panel> <layout_panel name="chat_btn_lp"> <button label="Teleportieren" name="teleport_btn" tool_tip="Teleport anbieten"/> </layout_panel> diff --git a/indra/newview/skins/minimal/xui/es/floater_camera.xml b/indra/newview/skins/minimal/xui/es/floater_camera.xml index ccf3d4bf917461dcb594dc8925fa142cf61a9960..87177e285c96db6054971f4204e6074c24e5b887 100644 --- a/indra/newview/skins/minimal/xui/es/floater_camera.xml +++ b/indra/newview/skins/minimal/xui/es/floater_camera.xml @@ -13,7 +13,7 @@ Modos de cámara </floater.string> <floater.string name="pan_mode_title"> - Orbital - Zoom - Panóramica + Orbital - Zoom - Panorámica </floater.string> <floater.string name="presets_mode_title"> Vistas predefinidas @@ -59,7 +59,7 @@ </panel> <panel name="buttons"> <button label="" name="presets_btn" tool_tip="Vistas predefinidas"/> - <button label="" name="pan_btn" tool_tip="Orbital - Zoom - Panóramica"/> + <button label="" name="pan_btn" tool_tip="Orbital - Zoom - Panorámica"/> <button label="" name="avatarview_btn" tool_tip="Modos de cámara"/> </panel> </floater> diff --git a/indra/newview/skins/minimal/xui/es/menu_attachment_other.xml b/indra/newview/skins/minimal/xui/es/menu_attachment_other.xml index 00bdb748813ee6d973b9e63ba014b449da8e429c..b8ae93afd23e580fcece540ab8e9ba6cec714a78 100644 --- a/indra/newview/skins/minimal/xui/es/menu_attachment_other.xml +++ b/indra/newview/skins/minimal/xui/es/menu_attachment_other.xml @@ -4,7 +4,7 @@ <menu_item_call label="Ver el perfil" name="Profile..."/> <menu_item_call label="Añadir como amigo" name="Add Friend"/> <menu_item_call label="MI" name="Send IM..."/> - <menu_item_call label="Llamada" name="Call"/> + <menu_item_call label="Llamar" name="Call"/> <menu_item_call label="Invitar al grupo" name="Invite..."/> <menu_item_call label="Ignorar" name="Avatar Mute"/> <menu_item_call label="Denunciar" name="abuse"/> diff --git a/indra/newview/skins/minimal/xui/es/menu_avatar_other.xml b/indra/newview/skins/minimal/xui/es/menu_avatar_other.xml index 7df2d7c4e08ea2e60ad228d224070a5876873f5e..5fb3e51575e6de31033413a2abe1f8a7a520d4ba 100644 --- a/indra/newview/skins/minimal/xui/es/menu_avatar_other.xml +++ b/indra/newview/skins/minimal/xui/es/menu_avatar_other.xml @@ -4,7 +4,7 @@ <menu_item_call label="Ver el perfil" name="Profile..."/> <menu_item_call label="Añadir como amigo" name="Add Friend"/> <menu_item_call label="MI" name="Send IM..."/> - <menu_item_call label="Llamada" name="Call"/> + <menu_item_call label="Llamar" name="Call"/> <menu_item_call label="Invitar al grupo" name="Invite..."/> <menu_item_call label="Ignorar" name="Avatar Mute"/> <menu_item_call label="Denunciar" name="abuse"/> diff --git a/indra/newview/skins/minimal/xui/es/menu_inspect_avatar_gear.xml b/indra/newview/skins/minimal/xui/es/menu_inspect_avatar_gear.xml index b4b964d096967a96d0aef66bde4790fb328ff9ee..728637de78ee2b4aae83f0d111b8bc0aca781b80 100644 --- a/indra/newview/skins/minimal/xui/es/menu_inspect_avatar_gear.xml +++ b/indra/newview/skins/minimal/xui/es/menu_inspect_avatar_gear.xml @@ -3,6 +3,7 @@ <menu_item_call label="Ver el perfil" name="view_profile"/> <menu_item_call label="Añadir como amigo" name="add_friend"/> <menu_item_call label="MI" name="im"/> + <menu_item_call label="Llamar" name="call"/> <menu_item_call label="Teleportar" name="teleport"/> <menu_item_call label="Ignorar" name="block"/> <menu_item_call label="Designorar" name="unblock"/> diff --git a/indra/newview/skins/minimal/xui/es/panel_adhoc_control_panel.xml b/indra/newview/skins/minimal/xui/es/panel_adhoc_control_panel.xml new file mode 100644 index 0000000000000000000000000000000000000000..254cf58437a20bbd0f396b41d2c4e7f8382d8c55 --- /dev/null +++ b/indra/newview/skins/minimal/xui/es/panel_adhoc_control_panel.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_im_control_panel"> + <layout_stack name="vertical_stack"> + <layout_panel name="call_btn_panel"> + <button label="Llamar" name="call_btn"/> + </layout_panel> + <layout_panel name="end_call_btn_panel"> + <button label="Colgar" name="end_call_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/minimal/xui/es/panel_bottomtray.xml b/indra/newview/skins/minimal/xui/es/panel_bottomtray.xml index f782d66ae79609ed747d7ca92b6f7214c9592c48..0989a3d0a1d695766ba86866d5c0df9b4e526187 100644 --- a/indra/newview/skins/minimal/xui/es/panel_bottomtray.xml +++ b/indra/newview/skins/minimal/xui/es/panel_bottomtray.xml @@ -4,26 +4,32 @@ <string name="SpeakBtnToolTip" value="Activa/Desactiva el micrófono"/> <string name="VoiceControlBtnToolTip" value="Muestra/Oculta el panel del control de voz"/> <layout_stack name="toolbar_stack"> + <layout_panel name="speak_panel"> + <button label="Hablar" name="speak_btn" tool_tip="Activar y desactivar tu micrófono"/> + </layout_panel> + <layout_panel name="speak_flyout_panel"> + <button label="" name="flyout_btn" tool_tip="Cambiar tus preferencias de sonido"/> + </layout_panel> <layout_panel name="gesture_panel"> - <gesture_combo_list label="Gestos" name="Gesture" tool_tip="Muestra/Oculta los gestos"/> + <gesture_combo_list label="Gestos" name="Gesture" tool_tip="Hacer que tu avatar realice distintas acciones"/> </layout_panel> <layout_panel name="cam_panel"> - <bottomtray_button label="Visión" name="camera_btn" tool_tip="Muestra/Oculta los controles de la cámara"/> + <bottomtray_button label="Visión" name="camera_btn" tool_tip="Controlar el ángulo de tu cámara"/> </layout_panel> - <layout_panel name="avatar_and_destinations_panel"> - <bottomtray_button label="Destinos" name="destination_btn" tool_tip="Muestra la ventana de gente"/> + <layout_panel name="destinations_panel"> + <bottomtray_button label="Destinos" name="destination_btn" tool_tip="Viajar por Second Life"/> </layout_panel> - <layout_panel name="avatar_and_destinations_panel"> - <bottomtray_button label="Mi avatar" name="avatar_btn"/> + <layout_panel name="avatar_panel"> + <bottomtray_button label="Mi avatar" name="avatar_btn" tool_tip="Cambiar tu aspecto"/> </layout_panel> <layout_panel name="people_panel"> - <bottomtray_button label="Gente" name="show_people_button" tool_tip="Muestra la ventana de gente"/> + <bottomtray_button label="Gente" name="show_people_button" tool_tip="Encontrar a gente en Second Life"/> </layout_panel> <layout_panel name="profile_panel"> - <bottomtray_button label="Perfil" name="show_profile_btn" tool_tip="Muestra la ventana del perfil"/> + <bottomtray_button label="Perfil" name="show_profile_btn" tool_tip="Consultar y editar tu perfil"/> </layout_panel> <layout_panel name="howto_panel"> - <bottomtray_button label="Indicaciones" name="show_help_btn" tool_tip="Abrir los temas sobre indicaciones de Second Life"/> + <bottomtray_button label="Indicaciones" name="show_help_btn" tool_tip="Ver la información de ayuda de Second Life"/> </layout_panel> <layout_panel name="im_well_panel"> <chiclet_im_well name="im_well"> diff --git a/indra/newview/skins/minimal/xui/es/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/es/panel_im_control_panel.xml index 7d4db6a630c22eb0fb771ef1e907ee25205b334e..1be6997813ebdb6ece11ffc7bc78825a2d858be1 100644 --- a/indra/newview/skins/minimal/xui/es/panel_im_control_panel.xml +++ b/indra/newview/skins/minimal/xui/es/panel_im_control_panel.xml @@ -8,7 +8,7 @@ <button label="Añadir como amigo" name="add_friend_btn"/> </layout_panel> <layout_panel name="teleport_btn_panel"> - <button label="Teleportarme" name="teleport_btn" tool_tip="Ofrecer teleporte a esta persona"/> + <button label="Teleportarte" name="teleport_btn" tool_tip="Ofrecer teleporte a esta persona"/> </layout_panel> <layout_panel name="share_btn_panel"> <button label="Compartir" name="share_btn"/> diff --git a/indra/newview/skins/minimal/xui/es/panel_people.xml b/indra/newview/skins/minimal/xui/es/panel_people.xml index 7d3157ef451a7d86c2313c380b12307e5b8a7ca7..1e1c3411aeb61c09e0e0b012f918497119c989bd 100644 --- a/indra/newview/skins/minimal/xui/es/panel_people.xml +++ b/indra/newview/skins/minimal/xui/es/panel_people.xml @@ -52,6 +52,9 @@ <layout_panel name="chat_btn_lp"> <button label="MI" name="im_btn" tool_tip="Abrir una sesión de mensajes instantáneos"/> </layout_panel> + <layout_panel name="chat_btn_lp"> + <button label="Llamar" name="call_btn" tool_tip="Llamar a este Residente"/> + </layout_panel> <layout_panel name="chat_btn_lp"> <button label="Teleporte" name="teleport_btn" tool_tip="Ofrecer teleporte"/> </layout_panel> diff --git a/indra/newview/skins/minimal/xui/fr/menu_inspect_avatar_gear.xml b/indra/newview/skins/minimal/xui/fr/menu_inspect_avatar_gear.xml index 231a175ee5a303f67fd89c63725121ff2f097e6d..c3240fa541d866f6e3ab25f878b8bacb4bfdea43 100644 --- a/indra/newview/skins/minimal/xui/fr/menu_inspect_avatar_gear.xml +++ b/indra/newview/skins/minimal/xui/fr/menu_inspect_avatar_gear.xml @@ -3,6 +3,7 @@ <menu_item_call label="Voir le profil" name="view_profile"/> <menu_item_call label="Devenir amis" name="add_friend"/> <menu_item_call label="IM" name="im"/> + <menu_item_call label="Appeler" name="call"/> <menu_item_call label="Téléporter" name="teleport"/> <menu_item_call label="Ignorer" name="block"/> <menu_item_call label="Ne plus ignorer" name="unblock"/> diff --git a/indra/newview/skins/minimal/xui/fr/panel_adhoc_control_panel.xml b/indra/newview/skins/minimal/xui/fr/panel_adhoc_control_panel.xml new file mode 100644 index 0000000000000000000000000000000000000000..376a7d2b7251a69e32c9ece4950e2d8918131a92 --- /dev/null +++ b/indra/newview/skins/minimal/xui/fr/panel_adhoc_control_panel.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_im_control_panel"> + <layout_stack name="vertical_stack"> + <layout_panel name="call_btn_panel"> + <button label="Appeler" name="call_btn"/> + </layout_panel> + <layout_panel name="end_call_btn_panel"> + <button label="Quitter l'appel" name="end_call_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/minimal/xui/fr/panel_bottomtray.xml b/indra/newview/skins/minimal/xui/fr/panel_bottomtray.xml index ef62901e9912a590960bac6c846472280a90d5cd..094d3e66de7806f466dfba6e2b1d1586ebb09041 100644 --- a/indra/newview/skins/minimal/xui/fr/panel_bottomtray.xml +++ b/indra/newview/skins/minimal/xui/fr/panel_bottomtray.xml @@ -4,26 +4,32 @@ <string name="SpeakBtnToolTip" value="Active/Désactive le micro"/> <string name="VoiceControlBtnToolTip" value="Affiche/Masque le panneau de contrôle de la voix"/> <layout_stack name="toolbar_stack"> + <layout_panel name="speak_panel"> + <button label="Parler" name="speak_btn" tool_tip="Activer/désactiver le micro."/> + </layout_panel> + <layout_panel name="speak_flyout_panel"> + <button label="" name="flyout_btn" tool_tip="Modifier les préférences audio."/> + </layout_panel> <layout_panel name="gesture_panel"> - <gesture_combo_list label="Geste" name="Gesture" tool_tip="Affiche/Masque les gestes"/> + <gesture_combo_list label="Geste" name="Gesture" tool_tip="Faire faire des gestes à votre avatar."/> </layout_panel> <layout_panel name="cam_panel"> - <bottomtray_button label="Affichage" name="camera_btn" tool_tip="Affiche/Masque le contrôle de la caméra"/> + <bottomtray_button label="Affichage" name="camera_btn" tool_tip="Contrôler l'angle de la caméra."/> </layout_panel> - <layout_panel name="avatar_and_destinations_panel"> - <bottomtray_button label="Destinations" name="destination_btn" tool_tip="Afficher la fenêtre des personnes."/> + <layout_panel name="destinations_panel"> + <bottomtray_button label="Destinations" name="destination_btn" tool_tip="Voyager à travers Second Life."/> </layout_panel> - <layout_panel name="avatar_and_destinations_panel"> - <bottomtray_button label="Mon avatar" name="avatar_btn"/> + <layout_panel name="avatar_panel"> + <bottomtray_button label="Mon avatar" name="avatar_btn" tool_tip="Modifier votre apparence."/> </layout_panel> <layout_panel name="people_panel"> - <bottomtray_button label="Personnes" name="show_people_button" tool_tip="Afficher la fenêtre des personnes."/> + <bottomtray_button label="Personnes" name="show_people_button" tool_tip="Trouver des personnes dans Second Life."/> </layout_panel> <layout_panel name="profile_panel"> - <bottomtray_button label="Profil" name="show_profile_btn" tool_tip="Afficher la fenêtre de profil."/> + <bottomtray_button label="Profil" name="show_profile_btn" tool_tip="Afficher et modifier votre profil."/> </layout_panel> <layout_panel name="howto_panel"> - <bottomtray_button label="Aide rapide" name="show_help_btn" tool_tip="Ouvrir les rubriques d'aide rapide Second Life."/> + <bottomtray_button label="Aide rapide" name="show_help_btn" tool_tip="Afficher des infos d'aide sur Second Life."/> </layout_panel> <layout_panel name="im_well_panel"> <chiclet_im_well name="im_well"> diff --git a/indra/newview/skins/minimal/xui/fr/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/fr/panel_im_control_panel.xml index 1f2169e22cabe5f802648ff3287c4bc2328196ca..fdc5aeca4948cf1114b86f9299d23422eeef9733 100644 --- a/indra/newview/skins/minimal/xui/fr/panel_im_control_panel.xml +++ b/indra/newview/skins/minimal/xui/fr/panel_im_control_panel.xml @@ -9,7 +9,7 @@ <button label="Devenir amis" name="add_friend_btn"/> </layout_panel> <layout_panel name="teleport_btn_panel"> - <button label="Téléporter" name="teleport_btn" tool_tip="Proposer de téléporter cette personne"/> + <button label="Téléporter" name="teleport_btn" tool_tip="Proposer de téléporter cette personne."/> </layout_panel> <layout_panel name="share_btn_panel"> <button label="Partager" name="share_btn"/> diff --git a/indra/newview/skins/minimal/xui/fr/panel_people.xml b/indra/newview/skins/minimal/xui/fr/panel_people.xml index 88409a2a8678efa7d8d2ea094a58e10f0915b4b9..72fb4d807ff1f490ba96ffdbe8fef5c881072def 100644 --- a/indra/newview/skins/minimal/xui/fr/panel_people.xml +++ b/indra/newview/skins/minimal/xui/fr/panel_people.xml @@ -52,6 +52,9 @@ Vous recherchez des résidents avec qui passer du temps ? Essayez avec le bouto <layout_panel name="chat_btn_lp"> <button label="IM" name="im_btn" tool_tip="Ouvrir une session IM"/> </layout_panel> + <layout_panel name="chat_btn_lp"> + <button label="Appeler" name="call_btn" tool_tip="Appeler ce résident."/> + </layout_panel> <layout_panel name="chat_btn_lp"> <button label="Téléporter" name="teleport_btn" tool_tip="Proposer une téléportation"/> </layout_panel> diff --git a/indra/newview/skins/minimal/xui/it/panel_bottomtray.xml b/indra/newview/skins/minimal/xui/it/panel_bottomtray.xml index 0eb0d0ee22ccf0d2b97cac9b85233872fee3d8ef..ab9b175f16bbe23215facd4f5479ea751f4f615a 100644 --- a/indra/newview/skins/minimal/xui/it/panel_bottomtray.xml +++ b/indra/newview/skins/minimal/xui/it/panel_bottomtray.xml @@ -4,26 +4,32 @@ <string name="SpeakBtnToolTip" value="Accende o spegne il microfono"/> <string name="VoiceControlBtnToolTip" value="Mostra o nasconde il pannello di regolazione voce"/> <layout_stack name="toolbar_stack"> + <layout_panel name="speak_panel"> + <button label="Parla" name="speak_btn" tool_tip="Accendi e spegni il microfono"/> + </layout_panel> + <layout_panel name="speak_flyout_panel"> + <button label="" name="flyout_btn" tool_tip="Cambia le preferenze per i suoni"/> + </layout_panel> <layout_panel name="gesture_panel"> - <gesture_combo_list label="Gesture" name="Gesture" tool_tip="Mostra o nasconde le gesture"/> + <gesture_combo_list label="Gesture" name="Gesture" tool_tip="Fai fare qualcosa al tuo avatar"/> </layout_panel> <layout_panel name="cam_panel"> - <bottomtray_button label="Visuale" name="camera_btn" tool_tip="Mostra o nasconde le regolazioni della visuale"/> + <bottomtray_button label="Visuale" name="camera_btn" tool_tip="Controlla l'angolo di visualizzazione"/> </layout_panel> - <layout_panel name="avatar_and_destinations_panel"> - <bottomtray_button label="Destinazioni" name="destination_btn" tool_tip="Mostra finestra persone"/> + <layout_panel name="destinations_panel"> + <bottomtray_button label="Destinazioni" name="destination_btn" tool_tip="Viaggia in Second Life"/> </layout_panel> - <layout_panel name="avatar_and_destinations_panel"> - <bottomtray_button label="Il mio avatar" name="avatar_btn"/> + <layout_panel name="avatar_panel"> + <bottomtray_button label="Il mio avatar" name="avatar_btn" tool_tip="Cambia il tuo aspetto"/> </layout_panel> <layout_panel name="people_panel"> - <bottomtray_button label="Persone" name="show_people_button" tool_tip="Mostra finestra persone"/> + <bottomtray_button label="Persone" name="show_people_button" tool_tip="Trova persone in Second Life"/> </layout_panel> <layout_panel name="profile_panel"> - <bottomtray_button label="Profilo" name="show_profile_btn" tool_tip="Mostra finestra profilo"/> + <bottomtray_button label="Profilo" name="show_profile_btn" tool_tip="Visualizza e modifica il tuo profilo"/> </layout_panel> <layout_panel name="howto_panel"> - <bottomtray_button label="Istruzioni" name="show_help_btn" tool_tip="Apri le Istruzioni Second Life"/> + <bottomtray_button label="Istruzioni" name="show_help_btn" tool_tip="Visualizza le informazioni della guida di Second Life"/> </layout_panel> <layout_panel name="im_well_panel"> <chiclet_im_well name="im_well"> diff --git a/indra/newview/skins/minimal/xui/it/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/it/panel_im_control_panel.xml index 76b28eab24a4d6ed54e028e323f9c658d6a97c28..756db84c1c718ef45e3f2628df17842ec07a02dd 100644 --- a/indra/newview/skins/minimal/xui/it/panel_im_control_panel.xml +++ b/indra/newview/skins/minimal/xui/it/panel_im_control_panel.xml @@ -5,7 +5,7 @@ <button label="Profilo" name="view_profile_btn"/> </layout_panel> <layout_panel name="add_friend_btn_panel"> - <button label="Aggiungi amico" name="add_friend_btn"/> + <button label="Aggiungi come amico" name="add_friend_btn"/> </layout_panel> <layout_panel name="teleport_btn_panel"> <button label="Teleport" name="teleport_btn" tool_tip="Offri teleport a questa persona"/> diff --git a/indra/newview/skins/minimal/xui/ja/panel_bottomtray.xml b/indra/newview/skins/minimal/xui/ja/panel_bottomtray.xml index fe81ec47f864aa28125f0675c60a69ce4934c5ea..13be2cea0af6a8047aeafe843a78f289c800396b 100644 --- a/indra/newview/skins/minimal/xui/ja/panel_bottomtray.xml +++ b/indra/newview/skins/minimal/xui/ja/panel_bottomtray.xml @@ -4,26 +4,32 @@ <string name="SpeakBtnToolTip" value="マイクã®ã‚ªãƒ³ãƒ»ã‚ªãƒ•"/> <string name="VoiceControlBtnToolTip" value="ボイスコントãƒãƒ¼ãƒ«ãƒ‘ãƒãƒ«ã®è¡¨ç¤ºãƒ»éžè¡¨ç¤º"/> <layout_stack name="toolbar_stack"> + <layout_panel name="speak_panel"> + <button label="話ã™" name="speak_btn" tool_tip="マイクã®ã‚ªãƒ³ãƒ»ã‚ªãƒ•を切り替ãˆã‚‹"/> + </layout_panel> + <layout_panel name="speak_flyout_panel"> + <button label="" name="flyout_btn" tool_tip="サウンド環境è¨å®šã‚’変更ã™ã‚‹"/> + </layout_panel> <layout_panel name="gesture_panel"> - <gesture_combo_list label="ジェスãƒãƒ£ãƒ¼" name="Gesture" tool_tip="ジェスãƒãƒ£ãƒ¼ã®è¡¨ç¤ºãƒ»éžè¡¨ç¤º"/> + <gesture_combo_list label="ジェスãƒãƒ£ãƒ¼" name="Gesture" tool_tip="ã‚¢ãƒã‚¿ãƒ¼ã®å‹•作を起ã“ã™"/> </layout_panel> <layout_panel name="cam_panel"> - <bottomtray_button label="視界" name="camera_btn" tool_tip="カメラコントãƒãƒ¼ãƒ«ã®è¡¨ç¤ºãƒ»éžè¡¨ç¤º"/> + <bottomtray_button label="視界" name="camera_btn" tool_tip="カメラã®è§’度をコントãƒãƒ¼ãƒ«"/> </layout_panel> - <layout_panel name="avatar_and_destinations_panel"> - <bottomtray_button label="行ãå…ˆ" name="destination_btn" tool_tip="人ウインドウを表示"/> + <layout_panel name="destinations_panel"> + <bottomtray_button label="行ãå…ˆ" name="destination_btn" tool_tip="Second Life 内を旅行ã™ã‚‹"/> </layout_panel> - <layout_panel name="avatar_and_destinations_panel"> - <bottomtray_button label="マイ ã‚¢ãƒã‚¿ãƒ¼" name="avatar_btn"/> + <layout_panel name="avatar_panel"> + <bottomtray_button label="マイ ã‚¢ãƒã‚¿ãƒ¼" name="avatar_btn" tool_tip="容姿を変更ã™ã‚‹"/> </layout_panel> <layout_panel name="people_panel"> - <bottomtray_button label="人" name="show_people_button" tool_tip="人ウインドウを表示"/> + <bottomtray_button label="人" name="show_people_button" tool_tip="Second Life ã§äººã‚’探ã™"/> </layout_panel> <layout_panel name="profile_panel"> - <bottomtray_button label="プãƒãƒ•ィール" name="show_profile_btn" tool_tip="プãƒãƒ•ィールウインドウを表示"/> + <bottomtray_button label="プãƒãƒ•ィール" name="show_profile_btn" tool_tip="プãƒãƒ•ィールを表示・編集"/> </layout_panel> <layout_panel name="howto_panel"> - <bottomtray_button label="ãƒã‚¦ãƒ„ー" name="show_help_btn" tool_tip="Second Lifeã®ãƒã‚¦ãƒ„ートピックを開ã"/> + <bottomtray_button label="ãƒã‚¦ãƒ„ー" name="show_help_btn" tool_tip="Second Life ã®ãƒ˜ãƒ«ãƒ—æƒ…å ±ã‚’è¦‹ã‚‹"/> </layout_panel> <layout_panel name="im_well_panel"> <chiclet_im_well name="im_well"> diff --git a/indra/newview/skins/minimal/xui/pt/menu_inspect_avatar_gear.xml b/indra/newview/skins/minimal/xui/pt/menu_inspect_avatar_gear.xml index f7fe5640ef55e2ee5882c2b43e5b1201efea749f..90b321e0a2f90d51d75d0803cba304f3ebabdd60 100644 --- a/indra/newview/skins/minimal/xui/pt/menu_inspect_avatar_gear.xml +++ b/indra/newview/skins/minimal/xui/pt/menu_inspect_avatar_gear.xml @@ -3,6 +3,7 @@ <menu_item_call label="Ver perfil" name="view_profile"/> <menu_item_call label="Adicionar amigo..." name="add_friend"/> <menu_item_call label="MI" name="im"/> + <menu_item_call label="Ligar" name="call"/> <menu_item_call label="Teletransportar" name="teleport"/> <menu_item_call label="Bloquear" name="block"/> <menu_item_call label="Desbloquear" name="unblock"/> diff --git a/indra/newview/skins/minimal/xui/pt/panel_bottomtray.xml b/indra/newview/skins/minimal/xui/pt/panel_bottomtray.xml index f67823dbd80dfc140b0f20d31f84b7c0eea3a940..9b4eb2c2b8a8b94784da371d25df1079a64be7cb 100644 --- a/indra/newview/skins/minimal/xui/pt/panel_bottomtray.xml +++ b/indra/newview/skins/minimal/xui/pt/panel_bottomtray.xml @@ -4,26 +4,32 @@ <string name="SpeakBtnToolTip" value="Liga e desliga o microfone"/> <string name="VoiceControlBtnToolTip" value="Mostra/oculta os controles de voz"/> <layout_stack name="toolbar_stack"> + <layout_panel name="speak_panel"> + <button label="Falar" name="speak_btn" tool_tip="Ligar/desligar seu microfone"/> + </layout_panel> + <layout_panel name="speak_flyout_panel"> + <button label="" name="flyout_btn" tool_tip="Mudar as preferências de áudio"/> + </layout_panel> <layout_panel name="gesture_panel"> - <gesture_combo_list label="Gesto" name="Gesture" tool_tip="Mostra/oculta os gestos"/> + <gesture_combo_list label="Gesto" name="Gesture" tool_tip="Fazer seu avatar agir"/> </layout_panel> <layout_panel name="cam_panel"> - <bottomtray_button label="Exibir" name="camera_btn" tool_tip="Mostra/oculta os controles da câmera"/> + <bottomtray_button label="Exibir" name="camera_btn" tool_tip="Controlar ângulo da câmera"/> </layout_panel> - <layout_panel name="avatar_and_destinations_panel"> - <bottomtray_button label="Destinos" name="destination_btn" tool_tip="Exibe janela de pessoas"/> + <layout_panel name="destinations_panel"> + <bottomtray_button label="Destinos" name="destination_btn" tool_tip="Viajar no Second Life"/> </layout_panel> - <layout_panel name="avatar_and_destinations_panel"> - <bottomtray_button label="Meu avatar" name="avatar_btn"/> + <layout_panel name="avatar_panel"> + <bottomtray_button label="Meu avatar" name="avatar_btn" tool_tip="Trocar seu visual"/> </layout_panel> <layout_panel name="people_panel"> - <bottomtray_button label="Pessoas" name="show_people_button" tool_tip="Exibe as pessoas"/> + <bottomtray_button label="Pessoas" name="show_people_button" tool_tip="Encontrar pessoas no Second Life"/> </layout_panel> <layout_panel name="profile_panel"> - <bottomtray_button label="Perfil" name="show_profile_btn" tool_tip="Exibe o perfil"/> + <bottomtray_button label="Perfil" name="show_profile_btn" tool_tip="Ver e editar seu perfil"/> </layout_panel> <layout_panel name="howto_panel"> - <bottomtray_button label="Como..." name="show_help_btn" tool_tip="Abrir "Como..." do Second Life"/> + <bottomtray_button label="Como..." name="show_help_btn" tool_tip="Opções de ajuda do Second Life"/> </layout_panel> <layout_panel name="im_well_panel"> <chiclet_im_well name="im_well"> diff --git a/indra/newview/skins/minimal/xui/pt/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/pt/panel_im_control_panel.xml index 91b7d1b7cd08fefa9eb85d4d9939d11a80a058b9..d223ee9c696d2297eb5f35a8e2999cc27d208d00 100644 --- a/indra/newview/skins/minimal/xui/pt/panel_im_control_panel.xml +++ b/indra/newview/skins/minimal/xui/pt/panel_im_control_panel.xml @@ -5,7 +5,7 @@ <button label="Perfil" name="view_profile_btn"/> </layout_panel> <layout_panel name="add_friend_btn_panel"> - <button label="Adicionar amigo" name="add_friend_btn"/> + <button label="Adicionar amigo..." name="add_friend_btn"/> </layout_panel> <layout_panel name="teleport_btn_panel"> <button label="Teletransportar" name="teleport_btn" tool_tip="Oferecer teletransporte"/> diff --git a/indra/newview/skins/minimal/xui/pt/panel_people.xml b/indra/newview/skins/minimal/xui/pt/panel_people.xml index 935ade2177b838ed4f04ed7d898be7f2a8de6c57..d46c440eb966d738d2f86635de8a4c101ade417f 100644 --- a/indra/newview/skins/minimal/xui/pt/panel_people.xml +++ b/indra/newview/skins/minimal/xui/pt/panel_people.xml @@ -52,6 +52,9 @@ Em busca de alguém para conversar? Confira o botão Destinos abaixo. <layout_panel name="chat_btn_lp"> <button label="MI" name="im_btn" tool_tip="Abrir sessão de mensagem instantânea"/> </layout_panel> + <layout_panel name="chat_btn_lp"> + <button label="Ligar" name="call_btn" tool_tip="Ligar para este residente"/> + </layout_panel> <layout_panel name="chat_btn_lp"> <button label="Teletransportar" name="teleport_btn" tool_tip="Oferecer teletransporte"/> </layout_panel> diff --git a/scripts/gpu_table_tester b/scripts/gpu_table_tester old mode 100644 new mode 100755