diff --git a/.hgtags b/.hgtags
index aaca037e2b..b4daca0195 100644
--- a/.hgtags
+++ b/.hgtags
@@ -133,3 +133,4 @@ dac76a711da5f1489a01c1fa62ec97d99c25736d 2.6.6-release
e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb DRTVWR-63_2.7.2-beta1
e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb 2.7.2-beta1
6a3e7e403bd19e45fdfc2fcc716867af3ab80861 2.7.3-start
+6af10678de4736222b2c3f7e010e984fb5b327de 2.7.4-start
diff --git a/BuildParams b/BuildParams
index 15018bf37e..2e0e74ab70 100644
--- a/BuildParams
+++ b/BuildParams
@@ -101,6 +101,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
# ========================================
@@ -177,9 +187,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 ec52d6e331..63701dae79 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -18,9 +18,9 @@
archivenamedarwin
@@ -30,9 +30,9 @@
archivenamelinux
@@ -42,9 +42,9 @@
archivenamewindows
@@ -1290,9 +1290,9 @@
archivenamelinux
@@ -1524,7 +1524,7 @@
hashbb0abe962b3b8208ed2dab0424aab33durl
- http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-pcre/rev/228822/arch/Linux/installer/pcre-7.6-linux-20110504.tar.bz2
+ http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-pcre/rev/228822/arch/Linux/installer/pcre-7.6-linux-20110504.tar.bz2namelinux
diff --git a/doc/contributions.txt b/doc/contributions.txt
index daaffe2dee..b744f4db3e 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -442,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
@@ -851,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 3401cb57b6..140333de07 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 5be5ecc492..bf62600514 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 8ba97d7730..b2c495d093 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/llversionviewer.h b/indra/llcommon/llversionviewer.h
index fa92a3a75b..cfafbf0470 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 = 4;
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 fdfc24f8b7..e5ca47da69 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 LLOctreeNode;
@@ -74,6 +76,7 @@ template
class LLOctreeNode : public LLTreeNode
{
public:
+
typedef LLOctreeTraveler oct_traveler;
typedef LLTreeTraveler tree_traveler;
typedef typename std::set > element_list;
@@ -294,8 +297,8 @@ public:
//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 c504215ee5..8c81f27784 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 @@ public:
}
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 vertex_data;
diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h
index 01bfbd858b..f67f8f644d 100644
--- a/indra/llmath/llvolume.h
+++ b/indra/llmath/llvolume.h
@@ -690,6 +690,9 @@ public:
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 @@ public:
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 @@ public:
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 @@ public:
// 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 5d03615e53..6133f50637 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 8dc86601e6..f94ee1ed22 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/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp
index 57ac7a143f..0463d5364b 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& face_list, std::vector& materials, domTrianglesRef& tri)
@@ -227,8 +234,12 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector& 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& 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& 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& 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& 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& 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& fac
}
}
- if (cur_idx != vert_idx.size())
- {
- llerrs << "WTF?" << llendl;
- }
-
//build vertex array from map
std::vector new_verts;
new_verts.resize(vert_idx.size());
@@ -717,7 +741,7 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector& 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 23f4b5cb42..cd9f76fcb7 100644
--- a/indra/llprimitive/llmodel.h
+++ b/indra/llprimitive/llmodel.h
@@ -73,6 +73,7 @@ public:
{
NO_ERRORS = 0,
VERTEX_NUMBER_OVERFLOW, //vertex number is >= 65535.
+ BAD_ELEMENT,
INVALID_STATUS
} ;
@@ -106,6 +107,7 @@ public:
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 a460912e70..a3aed4dd8a 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)
- {
- gFailLog << "Texture matrix stack corrupted." << std::endl;
- }
- }
-
- 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)
- {
- gFailLog << "Texture matrix in channel " << i << " corrupt." << std::endl;
- }
- }
-
-
- for (S32 j = (i == 0 ? 1 : 0);
- j < (gGLManager.mHasTextureRectangle ? 9 : 8); j++)
- {
- if (glIsEnabled(value[j]))
+ if (stackDepth != 1)
{
error = TRUE;
- LL_WARNS("RenderState") << "Texture channel " << i << " still has " << label[j] << " enabled." << LL_ENDL;
+ LL_WARNS("RenderState") << "Texture matrix stack corrupted." << LL_ENDL;
+
if (gDebugSession)
{
- gFailLog << "Texture channel " << i << " still has " << label[j] << " enabled." << std::endl;
+ gFailLog << "Texture matrix stack corrupted." << std::endl;
}
}
+
+ 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)
+ {
+ 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();
+ }
+
+ 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)
+ {
+ gFailLog << "Texture matrix " << i << " is not identity." << std::endl;
+ }
+ }
}
- 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 1d7ab188fc..d1bee00161 100644
--- a/indra/llrender/llgl.h
+++ b/indra/llrender/llgl.h
@@ -83,10 +83,12 @@ public:
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 @@ public:
BOOL mHasDrawBuffers;
BOOL mHasDepthClamp;
BOOL mHasTextureRectangle;
+ BOOL mHasTextureMultisample;
+ S32 mMaxSampleMaskWords;
+ S32 mMaxColorTextureSamples;
+ S32 mMaxDepthTextureSamples;
+ S32 mMaxIntegerSamples;
// Other extensions.
BOOL mHasAnisotropic;
@@ -139,6 +146,7 @@ public:
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 d8140a124d..f35f329f00 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 257bcd9380..8e99f62de6 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 * attributes,
// Create program
mProgramObject = glCreateProgramObjectARB();
- // Attach existing objects
- if (!LLShaderMgr::instance()->attachShaderFeatures(this))
- {
- return FALSE;
- }
-
+ //compile new source
vector< pair >::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 * 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 * 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 * 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 d46ddbbe18..4922eb6d67 100644
--- a/indra/llrender/llglslshader.h
+++ b/indra/llrender/llglslshader.h
@@ -45,6 +45,8 @@ public:
bool hasObjectSkinning;
bool hasAtmospherics;
bool hasGamma;
+ S32 mIndexedTextureChannels;
+ bool disableTextureIndex;
// char numLights;
@@ -64,6 +66,8 @@ public:
LLGLSLShader();
+ static GLhandleARB sCurBoundShader;
+
void unload();
BOOL createShader(std::vector * attributes,
std::vector * uniforms);
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index d408077c68..60a5962234 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 6c980984c0..2cfb15b0d9 100644
--- a/indra/llrender/llimagegl.h
+++ b/indra/llrender/llimagegl.h
@@ -98,7 +98,7 @@ public:
// 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 c37139ac4c..6a3f186531 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 7ba14f7b40..41e7b35341 100644
--- a/indra/llrender/llrender.h
+++ b/indra/llrender/llrender.h
@@ -57,6 +57,7 @@ public:
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 da1e94df64..b6463309e1 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);
+#ifdef GL_ARB_texture_multisample
+ if (mSamples > 1)
+ {
+ glTexImage2DMultisample(LLTexUnit::getInternalType(mUsage), mSamples, color_fmt, mResX, mResY, GL_TRUE);
+ }
+ else
+#else
+ llassert_always(mSamples <= 1);
+#endif
+ {
+ LLImageGL::setManualImage(LLTexUnit::getInternalType(mUsage), 0, color_fmt, mResX, mResY, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+ }
+
stop_glerror();
- if (offset == 0)
- {
- gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR);
- }
- else
- { //don't filter data attachments
- gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT);
- }
- if (mUsage != LLTexUnit::TT_RECT_TEXTURE)
- {
- gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_MIRROR);
- }
- else
- {
- // ATI doesn't support mirrored repeat for rectangular textures.
- gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
+ 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);
- }
-
- check_framebuffer_status();
-
- stop_glerror();
+ if (mTex.empty())
+ { //no color buffer to draw to
+ glDrawBuffer(GL_NONE);
+ glReadBuffer(GL_NONE);
}
+
+ check_framebuffer_status();
+
+ 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 12dd1c8b90..094b58b562 100644
--- a/indra/llrender/llrendertarget.h
+++ b/indra/llrender/llrendertarget.h
@@ -71,10 +71,7 @@ public:
//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 @@ public:
static LLRenderTarget* getCurrentBoundTarget() { return sBoundTarget; }
protected:
- friend class LLMultisampleBuffer;
U32 mResX;
U32 mResY;
std::vector mTex;
@@ -152,26 +148,8 @@ protected:
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 98a0a93084..bdc103b917 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::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 c54c4608d7..2f30103811 100644
--- a/indra/llrender/llshadermgr.h
+++ b/indra/llrender/llshadermgr.h
@@ -43,7 +43,7 @@ public:
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 @@ public:
std::vector mReservedUniforms;
+ //preprocessor definitions (name/value)
+ std::map mDefinitions;
+
protected:
// our parameter manager singleton instance
diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp
index 8c9171ccf4..4a0b964e61 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(src);
mAlignedOffset = mMappedData - src;
stop_glerror();
}
- }
-
-
- if (!mMappedData)
- {
- log_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;
+ //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(!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 << "Invalid GL vertex buffer bound: " << buff << llendl;
+ }
- llerrs << "glMapBuffer returned NULL (no vertex data)" << llendl;
- }
- else
- {
- 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(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(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 struct VertexBufferStrider
typedef LLStrider 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 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 struct VertexBufferStrider
}
};
-bool LLVertexBuffer::getVertexStrider(LLStrider& strider, S32 index)
+bool LLVertexBuffer::getVertexStrider(LLStrider& strider, S32 index, S32 count, bool map_range)
{
- return VertexBufferStrider::get(*this, strider, index);
+ return VertexBufferStrider::get(*this, strider, index, count, map_range);
}
-bool LLVertexBuffer::getIndexStrider(LLStrider& strider, S32 index)
+bool LLVertexBuffer::getIndexStrider(LLStrider& strider, S32 index, S32 count, bool map_range)
{
- return VertexBufferStrider::get(*this, strider, index);
+ return VertexBufferStrider::get(*this, strider, index, count, map_range);
}
-bool LLVertexBuffer::getTexCoord0Strider(LLStrider& strider, S32 index)
+bool LLVertexBuffer::getTexCoord0Strider(LLStrider& strider, S32 index, S32 count, bool map_range)
{
- return VertexBufferStrider::get(*this, strider, index);
+ return VertexBufferStrider::get(*this, strider, index, count, map_range);
}
-bool LLVertexBuffer::getTexCoord1Strider(LLStrider& strider, S32 index)
+bool LLVertexBuffer::getTexCoord1Strider(LLStrider& strider, S32 index, S32 count, bool map_range)
{
- return VertexBufferStrider::get(*this, strider, index);
-}
-/*bool LLVertexBuffer::getTexCoord2Strider(LLStrider& strider, S32 index)
-{
- return VertexBufferStrider::get(*this, strider, index);
-}
-bool LLVertexBuffer::getTexCoord3Strider(LLStrider& strider, S32 index)
-{
- return VertexBufferStrider::get(*this, strider, index);
-}*/
-bool LLVertexBuffer::getNormalStrider(LLStrider& strider, S32 index)
-{
- return VertexBufferStrider::get(*this, strider, index);
-}
-bool LLVertexBuffer::getBinormalStrider(LLStrider& strider, S32 index)
-{
- return VertexBufferStrider::get(*this, strider, index);
-}
-bool LLVertexBuffer::getColorStrider(LLStrider& strider, S32 index)
-{
- return VertexBufferStrider::get(*this, strider, index);
-}
-bool LLVertexBuffer::getWeightStrider(LLStrider& strider, S32 index)
-{
- return VertexBufferStrider::get(*this, strider, index);
+ return VertexBufferStrider::get(*this, strider, index, count, map_range);
}
-bool LLVertexBuffer::getWeight4Strider(LLStrider& strider, S32 index)
+bool LLVertexBuffer::getNormalStrider(LLStrider& strider, S32 index, S32 count, bool map_range)
{
- return VertexBufferStrider::get(*this, strider, index);
+ return VertexBufferStrider::get(*this, strider, index, count, map_range);
+}
+bool LLVertexBuffer::getBinormalStrider(LLStrider& strider, S32 index, S32 count, bool map_range)
+{
+ return VertexBufferStrider::get(*this, strider, index, count, map_range);
+}
+bool LLVertexBuffer::getColorStrider(LLStrider& strider, S32 index, S32 count, bool map_range)
+{
+ return VertexBufferStrider::get(*this, strider, index, count, map_range);
+}
+bool LLVertexBuffer::getWeightStrider(LLStrider& strider, S32 index, S32 count, bool map_range)
+{
+ return VertexBufferStrider::get(*this, strider, index, count, map_range);
}
-bool LLVertexBuffer::getClothWeightStrider(LLStrider& strider, S32 index)
+bool LLVertexBuffer::getWeight4Strider(LLStrider& strider, S32 index, S32 count, bool map_range)
{
- return VertexBufferStrider::get(*this, strider, index);
+ return VertexBufferStrider::get(*this, strider, index, count, map_range);
+}
+
+bool LLVertexBuffer::getClothWeightStrider(LLStrider& strider, S32 index, S32 count, bool map_range)
+{
+ return VertexBufferStrider::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 a9f22193f8..aa5df305a6 100644
--- a/indra/llrender/llvertexbuffer.h
+++ b/indra/llrender/llvertexbuffer.h
@@ -77,6 +77,18 @@ protected:
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 @@ public:
TYPE_CLOTHWEIGHT,
TYPE_MAX,
TYPE_INDEX,
+
+ //no actual additional data, but indicates position.w is texture index
+ TYPE_TEXTURE_INDEX,
};
enum {
MAP_VERTEX = (1<getNormalStrider(norms);
// setVertsNorms(verts, norms);
// vb->unmapBuffer();
- bool getVertexStrider(LLStrider& strider, S32 index=0);
- bool getIndexStrider(LLStrider& strider, S32 index=0);
- bool getTexCoord0Strider(LLStrider& strider, S32 index=0);
- bool getTexCoord1Strider(LLStrider& strider, S32 index=0);
- bool getNormalStrider(LLStrider& strider, S32 index=0);
- bool getBinormalStrider(LLStrider& strider, S32 index=0);
- bool getColorStrider(LLStrider& strider, S32 index=0);
- bool getWeightStrider(LLStrider& strider, S32 index=0);
- bool getWeight4Strider(LLStrider& strider, S32 index=0);
- bool getClothWeightStrider(LLStrider& strider, S32 index=0);
+ bool getVertexStrider(LLStrider& strider, S32 index=0, S32 count = -1, bool map_range = false);
+ bool getIndexStrider(LLStrider& strider, S32 index=0, S32 count = -1, bool map_range = false);
+ bool getTexCoord0Strider(LLStrider& strider, S32 index=0, S32 count = -1, bool map_range = false);
+ bool getTexCoord1Strider(LLStrider& strider, S32 index=0, S32 count = -1, bool map_range = false);
+ bool getNormalStrider(LLStrider& strider, S32 index=0, S32 count = -1, bool map_range = false);
+ bool getBinormalStrider(LLStrider& strider, S32 index=0, S32 count = -1, bool map_range = false);
+ bool getColorStrider(LLStrider& strider, S32 index=0, S32 count = -1, bool map_range = false);
+ bool getWeightStrider(LLStrider& strider, S32 index=0, S32 count = -1, bool map_range = false);
+ bool getWeight4Strider(LLStrider& strider, S32 index=0, S32 count = -1, bool map_range = false);
+ bool getClothWeightStrider(LLStrider& 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 @@ public:
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 @@ protected:
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 mDirtyRegions; //vector of dirty regions to rebuild
+ std::vector mMappedVertexRegions;
+ std::vector mMappedIndexRegions;
public:
static S32 sCount;
diff --git a/indra/llui/llresmgr.cpp b/indra/llui/llresmgr.cpp
index 39385786bc..820e7cb26a 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 6b4e9cf923..15a7438ec9 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 8960971594..d197084e38 100644
--- a/indra/llui/llspinctrl.h
+++ b/indra/llui/llspinctrl.h
@@ -44,6 +44,7 @@ public:
Optional label_width;
Optional decimal_digits;
Optional allow_text_entry;
+ Optional label_wrap;
Optional text_enabled_color;
Optional text_disabled_color;
diff --git a/indra/newview/app_settings/logcontrol.xml b/indra/newview/app_settings/logcontrol.xml
index 937c4e4c6a..9f4e89691f 100644
--- a/indra/newview/app_settings/logcontrol.xml
+++ b/indra/newview/app_settings/logcontrol.xml
@@ -20,6 +20,7 @@
tagsAppInit
+ CapabilitiesSystemInfoTextureCacheAppCache
@@ -43,6 +44,7 @@
+ Capabilities
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
old mode 100644
new mode 100755
index fc7fd2dd8a..76fecdf05e
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3058,6 +3058,17 @@
Value1
+ EnableGestureSounds
+
EnableMouselook
- FirstLoginThisInstall
-
FirstName
- MeshUseWholeModelUpload
+ MeshUploadLogXML
+ MeshUploadFakeErrors
+
MigrateCacheDirectory
- RenderAnisotropic
+
+ OctreeMaxNodeCapacity
+
+
+ OctreeStaticObjectSizeFactor
+
+
+ OctreeAlphaDistanceFactor
+
+
+ OctreeAttachmentSizeFactor
+
+
+ OctreeDistanceFactor
+
+
+ RenderAnisotropicRenderAvatarVP
+ RenderMaxTextureIndex
+
RenderDebugTextureBindRenderMaxVBOSizeRenderUseTriStrips
-
- RenderUseTriStripsRenderUseStreamVBOMeshThreadCount
+ NearbyListShowMap
+
NearbyListShowIconsWaterEditPresets
-
+
@@ -1141,6 +1287,9 @@
Tilbehør
+
+ Meshes
+
Venner
@@ -1819,12 +1968,6 @@ Forventet .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
Shift+
-
- Esc
-
-
- Hjem
-
Fil gemt
@@ -1942,6 +2085,9 @@ Forventet .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
Andet
+
+ Leje
+
Enhver
@@ -2178,6 +2324,114 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
Kartoffelnæse
+
+ Bryst fylde
+
+
+ Brystudjævning
+
+
+ Bryst tyngde
+
+
+ Bryst inerti
+
+
+ Maks. effekt
+
+
+ Fjeder
+
+
+ Øg
+
+
+ Dæmpning
+
+
+ Maks. effekt
+
+
+ Fjeder
+
+
+ Øg
+
+
+ Dæmpning
+
+
+ Maks. effekt
+
+
+ Fjeder
+
+
+ Øg
+
+
+ Dæmpning
+
+
+ Mave omfang
+
+
+ maveudjævning
+
+
+ Mave tyngde
+
+
+ Mave inerti
+
+
+ Maks. effekt
+
+
+ Fjeder
+
+
+ Øg
+
+
+ Dæmpning
+
+
+ Bagdel omfang
+
+
+ Bagdelsudjævning
+
+
+ Bagdel tyngde
+
+
+ Bagdel modstand
+
+
+ Maks. effekt
+
+
+ Fjeder
+
+
+ Øg
+
+
+ Dæmpning
+
+
+ Maks. effekt
+
+
+ Fjeder
+
+
+ Øg
+
+
+ Dæmpning
+
Buskede øjenbryn
@@ -2187,6 +2441,9 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
Størrelse bagdel
+
+ Bagdel tyngde
+
Tournure
@@ -3540,6 +3797,9 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
Initialisering af session er "timed out"
+
+ Hjemmeposition sat.
+
http://secondlife.com/landing/voicemorphing
@@ -3662,6 +3922,9 @@ Krænkelsesanmeldelse
Ny tatovering
+
+ Ny fysik
+
Kan ikke tages på
@@ -3861,7 +4124,7 @@ Krænkelsesanmeldelse
Beskeder
-
+
Chat
@@ -3873,4 +4136,348 @@ Krænkelsesanmeldelse
Der er ingen genstande i dette sæt
+
+ Vælg en editor via opsætningen for Ekstern editor.
+
+
+ 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")
+
+
+ Fejl ved håndtering af kommando til ekstern editor.
+
+
+ Den eksterne editor kunne ikke startes.
+
+
+ Esc
+
+
+ Space
+
+
+ Enter
+
+
+ Tab
+
+
+ Ins
+
+
+ Del
+
+
+ Backsp
+
+
+ Shift
+
+
+ Ctrl
+
+
+ Alt
+
+
+ CapsLock
+
+
+ Hjem
+
+
+ End
+
+
+ PgUp
+
+
+ PgDn
+
+
+ F1
+
+
+ F2
+
+
+ F3
+
+
+ F4
+
+
+ F5
+
+
+ F6
+
+
+ F7
+
+
+ F8
+
+
+ F9
+
+
+ F10
+
+
+ F11
+
+
+ F12
+
+
+ Tilføj
+
+
+ Træk fra
+
+
+ Multiplicer
+
+
+ Divider
+
+
+ PAD_DIVIDE
+
+
+ PAD_LEFT
+
+
+ PAD_RIGHT
+
+
+ PAD_DOWN
+
+
+ PAD_UP
+
+
+ PAD_HOME
+
+
+ PAD_END
+
+
+ PAD_PGUP
+
+
+ PAD_PGDN
+
+
+ PAD_CENTER
+
+
+ PAD_INS
+
+
+ PAD_DEL
+
+
+ PAD_Enter
+
+
+ PAD_BUTTON0
+
+
+ PAD_BUTTON1
+
+
+ PAD_BUTTON2
+
+
+ PAD_BUTTON3
+
+
+ PAD_BUTTON4
+
+
+ PAD_BUTTON5
+
+
+ PAD_BUTTON6
+
+
+ PAD_BUTTON7
+
+
+ PAD_BUTTON8
+
+
+ PAD_BUTTON9
+
+
+ PAD_BUTTON10
+
+
+ PAD_BUTTON11
+
+
+ PAD_BUTTON12
+
+
+ PAD_BUTTON13
+
+
+ PAD_BUTTON14
+
+
+ PAD_BUTTON15
+
+
+ -
+
+
+ =
+
+
+ `
+
+
+ ;
+
+
+ [
+
+
+ ]
+
+
+ \
+
+
+ 0
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ 4
+
+
+ 5
+
+
+ 6
+
+
+ 7
+
+
+ 8
+
+
+ 9
+
+
+ A
+
+
+ B
+
+
+ C
+
+
+ D
+
+
+ E
+
+
+ F
+
+
+ G
+
+
+ H
+
+
+ I
+
+
+ J
+
+
+ K
+
+
+ L
+
+
+ M
+
+
+ N
+
+
+ O
+
+
+ P
+
+
+ Q
+
+
+ R
+
+
+ S
+
+
+ T
+
+
+ U
+
+
+ V
+
+
+ W
+
+
+ X
+
+
+ Y
+
+
+ Z
+
+
+ Viser pejlelys for for partikler (blå)
+
+
+ Viser pejlelys for fysiske objekter (grøn)
+
+
+ Viser pejlelys for "scriptede" objekter (rød)
+
+
+ Viser pejlelys for "scriptede" objekter med berøringsfunktion (rød)
+
+
+ Viser pejlelys for lyd (gul)
+
+
+ Viser pejlelys for media (hvid)
+
+
+ Skjuler partikler
+
diff --git a/indra/newview/skins/default/xui/de/floater_about.xml b/indra/newview/skins/default/xui/de/floater_about.xml
index d15ab105c2..578dcd50e5 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
- 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.
-Voice-Chat-Audiocoding: Polycom(R) Siren14(TM)
-(ITU-T Empf.G.722.1 Anhang C)
+Alle Rechte vorbehalten. Details siehe licenses.txt.
+
+Audiocodierung für Voice-Chat: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
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 ccafa11cf4..bd6ace6bda 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 @@
- [NAME] enthält:
+ <nolink>[NAME]</nolink> enthält:
[AMOUNT] L$ von [NAME] kaufen?
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 0000000000..8b1313c7b5
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_import_collada.xml
@@ -0,0 +1,23 @@
+
+
+
+ Netze: [COUNT]
+
+
+ Texturen: [COUNT]
+
+
+ Status: [STATUS]
+
+
+
+
+ Inaktiv
+
+
+ [NAME] wird hochgeladen
+
+
+ Objektname [NAME] wird erstellt
+
+
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 9cc5b92daf..d63426d684 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 @@
+
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 0000000000..83c51132ee
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_model_preview.xml
@@ -0,0 +1,231 @@
+
+
+
+ Inaktiv
+
+
+ Laden...
+
+
+ Netze werden generiert...
+
+
+ Fehler: Anzahl von Vertices überschreitet 65534. Operation abgebrochen.
+
+
+ Hoch
+
+
+ Mittel
+
+
+ Niedrig
+
+
+ Niedrigste
+
+
+ Ausliefern
+
+
+ --
+
+
+ Keine
+
+
+ Detailstufen haben unterschiedliche Anzahl texturfähiger Flächen.
+
+
+ Detailstufen haben unterschiedliche Anzahl von Netzinstanzen.
+
+
+ Detailstufe hat zu viele Vertices.
+
+
+ Erforderliche Detailstufe fehlt.
+
+
+ Alle
+
+
+ Analyse läuft...
+
+
+ Vereinfachung läuft...
+
+
+ Name:
+
+
+ Vorschau:
+
+
+
+ Detailstufe: Hoch
+
+
+ Detailstufe: Mittel
+
+
+ Detailstufe: Niedrig
+
+
+ Detailstufe: Niedrigste
+
+
+
+
+ Ressourcenkosten: [COST]
+
+
+ Physikkosten: [COST]
+
+
+ Gebühr für Hochladen: --
+
+
+
+ [STATUS]
+
+
+
+
+
+
+
+ Detailstufe auswählen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Detailstufe: [DETAIL]
+
+
+
+
+
+
+
+
+
+ Dreiecklimit
+
+
+ Fehlerschwelle
+
+
+
+ Konstruktionsoperator:
+
+
+ Warteschlangenmodus:
+
+
+
+ Kantenkollaps
+
+
+ Halbkantenkollaps
+
+
+
+
+ Strikt
+
+
+ Locker
+
+
+ Unabhängig
+
+
+
+ Grenzenmodus:
+
+
+ Sharetoleranz:
+
+
+
+ Freigeben
+
+
+ Sperren
+
+
+
+ Knitterwinkel:
+
+
+
+
+
+
+
+
+
+
+
+ Niedrigste
+
+
+ Niedrig
+
+
+ Mittel
+
+
+ Hoch
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dreiecke: [TRIANGLES]
+
+
+ Vertices: [POINTS]
+
+
+ Hüllen: [HULLS]
+
+
+
+
+
+
+ [X] x [Y] x [Z] m
+
+
+
+
+
+
+
+
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 0000000000..2c7b45906e
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_model_wizard.xml
@@ -0,0 +1,241 @@
+
+
+
+
+
+
+
+
+
+
+
+ Modell hochladen
+
+
+
+ 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).
+
+
+
+ Dateiname:
+
+
+
+ X: Y: Z:
+
+
+ | |
+
+
+
+
+
+
+ Optimieren
+
+
+
+ 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.
+
+
+
+ Detailstufe generieren: Hoch
+
+
+ Detailstufe generieren: Mittel
+
+
+ Detailstufe generieren: Niedrig
+
+
+ Detailstufe generieren: Niedrigste
+
+
+
+
+ Modellvorschau:
+
+
+
+ Hoch
+
+
+ Mittel
+
+
+ Niedrig
+
+
+ Niedrigste
+
+
+
+ Ressourcenkosten: [COST]
+
+
+ X: Y: Z:
+
+
+ | |
+
+
+
+
+
+
+ Physik
+
+
+
+ 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:
+
+
+
+ Ressourcenkosten: [COST]
+
+
+
+
+
+
+ Physik
+
+
+
+ Überprüfen Sie die physische Form unten und klicken Sie dann auf „Weiter“. Um die physische Form zu ändern, klicken Sie auf „Zurück“.
+
+
+
+ Modellvorschau:
+
+
+
+ Hoch
+
+
+ Mittel
+
+
+ Niedrig
+
+
+ Niedrigste
+
+
+
+ X: Y: Z:
+
+
+ | |
+
+
+ Ressourcenkosten: [COST]
+
+
+
+
+
+
+ Überprüfen
+
+
+
+ Überprüfen Sie die Details unten und klicken Sie dann auf „Hochladen“, um das Modell hochzuladen. Die Kosten werden von Ihrem L$-Kontostand abgezogen.
+
+
+
+ Modellvorschau:
+
+
+
+ Hoch
+
+
+ Mittel
+
+
+ Niedrig
+
+
+ Niedrigste
+
+
+
+ X: Y: Z:
+
+
+ | |
+
+
+
+ Ressourcenkosten: [COST]
+
+
+ Physikkosten: [COST]
+
+
+
+
+
+ Upload abgeschlossen
+
+
+
+ Herzlichen Glückwunsch! Ihr Modell wurde erfolgreich hochgeladen. Sie finden das Modell im Objektordner Ihres Inventars.
+
+
+
+
+
+
+
+
+
+ Inaktiv
+
+
+ Laden...
+
+
+ Netze werden generiert...
+
+
+ Fehler: Anzahl von Vertices überschreitet 65534. Operation abgebrochen.
+
+
+ Hoch
+
+
+ Mittel
+
+
+ Niedrig
+
+
+ Niedrigste
+
+
+ Ausliefern
+
+
+ --
+
+
+ Keine
+
+
+ Detailstufen haben unterschiedliche Anzahl texturfähiger Flächen.
+
+
+ Detailstufen haben unterschiedliche Anzahl von Netzinstanzen.
+
+
+ Detailstufe hat zu viele Vertices.
+
+
+ Erforderliche Detailstufe fehlt.
+
+
+ Alle
+
+
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 6d3635fa8d..76dc623ca4 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 @@
Ersetzen mit:
-
+
Tastenkürzel:
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 0000000000..bdd772a9c2
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_price_for_listing.xml
@@ -0,0 +1,18 @@
+
+
+
+ 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.
+
+
+ Anzeigenpreis:
+
+
+ L$
+
+
+
+
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 0000000000..7575ad9e2a
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_sound_devices.xml
@@ -0,0 +1,7 @@
+
+
+
+ Voice-Chat
+
+
+
diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
index d95d674df2..258e67a138 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 @@
Primitive: [COUNT]
+
+ Verknüpfte Sätze: [COUNT]
+
+
+ Kosten: [COST] / [PHYSICS]
+
+
+ Objekte: [COUNT]
+
+
+ Kosten: [COST] / [PHYSICS]
+
@@ -269,15 +281,6 @@
-
-
-
-
-
-
-
-
-
Pfadschnitt (Anfang/Ende)
@@ -353,9 +356,19 @@
+
+
+ Keine
+
+
+ Prim
+
+
+ Konvexe Hülle
+
Wählen Sie nur einen einzelnen Baustein aus, um Eigenschaften zu bearbeiten.
@@ -380,6 +393,23 @@
+
+ Art der physischen Form:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 165e9a9264..af70c08ba1 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 @@
+
+
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 0000000000..e1faeedcde
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_model_import_gear_default.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index 9d5a69105d..05f9f94c8a 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 @@
+
+
@@ -159,7 +161,7 @@
-
+
@@ -218,6 +220,7 @@
+
@@ -228,6 +231,7 @@
+
@@ -253,8 +257,10 @@
+
+
@@ -262,9 +268,12 @@
+
+
+
@@ -272,7 +281,6 @@
-
@@ -371,6 +379,7 @@
+
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index c172f7ea2d..75f26c6990 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.
Keine Berechtigung zum Rezzen von Objekten.
+
+ Senden von IMs über übergeordnete Grundbesitze hinweg nicht möglich.
+
+
+ Inventarübertragung über übergeordnete Grundbesitze hinweg nicht möglich.
+
Notizkarten-Asset konnte nicht geladen werden.
@@ -2749,6 +2755,10 @@ Diese werden für ein paar Sekunden sicherheitshalber gesperrt.
Sie wurden vom Moderator stummgeschaltet.
+
+ Das Hochladen kostet [PRICE] L$. Möchten Sie fortfahren?
+
+
Möchten Sie Ihre Teleport-Liste löschen?
@@ -2760,6 +2770,9 @@ Die Schaltfläche wird angezeigt, wenn genügend Platz vorhanden ist.
Wählen Sie Einwohner aus, für die Sie das Objekt freigeben möchten.
+
+ [LABEL] konnte nicht hochgeladen werden: [MESSAGE] [IDENTIFIER] [INVALIDITY_IDENTIFIER]
+
Möchten Sie wirklich die folgenden Objekte:
@@ -2776,6 +2789,19 @@ für folgende Einwohner freigeben:
Übertragung an Gruppe ist fehlgeschlagen.
+
+ Die Parzelle [PARCEL_NAME] kann zurzeit nicht aufgegeben werden.
+
+
+ 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.
+
+
+ Die [AREA] m² große Parzelle „[PARCEL_NAME]“ wurde freigegeben.
+
+Sie steht jetzt zum Verkauf an alle zur Verfügung.
+
(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.
+
+ 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.
+
+
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.
@@ -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?
-
- - Ihre CPU-Geschwindigkeit entspricht nicht den Mindestanforderungen.
-
+
+ Die Inventaranzeige ist nur im Modus „Erweitert“ möglich. Möchten Sie sich abmelden und den Modus wechseln?
+
+
+
+ Das Fenster zum Bearbeiten des Aussehens ist nur im Modus „Erweitert“ verfügbar. Möchten Sie sich abmelden und den Modus wechseln?
+
+
+
+ Die Suche ist nur im Modus „Erweitert“ möglich. Möchten Sie sich abmelden und den Modus wechseln?
+
+
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_preferences_colors.xml b/indra/newview/skins/default/xui/de/panel_preferences_colors.xml
index 22681ffdf2..19c5efcb05 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 @@
Fehler
+
+ Direkt
+
Eigentümer
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 78cb03a50a..b874074c79 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 @@
+
+
+
+
+
+ Schatten:
+
+
+
+
+
+
Wasserreflexionen:
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 be8507ebbd..f383be992b 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 @@
+
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 0000000000..da20f7e214
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_sound_devices.xml
@@ -0,0 +1,19 @@
+
+
+
+ Standard
+
+
+ Eingabe
+
+
+ Meine Lautstärke:
+
+
+
+ Bitte warten
+
+
+ Ausgabe
+
+
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index f32eb21dd3..d77b4a1e44 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -130,6 +130,139 @@
http://join.secondlife.com/index.php?lang=de-DE
+
+ 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
+
+
+ Optionales Viewer-Update verfügbar: [VERSION]
+
+
+ Erforderliches Viewer-Update: [VERSION]
+
+
+ Dieser Agent ist bereits angemeldet.
+
+
+ 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.
+
+
+ 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.
+
+
+ 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.
+
+
+ Second Life ist vorübergehend wegen Wartung geschlossen.
+Nur Mitarbeiter können sich anmelden.
+Aktuelle Informationen finden Sie unter www.secondlife.com/status.
+
+
+ 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.
+
+
+ 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.
+
+
+ Ihr Konto ist erst ab
+[TIME] Pacific Time wieder verfügbar.
+
+
+ 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.
+
+
+ Nicht übereinstimmende Daten bei der Anmeldung festgestellt.
+Wenden Sie sich an support@secondlife.com.
+
+
+ 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.
+
+
+ Abmeldeanforderung führte zu einem Simulatorfehler.
+
+
+ Das System meldet Sie gerade ab.
+Ihr Konto ist erst ab
+[TIME] Pacific Time wieder verfügbar.
+
+
+ Es kann keine gültige Sitzung erstellt werden.
+
+
+ Es kann keine Simulatorverbindung hergestellt werden.
+
+
+ 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.
+
+
+ Falsche Parameter.
+Wenn Sie der Ansicht sind, dass Sie diese Meldung fälschlicherweise erhalten haben, wenden Sie sich an support@secondlife.com.
+
+
+ Vorname muss alphanumerisch sein.
+Wenn Sie der Ansicht sind, dass Sie diese Meldung fälschlicherweise erhalten haben, wenden Sie sich an support@secondlife.com.
+
+
+ Nachname muss alphanumerisch sein.
+Wenn Sie der Ansicht sind, dass Sie diese Meldung fälschlicherweise erhalten haben, wenden Sie sich an support@secondlife.com.
+
+
+ Die Region wird gerade offline geschaltet.
+Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
+
+
+ Agent nicht in Region.
+Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
+
+
+ Die Region war gerade dabei, eine andere Sitzung anzumelden.
+Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
+
+
+ Die Region war gerade dabei, die vorherige Sitzung abzumelden.
+Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
+
+
+ Die Region ist noch immer dabei, die vorherige Sitzung abzumelden.
+Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
+
+
+ Die Region hat soeben die letzte Sitzung abgemeldet.
+Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
+
+
+ Die Region hat den Abmeldevorgang gestartet.
+Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
+
+
+ Das System hat begonnen, Ihre letzte Sitzung abzumelden.
+Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
+
In dieser Region kann es zu Problemen kommen. Bitte überprüfen Sie Ihre Internetverbindung.
@@ -441,6 +574,9 @@
Link zu Ordner
+
+ mesh
+
(Aussehen wird bearbeitet)
@@ -1180,6 +1316,9 @@
Zubehör
+
+ Netze
+
Freunde
@@ -3762,6 +3901,9 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
Die Initialisierung der Sitzung ist fehlgeschlagen
+
+ Position für Zuhause festgelegt.
+
http://secondlife.com/landing/voicemorphing
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 dce55dae12..f58595b3c5 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">
Idle
+ Dae parsing issue - see log for details.Loading...Generating Meshes...Error: Vertex number is more than 65534, aborted!
+ Error: element is invalidHighMediumLow
@@ -83,6 +85,20 @@
+
+
+ I confirm that I have the appropriate rights to the material contained in this model. [secondlife:///app/floater/learn_more Learn more][STATUS]
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 47b2e5fd79..8603682e3a 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
Idle
+ Dae parsing issue - see log for details.Loading...Generating Meshes...
- Error: Vertex number is more than 65534, aborted!
+ Error: Vertex number is more than 65534, aborted!
+ Error: element is invalidHighMediumLow
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 9f6199fada..478ae5f53f 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:
+ width="170" />
+ width="215">
Replace with:
+ width="160" />
-
-
+
+
+
+
+
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 ce96c488b4..09105c1d28
--- 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.
-
-
-
-
+
-
+
+
+
+
+
+
+
-
-
+ width="16">
+
+
-
+ FriendsAll
+ No attachments worn
+
Buy
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index 9674f73241..b2131fc038 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -2365,6 +2365,9 @@ Por favor, dirígete a la Base de Conocimientos para más detalles sobre el acce
No tienes el estado de pago adecuado para entrar a esta región.
+
+ Debes tener verificada la edad para entrar a esta región
+
Debes haber verificado tu edad para entrar a esta parcela.
diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml
index 0b14f92ae7..b29f744a68 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 @@
þ: [COUNT]
-
+
両側を延ばす
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 7dd85460a2..c6b301841a 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 @@
Trigger:
-
+
Vervangen door:
diff --git a/indra/newview/skins/default/xui/zh/floater_about.xml b/indra/newview/skins/default/xui/zh/floater_about.xml
index 229297e39b..bee940ddc1 100644
--- a/indra/newview/skins/default/xui/zh/floater_about.xml
+++ b/indra/newview/skins/default/xui/zh/floater_about.xml
@@ -13,11 +13,11 @@
[[SERVER_RELEASE_NOTES_URL] [ReleaseNotes]]
- 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]
Windows Graphics Driver Version: [GRAPHICS_DRIVER_VERSION]
@@ -25,11 +25,11 @@ Graphics Card: [GRAPHICS_CARD]
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]
(無)
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 c0c5494c91..efd8909e67 100644
--- a/indra/newview/skins/default/xui/zh/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/zh/floater_about_land.xml
@@ -81,7 +81,7 @@
分級:
- Adult
+ 成人
擁有者:
@@ -132,10 +132,10 @@
0
-
+
-
-
+
+
@@ -186,7 +186,7 @@
分級:
- Adult
+ 成人
Resale:
@@ -201,7 +201,7 @@
Land in this region may not be joined/subdivided.
-
+
[COUNT] out of [MAX] ([AVAILABLE] available)
@@ -235,24 +235,24 @@
[COUNT]
-
-
+
+
Set to group:
[COUNT]
-
-
+
+
Owned by others:
[COUNT]
-
-
+
+
Selected / sat upon:
@@ -289,7 +289,7 @@ Only large parcels can be listed in search.
Moderate Content
- Adult Content
+ 成人內容
Your parcel information or content is considered moderate.
@@ -301,41 +301,41 @@ Only large parcels can be listed in search.
(無)
- No Pushing
+ 禁止推撞
- No Pushing (Region Override)
+ 禁止推撞(地區設定覆蓋)
- Allow other Residents to:
+ 允許其他居民去:
-
-
+
+
建造:
-
+
- Object Entry:
+ 物件進入:
-
+
- Run Scripts:
+ 執行腳本:
-
+
- Land Options:
+ 土地選項:
-
-
-
+
+
+
-
+
-
+
@@ -349,7 +349,7 @@ Only large parcels can be listed in search.
-
+
@@ -365,11 +365,11 @@ Only large parcels can be listed in search.
- Snapshot:
+ 快照:
- Landing Point: [LANDING]
+ 登陸點:[LANDING]
@@ -409,7 +409,7 @@ Only large parcels can be listed in search.
- pixels
+ 像素
Options:
@@ -467,11 +467,11 @@ Only large parcels can be listed in search.
- Banned Residents
+ 被封鎖的居民
-
-
+
+
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 bcb5606b60..b5d65119f7 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.
- Unable to read animation file.
+ 無法讀取動作檔。
[STATUS]
@@ -23,7 +23,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
Cannot read constraint definition.
- Cannot open BVH file.
+ 無法開啟 BVH 檔案。
Invalid HIERARCHY header.
@@ -115,7 +115,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
描述:
-
+
@@ -182,5 +182,5 @@ Maximum animation length is [MAX_LENGTH] seconds.
We recommend BVH files exported from Poser 4.
-
+
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 2ffcaf5b55..27a4199f8c 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
- Searching...
+ 搜尋中...
- Select
+ 選擇
關閉
-
+
Type part of a person's name:
-
+
-
+
選擇一個人:
- Select a person nearby:
+ 選擇一位附近的人:
-
+
- Meters
+ 公尺
-
+
-
+
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 fb17c0bb8a..b1dc081f04 100644
--- a/indra/newview/skins/default/xui/zh/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/zh/floater_avatar_textures.xml
@@ -15,13 +15,13 @@ Textures
-
-
+
+
-
+
-
+
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 ffdd957f91..629b0d17d5 100644
--- a/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml
@@ -12,14 +12,14 @@
Finished permission change requests.
-
+
-
-
-
-
+
+
+
+
@@ -41,5 +41,5 @@
-
+
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 a00f069e6c..44d3394a52 100644
--- a/indra/newview/skins/default/xui/zh/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/zh/floater_buy_contents.xml
@@ -17,5 +17,5 @@
-
+
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 bebc17a5cc..d8e9fb0ecc 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]
- My new balance will be
+ 我的帳戶餘額將為
L$ [AMT]
@@ -58,7 +58,7 @@
You aren't buying enough L$. Please increase the amount.
-
+
Unable to Buy
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 a75d33136d..34401c11d0 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
- Your account must be upgraded to own land.
+ 你的帳戶必須要升級才能擁有土地。
- Your account can own land.
+ 你的帳戶能擁有土地。
- You hold [BUYER] m² of land.
+ 你持有 [BUYER] m² 土地。
Pay L$ [AMOUNT] to [SELLER] for this land
@@ -83,7 +83,7 @@ Try selecting a smaller area.
Buy L$ [AMOUNT] for approx. [LOCAL_AMOUNT],
- This parcel is [AMOUNT] m²
+ 這個地段為 [AMOUNT] m²
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.
- (no parcel selected)
+ (無地段被選擇)
地區:
@@ -190,7 +190,7 @@ sold with objects
Something ain't right.
-
+
Upgrade you to premium membership.
@@ -229,5 +229,5 @@ This parcel is 512 m² of land.
-
+
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 559982b6c9..ef8bc183a4 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]?
-
+
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 dea0a7c318..9968565bf2 100644
--- a/indra/newview/skins/default/xui/zh/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/zh/floater_choose_group.xml
@@ -4,5 +4,5 @@
選擇一個社團:
-
+
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 f6f2f0187d..a7ac78e419 100644
--- a/indra/newview/skins/default/xui/zh/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/zh/floater_color_picker.xml
@@ -20,7 +20,7 @@
-
+
目前顏色:
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 8adc094fca..28d2ba6ed4 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
@@ -86,7 +86,7 @@
預覽:
-
+
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 5a89ecaa82..e12fc21166 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 @@
-
+
diff --git a/indra/newview/skins/default/xui/zh/floater_gesture.xml b/indra/newview/skins/default/xui/zh/floater_gesture.xml
index 901770586a..651a976774 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 @@
-
+
載入中...
@@ -16,11 +16,11 @@
-
+
-
+
-
-
+
+
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 a501a4257a..fbe89ab2a6 100644
--- a/indra/newview/skins/default/xui/zh/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/zh/floater_god_tools.xml
@@ -1,5 +1,5 @@
-
+
@@ -55,7 +55,7 @@
Welsh
-
+
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 98e4e5c2cd..d7e9a7704c 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 @@
描述:
- Preview image as:
+ 預覽圖像為:
-
-
+
+
@@ -22,11 +22,11 @@
- Unable to read image.
+ 無法讀取圖像。
-Try saving image as 24 bit Targa (.tga).
+請嘗試儲存圖像為 24 位元 Targa(.tga)格式。
-
+
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 4f678dbd9d..123cdd9f2c 100644
--- a/indra/newview/skins/default/xui/zh/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/zh/floater_incoming_call.xml
@@ -4,10 +4,10 @@
5
- Nearby Voice Chat
+ 附近的音聊天
- anonymous
+ 匿名
通話中。
@@ -28,6 +28,6 @@
Do you want to leave [CURRENT_CHAT] and join this voice chat?
-
+
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 a442eb9cbc..a4ede92ab1 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,13 +1,13 @@
-
+
-
+
diff --git a/indra/newview/skins/default/xui/zh/floater_joystick.xml b/indra/newview/skins/default/xui/zh/floater_joystick.xml
index 83bd4e2bca..1721f7cd1e 100644
--- a/indra/newview/skins/default/xui/zh/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/zh/floater_joystick.xml
@@ -75,5 +75,5 @@
-
+
diff --git a/indra/newview/skins/default/xui/zh/floater_lagmeter.xml b/indra/newview/skins/default/xui/zh/floater_lagmeter.xml
index 261ba8ebc3..6e58e7332f 100644
--- a/indra/newview/skins/default/xui/zh/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/zh/floater_lagmeter.xml
@@ -115,7 +115,7 @@
可能原因:地區有太多移動的人
- 可能原因:太多影像計算
+ 可能原因:太多圖像計算
可能原因:模擬器負載過重
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 6c8bd76a8a..e6f6e32352 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 @@
-
+
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.
- Running
+ 執行中
- SCRIPT: [NAME]
+ 腳本:[NAME]
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 616c326d6b..6e75016fad 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 @@
-
+
http://www.secondlife.com
@@ -8,22 +8,22 @@
-
-
-
+
+
+
-
-
+
+
-
+
-
-
+
+
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 821b93c06f..f42c0af3d9 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 @@
-
+
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 3fa62b1b60..93c1b58df6 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]
-
+
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 a2a56f769e..7d76f4de08 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
-
+
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 bed7c20ba5..f0c34acb06 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 @@
-
+
diff --git a/indra/newview/skins/default/xui/zh/floater_openobject.xml b/indra/newview/skins/default/xui/zh/floater_openobject.xml
index 024ef0b102..61ac3cb1fc 100644
--- a/indra/newview/skins/default/xui/zh/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/zh/floater_openobject.xml
@@ -1,5 +1,5 @@
-
+
[DESC]:
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 feb68f2b0f..e33183a0dc 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,7 +1,7 @@
-
+
儲存我正在穿的為新裝扮:
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 0cc7bbcfe0..8b15668e3b 100644
--- a/indra/newview/skins/default/xui/zh/floater_outgoing_call.xml
+++ b/indra/newview/skins/default/xui/zh/floater_outgoing_call.xml
@@ -36,5 +36,5 @@
Leaving [CURRENT_CHAT].
-
+
diff --git a/indra/newview/skins/default/xui/zh/floater_pay.xml b/indra/newview/skins/default/xui/zh/floater_pay.xml
index 9374ac3f3b..b4841df0ff 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 @@
- Pay Group
+ 支付社團
- Pay Resident
+ 支付居民
Test Name That Is Extremely Long To Check Clipping
@@ -14,8 +14,8 @@
- Or, choose amount:
+ 或,選擇一個金額:
-
-
+
+
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 fbb6a8ab36..2a2aec93b9 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 @@
- Pay Group
+ 支付社團
- Pay Resident
+ 支付居民
Ericacita Moostopolison
- Via object:
+ 經由物件:
-
+
My awesome object with a really damn long name
@@ -23,6 +23,6 @@
或者,選擇一個金額:
-
-
+
+
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 8d44d474c0..31b8133a18 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 @@
-
+
diff --git a/indra/newview/skins/default/xui/zh/floater_postcard.xml b/indra/newview/skins/default/xui/zh/floater_postcard.xml
index c85ca93e85..6f6b75f468 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!
- Sending...
+ 傳送中...
- Recipient's Email:
+ 收件人電子郵件地址:
- Your Email:
+ 你的電子郵件地址:
- Your Name:
+ 你的名稱:
- Subject:
+ 主旨:
-
+
- Message:
+ 訓息:
- Type your message here.
+ 在此輸入你的訊息。
-
-
+
+
diff --git a/indra/newview/skins/default/xui/zh/floater_preferences.xml b/indra/newview/skins/default/xui/zh/floater_preferences.xml
index 777425ba30..396a4893e0 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 @@
-
+
-
+
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
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 5ac2de4dc5..ead8dc49a6 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 @@
- Animation: [NAME]
+ 動作: [NAME]
描述:
-
-
+
+
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 52e6a9d8e4..0649ecb791 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:
- Stop
+ 停止
預覽
@@ -43,10 +43,10 @@
Library:
-
-
+
+
-
+
@@ -59,10 +59,10 @@
(選項)
-
-
+
+
-
+
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 08d56be302..3c2f913a6d 100644
--- a/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml
@@ -7,7 +7,7 @@
You do not have permission to view this notecard.
- Notecard: [NAME]
+ 記事卡: [NAME]
描述:
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 45bbe7b979..acec1efcb0 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.
-
+
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 da89cd80ad..436f5cdcc5 100644
--- a/indra/newview/skins/default/xui/zh/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/zh/floater_report_abuse.xml
@@ -90,5 +90,5 @@
* Incomplete reports won't be investigated
-
+
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 12e646785d..5b3500c018 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 @@
-
+
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 b6671df0e2..400ef4be81 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 @@
-
+
-
+
- Search
+ 搜尋
取代
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 1452f744da..c1661635f1 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 @@
Press a key to set your Speak button trigger.
-
+
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 2d3f5066bc..19580c99a1 100644
--- a/indra/newview/skins/default/xui/zh/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/zh/floater_sell_land.xml
@@ -41,7 +41,7 @@
-
+
@@ -59,7 +59,7 @@
REMEMBER: All sales are final.
-
+
diff --git a/indra/newview/skins/default/xui/zh/floater_snapshot.xml b/indra/newview/skins/default/xui/zh/floater_snapshot.xml
index b4216cf5b2..9edc19969f 100644
--- a/indra/newview/skins/default/xui/zh/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/zh/floater_snapshot.xml
@@ -11,15 +11,15 @@
[SIZE] KB
-
-
-
+
+
+
-
+
尺寸
@@ -58,17 +58,17 @@
-
+
Capture:
-
+
-
+
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 269cd5db08..c942ba1cfb 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 @@
描述:
-
+
diff --git a/indra/newview/skins/default/xui/zh/floater_stats.xml b/indra/newview/skins/default/xui/zh/floater_stats.xml
index 54c5ba5cc0..eebd5df3f7 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 @@
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -63,7 +63,7 @@
-
+
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 dbdd32974c..fd27e944ac 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 @@
-
+
CONVERSATIONS
- NOTIFICATIONS
+ 通知
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 aaf6ecd7cf..fc00b0b4a2 100644
--- a/indra/newview/skins/default/xui/zh/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/zh/floater_texture_ctrl.xml
@@ -19,5 +19,5 @@
-
+
diff --git a/indra/newview/skins/default/xui/zh/floater_tools.xml b/indra/newview/skins/default/xui/zh/floater_tools.xml
index feee659736..300d7ee63b 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 @@
-
+
Drag colored bands to rotate object
@@ -39,11 +39,11 @@
Attachment
-
+
-
-
+
+
Drag to move, shift-drag to copy
@@ -60,18 +60,18 @@
-
-
-
+
+
+
-
-
-
+
+
+
þ: [COUNT]
-
- Stretch Both Sides
+
+ 同時伸展兩側
@@ -80,7 +80,7 @@
-
+
@@ -96,33 +96,33 @@
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
- Bulldozer:
+ 推土機:
尺寸
- Strength
+ 力道
-
+
- Objects: [COUNT]
+ 物件: [COUNT]
Prims: [COUNT]
@@ -136,19 +136,19 @@
Deed
- You can modify this object
+ 你能修改這個物件
- You can modify these objects
+ 你能修改這些物件
- You can't modify this object
+ 你不能修改這個物件
- You can't modify these objects
+ 你不能修改這些物件
- You must select entire object to set permissions
+ 你必須選取整個物件以設定權限
價格: L$
@@ -157,7 +157,7 @@
總價: L$
- Price Per: L$
+ 單價每個: L$
Mixed Price
@@ -181,19 +181,19 @@
社團:
-
+
- Click to:
+ 點擊以:
-
-
-
-
-
-
+
+
+
+
+
+
@@ -202,10 +202,10 @@
-
+
- You can modify this object
+ 你可以修改這個物件
任何人:
@@ -238,13 +238,13 @@
-
-
-
-
-
+
+
+
+
+
- Position (meters)
+ 位置(公尺)
@@ -256,7 +256,7 @@
- Rotation (degrees)
+ 旋轉(角度)
@@ -273,12 +273,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
Path Cut (begin/end)
@@ -286,13 +286,13 @@
- Hollow
+ 中空
Skew
- Hollow Shape
+ 中空形狀
@@ -354,12 +354,12 @@
-
+
Select only one primitive to edit features.
- Edit object features:
+ 編輯物件特性:
@@ -371,7 +371,7 @@
-
+
@@ -382,38 +382,38 @@
- Repeats Per Meter
+ 每公尺重覆次數
- Repeats Per Face
+ 每一面重覆次數
-
+
- Transparency %
+ 透明度 %
- Glow
+ 光暈
-
+
- Mapping
+ 映射方式
-
+
- Shininess
+ 光澤
-
-
-
+
+
+
- Bumpiness
+ 凹凸貼圖
@@ -435,65 +435,65 @@
-
+
- Repeats / Face
+ 重覆次數 / 面
-
-
-
-
-
-
+
+
+
+
+
+
材質位移
-
-
+
+
- Media
+ 媒體
-
+
-
-
+
+
-
-
-
+
+
+
- Parcel Information
+ 地段資訊
- Price: L$[PRICE] for [AREA] m²
+ 價格: L$[PRICE] 購買 [AREA] m²
面積: [AREA] m²
-
+綠色 = 你的土地
+水藍 = 你社團的土地
+紅色 = 其他人所有
+黃色 = 出售
+紫色 = 拍賣
+灰色 = 公有地"/>
- Modify Parcel
+ 修改地段
-
-
+
+
- Land Transactions
+ 土地交易
-
+
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 c1ad927bbb..074a4a1881 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
- Score
+ 積分
None found.
@@ -28,7 +28,7 @@
載入中...
-
+
@@ -37,19 +37,19 @@
- Object ID:
+ 物件 ID:
物件名稱:
-
+
擁有者:
-
-
+
+
-
-
+
+
diff --git a/indra/newview/skins/default/xui/zh/floater_tos.xml b/indra/newview/skins/default/xui/zh/floater_tos.xml
index acc61a7961..5f9e16afe1 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
-
+
請謹慎閱讀以下的服務條款及隱私政策。要繼續登入到 [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 2b4f5ea11d..65f6a9cb95 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 @@
- Media URL:
+ 媒體 URL:
-
+
載入中...
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 b9021d25d9..36efe20b65 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 @@
-
+
(No Voice Morph)
@@ -19,7 +19,7 @@
Record a sample, then click on a voice to hear how it will sound.
-
+
[[URL] Subscribe Now]
diff --git a/indra/newview/skins/default/xui/zh/floater_water.xml b/indra/newview/skins/default/xui/zh/floater_water.xml
index 8e790f8dad..5fb57272af 100644
--- a/indra/newview/skins/default/xui/zh/floater_water.xml
+++ b/indra/newview/skins/default/xui/zh/floater_water.xml
@@ -14,7 +14,7 @@
Water Fog Color
-
+
Fog Density Exponent
@@ -43,7 +43,7 @@
Blur Multiplier
-
+
Big Wave Direction
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 2670e223d3..a756498b81 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 @@
-
+
-
+
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 ea360be6c9..36e00049f0 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 @@
-
+
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 d292386323..fce851cc90 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 @@
-
+
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
Sky Presets:
-
+
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 167d4cb858..54b72afccc 100644
--- a/indra/newview/skins/default/xui/zh/floater_window_size.xml
+++ b/indra/newview/skins/default/xui/zh/floater_window_size.xml
@@ -6,12 +6,12 @@
設定視窗尺寸大小:
-
+
-
+
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 47038e3b3d..552bb02582 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
- Person
+ 人
Infohub
@@ -40,7 +40,7 @@
Moderate
- Adult
+ 成人
diff --git a/indra/newview/skins/default/xui/zh/inspect_group.xml b/indra/newview/skins/default/xui/zh/inspect_group.xml
index 01649496bc..3583976646 100644
--- a/indra/newview/skins/default/xui/zh/inspect_group.xml
+++ b/indra/newview/skins/default/xui/zh/inspect_group.xml
@@ -8,7 +8,7 @@
私人社團
- Free to join
+ 免費加入
L$[AMOUNT] to join
@@ -26,7 +26,7 @@ Fear the moose! Fear it! And the mongoose too!
L$123 to join
-
-
+
+
diff --git a/indra/newview/skins/default/xui/zh/inspect_object.xml b/indra/newview/skins/default/xui/zh/inspect_object.xml
index f1fe037087..58091b3aef 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
-
+
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 aa803cc49d..a04d59bc81 100644
--- a/indra/newview/skins/default/xui/zh/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/zh/menu_attachment_other.xml
@@ -8,10 +8,10 @@
-
-
+
+
-
+
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 1da583b3d0..ef0986a13b 100644
--- a/indra/newview/skins/default/xui/zh/menu_avatar_icon.xml
+++ b/indra/newview/skins/default/xui/zh/menu_avatar_icon.xml
@@ -3,5 +3,5 @@
-
+
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 281d357fd3..acf98dfdfa 100644
--- a/indra/newview/skins/default/xui/zh/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/zh/menu_avatar_other.xml
@@ -8,9 +8,9 @@
-
-
+
+
-
+
diff --git a/indra/newview/skins/default/xui/zh/menu_bottomtray.xml b/indra/newview/skins/default/xui/zh/menu_bottomtray.xml
index d55b3afc95..a00aa7cd35 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 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/zh/menu_edit.xml b/indra/newview/skins/default/xui/zh/menu_edit.xml
index 5c5c225c59..d6eb87a6b0 100644
--- a/indra/newview/skins/default/xui/zh/menu_edit.xml
+++ b/indra/newview/skins/default/xui/zh/menu_edit.xml
@@ -8,5 +8,5 @@
-
+
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 8e30a15562..e053eb2388 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 @@
-
+
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 f03749533e..dbb8ececaa 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 @@
-
-
-
+
+
+
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 6cf86327be..85417d554e 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 @@
-
+
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 c208a146d2..2577c582a7 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 @@
-
-
+
+
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 dc933518c0..636bdaae09 100644
--- a/indra/newview/skins/default/xui/zh/menu_imchiclet_p2p.xml
+++ b/indra/newview/skins/default/xui/zh/menu_imchiclet_p2p.xml
@@ -2,6 +2,6 @@
-
-
+
+
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 6d8fbba503..0f14057c07 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
@@ -9,13 +9,13 @@
-
-
-
+
+
+
-
+
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 dab95fcadc..94ab82b8a9 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 @@
-
-
+
+
-
+
-
+
-
-
+
+
-
+
diff --git a/indra/newview/skins/default/xui/zh/menu_inventory.xml b/indra/newview/skins/default/xui/zh/menu_inventory.xml
index fd8f73e4ea..a93e8be149 100644
--- a/indra/newview/skins/default/xui/zh/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/zh/menu_inventory.xml
@@ -28,17 +28,17 @@
-
-
-
-
+
+
+
+
-
+
-
+
@@ -46,19 +46,19 @@
-
-
+
+
-
+
-
+
@@ -66,11 +66,11 @@
-
+
-
+
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 8c938222e7..f51b27d9ce 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
@@ -3,12 +3,12 @@
-
-
-
+
+
+
-
+
diff --git a/indra/newview/skins/default/xui/zh/menu_landmark.xml b/indra/newview/skins/default/xui/zh/menu_landmark.xml
index 97b115151e..7372b223cf 100644
--- a/indra/newview/skins/default/xui/zh/menu_landmark.xml
+++ b/indra/newview/skins/default/xui/zh/menu_landmark.xml
@@ -2,6 +2,6 @@
-
-
+
+
diff --git a/indra/newview/skins/default/xui/zh/menu_login.xml b/indra/newview/skins/default/xui/zh/menu_login.xml
index 436e86cb74..d6bf34c66e 100644
--- a/indra/newview/skins/default/xui/zh/menu_login.xml
+++ b/indra/newview/skins/default/xui/zh/menu_login.xml
@@ -1,8 +1,8 @@
-
-
+
+
@@ -10,16 +10,16 @@
-
-
-
-
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
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 7d8997fafe..cad462eebb 100644
--- a/indra/newview/skins/default/xui/zh/menu_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/zh/menu_nearby_chat.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/indra/newview/skins/default/xui/zh/menu_object.xml b/indra/newview/skins/default/xui/zh/menu_object.xml
index 869c5f66fe..ed41a4f0bf 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 @@
-
+
-
-
-
+
+
+
-
-
-
+
+
+
-
+
-
-
+
+
-
+
-
+
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 169dbf2187..cf47020bd9 100644
--- a/indra/newview/skins/default/xui/zh/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/zh/menu_outfit_gear.xml
@@ -18,10 +18,10 @@
-
-
-
-
+
+
+
+
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 7b6f6f954e..3737e3d041 100644
--- a/indra/newview/skins/default/xui/zh/menu_participant_list.xml
+++ b/indra/newview/skins/default/xui/zh/menu_participant_list.xml
@@ -7,7 +7,7 @@
-
+
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 06247ab249..cf36507d74 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 @@
-
+
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 73b754e059..49fa775424 100644
--- a/indra/newview/skins/default/xui/zh/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/zh/menu_people_nearby.xml
@@ -7,7 +7,7 @@
-
+
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 4ffbcaff83..c7aff48df4 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
@@ -5,6 +5,6 @@
-
+
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 9e55c633f9..e962bd90d5 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 @@
-
+
diff --git a/indra/newview/skins/default/xui/zh/menu_place.xml b/indra/newview/skins/default/xui/zh/menu_place.xml
index 6ffdf329df..3733baf119 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 @@
-
+
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 7f1d091f44..7f4144d14d 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
@@ -2,7 +2,7 @@
-
+
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 8578751a28..f23d970b78 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
@@ -15,5 +15,5 @@
-
+
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 2c5e3153bf..ca637ae54d 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 @@
-
+
-
-
-
+
+
+
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 423ba64aa7..f9107a96ed 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 @@
-
+
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 3b667d429c..592bb6561e 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 @@
-
+
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 d2f0b81a9d..b344b21c62 100644
--- a/indra/newview/skins/default/xui/zh/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/zh/menu_url_objectim.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml
index 6f6ca064c8..6d70ac4c1f 100644
--- a/indra/newview/skins/default/xui/zh/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml
@@ -22,7 +22,7 @@
-
+
@@ -54,7 +54,7 @@
-
+
@@ -75,7 +75,7 @@
-
+
@@ -84,21 +84,21 @@
-
+
-
+
-
-
-
+
+
+
-
-
+
+
@@ -110,16 +110,16 @@
-
+
-
-
-
-
-
+
+
+
+
+
@@ -135,22 +135,22 @@
-
+
-
-
-
-
+
+
+
+
-
+
-
-
+
+
@@ -181,16 +181,16 @@
-
-
-
-
+
+
+
+
-
+
@@ -209,10 +209,10 @@
-
+
-
-
+
+
@@ -226,7 +226,7 @@
-
+
@@ -338,10 +338,10 @@
-
+
-
+
@@ -355,10 +355,10 @@
-
-
-
-
+
+
+
+
diff --git a/indra/newview/skins/default/xui/zh/mime_types.xml b/indra/newview/skins/default/xui/zh/mime_types.xml
index ecc14867b8..3498942f9b 100644
--- a/indra/newview/skins/default/xui/zh/mime_types.xml
+++ b/indra/newview/skins/default/xui/zh/mime_types.xml
@@ -24,7 +24,7 @@
There is an image at this location
@@ -71,7 +71,7 @@
@@ -91,12 +91,12 @@
@@ -141,32 +141,32 @@
@@ -176,7 +176,7 @@
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 ecc14867b8..3498942f9b 100644
--- a/indra/newview/skins/default/xui/zh/mime_types_linux.xml
+++ b/indra/newview/skins/default/xui/zh/mime_types_linux.xml
@@ -24,7 +24,7 @@
There is an image at this location
@@ -71,7 +71,7 @@
@@ -91,12 +91,12 @@
@@ -141,32 +141,32 @@
@@ -176,7 +176,7 @@
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 51f242a1c2..3f38c528a6 100644
--- a/indra/newview/skins/default/xui/zh/mime_types_mac.xml
+++ b/indra/newview/skins/default/xui/zh/mime_types_mac.xml
@@ -24,7 +24,7 @@
There is an image at this location
@@ -71,7 +71,7 @@
@@ -91,12 +91,12 @@
@@ -141,32 +141,32 @@
diff --git a/indra/newview/skins/default/xui/zh/notifications.xml b/indra/newview/skins/default/xui/zh/notifications.xml
index 7652c1a1d0..65bb8ce517 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
[MESSAGE]
-
+
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.
Save changes to current clothing/body part?
-
+
There was a problem uploading the text for a script due to the following reason: [REASON]. Please try again later.
@@ -103,7 +103,7 @@ Please select only one object and try again.
儲存全部服裝或身體部位的變更?
-
+
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?
[NEEDS_APPLY_MESSAGE]
[WANT_APPLY_MESSAGE]
-
+
You must specify a subject to send a group notice.
@@ -178,12 +178,12 @@ Add this Ability to '[ROLE_NAME]'?
Joining this group costs L$[COST].
Do you wish to proceed?
-
+
You are joining group [NAME].
Do you wish to proceed?
-
+
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.
-
+
For L$[COST] you can enter this land ('[PARCEL_NAME]') for [TIME] hours. Buy a pass?
-
+
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.
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].
-
+
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].
-
+
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]
-
+
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]
-
+
Are you sure you want to return all objects owned by you on this parcel of land back to your inventory?
Objects: [N]
-
+
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]
-
+
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]
-
+
Are you sure you want to return all listed objects back to their owner's inventory?
-
+
Are you sure you want to disable all objects in this region?
-
+
Return the objects on this parcel of land that are NOT shared with the group [NAME] back to their owners?
Objects: [N]
-
+
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.
-
+
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
Email snapshot with the default subject or message?
-
+
Error processing snapshot data
@@ -328,7 +328,7 @@ You need an account to enter [SECOND_LIFE]. Would you like to create one now?
http://join.secondlife.com/
-
+
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?
Delete classified '[NAME]'?
There is no reimbursement for fees paid.
-
+
You have selected to delete the media associated with this face.
@@ -345,7 +345,7 @@ Are you sure you want to continue?
Save changes to classified [NAME]?
-
+
Insufficient funds to create classified.
@@ -353,18 +353,18 @@ Are you sure you want to continue?
Delete pick <nolink>[PICK]</nolink>?
-
+
刪除所選擇的裝扮?
-
+
前往 [SECOND_LIFE] 事件網頁?
http://secondlife.com/events/
-
+
Please select a proposal to view.
@@ -393,11 +393,11 @@ Note: This will clear the cache.
http://secondlife.com/auctions/auction-detail.php?id=[AUCTION_ID]
-
+
Save Changes?
-
+
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.)
-
+
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?
http://www.secondlife.com/corporate/sysreqs.php
-
+
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).
@@ -476,7 +476,7 @@ We recommend updating your graphics card drivers.
Graphics Quality can be raised in Preferences > Graphics.
- The region [REGION] does not allow terraforming.
+ 這個 [REGION] 地區並不允許變更地形。
You do not have permission to copy the following items:
@@ -488,7 +488,7 @@ and will lose it from your inventory if you give it away. Do you really want to
無法給予收納區物品。
- 交易已取銷。
+ 交易已取消。
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.
- Freeze this avatar?
-He or she will temporarily be unable to move, chat, or interact with the world.
-
+ 凍結這位化身?
+他將暫時無法移動、聊天或這個世界互動。
+
- Freeze [AVATAR_NAME]?
-He or she will temporarily be unable to move, chat, or interact with the world.
-
+ 凍結 [AVATAR_NAME]?
+他將暫時無法移動、聊天或這個世界互動。
+
- Eject [AVATAR_NAME] from your land?
-
+ 將 [AVATAR_NAME] 由你的土地踢出?
+
- Eject this avatar from your land?
-
+ 將這一位化身由你的土地踢出?
+
- Eject [AVATAR_NAME] from your land?
-
+ 將 [AVATAR_NAME] 由你的土地踢出?
+
- You ejected [AVATAR_NAME] from group [GROUP_NAME]
+ 你已將 [AVATAR_NAME] 由社團 [GROUP_NAME] 中踢出
ACQUIRE ERROR: Too many objects selected.
@@ -543,7 +543,7 @@ Go to [_URL] for information on purchasing L$?
http://secondlife.com/app/currency/
-
+
Unable to link these [COUNT] objects.
@@ -747,7 +747,7 @@ No parcel selected.
This parcel is up for auction. Forcing ownership will cancel the auction and potentially make some Residents unhappy if bidding has begun.
Force ownership?
-
+
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?
-
+
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?
-
+
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?
-
+
This notecard needs to be saved before the item can be copied or viewed. Save notecard?
-
+
覆製這個物品到你的收納區?
-
+
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
Darn. You have been logged out of [SECOND_LIFE]
[MESSAGE]
-
+
Unable to buy land for the group:
@@ -932,7 +932,7 @@ Offer friendship to [NAME]?
你願意成為我的朋友嗎?
-
+
@@ -942,7 +942,7 @@ Offer friendship to [NAME]?
[DESC] (新)
-
+
@@ -952,7 +952,7 @@ Offer friendship to [NAME]?
[DESC] (新)
-
+
@@ -962,34 +962,34 @@ Offer friendship to [NAME]?
[NAME]
-
+
Do you want to remove [NAME] from your Friends List?
-
+
你確定要由朋友清單中移除多個朋友嗎?
-
+
Are you sure you want to delete all scripted objects owned by
** [AVATAR_NAME] **
on all others land in this sim?
-
+
Are you sure you want to DELETE ALL scripted objects owned by
** [AVATAR_NAME] **
on ALL LAND in this sim?
-
+
Are you sure you want to DELETE ALL objects (scripted or not) owned by
** [AVATAR_NAME] **
on ALL LAND in this sim?
-
+
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?
-
+
At least one of the items you have selected is locked.
Are you sure you want to delete these items?
-
+
At least one of the items you have selected is not copyable.
Are you sure you want to delete these items?
-
+
You do not own least one of the items you have selected.
Are you sure you want to delete these items?
-
+
At least one object is locked.
At least one object is not copyable.
Are you sure you want to delete these items?
-
+
At least one object is locked.
You do not own least one object.
Are you sure you want to delete these items?
-
+
At least one object is not copyable.
You do not own least one object.
Are you sure you want to delete these items?
-
+
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?
-
+
At least one object is locked.
Are you sure you want to take these items?
-
+
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?
-
+
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?
-
+
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]'?
-
+
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]'?
-
+
Display settings have been set to safe levels because you have specified the -safe option.
@@ -1129,7 +1129,7 @@ You may want to set a new home location.
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?
-
+
We're having trouble connecting. There may be a problem with your Internet connection or the [SECOND_LIFE_GRID].
@@ -1186,7 +1186,7 @@ Extended Key Usage: [EXTENDEDKEYUSAGE]
Subject Key Identifier: [SUBJECTKEYIDENTIFIER]
Would you like to trust this authority?
-
+
[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.)
-
+
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.
Unable to copy the contents of more than one item at a time.
Please select only one object and try again.
-
+
確定要強制瞬間傳送這地區所有居民回家?
-
+
Are you sure you want to return objects owned by [USER_NAME]?
-
+
Couldn't set region textures:
@@ -1236,13 +1236,13 @@ Replace texture [TEXTURE_NUM] with a 24-bit 512x512 or smaller image then click
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?
-
+
You can only have [MAX_AGENTS] Allowed Residents.
- You can only have [MAX_BANNED] Banned Residents.
+ 你只可以有最多 [MAX_BANNED] 位被封鎖的居民。
Failure while attempting to add [NUM_ADDED] agents:
@@ -1250,13 +1250,13 @@ Exceeds the [MAX_AGENTS] [LIST_TYPE] limit by [NUM_EXCESS].
You can only have [MAX_GROUPS] Allowed Groups.
-
+
- You can only have [MAX_MANAGER] Estate Managers.
+ 你只可以有最多 [MAX_MANAGER] 位領地經理。
- Can't add estate owner to estate 'Banned Resident' list.
+ 無法添加領地擁有者到領地的 '被封鎖的居民' 名單中。
無法變更外觀,直到服裝與體形下載完畢。
@@ -1273,15 +1273,15 @@ Please set the object for sale and try again.
[DOWNLOAD_PATH].
- A new version of [APP_NAME] is available.
+ 一個新版本的 [APP_NAME] 已經可用。
[MESSAGE]
-You must download this update to use [APP_NAME].
-
+你必須下載這個更新以使用 [APP_NAME]。
+
- 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.
+這個更新並非強制更新,但我們建議你安裝以增強效能及穩定性。
@@ -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].
-
+
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?
-
+
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.
-
+
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.
-
+
We have downloaded an update to your [APP_NAME] installation.
Version [VERSION] [[RELEASE_NOTES_FULL_URL] Information about this update]
-
+
We have downloaded an update to your [APP_NAME] installation.
Version [VERSION] [[RELEASE_NOTES_FULL_URL] Information about this update]
-
+
We have downloaded a required software update.
@@ -1371,60 +1371,60 @@ We must restart [APP_NAME] to install the update.
- We must restart [APP_NAME] to install the update.
+ 我門必須重新啟動 [APP_NAME] 以安裝更新。
Deeding this object will cause the group to:
* Receive L$ paid into the object
-
+
Do you want to open your Web browser to view this content?
-
+
- Go to your [http://secondlife.com/account/ Dashboard] to manage your account?
-
+ 前往你的[http://secondlife.com/account/ 塗鴉牆]以進行管理你的帳戶?
+
Visit the [SECOND_LIFE] Wiki for details of how to report a security issue.
-
+
Visit the [SECOND_LIFE] QA Wiki.
-
+
Visit the [SECOND_LIFE] Public Issue Tracker, where you can report bugs and other issues.
-
+
- Go to the Official Linden Blog, for the latest news and information.
-
+ 前往林登官方部落格,以取得最新的新聞與資訊。
+
Do you want to open the Scripting Guide for help with scripting?
-
+
Do you want to visit the LSL Portal for help with scripting?
-
+
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!
-
+
You are currently a member of the group [GROUP].
Leave Group?
-
+
- 你確定要踢除這網格內的全部居民?
-
+ 你確定要踢出這網格內的全部居民?
+
Sorry, you cannot block a Linden.
@@ -1439,7 +1439,7 @@ Leave Group?
Though permitted, deleting contents may damage the object. Do you want to delete that item?
-
+
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
- 踢除這個居民並留給他什麼訊息?
+ 踢出這個居民並留給他什麼訊息?
@@ -1480,27 +1480,27 @@ Chat and instant messages will be hidden. Instant messages will get your Busy mo
An administrator has logged you off.
-
+
- Freeze this Resident with what message?
+ 凍結這位居民時同時留下什麼訊息?
- Unfreeze this Resident with what message?
+ 將這位居民解凍並同時留下什麼訊息?
@@ -1550,7 +1550,7 @@ Please try again later.
加入我到 [REGION]
-
+
@@ -1560,30 +1560,30 @@ Please try again later.
Join me in [REGION]
-
+
Are you sure you want to teleport to <nolink>[LOCATION]</nolink>?
-
+
瞬間傳送到 [PICK]?
-
+
瞬間傳送到 [CLASSIFIED]?
-
+
瞬間傳送到 [HISTORY_ENTRY]?
-
+
-
+
Type a short announcement which will be sent to everyone currently in your estate.
@@ -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?
-
+
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.
-
+
Add to allowed list for this estate only or for [ALL_ESTATES]?
-
+
Remove from allowed list for this estate only or for [ALL_ESTATES]?
-
+
Add to group allowed list for this estate only or for [ALL_ESTATES]?
-
+
Remove from group allowed list for this estate only or [ALL_ESTATES]?
-
+
Deny access for this estate only or for [ALL_ESTATES]?
-
+
Remove this Resident from the ban list for access for this estate only or for [ALL_ESTATES]?
-
+
Add estate manager for this estate only or for [ALL_ESTATES]?
-
+
Remove estate manager for this estate only or for [ALL_ESTATES]?
-
+
-
- 將 [EVIL_USER] 由這領地踢除?
-
+
+ 將 [EVIL_USER] 由這領地踢出?
+
Are you sure you want to change the Estate Covenant?
-
+
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]?
-
+
Does this classified contain Moderate content?
-
+
Does this group contain Moderate content?
-
+
Do you really want to restart this region in 2 minutes?
-
+
Type a short announcement which will be sent to everyone in this region.
@@ -1780,15 +1780,15 @@ To enter Adult regions, Residents must be Account Verified, either by age-verifi
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].
-
+
Cannot buy objects from different owners at the same time.
Please select only one object and try again.
-
+
Unable to buy the contents of more than one object at a time.
Please select only one object and try again.
-
+
Cannot buy objects from different owners at the same time.
Please select only one object and try again.
@@ -1799,7 +1799,7 @@ You will be able to:
Modify: [MODIFYPERM]
Copy: [COPYPERM]
Resell or Give Away: [RESELLPERM]
-
+
Buy original object for L$[PRICE]?
@@ -1808,7 +1808,7 @@ You will be able to:
Modify: [MODIFYPERM]
Copy: [COPYPERM]
Resell or Give Away: [RESELLPERM]
-
+
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]
-
+
Buy a copy for L$[PRICE]?
@@ -1826,24 +1826,24 @@ You will be able to:
Modify: [MODIFYPERM]
Copy: [COPYPERM]
Resell or Give Away: [RESELLPERM]
-
+
Buy contents from [OWNER] for L$[PRICE]?
They will be copied to your inventory.
-
+
Buy contents for L$[PRICE]?
They will be copied to your inventory.
-
+
This transaction will:
[ACTION]
Are you sure you want to proceed with this purchase?
-
+
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.
@@ -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)?
-
+
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)?
-
+
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.
- Go to your [http://secondlife.com/account/ Dashboard] to see your account history?
-
+ 前往你的[http://secondlife.com/account/ 塗鴉牆]以察看你的帳戶歷史紀錄?
+
- Are you sure you want to quit?
-
+ 你確定你要結束退出?
+
[QUESTION]
-
+
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].
@@ -1947,38 +1947,38 @@ Do you want to replace it with the selected object?
-
+
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?
The folder '[FOLDERNAME]' is a system folder. Deleting system folders can cause instability. Are you sure you want to delete it?
-
+
Are you sure you want to permanently delete the contents of your Trash?
-
+
Are you sure you want to delete your travel, web, and search history?
-
+
Are you sure you want to clear your cookies?
-
+
Are you sure you want to clear your list of saved URLs?
-
+
Are you sure you want to permanently delete the contents of your Lost And Found?
@@ -2018,7 +2018,7 @@ Link to this from a web page to give others easy access to this location, or try
New Preset
-
+
@@ -2031,7 +2031,7 @@ Link to this from a web page to give others easy access to this location, or try
New Preset
-
+
@@ -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.
- Unable to start a new chat session with [RECIPIENT].
+ 無法開始一個與 [RECIPIENT] 他的新聊天會話。
[REASON]
@@ -2051,7 +2051,7 @@ Link to this from a web page to give others easy access to this location, or try
- Your chat session with [NAME] must close.
+ 你與 [NAME] 的聊天會話必須關閉。
[REASON]
@@ -2255,7 +2255,7 @@ Try selecting a smaller piece of land.
[DATE]
@@ -2374,7 +2374,7 @@ Please go to the Knowledge Base for details on accessing areas with this maturit
Could not teleport closer to destination.
- 瞬間傳送已取銷。
+ 瞬間傳送已取消。
The region you are attempting to enter is currently full.
@@ -2453,7 +2453,7 @@ Please try again in a few moments.
[MESSAGE] - [MATURITY_STR] <icon>[MATURITY_ICON]</icon>
@@ -2463,8 +2463,8 @@ Please try again in a few moments.
[MESSAGE]
[URL]
@@ -2525,8 +2525,8 @@ If you stay in this region you will be logged out.
From object: <nolink>[OBJECTNAME]</nolink>, owner: [NAME]?
@@ -2714,7 +2714,7 @@ They will be blocked for a few seconds for your security.
Are you sure you want to close all IMs?
-
+
Attachment has been saved.
@@ -2737,7 +2737,7 @@ They will be blocked for a few seconds for your security.
Are you sure you want to delete your teleport history?
-
+
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]
-
+
Items successfully shared.
@@ -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?
-
+
To join the conversation, type into the chat field below.
@@ -2887,40 +2887,40 @@ Click and drag anywhere on the world to rotate your view
-
+
- Changing modes requires you to quit and restart.
-
+ 改變劉覽器模式要求你必須結束退出並重新啟動。
+
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.
-
+
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.
-
+
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.
-
+
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.
-
+
Voice calls are only available in Advanced mode. Would you like to logout and change modes?
-
+
Sharing is only available in Advanced mode. Would you like to logout and change modes?
-
+
Paying other residents is only available in Advanced mode. Would you like to logout and change modes?
-
+
- 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
- - Your graphics card does not meet the minimum requirements.
+ - 你的顯示卡未達系統最低配備要求。
- Your system memory does not meet the minimum requirements.
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 c9e47984e2..7d16ac4129 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
@@ -5,7 +5,7 @@
-
+
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 23b76eea9b..eccb938f15 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,7 +21,7 @@
[COUNT]y
-
+
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 1fb0f210fe..550868e5e5 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 @@
-
+
-
+
diff --git a/indra/newview/skins/default/xui/zh/panel_bottomtray.xml b/indra/newview/skins/default/xui/zh/panel_bottomtray.xml
index 4c0174559e..2b0cd7c0a6 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 @@
-
+
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 22f3731a6f..9833e9ef8b 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 @@
-
+
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 7a74f07743..ba63dada76 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 @@
-
+
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 9478ec49a6..e749d9e3e7 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 @@
- (will update after save)
+ (儲存後將會更新)
Publish
@@ -15,7 +15,7 @@
-
+
Title:
@@ -47,7 +47,7 @@
-
+
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 0578fe9ef1..d9ddafac3b 100644
--- a/indra/newview/skins/default/xui/zh/panel_edit_hair.xml
+++ b/indra/newview/skins/default/xui/zh/panel_edit_hair.xml
@@ -5,7 +5,7 @@
-
+
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 b453fdc758..76560256f7 100644
--- a/indra/newview/skins/default/xui/zh/panel_edit_pants.xml
+++ b/indra/newview/skins/default/xui/zh/panel_edit_pants.xml
@@ -2,7 +2,7 @@
-
+
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 2dd0ed2015..6ac7226185 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 @@
-
+
- (will update after save)
+ (將在儲存後更新)
- Edit Pick
+ 編輯精選地點
-
+
- Title:
+ 標題:
描述:
@@ -21,16 +21,16 @@
載入中...
-
+
-
+
-
+
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 7fb8392836..2258e51b85 100644
--- a/indra/newview/skins/default/xui/zh/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/zh/panel_edit_profile.xml
@@ -27,31 +27,31 @@
-
+
-
+
-
+
-
+
首頁:
-
+
-
+
-
+
@@ -61,7 +61,7 @@
-
+
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 da6049ea75..f249100786 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 @@
- Meters
+ 公尺
- Feet
+ 英呎
- Height:
+ 身高:
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
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 321fb68756..ecfc1e2fad 100644
--- a/indra/newview/skins/default/xui/zh/panel_edit_shirt.xml
+++ b/indra/newview/skins/default/xui/zh/panel_edit_shirt.xml
@@ -2,7 +2,7 @@
-
+
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 096a83c871..5c46f94fe9 100644
--- a/indra/newview/skins/default/xui/zh/panel_edit_skirt.xml
+++ b/indra/newview/skins/default/xui/zh/panel_edit_skirt.xml
@@ -2,7 +2,7 @@
-
+
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 dab132bad2..09c888f226 100644
--- a/indra/newview/skins/default/xui/zh/panel_edit_socks.xml
+++ b/indra/newview/skins/default/xui/zh/panel_edit_socks.xml
@@ -2,7 +2,7 @@
-
+
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 d183e6897d..946f8b22dc 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 @@
-
-
-
-
+
+
+
+
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 21b5c1c698..936a2651ab 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
- Shape:
+ 體形:
- Skin:
+ 皮膚:
- Hair:
+ 頭髮:
- Eyes:
+ 眼睛:
襯衫:
@@ -97,15 +97,15 @@
Physics:
-
+
-
+
-
+
-
+
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 2873d4cabb..a97a35056b 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.
- General group information has changed
+ 一般社團資訊已經被變更
Retrieving member data
@@ -17,7 +17,7 @@ Hover your mouse over the options for more help.
創辦人:
- Free
+ 免費
@@ -25,33 +25,33 @@ Hover your mouse over the options for more help.
Group Charter
-
-
-
+
+
+
自己
- My title:
+ 我的頭銜:
-
+
社團
-
-
+
+
- - Select maturity rating -
+ - 選擇內容分級 -
-
+
-
+
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 4c65d2484c..320645ea5e 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
@@ -20,9 +20,9 @@
-
-
-
+
+
+
@@ -35,7 +35,7 @@
-
+
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 c9b17b5d67..a1395f454b 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 @@
-
+
Are you sure you want to invite new owner(s)? This action is permanent!
@@ -19,8 +19,8 @@
Choose what Role to assign them to:
-
-
+
+
社團邀請
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 71f139a3e6..58022c2279 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 @@
-
-
-
+
+
+
Total contribution:
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 b4d7e3608e..65c07e7137 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 @@
-
+
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.
- There are no past notices
+ 沒有過去的通知
- Notices are kept for 14 days.
-Maximum 200 per group daily
+ 通知保留 14 天。
+每個社團一天最多 200 則
-
-
-
+
+
+
- None found
+ 沒發現。
-
+
-
+
- Create a Notice
+ 建立一個通知
主旨:
@@ -36,26 +36,26 @@ Maximum 200 per group daily
附件:
- Drag and drop item here to attach it:
+ 將物品拖曳並丟於此處以添加為附件:
-
-
+
+
-
+
- Archived Notice
+ 存檔的通知
- To send a new notice, click the + button
+ 要送出一個新通知,點擊 + 按鈕
- Subject:
+ 主旨:
- Message:
+ 訊息:
-
+
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 91f0f4125f..fff4383893 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 @@
-
+
There are unsaved changes
@@ -7,7 +7,7 @@
Do you want to save your changes?
-
+
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.
[AREA] m²
-
+
-
-
-
+
+
+
-
-
+
+
-
+
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.
The 'Everyone' and 'Owners' Roles are special and can't be deleted.
-
+
-
-
+
+
-
-
+
+
-
+
Abilities allow Members in Roles to do specific
things in this group. There's a broad variety of Abilities.
-
+
@@ -67,10 +67,10 @@ things in this group. There's a broad variety of Abilities.
角色名稱
- Role Title
+ 角色頭銜
- Description
+ 描述
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 881f8eac0b..703182e04d 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
@@ -14,7 +14,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/zh/panel_landmarks.xml b/indra/newview/skins/default/xui/zh/panel_landmarks.xml
index 0ea3ea2226..fa907e3d90 100644
--- a/indra/newview/skins/default/xui/zh/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/zh/panel_landmarks.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/zh/panel_me.xml b/indra/newview/skins/default/xui/zh/panel_me.xml
index abdbfd7429..a236dfc17a 100644
--- a/indra/newview/skins/default/xui/zh/panel_me.xml
+++ b/indra/newview/skins/default/xui/zh/panel_me.xml
@@ -2,6 +2,6 @@
-
+
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 f3163e3c19..059a78cf7d 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 @@
預覽
- Current Page:
+ 目前頁面:
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 be9711c8a6..3645f471ce 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 @@
- Controls:
+ 控制:
- Standard
+ 標準
- Mini
+ 迷你
- Owner
+ 擁有者
-
+
社團:
-
+
- Anyone
+ 任何人
-
+
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 26e03c9b3b..1748d117f4 100644
--- a/indra/newview/skins/default/xui/zh/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/zh/panel_navigation_bar.xml
@@ -1,8 +1,8 @@
-
-
+
+
@@ -11,8 +11,8 @@
-
+
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 724cd54bf1..3cabfcfaba 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 @@
-
-
+
+
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 0b8a7a5f42..5ab6837569 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 @@
-
+
-
+
-
+
diff --git a/indra/newview/skins/default/xui/zh/panel_notes.xml b/indra/newview/skins/default/xui/zh/panel_notes.xml
index cf804b517d..f68fd74d1f 100644
--- a/indra/newview/skins/default/xui/zh/panel_notes.xml
+++ b/indra/newview/skins/default/xui/zh/panel_notes.xml
@@ -18,7 +18,7 @@
-
+
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 bdbc89f71c..01a8210338 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 @@
-
+
-
+
-
+
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 6ceaf447a7..263106d13a 100644
--- a/indra/newview/skins/default/xui/zh/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/zh/panel_outfit_edit.xml
@@ -15,7 +15,7 @@
-
+
@@ -27,7 +27,7 @@
-
+
@@ -35,7 +35,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/zh/panel_people.xml b/indra/newview/skins/default/xui/zh/panel_people.xml
index a1fec08940..8da75e334e 100644
--- a/indra/newview/skins/default/xui/zh/panel_people.xml
+++ b/indra/newview/skins/default/xui/zh/panel_people.xml
@@ -67,7 +67,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
-
+
@@ -84,7 +84,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
-
+
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 44ae5703c6..cd4cdbf999 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 @@
-
+
diff --git a/indra/newview/skins/default/xui/zh/panel_picks.xml b/indra/newview/skins/default/xui/zh/panel_picks.xml
index 3b356967f9..a233092dc2 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 @@
-
-
+
+
-
+
-
+
-
+
-
+
-
+
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 b0919c9151..aa7b036398 100644
--- a/indra/newview/skins/default/xui/zh/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/zh/panel_place_profile.xml
@@ -11,7 +11,7 @@
-
+
@@ -60,11 +60,11 @@
-
+
-
+
-
+
@@ -78,7 +78,7 @@
-
+
@@ -103,7 +103,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/zh/panel_places.xml b/indra/newview/skins/default/xui/zh/panel_places.xml
index 10524bc5f0..c141201ab2 100644
--- a/indra/newview/skins/default/xui/zh/panel_places.xml
+++ b/indra/newview/skins/default/xui/zh/panel_places.xml
@@ -41,7 +41,7 @@
-
+
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 ad137e9dd4..c5dce10d63 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 @@
-
+
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 34b0e3800f..c691edb11c 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml
@@ -9,7 +9,7 @@
-
+
@@ -18,7 +18,7 @@
(須重新啟動)
-
+
@@ -33,7 +33,7 @@
Use machine translation while chatting (powered by Google)
- Translate chat into:
+ 聊天翻譯為:
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 e53d2a8c06..b7449dad10 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 @@
- (Requires restart)
+ (須重新啟動)
- I want to access content rated:
+ 我想要能進出內容分級的地區為:
@@ -36,34 +36,34 @@
- Name tags:
+ 名稱標籤:
-
+
-
-
-
+
+
+
- Pressing letter keys:
+ 按下字母鍵:
-
-
+
+
- Away timeout:
+ 離開逾時設定:
-
-
-
-
-
-
+
+
+
+
+
+
忙碌模式回應:
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 68e149d866..8c728bf779 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 @@
-
+
Quality and speed:
@@ -21,7 +21,7 @@
Ultra
-
+
Shaders:
@@ -43,7 +43,7 @@
Low
-
+
m
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 ff582d774b..de296f72f3 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_move.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_move.xml
@@ -13,9 +13,9 @@
Mouselook mouse sensitivity:
-
+
-
+
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 e0e0911872..89a1a48abf 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml
@@ -5,7 +5,7 @@
- (位置、圖像、網頁、搜尋的歷使紀錄)
+ (位置、圖像、網頁、搜尋的歷史紀錄)
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 0c6d8386e4..305d1e2ac9 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 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
- Voice Chat Settings
+ 語音聊天設定
- Listen from:
+ 傾聽位置:
-
-
+
+
-
+
-
+
@@ -49,11 +49,11 @@
輸入
- My volume:
+ 我的音量:
- Please wait
+ 請稍候
輸出
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 71de9f861a..8d0e2a6355 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 @@
-
+
diff --git a/indra/newview/skins/default/xui/zh/panel_profile.xml b/indra/newview/skins/default/xui/zh/panel_profile.xml
index fafbf855de..fcf7bb64db 100644
--- a/indra/newview/skins/default/xui/zh/panel_profile.xml
+++ b/indra/newview/skins/default/xui/zh/panel_profile.xml
@@ -32,8 +32,8 @@
-
-
+
+
@@ -50,7 +50,7 @@
-
+
@@ -59,7 +59,7 @@
-
+
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 a8d7c8d6d1..12fe776e45 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
-
+
-
+
-
+
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 2e52efb804..315bc0ac8e 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 @@
分級:
- Adult
+ 成人
- Resale:
+ 轉售:
- Land in this region may not be resold.
+ 這地區的土地不能轉售。
- Subdivide:
+ 分割:
- Land in this region may not be joined/subdivided.
+ 這地區的土地不能合併或分割。
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 dee3e3045f..1ffbcbf8fd 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 @@
未知
-
+
- Object Return
+ 物件退回
- Resident:
+ 居民:
(無)
-
+
選項:
-
+
-
+
-
-
+
+
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 c1e43cef48..1f1676167b 100644
--- a/indra/newview/skins/default/xui/zh/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/zh/panel_region_estate.xml
@@ -27,26 +27,26 @@
-
-
+
+
領地管理員:
-
-
+
+
- Allowed Residents:
+ 允許的居民:
-
-
+
+
- Allowed Groups:
+ 允許的社團:
-
-
+
+
- Banned Residents:
+ 被封鎖的居民:
-
-
+
+
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 f2ccb6e1cf..dce75c997d 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 @@
未知
- Version:
+ 版本:
未知
@@ -22,22 +22,22 @@
-
-
-
-
+
+
+
+
分級:
-
+
-
+
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 0269c8f734..0622cb4e73 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 @@
-
+
地區:
@@ -14,6 +14,6 @@
-
+
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 03b845a76c..e42d904f32 100644
--- a/indra/newview/skins/default/xui/zh/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/zh/panel_script_ed.xml
@@ -10,10 +10,10 @@
Public Objects cannot run scripts
- Running
+ 執行中
- Script: [NAME]
+ 腳本:[NAME]
Select an editor by setting the environment variable LL_SCRIPT_EDITOR or the ExternalEditor setting.
@@ -30,7 +30,7 @@
-
+
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 cbb40e52de..950abbfb4c 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,7 +1,7 @@
-
+
- Parcel Script Memory
+ 地段腳本記憶體
載入中...
@@ -10,11 +10,11 @@
-
+
-
+
-
+
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 d0169b7c2d..625213e376 100644
--- a/indra/newview/skins/default/xui/zh/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/zh/panel_side_tray.xml
@@ -2,11 +2,11 @@
-
+
-
+
@@ -17,13 +17,13 @@
-
-
+
+
-
+
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 6c81ede76c..a2a63db000 100644
--- a/indra/newview/skins/default/xui/zh/panel_teleport_history.xml
+++ b/indra/newview/skins/default/xui/zh/panel_teleport_history.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/zh/role_actions.xml b/indra/newview/skins/default/xui/zh/role_actions.xml
index 91015bb8b0..534c0f39fc 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 @@
-
+
-
+
-
+
@@ -45,7 +45,7 @@
-
+
@@ -62,8 +62,8 @@
-
-
+
+
diff --git a/indra/newview/skins/default/xui/zh/sidepanel_appearance.xml b/indra/newview/skins/default/xui/zh/sidepanel_appearance.xml
index 6f8f19b26d..7d8a502594 100644
--- a/indra/newview/skins/default/xui/zh/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/zh/sidepanel_appearance.xml
@@ -8,7 +8,7 @@
- (Status)
+ (狀態)
MyOutfit With a really Long Name like MOOSE
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 15437e3624..f28638d93d 100644
--- a/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml
@@ -71,6 +71,6 @@
-
+
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 a011e29184..f308f2d4d0 100644
--- a/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml
@@ -58,18 +58,18 @@
- Click to:
+ 點擊以:
-
-
-
-
-
+
+
+
+
+
- You can modify this object
+ 你能修改這個物件
任何人:
@@ -94,7 +94,7 @@
-
+
B:
@@ -115,9 +115,9 @@
-
-
+
+
-
+
diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml
index c3f669c686..986ab82523 100644
--- a/indra/newview/skins/default/xui/zh/strings.xml
+++ b/indra/newview/skins/default/xui/zh/strings.xml
@@ -5,19 +5,19 @@
that are returned from one component and may appear in many places-->
- Second Life
+ 第二人生
- Second Life
+ 第二人生
- SECOND LIFE
+ 第二人生
- Second Life Grid
+ 第二人生網格
- Second Life Support Portal
+ 第二人生支援入口
硬體偵測中...
@@ -59,37 +59,37 @@
Previous login attempt failed. Logging in, attempt [NUMBER]
- Loading world...
+ 世界載入中...
- Initializing embedded web browser...
+ 內嵌式網頁瀏覽器初始化中...
- Initializing multimedia...
+ 多媒體初始化中...
- Loading fonts...
+ 字型載入中...
- Verifying cache files (can take 60-90 seconds)...
+ 驗證快取檔案(約需 60-90 秒左右)...
- Processing Response...
+ 回應處理中...
- Initializing World...
+ 世界初始化中...
- Decoding images...
+ 圖像解碼中...
- Initializing QuickTime...
+ QuickTime 初始化中...
- QuickTime not found - unable to initialize.
+ QuickTime 未發現 - 無法進行初始化。
- QuickTime initialized successfully.
+ QuickTime 已成功初始化。
地區交握等待中...
@@ -125,16 +125,16 @@
登入失敗。
- Quit
+ 結束退出
http://join.secondlife.com/
- This region may be experiencing trouble. Please check your connection to the Internet.
+ 這個地區可能遭遇問題,請檢查你的網路連線。
- Saving your settings...
+ 你的設定儲存中...
登出中...
@@ -149,10 +149,10 @@
You were sent to an invalid region.
- Testing viewer disconnect
+ 測試瀏覽器斷線
- Person
+ 人
(no name)
@@ -173,41 +173,41 @@
Group Build
- No Build
+ 禁止建造
- Group Build
+ 社團建造
- Not Safe
+ 非安全
禁止飛行
- Group Scripts
+ 社團腳本
- No Scripts
+ 禁止腳本
- Land:
+ 土地:
- Only a single item can be dragged here
+ 只有一個物品可以被拖曳到此處
點擊以察看這個網頁
- Click to view this location's information
+ 點擊以察看這個位置資訊
- Click to view this Resident's profile
+ 點擊以察看這個居民檔案
- Learn more about this Resident
+ 瞭解更多有關這個居民
Click to mute this Resident
@@ -219,7 +219,7 @@
點擊開始 IM 這位居民
- Click to Pay this Resident
+ 點擊以支付這位居民
Click to offer a teleport request to this Resident
@@ -268,7 +268,7 @@
IM
- Pay
+ 支付
Offer Teleport to
@@ -286,7 +286,7 @@
關閉
- Restore
+ 還原
最小化
@@ -331,7 +331,7 @@
Avaline Caller [ORDER]
- No error
+ 無錯誤
Asset request: failed
@@ -361,13 +361,13 @@
Viewer and server do not agree on price
- Unknown status
+ 未知狀態
材質
- sound
+ 聲音
calling card
@@ -382,10 +382,10 @@
服裝
- object
+ 物件
- notecard
+ 記事卡
資料夾
@@ -403,28 +403,28 @@
tga 材質
- body part
+ 身體部位
- snapshot
+ 快照
Lost and Found
- targa image
+ targa 圖像
- Trash
+ 垃圾桶
- jpeg image
+ jpeg 圖像
- animation
+ 動作
- gesture
+ 姿勢
simstate
@@ -439,13 +439,13 @@
folder link
- (Editing Appearance)
+ (外觀編輯中)
- Away
+ 離開
- Busy
+ 忙碌
Blocked
@@ -661,13 +661,13 @@
載入中...
- Offline
+ 離線
[AREA] m² L$[PRICE]
- None found.
+ 沒有發現。
確定
@@ -748,10 +748,10 @@
Moderate
- Adult
+ 成人
- Offline
+ 離線
未知
@@ -760,40 +760,40 @@
(未知)
- Estate / Full Region
+ 領地 / 完整地區
- Estate / Homestead
+ 領地 / 家園
- Mainland / Homestead
+ 大陸 / 家園
- Mainland / Full Region
+ 大陸 / 完整地區
全部檔案
- Sounds
+ 聲音
- Animations
+ 動作
- Images
+ 圖像
- Save
+ 儲存
- Load
+ 載入
- Targa Images
+ Targa 圖像
- Bitmap Images
+ Bitmap 圖像
AVI 影片檔案
@@ -808,34 +808,34 @@
RAW File
- Compressed Images
+ 壓縮的圖像
- Load Files
+ 載入檔案
- Choose Directory
+ 選擇目錄
- Not Away
+ 非離開
- Away
+ 離開
- Not Busy
+ 非忙碌
- Busy
+ 忙碌
- Shape
+ 體形
- Skin
+ 皮膚
- Hair
+ 頭髮
眼睛
@@ -877,49 +877,49 @@
Physics
- invalid
+ 無效
無
- Shirt not worn
+ 襯衫未穿
- Pants not worn
+ 褲子未穿
- Shoes not worn
+ 鞋子未穿
- Socks not worn
+ 襪子未穿
- Jacket not worn
+ 夾克未穿
- Gloves not worn
+ 手套未穿
- Undershirt not worn
+ 內衣未穿
- Underpants not worn
+ 內褲未穿
- Skirt not worn
+ 裙子未穿
Alpha not worn
- Tattoo not worn
+ 刺青未穿
Physics not worn
- invalid
+ 無效
創造新體形
@@ -931,34 +931,34 @@
創造新頭髮
- 創耖新眼睛
+ 創造新眼睛
- Create new shirt
+ 創造新襯衫
- Create new pants
+ 創造新褲子
- Create new shoes
+ 創造新鞋子
- Create new socks
+ 創造新襪子
- Create new jacket
+ 創造新夾克
- Create new gloves
+ 創造新手套
- Create new undershirt
+ 創造新內衣
- Create new underpants
+ 創造新內褲
- Create new skirt
+ 創造新裙子
Create new alpha
@@ -970,13 +970,13 @@
Create new physics
- invalid
+ 無效
- New [WEARABLE_ITEM]
+ 新 [WEARABLE_ITEM]
- Next
+ 下一個
確定
@@ -988,7 +988,7 @@
社團通知
- Sent by
+ 送出由
Attached:
@@ -1006,16 +1006,16 @@
Teleport offering
- New notifications arrived while you were away.
+ 當你離開時有新的通知送達。
- You have %d more notification
+ 你有約 %d 通知
Right Arm
- Head
+ 頭部
Left Arm
@@ -1024,7 +1024,7 @@
Left Leg
- Torso
+ 軀幹
Right Leg
@@ -1175,7 +1175,7 @@
我的裝扮
- Accessories
+ 配件
朋友
@@ -1253,7 +1253,7 @@
嘴
- Chin
+ 下巴
左耳
@@ -1328,7 +1328,7 @@
[AGEDAYS] old
- 今日剛加入
+ 高日剛加入
[COUNT] 年
@@ -1367,16 +1367,16 @@
[COUNT] 天
- [COUNT] member
+ [COUNT] 成員
- [COUNT] members
+ [COUNT] 成員
- [COUNT] members
+ [COUNT] 成員
- Resident
+ 居民
Trial
@@ -1457,28 +1457,28 @@
reset
- Set Running Progress
+ 設定執行中程序
- set running
+ 設為執行中
- Set Not Running Progress
+ 設定非執行中程序
- set not running
+ 設為非執行中
- Compile successful!
+ 編譯成功!!
- Compile successful, saving...
+ 編譯成功,儲存中...
- Save complete.
+ 儲存完畢。
- Script (object out of range)
+ 腳本(物件超出範圍)
Object [OBJECT] owned by [OWNER]
@@ -1537,7 +1537,7 @@
Allowed groups: ([ALLOWEDGROUPS], max [MAXACCESS])
- Parcel Script Memory
+ 地段腳本記憶體
Parcels Listed: [PARCELS]
@@ -1579,7 +1579,7 @@
Chest
- Head
+ 頭部
Left Shoulder
@@ -1609,7 +1609,7 @@
Mouth
- Chin
+ 下巴
Left Ear
@@ -1750,7 +1750,7 @@
You haven't created any Picks or Classifieds. Click the Plus button below to create a Pick or Classified.
- User has no picks or classifieds
+ 使用者無精選地點或個人廣告
載入中...
@@ -1819,7 +1819,7 @@
Acquired Items
- 取銷
+ 取消
花費 L$ [AMOUNT] 上傳 [NAME]
@@ -1919,7 +1919,7 @@
Down
- Any Category
+ 任何類別
Shopping
@@ -1955,7 +1955,7 @@
Linden Location
- Adult
+ 成人
Arts & Culture
@@ -2392,7 +2392,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Chest Size
- Chin Angle
+ 下巴角度
Chin Cleft
@@ -2629,7 +2629,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Glove Length
- Hair
+ 頭髮
Hair: Back
@@ -3565,7 +3565,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
不允許飛行
- No pushing
+ 禁止推撞
Building/dropping objects not allowed
@@ -3577,43 +3577,43 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Health
- Adult Region
+ 成人地區
Moderate Region
- General Region
+ 一般地區
- [APP_NAME] Update
+ [APP_NAME] 更新
- Now updating [APP_NAME]...
+ [APP_NAME] 現更新中...
- Installing [APP_NAME]...
+ [APP_NAME] 安裝中...
Your [APP_NAME] Viewer is being updated to the latest release. This may take some time, so please be patient.
- Downloading update...
+ 更新下載中...
- Downloading update
+ 更新下載
- Failed to download update
+ 夏載更新失敗
An error occurred while updating [APP_NAME]. Please download the latest version from www.secondlife.com.
- Failed to install update
+ 安裝更新失敗
- Failed to start viewer
+ 啟動瀏覽器失敗
[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 --
- [NAME] is typing...
+ [NAME] 正在輸入...
(Unnamed)
@@ -3688,13 +3688,13 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Drag items from inventory here
- (IM Session Doesn't Exist)
+ (IM 會話不存在)
You are the only user in this session.
- [NAME] is offline.
+ [NAME] 離線。
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.
- The session no longer exists
+ 此會話不再存在
You do not have that ability.
@@ -3793,13 +3793,13 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
for deeding land
- to create a group
+ 以創造社團
- to join a group
+ 以加入社團
- to upload
+ 以上傳
to publish a classified ad
@@ -3820,7 +3820,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
This object costs L$ [AMOUNT]
- Everyone
+ 任何人
Officers
@@ -3829,7 +3829,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Owners
- Online
+ 上線
上傳中...
@@ -4014,7 +4014,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
無/無
- Can't load images larger than [WIDTH]*[HEIGHT]
+ 無法載入圖像大於 [WIDTH]*[HEIGHT]
@@ -4051,7 +4051,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Membership
- Roles
+ 角色
Group Identity
@@ -4081,7 +4081,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Accounting
- Notices
+ 通知
聊天
diff --git a/indra/newview/skins/default/xui/zh/teleport_strings.xml b/indra/newview/skins/default/xui/zh/teleport_strings.xml
index 9702832f44..b18eb4a390 100644
--- a/indra/newview/skins/default/xui/zh/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/zh/teleport_strings.xml
@@ -53,7 +53,7 @@ Try again in a moment.
Relaying to destination.
- 傳送家位置的要求。
+ 送出家位置的要求。
地標位置要求瞬間傳送中。
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 0000000000..5b7ef6db54
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/floater_camera.xml
@@ -0,0 +1,65 @@
+
+
+
+ Roter kamera omkring fokus
+
+
+ Zoom kamera mod fokus
+
+
+ Flyt kamera op og ned, til venstre og højre
+
+
+ Kamera valg
+
+
+ Kredsløb zoom panorering
+
+
+ Forvalg
+
+
+ Se objekt
+
+
+
+
+
+ Se forfra
+
+
+
+
+ Se fra siden
+
+
+
+
+ Se bagfra
+
+
+
+
+
+
+ Se fra objekt
+
+
+
+
+ Førsteperson
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..0e2918e4e2
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/floater_help_browser.xml
@@ -0,0 +1,9 @@
+
+
+
+ Henter...
+
+
+
+
+
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 0000000000..42fbdeaa9e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/floater_media_browser.xml
@@ -0,0 +1,30 @@
+
+
+
+ http://www.secondlife.com
+
+
+ http://support.secondlife.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..bd17224259
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/floater_nearby_chat.xml
@@ -0,0 +1,4 @@
+
+
+
+
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 0000000000..0410f74324
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/floater_web_content.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..dc1ed562eb
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/inspect_avatar.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ [AGE]
+
+
+ [SL_PROFILE]
+
+
+ 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
+
+
+
+
+
+
+
+
+
+
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 0000000000..78ccc5b869
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/inspect_object.xml
@@ -0,0 +1,41 @@
+
+
+
+
+ Af [CREATOR]
+
+
+ Af [CREATOR]
+Owner [OWNER]
+
+
+ L$[AMOUNT]
+
+
+ Gratis!
+
+
+ Berør
+
+
+ Sid
+
+
+
+ L$30,000
+
+
+ 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....
+
+
+
+
+
+
+
+
+
+
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 0000000000..1e8301dc4c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_add_wearable_gear.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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 0000000000..ca7b184942
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_attachment_other.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..35ba27f9e2
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_attachment_self.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..26b58ce1ab
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_avatar_icon.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
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 0000000000..a778dedf0b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_avatar_other.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..0080f7a59e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_avatar_self.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..9ac296904a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_bottomtray.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..9d7fc0f223
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_cof_attachment.xml
@@ -0,0 +1,4 @@
+
+
+
+
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 0000000000..0e90d5a3ae
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_cof_body_part.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
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 0000000000..16c225b7d9
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_cof_clothing.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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 0000000000..f44369fd84
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_cof_gear.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
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 0000000000..3752f42b1c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_edit.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..a4793e294c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_favorites.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
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 0000000000..a9010e99b6
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_gesture_gear.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
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 0000000000..97fbec1ed1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_group_plus.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
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 0000000000..d96a8a8a17
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_hide_navbar.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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 0000000000..4889230919
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_im_well_button.xml
@@ -0,0 +1,4 @@
+
+
+
+
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 0000000000..f64a6ad455
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_imchiclet_adhoc.xml
@@ -0,0 +1,4 @@
+
+
+
+
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 0000000000..b89d9a5789
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_imchiclet_group.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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 0000000000..6ebc40a8dd
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_imchiclet_p2p.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
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 0000000000..8da35adb1b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_inspect_avatar_gear.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..e28842836d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_inspect_object_gear.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..887c6484bc
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_inspect_self_gear.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..c3b03232bf
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_inv_offer_chiclet.xml
@@ -0,0 +1,4 @@
+
+
+
+
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 0000000000..35551318d1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_inventory.xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..07f70d7190
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_inventory_add.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..4809b24463
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_inventory_gear_default.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..1548f18f89
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_land.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
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 0000000000..3cf2ffe375
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_landmark.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
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 0000000000..0b7a5040ae
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_login.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..186dbd476a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_mini_map.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..c04206824a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_navbar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..be532ad406
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_nearby_chat.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
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 0000000000..40b35b5fdd
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_notification_well_button.xml
@@ -0,0 +1,4 @@
+
+
+
+
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 0000000000..ba62ccf90c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_object.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..08aeb633b6
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_object_icon.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
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 0000000000..8b4c776496
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_outfit_gear.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..d6a6f2724f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_outfit_tab.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
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 0000000000..5951d3ffb9
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_participant_list.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..32c5e6a6c7
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_people_friends_view_sort.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
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 0000000000..841f58b619
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_people_groups.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
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 0000000000..0b9a791530
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_people_groups_view_sort.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
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 0000000000..220ab8724f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_people_nearby.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..9318a0e340
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_people_nearby_multiselect.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
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 0000000000..2f35ff3c92
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_people_nearby_view_sort.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
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 0000000000..d081f637f2
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_people_recent_view_sort.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
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 0000000000..81ee900773
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_picks.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
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 0000000000..d95071fbbb
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_picks_plus.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
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 0000000000..b87964ac14
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_place.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
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 0000000000..7ad2253550
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_place_add_button.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
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 0000000000..5f573c2363
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_places_gear_folder.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..13dbcdd42e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_places_gear_landmark.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..6745007c99
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_profile_overflow.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..188229b586
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_save_outfit.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
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 0000000000..cdd3212373
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_script_chiclet.xml
@@ -0,0 +1,4 @@
+
+
+
+
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 0000000000..a9302e111e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_slurl.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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 0000000000..a1c25fea69
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_teleport_history_gear.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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 0000000000..dbaec62087
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_teleport_history_item.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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 0000000000..c4d4bb4b5b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_teleport_history_tab.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
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 0000000000..3ff31ea232
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_text_editor.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
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 0000000000..08d1c25d6f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_topinfobar.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
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 0000000000..491586f3b4
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_url_agent.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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 0000000000..c776159b0a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_url_group.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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 0000000000..4398777a39
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_url_http.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
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 0000000000..9a7de23e06
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_url_inventory.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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 0000000000..ff4a4d5174
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_url_map.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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 0000000000..e27cf84959
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_url_objectim.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
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 0000000000..0f21e14f66
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_url_parcel.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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 0000000000..dd25db2aa7
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_url_slapp.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
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 0000000000..8d84a138bb
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_url_slurl.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
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 0000000000..e0ca7b920d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_url_teleport.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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 0000000000..93b247f841
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_viewer.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..63f4b0b388
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_wearable_list_item.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..515a15b287
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_wearing_gear.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
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 0000000000..c0db7b6842
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/menu_wearing_tab.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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 0000000000..e77eeee8df
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/notifications.xml
@@ -0,0 +1,1831 @@
+
+
+
+ Vis ikke dette igen
+
+
+ Vælg altid dette
+
+
+ Luk
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
+
+
+
+ Floater error: Kunne ikke finde følgende kontrol:
+
+[CONTROLS]
+
+
+
+ Der er i øjeblikket ingen tilgængelig guide.
+
+
+
+ [MESSAGE]
+
+
+ [MESSAGE]
+
+
+
+ Der opstod en fejl ved opdatering af [APP_NAME]. Please [http://get.secondlife.com download the latest version] of the Viewer.
+
+
+
+ Kunne ikke tilslutte til [SECOND_LIFE_GRID].
+ '[DIAGNOSTIC]'
+Check at Internet forbindelsen fungerer korrekt.
+
+
+
+ Besked template [PATH] kunne ikke findes.
+
+
+
+ Gem ændringer til nuværende tøj/krops del?
+
+
+
+ Der var problemer med upload af teksten til et script af følgende årsager: [REASON]. Prøv igen senere.
+
+
+ Der var problemer med at uploade den kompileret script af følgende årsager: [REASON]. Prøv igen senere.
+
+
+ Der var et problem med skrivning af animations data. Prøv igen senere.
+
+
+ Der var problemer med at uploade billedet til auktionen af følgende årsager: [REASON]
+
+
+ Ude af stand til at se indholdet af mere end ét element ad gangen.
+Vælg kun en genstand, og prøv igen.
+
+
+ Gem alle ændringer til tøj/krops dele?
+
+
+
+ 'Ikke-venner' vil ikke vide, at du har valgt at ignorere deres opkald og personlige beskeder (IM)
+
+
+
+ Bemærk: Når du aktiverer dette valg, kan enhver der bruger denne computer se dine favorit lokationer.
+
+
+
+ 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]?
+
+
+
+ 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?
+
+
+
+ Ønsker du at tilbagekalder ændre-rettigheder for [NAME]?
+
+
+
+ Vil du tilbagekalde rettighederne for de valgte beboere?
+
+
+
+ Kunne ikke oprette gruppe.
+[MESSAGE]
+
+
+
+ [NEEDS_APPLY_MESSAGE]
+[WANT_APPLY_MESSAGE]
+
+
+
+ Du skal angive et emne for at sende en gruppe besked.
+
+
+
+ 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?
+
+
+
+ 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]'?
+
+
+
+ Du er ved at smide et vedhæng.
+ Er du sikker på at du vil fortsætte?
+
+
+
+ Du melder dig ind i gruppen [NAME].
+Ønsker du at fortsætte?
+
+
+
+ Tilmelding til denne gruppe koster L$[COST].
+Du har ikke nok L$ til denne tilmelding.
+
+
+ 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.
+
+
+
+ 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].
+
+
+ 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.
+
+
+
+ E-mail dette billede med standard emne eller besked?
+
+
+
+ Der var et problem med at sende billedet på grund af følgende: [REASON]
+
+
+ Kunne ikke vedhæfte objekt.
+Overskrider vedhæftnings begrænsning på [MAX_ATTACHMENTS] objekter. Tag venligst en anden vedhæftning af først.
+
+
+ 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?
+
+
+
+ Du skal indtaste enten dit brugernavn eller både dit fornavn og efternavn for din avatar i brugernavn feltet, derefter log på igen.
+
+
+ Du har valgt at slette media tilknyttet denne overflade.
+Er du sikker på at du vil fortsætte?
+
+
+
+ Ikke nok penge til at oprette annonce.
+
+
+
+ Slet favorit <nolink>[PICK]</nolink>?
+
+
+ Slet valgte sæt?
+
+
+
+ Cache vil blive tømt ved næste genstart af [APP_NAME].
+
+
+ Cache vil blive fjernet ved næste genstart af [APP_NAME].
+Note: This will clear the cache.
+
+
+ Port ændringer vil blive effektueret ved næste genstart af [APP_NAME].
+
+
+ Den nye hud vil blive vist ved næste genstart af [APP_NAME].
+
+
+ Ændring af sprog vil først have effekt efter genstart af [APP_NAME].
+
+
+ Ups, din start region er ikke angivet.
+Indtast venligst navn på region i Start lokation feltet eller vælg "Min sidste lokation" eller "Hjem".
+
+
+
+ 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?
+
+
+
+ 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).
+
+
+
+ [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.
+
+
+ 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?
+
+
+ Du har ikke tilladelse til at videreføre den valgte mappe.
+
+
+ Du har smidt [AVATAR_NAME] ud af gruppen [GROUP_NAME]
+
+
+ [EXTRA]
+
+Gå til [_URL] for information om køb af L$?
+
+
+ Fejl i WAV fil (chunk size):
+[FILE]
+
+
+ Kunne ikke 'forstå' filen: [FILE]
+
+
+ Vi kan ikke udfylde dit brugernavn og password. Dette kan ske hvis du ændrer netværksopsætning
+
+
+
+ [APP_NAME] understøtter p.t. ikke at send flere animationsfiler ad gangen.
+
+
+ Du har tilføjet "[LANDMARK_NAME]" til din [FOLDER_NAME] mappe.
+
+
+ Du har allerede et landemærke for denne lokation.
+
+
+
+ Ikke muligt at åbne script i objekt uden 'Redigére' rettigheder.
+
+
+ Teleport fejlede.
+[REASON]
+
+
+ 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].
+
+
+ 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].
+
+
+ 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.
+
+
+ Beklager, systemet kunne ikke finde landmærke destinationen.
+
+
+ Beklager, systemet kunne ikke fuldføre teleport forbindelse.
+Prøv igen om lidt.
+
+
+ Beklager, du har ikke adgang til denne teleport destination.
+
+
+ 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.
+
+
+ Tekniske problemer hindrer at din teleport kan gennemføres.
+Prøv venligst igen om lidt eller vælg et mindre travlt område.
+
+
+ Beklager, men systemet kunne ikke fuldføre din teleport i rimelig tid. Prøv venligst igen om lidt.
+
+
+ Beklager, men systemet kunne ikke fuldføre skift til anden region i rimelig tid. Prøv venligst igen om lidt.
+
+
+ Ikke muligt at fine teleport destination. Destinationen kan være midlertidig utilgængelig eller findes ikke mere.
+Prøv evt. igen om lidt.
+
+
+ Beholdningssystemet er ikke tilgængelig lige nu.
+
+
+ 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?
+
+
+ Ikke i stand til at købe land:
+Kan ikke finde region som dette land er i.
+
+
+ Du kan ikke lukke 'Køb land' vinduet før [APP_NAME] har vurderet en pris på denne transaktion.
+
+
+ Land kunne ikke dedikeres:
+Kunne ikke finde den region land ligger i.
+
+
+ Kunne ikke efterlade land:
+Kan ikke finde den region landet ligger i.
+
+
+ Kunne ikke opdele land:
+Kan ikke finde den region landet ligger i.
+
+
+ Kunne ikke opdele land:
+Kan ikke finde den region landet ligger i.
+
+
+ Kunne ikke gemme [NAME] i den centrale database.
+Dette er typisk en midlertidig fejl. Venligst rediger og gem igen om et par minutter.
+
+
+ Du er blevet logget af [SECOND_LIFE]
+ [MESSAGE]
+
+
+
+ Venner kan give tilladelse til at følge hinanden
+på Verdenskortet eller modtage status opdateringer.
+
+Tilbyd venskab til [NAME]?
+
+
+
+ Gem det som jeg har på som nyt sæt:
+
+
+
+ Gem genstand til beholdning som:
+
+
+
+ Nyt navn til sæt:
+
+
+
+ Ønsker du at fjerne [NAME] fra din venneliste?
+
+
+ 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?
+
+
+
+ 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]'?
+
+
+
+
+
+ Den ønskede lokation er ikke tilgængelig lige nu.
+Du er blevet flyttet til en region in nærheden.
+
+
+ Din sidste lokation er ikke tilgængelig for øjeblikket.
+Du er blevet flyttet til en region in nærheden.
+
+
+ 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.
+
+
+ Dit tøj hentes stadig ned.
+Du kan bruge [SECOND_LIFE] normalt og andre personer vil se dig korrekt.
+
+
+
+ [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?
+
+
+ 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.
+
+
+ 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.
+
+
+
+ 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]
+
+
+
+ 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?
+
+
+
+ [NAME] L$ [PRICE] Du har ikke nok L$ til dette.
+
+
+ [NAME] har givet dig rettighed til at redigere sine objekter.
+
+
+ Dinne rettigheder til at redigere objekter ejet af [NAME] er fjernet
+
+
+ Ikke muligt at købe mere end et objekt ad gangen. Vælg kun ét objekt og prøv igen.
+
+
+ En ny version af [APP_NAME] er tilgængelig.
+[MESSAGE]
+Du skal hente denne version for at bruge [APP_NAME].
+
+
+ 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.
+
+
+ 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.
+
+
+ En ny version af [APP_NAME] er tilgængelig.
+[MESSAGE]
+Du skal hente denne version for at kunne benytte [APP_NAME].
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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?
+
+
+ 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?
+
+
+ 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?
+
+
+ Der opstod en fejl ved installation af opdatering.
+Hent og installér venligst den nyeste version fra
+http://secondlife.com/download.
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ Vi har hentet en opdatering til din [APP_NAME] installation.
+Version [VERSION] [[RELEASE_NOTES_FULL_URL] Information about this update]
+
+
+
+ Vi har hentet en opdatering til din [APP_NAME] installation.
+Version [VERSION] [[RELEASE_NOTES_FULL_URL] Information about this update]
+
+
+
+ Vi har hentet en påkrævet opdatering.
+Version [VERSION]
+
+Du skal genstarte [APP_NAME] for at installere denne opdatering.
+
+
+
+ Du skal genstarte [APP_NAME] for at installere opdateringen.
+
+
+
+
+
+
+ Ønsker du at åbne din web browser for at se dette indhold?
+
+
+
+ Gå til [http://secondlife.com/account/ Dashboard] for at administrere din konto?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Ønsker du at åbne 'Scripting Guide' for hjælp til scripting?
+
+
+
+ Ønsker du at besøge LSL portalen for hjælp til scripting?
+
+
+
+
+
+
+ Er du SIKKER på at du vil sparke alle beboere ud?
+
+
+
+ Beklager, men du kan ikke blokere en Linden.
+
+
+ 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.
+
+
+ Du har allerede blokeret dette navn.
+
+
+ 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.
+
+
+
+ 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.
+
+
+ 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.
+
+
+
+ Spark beboere ud med hvilken besked?
+
+
+ Frys beboeren med hvilken besked?
+
+
+ Fjern frysning af beboeren med hvilken besked?
+
+
+ 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.
+
+
+ Beklager, du kan ikke ændre dit visningsnavn. Hvis du mener dette skyldes en fejl, kontakt venligst support.
+
+
+ Beklager, mavnet er for langt. Visningsnavne kan ikke indholde mere end [LENGTH] karakterer.
+
+Prøv venligst med et kortere navn.
+
+
+ Beklager, vi kunne ikke sætte dit visningsnavn. Prøv venligst igen senere.
+
+
+ Visningsnavnene du angav matcher ikke. Prøv at taste ind igen.
+
+
+ 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.
+
+
+ Beklager, vi kunne ikke sætte dit valgte navn da det indholder et ikke tilladt ord.
+
+ Prøv med et andet navn.
+
+
+ Visningsnavnet du prøver at angive indeholder ugyldige karakterer.
+
+
+ Dit vinsningsnavn skal indeholde andre bogstaver end tegnsætningstegn.
+
+
+ [OLD_NAME] ([SLID]) er nu kendt som [NEW_NAME].
+
+
+ Tilbyd en teleport til din position med følgende besked?
+
+
+
+ Tilkald beboer til din lokation?
+
+
+ Er du sikker på at du vil teleportere til <nolink>[LOCATION]</nolink>?
+
+
+
+ Teleport til [PICK]?
+
+
+
+ Teleport til [CLASSIFIED]?
+
+
+
+ Teleport til [HISTORY_ENTRY]?
+
+
+
+ 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?
+
+
+ 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.
+
+
+
+ Du har ikke adgang til denne region på grund af din valgte indholdsrating.
+
+Gå til 'Knowledge Base' for mere information om indholdsratings.
+
+ https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=6010
+
+
+
+
+ Du har ikke adgang til denne region på grund af din valgte indholdsrating.
+
+
+ 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.
+
+
+
+ Din indholdsrating er nu [RATING].
+
+
+ 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.
+
+
+
+ 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.
+
+ https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=6010
+
+
+
+
+ Du kan ikke kræve dette land på grund af din indholdsrating.
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ Du kan ikke købe dette land på grund af din nuværende indholdsrating.
+
+Gå til 'Knowledge Base' for yderligere detaljer om indholdsrating.
+
+ https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=6010
+
+
+
+
+ Du kan ikke købe dette land på grund af din nuværende indholdsrating indstilling.
+
+
+ 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.
+
+
+
+ Der er valgt for mange prims. Vælg venligst [MAX_PRIM_COUNT] eller færre og prøv igen
+
+
+ Kunne ikke hente notecard indhold.
+
+
+
+ Indeholder denne annonce 'Mature' indhold?
+
+
+
+ Indeholder denne gruppe 'Mature' indhold?
+
+
+
+ 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.
+
+
+ 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].
+
+
+
+
+
+
+
+
+ Advarsel: 'Betal objekt' klik-aktionen er blevet aktiveret, men det vil kun virke, hvis et script med et 'money()' event er tilføjet.
+
+
+
+ Gå til [http://secondlife.com/account/ Dashboard] for at se konto-historik?
+
+
+
+ Er du sikker på at du vil afslutte?
+
+
+
+ [QUESTION]
+
+
+
+ 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.
+
+
+ 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
+
+
+
+
+
+
+
+
+ Mappen '[FOLDERNAME]' er en system mappe. At slette denne mappe kan medføre ustabilitet. Er du sikker på at du vil slette den?
+
+
+
+ Er du sikker på at du ønsker at tømme papirkurven?
+
+
+
+ Er du sikker på at du ønsker at slette din historik om besøg, web og søgninger?
+
+
+
+ Er du sikker på du vil slette alle cookies?
+
+
+ Er du sikker på at du vil slette indholdet i din 'Fundne genstande'?
+
+
+
+ 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.
+
+
+
+
+
+
+
+
+
+ Ikke i stand til at start chat med [RECIPIENT].
+[REASON]
+
+
+
+ Du kan ikke købe en genstand mens den er vedhæftet.
+
+
+ Vil du automatisk tage det tøj på du er ved at lave?
+
+
+
+ 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]
+
+
+
+ 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]
+
+
+
+ [MESSAGE]
+
+
+ [MESSAGE]
+
+
+ Annulléret
+
+
+ Annulléret sid
+
+
+ Annulléreret vedhæft
+
+
+ Erstattet manglende tøj/kropsdele med standard.
+
+
+ [NAME] er logget på
+
+
+ [NAME] er logget af
+
+
+ Selvom du nok er meget sød, kan du ikke tilføje dig selv som ven.
+
+
+ Uploader billeder fra verdenen og www...
+(Tager omkring 5 minutter.)
+
+
+ Du betalte L$[AMOUNT] for at uploade.
+
+
+ Billeder fra www er uploadet.
+
+
+ Billeder fra verdenen er uploadet
+
+
+ Terrain.raw downloadet
+
+
+ Bevægelsen [NAME] mangler i databasen.
+
+
+ Kunne ikke indlæse læse bevægelse [NAME].
+
+
+ Landmærke mangler i databasen.
+
+
+ Ikke muligt at indlæse landmærke. Prøv venligst igen.
+
+
+ Din Caps Lock er aktiveret.
+Det kan påvirke din indtastning af password.
+
+
+ Note mangler i databasen.
+
+
+ Du har ikke rettigheder til at se denne note.
+
+
+ Utilstrækkelige tilladelser til at danne genstanden.
+
+
+ Ikke muligt at indlæse note.
+Prøv venligst igen.
+
+
+ Script mangler i databasen.
+
+
+ Utilstrækkelige tilladelser til at se script.
+
+
+ Ikke muligt at indlæse script. Prøv venligst igen.
+
+
+ Det komplette indhold, du tilbyder, er ikke endnu tilgængelig lokalt. Prøv venligst at tilbyde tingene igen om lidt.
+
+
+ Du kan ikke ændre beskyttede kategorier.
+
+
+ Du kan ikke fjerne beskyttede kategorier.
+
+
+ Ikke muligt at købe, imens genstandens data hentes.
+Prøv venligst igen.
+
+
+ Ikke muligt at lænke imens genstandens data hentes.
+Prøv venligst igen.
+
+
+ Du kan kun købe objekter fra én ejer ad gangen.
+Vælg venligst et enkelt objekt.
+
+
+ Dette objekt er ikke til salg.
+
+
+ Starter gud-tilstand, niveau [LEVEL]
+
+
+ Stopper gud-tilstand, niveau [LEVEL]
+
+
+ Du har ikke rettigheder til at kopiere dette.
+
+
+ [NAME] modtog dit tilbud til hans/hendes beholdning.
+
+
+ [NAME] afviste det du tilbød fra din beholdning.
+
+
+ [NAME]: [MESSAGE]
+
+
+ Dit visitkort blev accepteret.
+
+
+ Dit visitkort blev afvist.
+
+
+ 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'.)
+
+
+ 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').
+
+
+ Kan ikke vælge land på tværs af grænser.
+Prøv at vælge mindre stykker land.
+
+
+ Visse ord er fjernet fra din søge-sætning på grund af at disse strider mod de generelle 'Community Standards'.
+
+
+ Vælg venligst mindst en indholdstype for at søge (PG, Mature, or Adult).
+
+
+ [MESSAGE]
+
+
+ [MESSAGE]
+
+
+ [MESSAGE]
+
+
+ Besked om begivenhed:
+
+[NAME]
+[DATE]
+
+
+
+ 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.
+
+
+
+ Deaktiverede bevægelser med samme udløser: [NAMES]
+
+
+ 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.
+
+
+ Ingen Media Plugin blev fundet til at håndtere mime af typen "[MIME_TYPE]". Media af denne type vil ikke være tilgængelig.
+
+
+ Følgende Media Plugin has fejlede:
+ [PLUGIN]
+
+Prøv venligst at geninstallere plugin eller kontakt leverandøren hvis problemerne bliver ved.
+
+
+
+ De genstande du ejer på det valgte stykke land er blevet returneret til din beholdning.
+
+
+ Objekterne på den valgte parcel, ejet af [NAME], er blevet returneret til vedkommendes beholdning.
+
+
+ Objekterne i den valgte parcel, ejet af beboeren '[NAME]', er blevet returneret til deres ejer.
+
+
+ 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.
+
+
+ Genstandene på det valgte stykke land, der IKKE er ejet af dig, er blevet returneret til deres ejere.
+
+
+ Besked fra [NAME]:
+<nolink>[MSG]</nolink>
+
+
+ Dette land er åbnet for 'skade'.
+Du kan blive skadet her. Hvis du dør, vil du blive teleporteret til din hjemme lokation.
+
+
+ Dette sted har ikke aktiveret ret til flyvning.
+Du kan ikke flyve her.
+
+
+ Dette sted tillader ikke skubning. Du kan ikke skubbe andre, med mindre du ejer dette land.
+
+
+ Dette sted har ikke aktiveret stemme-chat. Du vil ikke kunne høre nogen tale.
+
+
+ Dette sted har ikke aktiveret bygge-ret. Du kan ikke bygge eller 'rezze' objekter her.
+
+
+ En administrator har midlertidig stoppet scripts i denne region.
+
+
+ Denne region kører ikke nogen scripts.
+
+
+ Dette sted tillader ikke udefra kommende scripts.
+
+Ingen scripts vil virke her, udover de som tilhører ejeren af landet.
+
+
+ Du kan kun kræve land i den region du befinder dig i.
+
+
+ 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.
+
+
+ Du er blokeret i denne region.
+
+
+ Du kan ikke tilslutte dig denne 'Teen' region.
+
+
+ Du har ikke de rette betalingsoplysninger til at komme ind i denne region.
+
+
+ Du skal være aldersgodkendt for at komme ind på denne parcel.
+
+
+ Destinations region ikke fundet.
+
+
+ Du har ikke adgang til denne destination.
+
+
+ Kan ikke skifte til ny region via en blokeret parcel. Prøv en anden vej ind.
+
+
+ Du er blevet omdirigeret til en telehub.
+
+
+ Kunne ikke teleportere nærmere til destination.
+
+
+ Teleport afbrudt.
+
+
+ Den region du prøver at komme ind i er fuld for øjeblikket.
+Prøv igen om lidt.
+
+
+ Generel fejl.
+
+
+ Du blev sendt til en forkert region. Prøv igen.
+
+
+ Ikke en gyldig agent ID.
+
+
+ Ikke noget gyldig sessions-ID
+
+
+ Ingen gyldig kode for kredsløb.
+
+
+ Ikke et gyldigt klokkeslæt.
+
+
+ Kunne ikke skabe fast forbindelse.
+
+
+ Der opstod en intern fejl ved teleportering til din teleport destination.. Der kan være generelle problemer med [SECOND_LIFE] lige nu.
+
+
+ Kunne ikke finde et egnet teleport sted i denne region.
+
+
+ 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.
+
+
+ Kunne ikke finde et gyldigt landingspunkt.
+
+
+ No valid parcel could be found.
+
+
+ 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.
+
+
+
+ [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.
+
+
+
+ [NAME]
+
+[MESSAGE]
+
+
+ [MESSAGE]
+
+
+
+ [NAME_SLURL] har tilbudt en teleport til deres lokation:
+
+[MESSAGE] - [MATURITY_STR] <icon>[MATURITY_ICON]</icon>
+
+
+
+ Tilbud om teleport sendt til [TO_NAME]
+
+
+ [MESSAGE]
+[URL]
+
+
+
+ [NAME_SLURL] tilbyder venskab.
+
+[MESSAGE]
+
+(Som udgangspunkt vil I være i stand til at se hinandens online status.)
+
+
+
+ Du har tilbudt venskab til [TO_NAME]
+
+
+ [NAME_SLURL] tilbyder venskab.
+
+(Som udgangspunkt, vil du være i stand til at se den andens online status)
+
+
+ [NAME] accepterede dit tilbud om venskab.
+
+
+ [NAME] afviste dit tilbud om venskab.
+
+
+ Tilbud om venskab accepteret.
+
+
+ Tilbud om venskab afvist.
+
+
+ [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.
+
+
+
+ Denne region vil genstarte om [MINUTES] minutter.
+Hvis du ikke forlader regionen, vil du blive logget af.
+
+
+ Denne region genstartes om [SECONDS] sekunder.
+Hvis du ikke forlader regionen, vil du blive logget af.
+
+
+ Indlæas websiden [URL]?
+
+[MESSAGE]
+
+Fra objekt: <nolink>[OBJECTNAME]</nolink>, ejer: [NAME]?
+
+
+
+ Det lykkedes ikke at finde [TYPE] i databasen.
+
+
+ Det lykkedes ikke at finde [TYPE] med navnet [DESC] i databasen.
+
+
+ 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å.
+
+
+ '<nolink>[OBJECTNAME]</nolink>', et objekt ved ejet af '[NAME]', ønsker at:
+
+[QUESTIONS]
+Er dette OK?
+
+
+
+ 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?
+
+
+
+ [NAME]'s '<nolink>[TITLE]</nolink>'
+[MESSAGE]
+
+
+
+ [GROUPNAME]'s '<nolink>[TITLE]</nolink>'
+[MESSAGE]
+
+
+
+ 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]
+
+
+ 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.
+
+
+ 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.
+
+
+ Du må kun vælge op til [MAX_SELECT] genstande på denne liste.
+
+
+ [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.
+
+
+
+ [NAME] har fået sendt en besked og blokering er derfor automatisk blevet fjernet.
+
+
+ [NAME] har fået givet penge og blokering er derfor automatisk blevet fjernet.
+
+
+ [NAME] er blevet tilbud noget fra beholdning og blokering er derfor automatisk blevet fjernet.
+
+
+ [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.
+
+
+
+ [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.
+
+
+
+ [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.
+
+
+
+ Den stemme-chat, du prøver at tilslutte dig, [VOICE_CHANNEL_NAME], har nået maksiumum kapacitet. Prøv venligst igen senere.
+
+
+ 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.
+
+
+ Du er blevet koblet fra [VOICE_CHANNEL_NAME]. Du vil nu blive koblet til almindelig voice-chat.
+
+
+ [VOICE_CHANNEL_NAME] har afsluttet samtalen. Du vil nu blive koblet til almindelig voice-chat.
+
+
+ [VOICE_CHANNEL_NAME] har avist dit opkald. Du vil nu blive koblet til almindelig voice-chat.
+
+
+ [VOICE_CHANNEL_NAME] er ikke tilgængelig til at modtage dit opkald. Du vil nu blive koblet til almindelig voice-chat.
+
+
+ Det lykkedes ikke at forbinde til [VOICE_CHANNEL_NAME], prøv venligst igen senere. Du vil nu blive koblet til almindelig voice-chat.
+
+
+ Vi laver en stemmekanal til dig. Det kan tage op til et minut.
+
+
+ En eller flere af dine stemme "morphs" er udløbet.
+[[URL] Click here] for at forny dit abbonnement.
+
+
+ Den aktive stemme "morph" er udløbet og din normale stemme opsætning er genaktiveret.
+[[URL] Click here] for at forny dit abbonnement.
+
+
+ En eller flere af dine stemme "morphs" vil udløbe om mindre end [INTERVAL] dage.
+[[URL] Click here] for at forny dit abbonnement.
+
+
+ Nye stemme "morphs" er tilgængelige!
+
+
+ Kun medlemmer af en bestemt gruppe kan besøge dette område.
+
+
+ Du kan ikke komme ind på området. Du er blevet udelukket.
+
+
+ Du kan ikke komme ind på området. Du er ikke på adgangslisten.
+
+
+ Du har ikke tilladelse til at tilslutte dig stemme-chat på [VOICE_CHANNEL_NAME].
+
+
+ En fejl er opstået under forsøget på at koble sig på stemme chatten [VOICE_CHANNEL_NAME]. Pråv venligst senere.
+
+
+ Den SLurl du klikkede på understøttes ikke.
+
+
+ En SLurl blev modtaget en ikke sikret browser og den er blevet blokeret af sikkerhedsmæssige årsager.
+
+
+ Flere SLurls blev modtaget fra en browser i et kort tidsrum.
+De vil blive blokeret nogle få sekunder af sikkerhedsmæssige årsager.
+
+
+ [MESSAGE]
+
+
+
+ Er du sikker på at du vil lukke alle personlige samtaler (IM)?
+
+
+
+ Vedhæng er blevet gemt.
+
+
+ Ikke muligt at finde hjælp om dette element.
+
+
+ Server fejl: Media opdatering eller "get" fejlede.
+'[ERROR]'
+
+
+
+ Din tekst chat er blevet slukket af moderator.
+
+
+
+ Din stemme er blevet slukket af moderatoren.
+
+
+
+ Er du sikker på at du vil slette teleport historikken?
+
+
+
+ Den valgte knap kan ikke vises lige nu.
+Knappen vil blive vist når der er nok plads til den.
+
+
+ Vælg beboere at dele med.
+
+
+ Er du sikker på at du vil dele følgende genstande:
+
+<nolink>[ITEMS]</nolink>
+
+Me følgende beboere:
+
+[RESIDENTS]
+
+
+
+ Genstande er nu delt.
+
+
+ Dedikering til gruppe fejlede.
+
+
+ ( [EXISTENCE] sekunder i live )
+Avatar '[NAME]' var ikke sky mere, efter [TIME] sekunder.
+
+
+ ( [EXISTENCE] seconds alive )
+Du blev færdig med at fremvise dit sæt efter [TIME] sekunder.
+
+
+ ( [EXISTENCE] seconds alive )
+Du sendte en opdatering af dit udseende efter [TIME] sekunder.
+[STATUS]
+
+
+ ( [EXISTENCE] sekunder i live )
+Avatar '[NAME]' blev til "sky".
+
+
+ ( [EXISTENCE] sekunder i live )
+Avatar '[NAME]' appeared.
+
+
+ ( [EXISTENCE] sekunder i live )
+Avatar '[NAME]' forsvandt efter [TIME] sekunder som "sky".
+
+
+ ( [EXISTENCE] sekunder i live )
+Avatar '[NAME]' skiftede til udseende modus.
+
+
+ ( [EXISTENCE] sekunder i live )
+Avatar '[NAME]' har forladt udseende modus.
+
+
+ Vi har problemer med at oprette forbindelse via [PROTOCOL] [HOSTID].
+Check venligst din netværks- og firewallsetup.
+
+
+
+ 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.
+
+
+
+ ( [EXISTENCE] sekunder i live )
+Avatar '[NAME]' forsvandt helt "uploaded".
+
+
+ ( [EXISTENCE] sekunder i live )
+Du uploadede en [RESOLUTION] "bagt" tekstur til '[BODYREGION]' efter [TIME] sekunder.
+
+
+ ( [EXISTENCE] sekunder i live )
+Du opdaterede en [RESOLUTION] "bagt" tekstur for '[BODYREGION]' efter [TIME] sekunder.
+
+
+ Er du sikker på at du vil forlade dette opkald?
+
+
+
+ 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?
+
+
+
+ For at deltage i samtalen tast tekst ind i chat feltet nedenfor.
+
+
+ For at rejse dig op og forlad siddeposition, tryk på "Stå op" knappen.
+
+
+ Destinationsguiden indeholder tusinder af nye steder der kan opleves. Vælg venligst et sted og vælg Teleport for at komme derhen.
+
+
+ Få hurtig tilgang til din beholdning, sæt, profiler og andet i dette side panel.
+
+
+ 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.
+
+
+ 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.
+
+
+ For at gå, brug piletasterne på tastaturet. Du kan løbe ved at trykke to gange på Pil-Op
+
+
+ For at ændre dit kamera-view, benyt kredsløbs og panoreringskontrollerne. Nulstil view ved at trykke Esc eller ved at gå.
+
+
+ Undersøg din beholdning for at finde ting. Nyeste genstand findes lettes under fanen "Nye ting"
+
+
+ Her er din nuværende balance af L$. Klik på Køb L$ for at købe flere Linden dollars.
+
+
+ En pop-up blev hindret i at blive vist.
+
+
+
+ Hjemmesiden på '<nolink>[HOST_NAME]</nolink>' in realm '[REALM]' kræver et brugernavn og password.
+
+
+
+ For at skifte tilstand skal du genstarte programmet.
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ Stemme kald kan kun benttes i avanceret tilstand. Ønsker du at logge ud for at skifte tilstand?
+
+
+
+ Det er kun mulig at dele i avanceret tilstand. Ønsker du at logge ud for at skifte tilstand?
+
+
+
+ Det er kun muligt at betale andre beboere i avanceret tilstand. Ønsker du at logge ud for at skifte tilstand?
+
+
+
+ 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].
+
+
+ Hvis du selv ejer land, kan du benytte det til hjemme lokation.
+Ellers kan du se på verdenskortet og finde steder markeret med "Infohub".
+
+
+ Du døde og er blevet teleporteret til din hjemmelokation.
+
+
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 0000000000..14250453eb
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/panel_adhoc_control_panel.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..bd20ece764
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/panel_bottomtray.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..23a5e79e22
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/panel_group_control_panel.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..b8a7ec0b34
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/panel_im_control_panel.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..2e0f726e1a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/panel_login.xml
@@ -0,0 +1,48 @@
+
+
+
+ http://join.secondlife.com/
+
+
+ http://secondlife.com/account/request.php
+
+
+
+
+ Brugernavn:
+
+
+
+ Password:
+
+
+
+
+ Tilstand:
+
+
+
+
+
+
+ Start ved:
+
+
+
+
+
+
+
+
+
+ Opret bruger
+
+
+ Har du glemt brugernavn eller password?
+
+
+ Hjælp til login
+
+
+
+
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 0000000000..2ee87433a4
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/panel_navigation_bar.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..49cd2c71f2
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/panel_people.xml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+ 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.
+
+
+ Fandt du ikke hvad du søgte? Prøv destinationsknappen nedenfor.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 0000000000..ce3a1d8b4e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/panel_side_tray_tab_caption.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
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 0000000000..6e7bdfc188
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/da/panel_status_bar.xml
@@ -0,0 +1,33 @@
+
+
+
+ Søndag:Mandag:Tirsdag:Onsdag:Torsdag:Fredag:Lørdag
+
+
+ Januar:Februar:Marts:April:Maj:Juni:Juli:August:September:Oktober:November:December
+
+
+ Packet Loss
+
+
+ Båndbredde
+
+
+ [hour12, datetime, slt]:[min, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt]
+
+
+ [weekday, datetime, slt], [day, datetime, slt] [month, datetime, slt] [year, datetime, slt]
+
+
+ L$ [AMT]
+
+
+
+
+
+
+ 24:00 PST
+
+
+
+
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 fbc119c483..72ba7fe41d 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 @@
+
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 0000000000..cc45f42169
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/panel_adhoc_control_panel.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/minimal/xui/de/panel_bottomtray.xml b/indra/newview/skins/minimal/xui/de/panel_bottomtray.xml
index a4d80921ec..2278bfb699 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 @@
+
+
+
+
+
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
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 abf8011d9d..0ef2234fec 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 @@
-
+
diff --git a/indra/newview/skins/minimal/xui/de/panel_people.xml b/indra/newview/skins/minimal/xui/de/panel_people.xml
index c6253e17de..4f8f70ad17 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 @@
+
+
+
diff --git a/scripts/gpu_table_tester b/scripts/gpu_table_tester
old mode 100644
new mode 100755