From 3e80fa3dbc943de9b784fedc202ba38cf238f46d Mon Sep 17 00:00:00 2001 From: David Parks Date: Mon, 2 Nov 2009 19:55:37 +0000 Subject: Sync up with render-pipeline-7 ignore-dead-branch --- indra/llmath/llvolume.cpp | 350 ++++++++++++++++++++++++++++++++++++++++++- indra/llmath/llvolume.h | 22 ++- indra/llmath/llvolumemgr.cpp | 2 +- indra/llmath/m4math.cpp | 11 ++ indra/llmath/m4math.h | 1 + indra/llmath/v2math.cpp | 15 ++ indra/llmath/v2math.h | 3 + 7 files changed, 392 insertions(+), 12 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index b8ef92f9a9..afa82ed399 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -46,6 +46,9 @@ #include "lldarray.h" #include "llvolume.h" #include "llstl.h" +#include "llsdserialize.h" +#include "zlib/zlib.h" + #define DEBUG_SILHOUETTE_BINORMALS 0 #define DEBUG_SILHOUETTE_NORMALS 0 // TomY: Use this to display normals using the silhouette @@ -1688,7 +1691,7 @@ LLVolume::LLVolume(const LLVolumeParams ¶ms, const F32 detail, const BOOL ge mGenerateSingleFace = generate_single_face; generate(); - if (mParams.getSculptID().isNull()) + if (mParams.getSculptID().isNull() && params.getSculptType() == LL_SCULPT_TYPE_NONE) { createVolumeFaces(); } @@ -1839,6 +1842,295 @@ BOOL LLVolume::generate() return FALSE; } +bool LLVolumeFace::VertexData::operator<(const LLVolumeFace::VertexData& rhs)const +{ + const U8* l = (const U8*) this; + const U8* r = (const U8*) &rhs; + + for (U32 i = 0; i < sizeof(VertexData); ++i) + { + if (l[i] != r[i]) + { + return r[i] < l[i]; + } + } + + return false; +} + +bool LLVolumeFace::VertexData::operator==(const LLVolumeFace::VertexData& rhs)const +{ + const U8* l = (const U8*) this; + const U8* r = (const U8*) &rhs; + + for (U32 i = 0; i < sizeof(VertexData); ++i) + { + if (l[i] != r[i]) + { + return false; + } + } + + return true; +} + + +BOOL LLVolume::createVolumeFacesFromFile(const std::string& file_name) +{ + std::ifstream is; + + is.open(file_name.c_str(), std::ifstream::in | std::ifstream::binary); + + BOOL success = createVolumeFacesFromStream(is); + + is.close(); + + return success; +} + +BOOL LLVolume::createVolumeFacesFromStream(std::istream& is) +{ + mSculptLevel = -1; // default is an error occured + + LLSD header; + { + if (!LLSDSerialize::deserialize(header, is, 1024*1024*1024)) + { + llwarns << "not a valid mesh asset!" << llendl; + return FALSE; + } + } + + std::string nm[] = + { + "impostor", + "low_lod", + "medium_lod", + "high_lod" + }; + + S32 lod = llclamp((S32) mDetail, 0, 3); + + while (lod < 4 && header[nm[lod]]["offset"].asInteger() == -1) + { + ++lod; + } + + if (lod >= 4) + { + llwarns << "Couldn't load model for given lod" << llendl; + return FALSE; + } + + is.seekg(header[nm[lod]]["offset"].asInteger(), std::ios_base::cur); + + + U8* result = NULL; + U32 cur_size = 0; + + { + //input stream is now pointing at a zlib compressed block of LLSD + //decompress block + z_stream strm; + + const U32 CHUNK = 65536; + + S32 size = header[nm[lod]]["size"].asInteger(); + U8 *in = new U8[size]; + is.read((char*) in, size); + + U8 out[CHUNK]; + + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + strm.avail_in = size; + strm.next_in = in; + + S32 ret = inflateInit(&strm); + + if (ret != Z_OK) + { + llerrs << "WTF?" << llendl; + } + + do + { + strm.avail_out = CHUNK; + strm.next_out = out; + ret = inflate(&strm, Z_NO_FLUSH); + if (ret == Z_STREAM_ERROR) + { + inflateEnd(&strm); + free(result); + delete [] in; + return FALSE; + } + + switch (ret) + { + case Z_NEED_DICT: + ret = Z_DATA_ERROR; + case Z_DATA_ERROR: + case Z_MEM_ERROR: + inflateEnd(&strm); + free(result); + delete [] in; + return FALSE; + break; + } + + U32 have = CHUNK-strm.avail_out; + + result = (U8*) realloc(result, cur_size + have); + memcpy(result+cur_size, out, have); + cur_size += have; + + } while (strm.avail_out == 0); + + inflateEnd(&strm); + delete [] in; + + if (ret != Z_STREAM_END) + { + free(result); + return FALSE; + } + } + + //result now points to the decompressed LLSD block + + LLSD mdl; + + { + std::string res_str((char*) result, cur_size); + std::istringstream istr(res_str); + + if (!LLSDSerialize::deserialize(mdl, istr, cur_size)) + { + llwarns << "not a valid mesh asset!" << llendl; + return FALSE; + } + } + + + free(result); + + + { + U32 face_count = mdl.size(); + + mVolumeFaces.resize(face_count); + + for (U32 i = 0; i < face_count; ++i) + { + 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]; + + face.mHasBinormals = FALSE; + + //copy out indices + face.mIndices.resize(idx.size()/2); + if (idx.empty()) + { //why is there an empty index list? + continue; + } + + U16* indices = (U16*) &(idx[0]); + for (U32 j = 0; j < idx.size()/2; ++j) + { + face.mIndices[j] = indices[j]; + } + + //copy out vertices + U32 num_verts = pos.size()/(3*2); + face.mVertices.resize(num_verts); + + LLVector3 min_pos; + LLVector3 max_pos; + LLVector2 min_tc; + LLVector2 max_tc; + + min_pos.setValue(mdl[i]["PositionDomain"]["Min"]); + max_pos.setValue(mdl[i]["PositionDomain"]["Max"]); + min_tc.setValue(mdl[i]["TexCoord0Domain"]["Min"]); + max_tc.setValue(mdl[i]["TexCoord0Domain"]["Max"]); + + F32 scale = llclamp((F32) mdl[i]["Scale"].asReal(), 1.f, 10.f); + + LLVector3 pos_range = max_pos - min_pos; + LLVector2 tc_range = max_tc - min_tc; + + LLVector3& min = face.mExtents[0]; + LLVector3& max = face.mExtents[1]; + + min = max = LLVector3(0,0,0); + + for (U32 j = 0; j < num_verts; ++j) + { + U16* v = (U16*) &(pos[j*3*2]); + + face.mVertices[j].mPosition.setVec( + (F32) v[0] / 65535.f * pos_range.mV[0] + min_pos.mV[0], + (F32) v[1] / 65535.f * pos_range.mV[1] + min_pos.mV[1], + (F32) v[2] / 65535.f * pos_range.mV[2] + min_pos.mV[2]); + + face.mVertices[j].mPosition *= scale; + + if (j == 0) + { + min = max = face.mVertices[j].mPosition; + } + else + { + update_min_max(min,max,face.mVertices[j].mPosition); + } + + U16* n = (U16*) &(norm[j*3*2]); + + face.mVertices[j].mNormal.setVec( + (F32) n[0] / 65535.f * 2.f - 1.f, + (F32) n[1] / 65535.f * 2.f - 1.f, + (F32) n[2] / 65535.f * 2.f - 1.f); + + U16* t = (U16*) &(tc[j*2*2]); + + face.mVertices[j].mTexCoord.setVec( + (F32) t[0] / 65535.f * tc_range.mV[0] + min_tc.mV[0], + (F32) t[1] / 65535.f * tc_range.mV[1] + min_tc.mV[1]); + } + + } + } + + mSculptLevel = 0; // success! + return TRUE; +} + +void LLVolume::copyVolumeFaces(LLVolume* volume) +{ + mVolumeFaces = volume->mVolumeFaces; + mSculptLevel = 0; +} + +S32 const LL_SCULPT_MESH_MAX_FACES = 8; + +S32 LLVolume::getNumFaces() const +{ + U8 sculpt_type = (mParams.getSculptType() & LL_SCULPT_TYPE_MASK); + + if (sculpt_type == LL_SCULPT_TYPE_MESH) + { + return LL_SCULPT_MESH_MAX_FACES; + } + + return (S32)mProfilep->mFaces.size(); +} + void LLVolume::createVolumeFaces() { @@ -1864,6 +2156,11 @@ void LLVolume::createVolumeFaces() LLProfile::Face& face = mProfilep->mFaces[i]; vf.mBeginS = face.mIndex; vf.mNumS = face.mCount; + if (vf.mNumS < 0) + { + llerrs << "Volume face corruption detected." << llendl; + } + vf.mBeginT = 0; vf.mNumT= getPath().mPath.size(); vf.mID = i; @@ -1907,6 +2204,10 @@ void LLVolume::createVolumeFaces() if (face.mFlat && vf.mNumS > 2) { //flat inner faces have to copy vert normals vf.mNumS = vf.mNumS*2; + if (vf.mNumS < 0) + { + llerrs << "Volume face corruption detected." << llendl; + } } } else @@ -2309,7 +2610,6 @@ bool LLVolumeParams::operator<(const LLVolumeParams ¶ms) const return mSculptID < params.mSculptID; } - return mSculptType < params.mSculptType; @@ -3379,22 +3679,29 @@ void LLVolume::generateSilhouetteVertices(std::vector &vertices, S32 face_mask) { LLMemType m1(LLMemType::MTYPE_VOLUME); - + vertices.clear(); normals.clear(); segments.clear(); + if (mParams.getSculptType() == LL_SCULPT_TYPE_MESH) + { + return; + } + S32 cur_index = 0; //for each face for (face_list_t::iterator iter = mVolumeFaces.begin(); iter != mVolumeFaces.end(); ++iter) { - const LLVolumeFace& face = *iter; + LLVolumeFace& face = *iter; - if (!(face_mask & (0x1 << cur_index++))) + if (!(face_mask & (0x1 << cur_index++)) || + face.mIndices.empty() || face.mEdge.empty()) { continue; } + if (face.mTypeMask & (LLVolumeFace::CAP_MASK)) { } @@ -3594,6 +3901,8 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, F32 closest_t = 2.f; // must be larger than 1 + end_face = llmin(end_face, getNumVolumeFaces()-1); + for (S32 i = start_face; i <= end_face; i++) { const LLVolumeFace &face = getVolumeFace((U32)i); @@ -4103,11 +4412,28 @@ BOOL LLVolumeParams::exportLegacyStream(std::ostream& output_stream) const return TRUE; } +LLSD LLVolumeParams::sculptAsLLSD() const +{ + LLSD sd = LLSD(); + sd["id"] = getSculptID(); + sd["type"] = getSculptType(); + + return sd; +} + +bool LLVolumeParams::sculptFromLLSD(LLSD& sd) +{ + setSculptID(sd["id"].asUUID(), (U8)sd["type"].asInteger()); + return true; +} + LLSD LLVolumeParams::asLLSD() const { LLSD sd = LLSD(); sd["path"] = mPathParams; sd["profile"] = mProfileParams; + sd["sculpt"] = sculptAsLLSD(); + return sd; } @@ -4115,6 +4441,8 @@ bool LLVolumeParams::fromLLSD(LLSD& sd) { mPathParams.fromLLSD(sd["path"]); mProfileParams.fromLLSD(sd["profile"]); + sculptFromLLSD(sd["sculpt"]); + return true; } @@ -4157,6 +4485,12 @@ const F32 MIN_CONCAVE_PATH_WEDGE = 0.111111f; // 1/9 unity // for collison purposes BOOL LLVolumeParams::isConvex() const { + if (!getSculptID().isNull()) + { + // can't determine, be safe and say no: + return FALSE; + } + F32 path_length = mPathParams.getEnd() - mPathParams.getBegin(); F32 hollow = mProfileParams.getHollow(); @@ -5011,7 +5345,11 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) if (!partial_build) { mIndices.resize(num_indices); - mEdge.resize(num_indices); + + if (volume->getParams().getSculptType() != LL_SCULPT_TYPE_MESH) + { + mEdge.resize(num_indices); + } } else { diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 871b334452..9f595ccbc4 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -186,6 +186,9 @@ const U8 LL_SCULPT_TYPE_CYLINDER = 4; const U8 LL_SCULPT_TYPE_MASK = LL_SCULPT_TYPE_SPHERE | LL_SCULPT_TYPE_TORUS | LL_SCULPT_TYPE_PLANE | LL_SCULPT_TYPE_CYLINDER; +// need to change this (these) names +const U8 LL_SCULPT_TYPE_MESH = 5; + const U8 LL_SCULPT_FLAG_INVERT = 64; const U8 LL_SCULPT_FLAG_MIRROR = 128; @@ -575,6 +578,9 @@ public: BOOL importLegacyStream(std::istream& input_stream); BOOL exportLegacyStream(std::ostream& output_stream) const; + LLSD sculptAsLLSD() const; + bool sculptFromLLSD(LLSD& sd); + LLSD asLLSD() const; operator LLSD() const { return asLLSD(); } bool fromLLSD(LLSD& sd); @@ -634,7 +640,6 @@ public: const F32& getSkew() const { return mPathParams.getSkew(); } const LLUUID& getSculptID() const { return mSculptID; } const U8& getSculptType() const { return mSculptType; } - BOOL isConvex() const; // 'begin' and 'end' should be in range [0, 1] (they will be clamped) @@ -798,7 +803,7 @@ public: BOOL create(LLVolume* volume, BOOL partial_build = FALSE); void createBinormals(); - + class VertexData { public: @@ -806,6 +811,9 @@ public: LLVector3 mNormal; LLVector3 mBinormal; LLVector2 mTexCoord; + + bool operator<(const VertexData& rhs) const; + bool operator==(const VertexData& rhs) const; }; enum @@ -851,8 +859,7 @@ class LLVolume : public LLRefCount { friend class LLVolumeLODGroup; -private: - LLVolume(const LLVolume&); // Don't implement +protected: ~LLVolume(); // use unref public: @@ -874,7 +881,7 @@ public: U8 getProfileType() const { return mParams.getProfileParams().getCurveType(); } U8 getPathType() const { return mParams.getPathParams().getCurveType(); } - S32 getNumFaces() const { return (S32)mProfilep->mFaces.size(); } + S32 getNumFaces() const; S32 getNumVolumeFaces() const { return mVolumeFaces.size(); } F32 getDetail() const { return mDetail; } const LLVolumeParams& getParams() const { return mParams; } @@ -946,6 +953,8 @@ public: LLVector3 mLODScaleBias; // vector for biasing LOD based on scale void sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, S32 sculpt_level); + void copyVolumeFaces(LLVolume* volume); + private: void sculptGenerateMapVertices(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, U8 sculpt_type); F32 sculptGetSurfaceArea(); @@ -956,6 +965,9 @@ private: protected: BOOL generate(); void createVolumeFaces(); +public: + virtual BOOL createVolumeFacesFromFile(const std::string& file_name); + virtual BOOL createVolumeFacesFromStream(std::istream& is); protected: BOOL mUnique; diff --git a/indra/llmath/llvolumemgr.cpp b/indra/llmath/llvolumemgr.cpp index 53641fceab..61c5a0adc9 100644 --- a/indra/llmath/llvolumemgr.cpp +++ b/indra/llmath/llvolumemgr.cpp @@ -320,7 +320,7 @@ BOOL LLVolumeLODGroup::derefLOD(LLVolume *volumep) { llassert_always(mLODRefs[i] > 0); mLODRefs[i]--; -#if 1 // SJB: Possible opt: keep other lods around +#if 0 // SJB: Possible opt: keep other lods around if (!mLODRefs[i]) { mVolumeLODs[i] = NULL; diff --git a/indra/llmath/m4math.cpp b/indra/llmath/m4math.cpp index d8e7b4aaf9..7c7f60154d 100644 --- a/indra/llmath/m4math.cpp +++ b/indra/llmath/m4math.cpp @@ -428,6 +428,17 @@ const LLMatrix4& LLMatrix4::initRotTrans(const LLQuaternion &q, const LLVector return (*this); } +const LLMatrix4& LLMatrix4::initScale(const LLVector3 &scale) +{ + setIdentity(); + + mMatrix[VX][VX] = scale.mV[VX]; + mMatrix[VY][VY] = scale.mV[VY]; + mMatrix[VZ][VZ] = scale.mV[VZ]; + + return (*this); +} + const LLMatrix4& LLMatrix4::initAll(const LLVector3 &scale, const LLQuaternion &q, const LLVector3 &pos) { F32 sx, sy, sz; diff --git a/indra/llmath/m4math.h b/indra/llmath/m4math.h index e74b7afe9b..de981b7646 100644 --- a/indra/llmath/m4math.h +++ b/indra/llmath/m4math.h @@ -159,6 +159,7 @@ public: const LLMatrix4& initRotTrans(const F32 roll, const F32 pitch, const F32 yaw, const LLVector4 &pos); // Rotation from Euler + translation const LLMatrix4& initRotTrans(const LLQuaternion &q, const LLVector4 &pos); // Set with Quaternion and position + const LLMatrix4& initScale(const LLVector3 &scale); // Set all const LLMatrix4& initAll(const LLVector3 &scale, const LLQuaternion &q, const LLVector3 &pos); diff --git a/indra/llmath/v2math.cpp b/indra/llmath/v2math.cpp index 555e1f92bb..220336e0c2 100644 --- a/indra/llmath/v2math.cpp +++ b/indra/llmath/v2math.cpp @@ -115,3 +115,18 @@ LLVector2 lerp(const LLVector2 &a, const LLVector2 &b, F32 u) a.mV[VX] + (b.mV[VX] - a.mV[VX]) * u, a.mV[VY] + (b.mV[VY] - a.mV[VY]) * u ); } + +LLSD LLVector2::getValue() const +{ + LLSD ret; + ret[0] = mV[0]; + ret[1] = mV[1]; + return ret; +} + +void LLVector2::setValue(LLSD& sd) +{ + mV[0] = (F32) sd[0].asReal(); + mV[1] = (F32) sd[1].asReal(); +} + diff --git a/indra/llmath/v2math.h b/indra/llmath/v2math.h index 9fef8851cc..f9f1c024f2 100644 --- a/indra/llmath/v2math.h +++ b/indra/llmath/v2math.h @@ -66,6 +66,9 @@ class LLVector2 void set(const LLVector2 &vec); // Sets LLVector2 to vec void set(const F32 *vec); // Sets LLVector2 to vec + LLSD getValue() const; + void setValue(LLSD& sd); + void setVec(F32 x, F32 y); // deprecated void setVec(const LLVector2 &vec); // deprecated void setVec(const F32 *vec); // deprecated -- cgit v1.3 From 88292104d9a2332e6169f2add8f0b590bb22dbff Mon Sep 17 00:00:00 2001 From: David Parks Date: Wed, 4 Nov 2009 14:19:05 +0000 Subject: Fix for crash when loading some meshes. Added button to auto-fill LODs. --- indra/llmath/llvolume.cpp | 4 +++- indra/newview/pipeline.cpp | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index afa82ed399..ddd1b4b3db 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1690,9 +1690,11 @@ LLVolume::LLVolume(const LLVolumeParams ¶ms, const F32 detail, const BOOL ge mGenerateSingleFace = generate_single_face; - generate(); + mLODScaleBias.setVec(1,1,1); + if (mParams.getSculptID().isNull() && params.getSculptType() == LL_SCULPT_TYPE_NONE) { + generate(); createVolumeFaces(); } } diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 7cf5cf75ad..4fc94c08bc 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -8988,6 +8988,7 @@ void LLPipeline::LLMeshThread::run() { LLVolumeParams volume_params; volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE); + volume_params.setSculptID(mMeshID, LL_SCULPT_TYPE_MESH); mVolume = new LLVolume(volume_params, mDetail); mVolume->createVolumeFacesFromStream(buffer_stream); } -- cgit v1.3 From 10069e0e13e3214ba9320fdce915440b2e12f938 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 5 Nov 2009 19:58:10 -0600 Subject: Fix for prims all being 0 lod. Fix for dangling prim references. --- indra/llmath/llvolume.cpp | 3 ++- indra/llprimitive/llprimitive.cpp | 8 +++++++- indra/newview/llvovolume.cpp | 2 +- indra/newview/pipeline.cpp | 2 ++ 4 files changed, 12 insertions(+), 3 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index ddd1b4b3db..33a8d33ce1 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1692,9 +1692,10 @@ LLVolume::LLVolume(const LLVolumeParams ¶ms, const F32 detail, const BOOL ge mLODScaleBias.setVec(1,1,1); + generate(); + if (mParams.getSculptID().isNull() && params.getSculptType() == LL_SCULPT_TYPE_NONE) { - generate(); createVolumeFaces(); } } diff --git a/indra/llprimitive/llprimitive.cpp b/indra/llprimitive/llprimitive.cpp index 52265e7ad5..340f60ed1a 100644 --- a/indra/llprimitive/llprimitive.cpp +++ b/indra/llprimitive/llprimitive.cpp @@ -744,7 +744,10 @@ BOOL LLPrimitive::setVolume(const LLVolumeParams &volume_params, const S32 detai return TRUE; } -#if 0 +#if 0 + // #if 0'd out by davep + // this is a lot of cruft to set texture entry values that just stay the same for LOD switch + // or immediately get overridden by an object update message, also crashes occasionally U32 old_face_mask = mVolumep->mFaceMask; S32 face_bit = 0; @@ -943,6 +946,9 @@ BOOL LLPrimitive::setVolume(const LLVolumeParams &volume_params, const S32 detai } } #else + // build the new object + sVolumeManager->unrefVolume(mVolumep); + mVolumep = volumep; setNumTEs(mVolumep->getNumFaces()); #endif return TRUE; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 78fd371087..7666009a62 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -919,7 +919,7 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool { //mesh is not loaded, request pipeline load this mesh LLUUID asset_id = volume_params.getSculptID(); - gPipeline.loadMesh(this, asset_id); + gPipeline.loadMesh(this, asset_id, detail); } else { diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 4ac95fa939..3554ceb7f0 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -8949,6 +8949,7 @@ void LLPipeline::loadMesh(LLVOVolume* vobj, LLUUID mesh_id, S32 detail) group->derefLOD(lod); return; } + group->derefLOD(lod); } //no lower LOD is a available, is a higher lod available? @@ -8961,6 +8962,7 @@ void LLPipeline::loadMesh(LLVOVolume* vobj, LLUUID mesh_id, S32 detail) group->derefLOD(lod); return; } + group->derefLOD(lod); } } } -- cgit v1.3 From 4e420a36c67e611cd7d85652b43d9cd65315e563 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Sat, 7 Nov 2009 08:22:39 -0600 Subject: Fix for missing LOD spam. --- indra/llmath/llvolume.cpp | 21 +++++++++++++++------ indra/llprimitive/llprimitive.cpp | 3 ++- indra/newview/pipeline.cpp | 2 ++ 3 files changed, 19 insertions(+), 7 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 33a8d33ce1..c8ef911cc1 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1676,7 +1676,8 @@ LLVolume::LLVolume(const LLVolumeParams ¶ms, const F32 detail, const BOOL ge mFaceMask = 0x0; mDetail = detail; mSculptLevel = -2; - + mLODScaleBias.setVec(1,1,1); + // set defaults if (mParams.getPathParams().getCurveType() == LL_PCODE_PATH_FLEXIBLE) { @@ -1690,8 +1691,6 @@ LLVolume::LLVolume(const LLVolumeParams ¶ms, const F32 detail, const BOOL ge mGenerateSingleFace = generate_single_face; - mLODScaleBias.setVec(1,1,1); - generate(); if (mParams.getSculptID().isNull() && params.getSculptType() == LL_SCULPT_TYPE_NONE) @@ -1899,7 +1898,7 @@ BOOL LLVolume::createVolumeFacesFromStream(std::istream& is) { if (!LLSDSerialize::deserialize(header, is, 1024*1024*1024)) { - llwarns << "not a valid mesh asset!" << llendl; + llwarns << "Mesh header parse error. Not a valid mesh asset!" << llendl; return FALSE; } } @@ -1921,8 +1920,18 @@ BOOL LLVolume::createVolumeFacesFromStream(std::istream& is) if (lod >= 4) { - llwarns << "Couldn't load model for given lod" << llendl; - return FALSE; + lod = llclamp((S32) mDetail, 0, 3); + + while (lod >= 0 && header[nm[lod]]["offset"].asInteger() == -1) + { + --lod; + } + + if (lod < 0) + { + llwarns << "Mesh header missing LOD offsets. Not a valid mesh asset!" << llendl; + return FALSE; + } } is.seekg(header[nm[lod]]["offset"].asInteger(), std::ios_base::cur); diff --git a/indra/llprimitive/llprimitive.cpp b/indra/llprimitive/llprimitive.cpp index 340f60ed1a..4c6d244f3c 100644 --- a/indra/llprimitive/llprimitive.cpp +++ b/indra/llprimitive/llprimitive.cpp @@ -948,7 +948,8 @@ BOOL LLPrimitive::setVolume(const LLVolumeParams &volume_params, const S32 detai #else // build the new object sVolumeManager->unrefVolume(mVolumep); - mVolumep = volumep; + mVolumep = volumep; + setNumTEs(mVolumep->getNumFaces()); #endif return TRUE; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 3554ceb7f0..f13bb73acf 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -8949,6 +8949,7 @@ void LLPipeline::loadMesh(LLVOVolume* vobj, LLUUID mesh_id, S32 detail) group->derefLOD(lod); return; } + group->derefLOD(lod); } @@ -8962,6 +8963,7 @@ void LLPipeline::loadMesh(LLVOVolume* vobj, LLUUID mesh_id, S32 detail) group->derefLOD(lod); return; } + group->derefLOD(lod); } } -- cgit v1.3 From c02702f3871979cb7745b49aa502ac3c71f77681 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Fri, 13 Nov 2009 17:01:56 -0600 Subject: CTS-7 Add hard edge threshold capability to normal generation. --- indra/llmath/llvolume.cpp | 12 ++++++++++++ indra/llmath/llvolume.h | 1 + 2 files changed, 13 insertions(+) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 6286d1bcea..f252b2a232 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1876,6 +1876,18 @@ bool LLVolumeFace::VertexData::operator==(const LLVolumeFace::VertexData& rhs)co return true; } +bool LLVolumeFace::VertexData::compareNormal(const LLVolumeFace::VertexData& rhs, F32 angle_cutoff) const +{ + bool retval = false; + if (rhs.mPosition == mPosition && rhs.mTexCoord == mTexCoord) + { + F32 cur_angle = rhs.mNormal*mNormal; + + retval = cur_angle > angle_cutoff; + } + + return retval; +} BOOL LLVolume::createVolumeFacesFromFile(const std::string& file_name) { diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 9f595ccbc4..d2727d8f21 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -814,6 +814,7 @@ public: bool operator<(const VertexData& rhs) const; bool operator==(const VertexData& rhs) const; + bool compareNormal(const VertexData& rhs, F32 angle_cutoff) const; }; enum -- cgit v1.3 From 81bfdcbfae4f203e60f00794966383b01475995b Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Wed, 18 Nov 2009 18:10:48 -0600 Subject: Tetrahedron displays in place of unloaded mesh. Still has some LOD issues. --- indra/llmath/llvolume.cpp | 96 +++++++++++++++++++++++++++++++++++++++++++++- indra/llmath/llvolume.h | 1 + indra/newview/pipeline.cpp | 9 ++++- 3 files changed, 103 insertions(+), 3 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index f252b2a232..84da1b3c62 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1925,7 +1925,9 @@ BOOL LLVolume::createVolumeFacesFromStream(std::istream& is) S32 lod = llclamp((S32) mDetail, 0, 3); - while (lod < 4 && header[nm[lod]]["offset"].asInteger() == -1) + while (lod < 4 && + (header[nm[lod]]["offset"].asInteger() == -1 || + header[nm[lod]]["size"].asInteger() == 0 )) { ++lod; } @@ -1934,7 +1936,9 @@ BOOL LLVolume::createVolumeFacesFromStream(std::istream& is) { lod = llclamp((S32) mDetail, 0, 3); - while (lod >= 0 && header[nm[lod]]["offset"].asInteger() == -1) + while (lod >= 0 && + (header[nm[lod]]["offset"].asInteger() == -1 || + header[nm[lod]]["size"].asInteger() == 0) ) { --lod; } @@ -2135,6 +2139,94 @@ BOOL LLVolume::createVolumeFacesFromStream(std::istream& is) return TRUE; } +void tetrahedron_set_normal(LLVolumeFace::VertexData* cv) +{ + LLVector3 nrm = (cv[1].mPosition-cv[0].mPosition)%(cv[2].mPosition-cv[0].mPosition); + + nrm.normVec(); + + cv[0].mNormal = nrm; + cv[1].mNormal = nrm; + cv[2].mNormal = nrm; +} + +void LLVolume::makeTetrahedron() +{ + mVolumeFaces.clear(); + + LLVolumeFace face; + + F32 x = 0.5f; + LLVector3 p[] = + { //unit tetrahedron corners + LLVector3(x,x,x), + LLVector3(-x,-x,x), + LLVector3(-x,x,-x), + LLVector3(x,-x,-x) + }; + + LLVolumeFace::VertexData cv[3]; + + //set texture coordinates + cv[0].mTexCoord = LLVector2(0,0); + cv[1].mTexCoord = LLVector2(1,0); + cv[2].mTexCoord = LLVector2(0.5f, 0.5f*F_SQRT3); + + + //side 1 + cv[0].mPosition = p[1]; + cv[1].mPosition = p[0]; + cv[2].mPosition = p[2]; + + tetrahedron_set_normal(cv); + + face.mVertices.push_back(cv[0]); + face.mVertices.push_back(cv[1]); + face.mVertices.push_back(cv[2]); + + //side 2 + cv[0].mPosition = p[3]; + cv[1].mPosition = p[0]; + cv[2].mPosition = p[1]; + + tetrahedron_set_normal(cv); + + face.mVertices.push_back(cv[0]); + face.mVertices.push_back(cv[1]); + face.mVertices.push_back(cv[2]); + + //side 3 + cv[0].mPosition = p[3]; + cv[1].mPosition = p[1]; + cv[2].mPosition = p[2]; + + tetrahedron_set_normal(cv); + + face.mVertices.push_back(cv[0]); + face.mVertices.push_back(cv[1]); + face.mVertices.push_back(cv[2]); + + //side 4 + cv[0].mPosition = p[2]; + cv[1].mPosition = p[0]; + cv[2].mPosition = p[3]; + + tetrahedron_set_normal(cv); + + face.mVertices.push_back(cv[0]); + face.mVertices.push_back(cv[1]); + face.mVertices.push_back(cv[2]); + + //set index buffer + for (U32 i = 0; i < 12; i++) + { + face.mIndices.push_back(i); + } + + mVolumeFaces.push_back(face); + mSculptLevel = 0; +} + void LLVolume::copyVolumeFaces(LLVolume* volume) { mVolumeFaces = volume->mVolumeFaces; diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index d2727d8f21..bf2854ede9 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -969,6 +969,7 @@ protected: public: virtual BOOL createVolumeFacesFromFile(const std::string& file_name); virtual BOOL createVolumeFacesFromStream(std::istream& is); + virtual void makeTetrahedron(); protected: BOOL mUnique; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index c262e94ff4..3410ad6559 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -8976,6 +8976,9 @@ void LLPipeline::loadMesh(LLVOVolume* vobj, LLUUID mesh_id, S32 detail) group->derefLOD(lod); } } + + //nothing found, so make a tetrahedron + volume->makeTetrahedron(); } } @@ -9102,7 +9105,11 @@ void LLPipeline::notifyLoadedMeshes() if (valid) { - mesh->mTargetVolume->copyVolumeFaces(mesh->mVolume); + if (mesh->mVolume->getNumVolumeFaces() > 0) + { + mesh->mTargetVolume->copyVolumeFaces(mesh->mVolume); + } + for (std::set::iterator vobj_iter = obj_iter->second.begin(); vobj_iter != obj_iter->second.end(); ++vobj_iter) { LLVOVolume* vobj = (LLVOVolume*) gObjectList.findObject(*vobj_iter); -- cgit v1.3 From 62233f22469cdc66042fc7bbbbd367dbb7212fde Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Tue, 24 Nov 2009 07:38:04 -0600 Subject: Fix for copying of tetrahedrons in place of mesh LODs. Fix for bad tetrahedron bounding box. Bad fix for simultaneous loading of multiple LODs. --- indra/llmath/llvolume.cpp | 31 +++++++++++++++++++++++++-- indra/llmath/llvolume.h | 5 ++++- indra/llmath/llvolumemgr.cpp | 13 ++++++++++++ indra/llmath/llvolumemgr.h | 1 + indra/newview/llvovolume.cpp | 31 ++++----------------------- indra/newview/llvovolume.h | 1 - indra/newview/pipeline.cpp | 50 +++++++++++++++++++++++++++++++++++--------- indra/newview/pipeline.h | 6 ++++-- 8 files changed, 95 insertions(+), 43 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 84da1b3c62..515b1061f9 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1676,6 +1676,7 @@ LLVolume::LLVolume(const LLVolumeParams ¶ms, const F32 detail, const BOOL ge mFaceMask = 0x0; mDetail = detail; mSculptLevel = -2; + mIsTetrahedron = FALSE; mLODScaleBias.setVec(1,1,1); // set defaults @@ -1905,7 +1906,7 @@ BOOL LLVolume::createVolumeFacesFromFile(const std::string& file_name) BOOL LLVolume::createVolumeFacesFromStream(std::istream& is) { mSculptLevel = -1; // default is an error occured - + LLSD header; { if (!LLSDSerialize::deserialize(header, is, 1024*1024*1024)) @@ -2048,6 +2049,11 @@ BOOL LLVolume::createVolumeFacesFromStream(std::istream& is) { U32 face_count = mdl.size(); + if (face_count == 0) + { + llerrs << "WTF?" << llendl; + } + mVolumeFaces.resize(face_count); for (U32 i = 0; i < face_count; ++i) @@ -2063,8 +2069,9 @@ BOOL LLVolume::createVolumeFacesFromStream(std::istream& is) //copy out indices face.mIndices.resize(idx.size()/2); - if (idx.empty()) + if (idx.empty() || face.mIndices.size() < 3) { //why is there an empty index list? + llerrs <<"WTF?" << llendl; continue; } @@ -2150,6 +2157,11 @@ void tetrahedron_set_normal(LLVolumeFace::VertexData* cv) cv[2].mNormal = nrm; } +BOOL LLVolume::isTetrahedron() +{ + return mIsTetrahedron; +} + void LLVolume::makeTetrahedron() { mVolumeFaces.clear(); @@ -2165,6 +2177,9 @@ void LLVolume::makeTetrahedron() LLVector3(x,-x,-x) }; + face.mExtents[0].setVec(-x,-x,-x); + face.mExtents[1].setVec(x,x,x); + LLVolumeFace::VertexData cv[3]; //set texture coordinates @@ -2225,12 +2240,19 @@ void LLVolume::makeTetrahedron() mVolumeFaces.push_back(face); mSculptLevel = 0; + mIsTetrahedron = TRUE; } void LLVolume::copyVolumeFaces(LLVolume* volume) { + if (volume->isTetrahedron()) + { + llerrs << "WTF?" << llendl; + } + mVolumeFaces = volume->mVolumeFaces; mSculptLevel = 0; + mIsTetrahedron = FALSE; } S32 const LL_SCULPT_MESH_MAX_FACES = 8; @@ -2615,6 +2637,11 @@ void LLVolume::sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, LLMemType m1(LLMemType::MTYPE_VOLUME); U8 sculpt_type = mParams.getSculptType(); + if (sculpt_type & LL_SCULPT_TYPE_MASK == LL_SCULPT_TYPE_MESH) + { + llerrs << "WTF?" << llendl; + } + BOOL data_is_empty = FALSE; if (sculpt_width == 0 || sculpt_height == 0 || sculpt_components < 3 || sculpt_data == NULL) diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index bf2854ede9..8e57f2e280 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -904,7 +904,8 @@ public: BOOL isUnique() const { return mUnique; } S32 getSculptLevel() const { return mSculptLevel; } - + void setSculptLevel(S32 level) { mSculptLevel = level; } + S32 *getTriangleIndices(U32 &num_indices) const; // returns number of triangle indeces required for path/profile mesh @@ -970,11 +971,13 @@ public: virtual BOOL createVolumeFacesFromFile(const std::string& file_name); virtual BOOL createVolumeFacesFromStream(std::istream& is); virtual void makeTetrahedron(); + virtual BOOL isTetrahedron(); protected: BOOL mUnique; F32 mDetail; S32 mSculptLevel; + BOOL mIsTetrahedron; LLVolumeParams mParams; LLPath *mPathp; diff --git a/indra/llmath/llvolumemgr.cpp b/indra/llmath/llvolumemgr.cpp index 61c5a0adc9..419e0015ba 100644 --- a/indra/llmath/llvolumemgr.cpp +++ b/indra/llmath/llvolumemgr.cpp @@ -375,6 +375,19 @@ F32 LLVolumeLODGroup::getVolumeScaleFromDetail(const S32 detail) return mDetailScales[detail]; } +S32 LLVolumeLODGroup::getVolumeDetailFromScale(const F32 detail) +{ + for (S32 i = 1; i < 4; i++) + { + if (mDetailScales[i] > detail) + { + return i-1; + } + } + + return 3; +} + F32 LLVolumeLODGroup::dump() { F32 usage = 0.f; diff --git a/indra/llmath/llvolumemgr.h b/indra/llmath/llvolumemgr.h index a78ea76a1a..f5dc4cd748 100644 --- a/indra/llmath/llvolumemgr.h +++ b/indra/llmath/llvolumemgr.h @@ -59,6 +59,7 @@ public: static S32 getDetailFromTan(const F32 tan_angle); static void getDetailProximity(const F32 tan_angle, F32 &to_lower, F32& to_higher); static F32 getVolumeScaleFromDetail(const S32 detail); + static S32 getVolumeDetailFromScale(F32 scale); LLVolume* refLOD(const S32 detail); BOOL derefLOD(LLVolume *volumep); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 4c126d8fd9..64c2e9e8ec 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -163,7 +163,6 @@ LLVOVolume::LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *re mRelativeXformInvTrans.setIdentity(); mLOD = MIN_LOD; - mMeshSculptLevel = -2; mTextureAnimp = NULL; mVObjRadius = LLVector3(1,1,0.5f).length(); mNumFaces = 0; @@ -682,25 +681,7 @@ void LLVOVolume::updateTextureVirtualSize() LLUUID id = sculpt_params->getSculptTexture(); U8 sculpt_type = sculpt_params->getSculptType(); - if ((sculpt_type & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH) - // mesh is a mesh - { - if (mMeshSculptLevel == -2) - { - // get the asset please - gPipeline.loadMesh(this, id); - /*gAssetStorage->getAssetData(id, LLAssetType::AT_MESH, (LLGetAssetCallback)NULL, NULL, TRUE); - - if (gAssetStorage->hasLocalAsset(id, LLAssetType::AT_MESH)) - { - gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, FALSE); - mSculptChanged = TRUE; - }*/ - } - } - - else - // mesh is a sculptie + if ((sculpt_type & LL_SCULPT_TYPE_MASK) != LL_SCULPT_TYPE_MESH) { mSculptTexture = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); @@ -902,14 +883,10 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool if ((volume_params.getSculptType() & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH) { if (getVolume()->getNumVolumeFaces() == 0) - { - //mesh is not loaded, request pipeline load this mesh + { + //load request not yet issued, request pipeline load this mesh LLUUID asset_id = volume_params.getSculptID(); - gPipeline.loadMesh(this, asset_id, detail); - } - else - { - mMeshSculptLevel = 1; + gPipeline.loadMesh(this, asset_id, LLVolumeLODGroup::getVolumeDetailFromScale(getVolume()->getDetail())); } } else // otherwise is sculptie diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index 4b247f3778..f14a71130b 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -298,7 +298,6 @@ private: LLFrameTimer mTextureUpdateTimer; S32 mLOD; BOOL mLODChanged; - S32 mMeshSculptLevel; BOOL mSculptChanged; F32 mSpotLightPriority; LLMatrix4 mRelativeXform; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 3410ad6559..0ee619244b 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -8913,23 +8913,29 @@ LLCullResult::sg_list_t::iterator LLPipeline::endAlphaGroups() void LLPipeline::loadMesh(LLVOVolume* vobj, LLUUID mesh_id, S32 detail) { + + if (detail < 0 || detail > 4) + { + return; + } + { LLMutexLock lock(mMeshMutex); //add volume to list of loading meshes - mesh_load_map::iterator iter = mLoadingMeshes.find(mesh_id); - if (iter != mLoadingMeshes.end()) + mesh_load_map::iterator iter = mLoadingMeshes[detail].find(mesh_id); + if (iter != mLoadingMeshes[detail].end()) { //request pending for this mesh, append volume id to list iter->second.insert(vobj->getID()); return; } //first request for this mesh - mLoadingMeshes[mesh_id].insert(vobj->getID()); + mLoadingMeshes[detail][mesh_id].insert(vobj->getID()); } if (gAssetStorage->hasLocalAsset(mesh_id, LLAssetType::AT_MESH)) { //already have asset, load desired LOD in background - mPendingMeshes.push_back(new LLMeshThread(mesh_id, vobj->getVolume())); + mPendingMeshes.push_back(new LLMeshThread(mesh_id, vobj->getVolume(), detail)); } else { //fetch asset and load when done @@ -8952,7 +8958,7 @@ void LLPipeline::loadMesh(LLVOVolume* vobj, LLUUID mesh_id, S32 detail) for (S32 i = detail-1; i >= 0; --i) { LLVolume* lod = group->refLOD(i); - if (lod && lod->getNumVolumeFaces() > 0) + if (lod && !lod->isTetrahedron() && lod->getNumVolumeFaces() > 0) { volume->copyVolumeFaces(lod); group->derefLOD(lod); @@ -8966,7 +8972,7 @@ void LLPipeline::loadMesh(LLVOVolume* vobj, LLUUID mesh_id, S32 detail) for (S32 i = detail+1; i < 4; ++i) { LLVolume* lod = group->refLOD(i); - if (lod && lod->getNumVolumeFaces() > 0) + if (lod && !lod->isTetrahedron() && lod->getNumVolumeFaces() > 0) { volume->copyVolumeFaces(lod); group->derefLOD(lod); @@ -8976,6 +8982,10 @@ void LLPipeline::loadMesh(LLVOVolume* vobj, LLUUID mesh_id, S32 detail) group->derefLOD(lod); } } + else + { + llerrs << "WTF?" << llendl; + } //nothing found, so make a tetrahedron volume->makeTetrahedron(); @@ -8992,12 +9002,22 @@ void LLPipeline::getMeshAssetCallback(LLVFS *vfs, } -LLPipeline::LLMeshThread::LLMeshThread(LLUUID mesh_id, LLVolume* target) +LLPipeline::LLMeshThread::LLMeshThread(LLUUID mesh_id, LLVolume* target, S32 detail) : LLThread("mesh_loading_thread") { mMeshID = mesh_id; mVolume = NULL; mDetail = target->getDetail(); + + if (detail == -1) + { + mDetailIndex = LLVolumeLODGroup::getVolumeDetailFromScale(target->getDetail()); + } + else + { + mDetailIndex = detail; + } + mTargetVolume = target; } @@ -9073,6 +9093,10 @@ void LLPipeline::notifyLoadedMeshes() for (std::list::iterator iter = mLoadedMeshes.begin(); iter != mLoadedMeshes.end(); ++iter) { //for each mesh done loading + + + + LLMeshThread* mesh = *iter; if (!mesh->isStopped()) @@ -9081,10 +9105,12 @@ void LLPipeline::notifyLoadedMeshes() continue; } + S32 detail = mesh->mDetailIndex; + //get list of objects waiting to be notified this mesh is loaded - mesh_load_map::iterator obj_iter = mLoadingMeshes.find(mesh->mMeshID); + mesh_load_map::iterator obj_iter = mLoadingMeshes[detail].find(mesh->mMeshID); - if (mesh->mVolume && obj_iter != mLoadingMeshes.end()) + if (mesh->mVolume && obj_iter != mLoadingMeshes[detail].end()) { //make sure target volume is still valid BOOL valid = FALSE; @@ -9109,6 +9135,10 @@ void LLPipeline::notifyLoadedMeshes() { mesh->mTargetVolume->copyVolumeFaces(mesh->mVolume); } + else + { + llwarns << "Mesh loading returned empty volume." << llendl; + } for (std::set::iterator vobj_iter = obj_iter->second.begin(); vobj_iter != obj_iter->second.end(); ++vobj_iter) { @@ -9120,7 +9150,7 @@ void LLPipeline::notifyLoadedMeshes() } } - mLoadingMeshes.erase(mesh->mMeshID); + mLoadingMeshes[detail].erase(mesh->mMeshID); } delete mesh; diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 23e98aa0d6..a31379a209 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -676,8 +676,9 @@ public: protected: std::vector mSelectedFaces; + typedef std::map > mesh_load_map; - mesh_load_map mLoadingMeshes; + mesh_load_map mLoadingMeshes[4]; LLMutex* mMeshMutex; @@ -688,7 +689,8 @@ protected: LLVolume* mTargetVolume; LLUUID mMeshID; F32 mDetail; - LLMeshThread(LLUUID mesh_id, LLVolume* target); + S32 mDetailIndex; + LLMeshThread(LLUUID mesh_id, LLVolume* target, S32 detail = -1); ~LLMeshThread(); void run(); }; -- cgit v1.3 From 6d66910c6e2fbb25bf8b5c7b90e795f350342104 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Wed, 25 Nov 2009 11:35:41 -0600 Subject: Fix for spam on invalid mesh asset. Fix for index buffer overflow spam and crash in llvertexbuffer. --- indra/llmath/llvolume.cpp | 5 ----- indra/newview/llvovolume.cpp | 5 +++-- indra/newview/pipeline.cpp | 18 ++++++------------ 3 files changed, 9 insertions(+), 19 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 515b1061f9..3e547aec6f 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2245,11 +2245,6 @@ void LLVolume::makeTetrahedron() void LLVolume::copyVolumeFaces(LLVolume* volume) { - if (volume->isTetrahedron()) - { - llerrs << "WTF?" << llendl; - } - mVolumeFaces = volume->mVolumeFaces; mSculptLevel = 0; mIsTetrahedron = FALSE; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 64c2e9e8ec..3e9db86cfa 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -882,7 +882,7 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool // if it's a mesh if ((volume_params.getSculptType() & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH) { - if (getVolume()->getNumVolumeFaces() == 0) + if (getVolume()->getNumVolumeFaces() == 0 || getVolume()->isTetrahedron()) { //load request not yet issued, request pipeline load this mesh LLUUID asset_id = volume_params.getSculptID(); @@ -924,7 +924,8 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool void LLVOVolume::notifyMeshLoaded() { mSculptChanged = TRUE; - gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_GEOMETRY); + gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_GEOMETRY, TRUE); + dirtySpatialGroup(TRUE); } // sculpt replaces generate() for sculpted surfaces diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 0ee619244b..af3a35615c 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -1807,8 +1807,6 @@ void LLPipeline::rebuildPriorityGroups() assertInitialized(); - notifyLoadedMeshes(); - // Iterate through all drawables on the priority build queue, for (LLSpatialGroup::sg_list_t::iterator iter = mGroupQ1.begin(); iter != mGroupQ1.end(); ++iter) @@ -1888,6 +1886,8 @@ void LLPipeline::updateGeom(F32 max_dtime) // for now, only LLVOVolume does this to throttle LOD changes LLVOVolume::preUpdateGeom(); + notifyLoadedMeshes(); + // Iterate through all drawables on the priority build queue, for (LLDrawable::drawable_list_t::iterator iter = mBuildQ1.begin(); iter != mBuildQ1.end();) @@ -8913,7 +8913,6 @@ LLCullResult::sg_list_t::iterator LLPipeline::endAlphaGroups() void LLPipeline::loadMesh(LLVOVolume* vobj, LLUUID mesh_id, S32 detail) { - if (detail < 0 || detail > 4) { return; @@ -9093,10 +9092,6 @@ void LLPipeline::notifyLoadedMeshes() for (std::list::iterator iter = mLoadedMeshes.begin(); iter != mLoadedMeshes.end(); ++iter) { //for each mesh done loading - - - - LLMeshThread* mesh = *iter; if (!mesh->isStopped()) @@ -9131,14 +9126,13 @@ void LLPipeline::notifyLoadedMeshes() if (valid) { - if (mesh->mVolume->getNumVolumeFaces() > 0) - { - mesh->mTargetVolume->copyVolumeFaces(mesh->mVolume); - } - else + if (mesh->mVolume->getNumVolumeFaces() <= 0) { llwarns << "Mesh loading returned empty volume." << llendl; + mesh->mVolume->makeTetrahedron(); } + + mesh->mTargetVolume->copyVolumeFaces(mesh->mVolume); for (std::set::iterator vobj_iter = obj_iter->second.begin(); vobj_iter != obj_iter->second.end(); ++vobj_iter) { -- cgit v1.3 From 062a2dd309ca5521d4045eb721496476f43d24dc Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Mon, 30 Nov 2009 15:32:10 -0600 Subject: Remove zero area triangles from meshes post-import. --- indra/llmath/llvolume.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 3e547aec6f..1d36da7f52 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1692,10 +1692,9 @@ LLVolume::LLVolume(const LLVolumeParams ¶ms, const F32 detail, const BOOL ge mGenerateSingleFace = generate_single_face; - generate(); - if (mParams.getSculptID().isNull() && params.getSculptType() == LL_SCULPT_TYPE_NONE) { + generate(); createVolumeFaces(); } } -- cgit v1.3 From f039fa98efedc91965338ef53624279f99914205 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Mon, 30 Nov 2009 17:02:38 -0600 Subject: Fix for silly crash due to LLPrimitive having 0 texture entries. --- indra/llmath/llvolume.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 1d36da7f52..858bd9edea 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1692,9 +1692,10 @@ LLVolume::LLVolume(const LLVolumeParams ¶ms, const F32 detail, const BOOL ge mGenerateSingleFace = generate_single_face; + generate(); + if (mParams.getSculptID().isNull() && params.getSculptType() == LL_SCULPT_TYPE_NONE) { - generate(); createVolumeFaces(); } } -- cgit v1.3 From bb2631180a85df343e6d816fc37d881af31d49fb Mon Sep 17 00:00:00 2001 From: "Karl Stiefvater (qarl)" Date: Tue, 1 Dec 2009 17:40:52 -0600 Subject: CTS-4 Only part of an uploaded mesh renders. --- indra/llmath/llvolume.cpp | 1 - indra/llmath/llvolume.h | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 858bd9edea..fb2de92e35 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2250,7 +2250,6 @@ void LLVolume::copyVolumeFaces(LLVolume* volume) mIsTetrahedron = FALSE; } -S32 const LL_SCULPT_MESH_MAX_FACES = 8; S32 LLVolume::getNumFaces() const { diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 8e57f2e280..59c60ccd92 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -192,6 +192,7 @@ const U8 LL_SCULPT_TYPE_MESH = 5; const U8 LL_SCULPT_FLAG_INVERT = 64; const U8 LL_SCULPT_FLAG_MIRROR = 128; +const S32 LL_SCULPT_MESH_MAX_FACES = 8; class LLProfileParams { -- cgit v1.3 From 695969c77066de5032bdc9caefecf9b32b076b2f Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Fri, 11 Dec 2009 14:47:11 -0600 Subject: HTTP Mesh fetch FTW.. still busted --- indra/llcommon/llthread.cpp | 31 +++- indra/llcommon/llthread.h | 22 +++ indra/llmath/llvolume.cpp | 7 +- indra/llmath/llvolume.h | 2 + indra/newview/CMakeLists.txt | 2 + indra/newview/app_settings/settings.xml | 2 +- indra/newview/llappviewer.cpp | 8 + indra/newview/llviewerregion.cpp | 1 + indra/newview/llvovolume.cpp | 15 +- indra/newview/pipeline.cpp | 255 +------------------------------- indra/newview/pipeline.h | 34 +---- 11 files changed, 93 insertions(+), 286 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index b1175836b7..df7ea214cc 100644 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -62,6 +62,9 @@ // //---------------------------------------------------------------------------- +U32 ll_thread_local sThreadID = 0; +U32 LLThread::sIDIter = 0; + // // Handed to the APR thread creation function // @@ -72,6 +75,8 @@ void *APR_THREAD_FUNC LLThread::staticRun(apr_thread_t *apr_threadp, void *datap // Set thread state to running threadp->mStatus = RUNNING; + sThreadID = threadp->mID; + // Run the user supplied function threadp->run(); @@ -90,6 +95,8 @@ LLThread::LLThread(const std::string& name, apr_pool_t *poolp) : mAPRThreadp(NULL), mStatus(STOPPED) { + mID = ++sIDIter; + // Thread creation probably CAN be paranoid about APR being initialized, if necessary if (poolp) { @@ -273,7 +280,7 @@ void LLThread::wakeLocked() //============================================================================ LLMutex::LLMutex(apr_pool_t *poolp) : - mAPRMutexp(NULL) + mAPRMutexp(NULL), mCount(0), mLockingThread(NO_THREAD) { //if (poolp) //{ @@ -305,7 +312,14 @@ LLMutex::~LLMutex() void LLMutex::lock() { + if (mLockingThread == sThreadID) + { //redundant lock + mCount++; + return; + } + apr_thread_mutex_lock(mAPRMutexp); + #if MUTEX_DEBUG // Have to have the lock before we can access the debug info U32 id = LLThread::currentID(); @@ -313,10 +327,18 @@ void LLMutex::lock() llerrs << "Already locked in Thread: " << id << llendl; mIsLocked[id] = TRUE; #endif + + mLockingThread = sThreadID; } void LLMutex::unlock() { + if (mCount > 0) + { //not the root unlock + mCount--; + return; + } + #if MUTEX_DEBUG // Access the debug info while we have the lock U32 id = LLThread::currentID(); @@ -324,6 +346,8 @@ void LLMutex::unlock() llerrs << "Not locked in Thread: " << id << llendl; mIsLocked[id] = FALSE; #endif + + mLockingThread = NO_THREAD; apr_thread_mutex_unlock(mAPRMutexp); } @@ -341,6 +365,11 @@ bool LLMutex::isLocked() } } +U32 LLMutex::lockingThread() const +{ + return mLockingThread; +} + //============================================================================ LLCondition::LLCondition(apr_pool_t *poolp) : diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h index d8aa90de2e..2d553b5258 100644 --- a/indra/llcommon/llthread.h +++ b/indra/llcommon/llthread.h @@ -40,8 +40,17 @@ class LLThread; class LLMutex; class LLCondition; +#if LL_WINDOWS +#define ll_thread_local __declspec(thread) +#else +#define ll_thread_local __thread +#endif + class LL_COMMON_API LLThread { +private: + static U32 sIDIter; + public: typedef enum e_thread_status { @@ -82,6 +91,8 @@ public: apr_pool_t *getAPRPool() { return mAPRPoolp; } LLVolatileAPRPool* getLocalAPRFilePool() { return mLocalAPRFilePoolp ; } + U32 getID() const { return mID; } + private: BOOL mPaused; @@ -96,6 +107,7 @@ protected: apr_pool_t *mAPRPoolp; BOOL mIsLocalPool; EThreadStatus mStatus; + U32 mID; //a local apr_pool for APRFile operations in this thread. If it exists, LLAPRFile::sAPRFilePoolp should not be used. //Note: this pool is used by APRFile ONLY, do NOT use it for any other purposes. @@ -133,17 +145,27 @@ protected: class LL_COMMON_API LLMutex { public: + typedef enum + { + NO_THREAD = 0xFFFFFFFF + } e_locking_thread; + LLMutex(apr_pool_t *apr_poolp); // NULL pool constructs a new pool for the mutex ~LLMutex(); void lock(); // blocks void unlock(); bool isLocked(); // non-blocking, but does do a lock/unlock so not free + U32 lockingThread() const; //get ID of locking thread protected: apr_thread_mutex_t *mAPRMutexp; + mutable U32 mCount; + mutable U32 mLockingThread; + apr_pool_t *mAPRPoolp; BOOL mIsLocalPool; + S32 mLockCount; #if MUTEX_DEBUG std::map mIsLocked; #endif diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index fb2de92e35..44ff173502 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1952,8 +1952,12 @@ BOOL LLVolume::createVolumeFacesFromStream(std::istream& is) } is.seekg(header[nm[lod]]["offset"].asInteger(), std::ios_base::cur); - + return unpackVolumeFaces(is, header[nm[lod]]["size"].asInteger()); +} + +BOOL LLVolume::unpackVolumeFaces(std::istream& is, S32 size) +{ U8* result = NULL; U32 cur_size = 0; @@ -1964,7 +1968,6 @@ BOOL LLVolume::createVolumeFacesFromStream(std::istream& is) const U32 CHUNK = 65536; - S32 size = header[nm[lod]]["size"].asInteger(); U8 *in = new U8[size]; is.read((char*) in, size); diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 59c60ccd92..9970b24a94 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -971,6 +971,8 @@ protected: public: virtual BOOL createVolumeFacesFromFile(const std::string& file_name); virtual BOOL createVolumeFacesFromStream(std::istream& is); + virtual BOOL unpackVolumeFaces(std::istream& is, S32 size); + virtual void makeTetrahedron(); virtual BOOL isTetrahedron(); diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 23f8b4b9ca..52adc740e3 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -284,6 +284,7 @@ set(viewer_SOURCE_FILES llmediaremotectrl.cpp llmemoryview.cpp llmenucommands.cpp + llmeshrepository.cpp llmetricperformancetester.cpp llmimetypes.cpp llmorphview.cpp @@ -789,6 +790,7 @@ set(viewer_HEADER_FILES llmediaremotectrl.h llmemoryview.h llmenucommands.h + llmeshrepository.h llmetricperformancetester.h llmimetypes.h llmorphview.h diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 4ed2927ce6..087472661f 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -9998,7 +9998,7 @@ Type Boolean Value - 1 + 0 UseStartScreen diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index ddc818172d..a56e86c979 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -48,6 +48,7 @@ #include "llwindow.h" #include "llviewerstats.h" #include "llmd5.h" +#include "llmeshrepository.h" #include "llpumpio.h" #include "llmimetypes.h" #include "llslurl.h" @@ -1266,6 +1267,9 @@ bool LLAppViewer::cleanup() llinfos << "Cleaning Up" << llendflush; + // shut down mesh streamer + gMeshRepo.shutdown(); + // Must clean up texture references before viewer window is destroyed. LLHUDManager::getInstance()->updateEffects(); LLHUDObject::updateAll(); @@ -1678,6 +1682,9 @@ bool LLAppViewer::initThreads() mFastTimerLogThread->start(); } + // Mesh streaming and caching + gMeshRepo.init(); + // *FIX: no error handling here! return true; } @@ -2394,6 +2401,7 @@ bool LLAppViewer::initWindow() gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE ); gPipeline.init(); + stop_glerror(); gViewerWindow->initGLDefaults(); diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 8317837520..f173149bf4 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1432,6 +1432,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url) capabilityNames.append("FetchLib"); capabilityNames.append("FetchLibDescendents"); capabilityNames.append("GetTexture"); + capabilityNames.append("GetMesh"); capabilityNames.append("GroupProposalBallot"); capabilityNames.append("HomeLocation"); capabilityNames.append("MapLayer"); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 7debfb9186..f66f0c2d72 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -70,6 +70,7 @@ #include "llsdutil.h" #include "llmediaentry.h" #include "llmediadataclient.h" +#include "llmeshrepository.h" #include "llagent.h" const S32 MIN_QUIET_FRAMES_COALESCE = 30; @@ -861,6 +862,16 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool { LLVolumeParams volume_params = params; + if (isSculpted()) + { + // if it's a mesh + if ((volume_params.getSculptType() & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH) + { //meshes might not have all LODs, get the force detail to best existing LOD + LLUUID mesh_id = params.getSculptID(); + mLOD = gMeshRepo.getActualMeshLOD(mesh_id, mLOD); + } + } + // Check if we need to change implementations bool is_flexible = (volume_params.getPathParams().getCurveType() == LL_PCODE_PATH_FLEXIBLE); if (is_flexible) @@ -888,6 +899,8 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool } } + + if ((LLPrimitive::setVolume(volume_params, mLOD, (mVolumeImpl && mVolumeImpl->isVolumeUnique()))) || mSculptChanged) { mFaceMappingChanged = TRUE; @@ -906,7 +919,7 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool { //load request not yet issued, request pipeline load this mesh LLUUID asset_id = volume_params.getSculptID(); - gPipeline.loadMesh(this, asset_id, LLVolumeLODGroup::getVolumeDetailFromScale(getVolume()->getDetail())); + gMeshRepo.loadMesh(this, asset_id, LLVolumeLODGroup::getVolumeDetailFromScale(getVolume()->getDetail())); } } else // otherwise is sculptie diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 610804c5eb..b37645d2de 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -70,6 +70,7 @@ #include "llgldbg.h" #include "llhudmanager.h" #include "lllightconstants.h" +#include "llmeshrepository.h" #include "llresmgr.h" #include "llselectmgr.h" #include "llsky.h" @@ -103,6 +104,7 @@ #include "llspatialpartition.h" #include "llmutelist.h" #include "lltoolpie.h" +#include "llcurl.h" #ifdef _DEBUG @@ -342,8 +344,6 @@ LLPipeline::LLPipeline() : mGlowPool(NULL), mBumpPool(NULL), mWLSkyPool(NULL), - mMeshMutex(NULL), - mMeshThreadCount(0), mLightMask(0), mLightMovingMask(0), mLightingDetail(0), @@ -403,7 +403,6 @@ void LLPipeline::init() stop_glerror(); - mMeshMutex = new LLMutex(NULL); for (U32 i = 0; i < 2; ++i) { mSpotLightFade[i] = 1.f; @@ -478,9 +477,6 @@ void LLPipeline::cleanup() //delete mWLSkyPool; mWLSkyPool = NULL; - delete mMeshMutex; - mMeshMutex = NULL; - releaseGLBuffers(); mBloomImagep = NULL; @@ -1802,6 +1798,8 @@ void LLPipeline::rebuildPriorityGroups() assertInitialized(); + gMeshRepo.notifyLoadedMeshes(); + // Iterate through all drawables on the priority build queue, for (LLSpatialGroup::sg_list_t::iterator iter = mGroupQ1.begin(); iter != mGroupQ1.end(); ++iter) @@ -1881,8 +1879,6 @@ void LLPipeline::updateGeom(F32 max_dtime) // for now, only LLVOVolume does this to throttle LOD changes LLVOVolume::preUpdateGeom(); - notifyLoadedMeshes(); - // Iterate through all drawables on the priority build queue, for (LLDrawable::drawable_list_t::iterator iter = mBuildQ1.begin(); iter != mBuildQ1.end();) @@ -8912,246 +8908,3 @@ LLCullResult::sg_list_t::iterator LLPipeline::endAlphaGroups() } -void LLPipeline::loadMesh(LLVOVolume* vobj, LLUUID mesh_id, S32 detail) -{ - if (detail < 0 || detail > 4) - { - return; - } - - { - LLMutexLock lock(mMeshMutex); - //add volume to list of loading meshes - mesh_load_map::iterator iter = mLoadingMeshes[detail].find(mesh_id); - if (iter != mLoadingMeshes[detail].end()) - { //request pending for this mesh, append volume id to list - iter->second.insert(vobj->getID()); - return; - } - - //first request for this mesh - mLoadingMeshes[detail][mesh_id].insert(vobj->getID()); - } - - if (gAssetStorage->hasLocalAsset(mesh_id, LLAssetType::AT_MESH)) - { //already have asset, load desired LOD in background - mPendingMeshes.push_back(new LLMeshThread(mesh_id, vobj->getVolume(), detail)); - } - else - { //fetch asset and load when done - gAssetStorage->getAssetData(mesh_id, LLAssetType::AT_MESH, - getMeshAssetCallback, vobj->getVolume(), TRUE); - } - - //do a quick search to see if we can't display something while we wait for this mesh to load - LLVolume* volume = vobj->getVolume(); - - if (volume) - { - LLVolumeParams params = volume->getParams(); - - LLVolumeLODGroup* group = LLPrimitive::getVolumeManager()->getGroup(params); - - if (group) - { - //first see what the next lowest LOD available might be - for (S32 i = detail-1; i >= 0; --i) - { - LLVolume* lod = group->refLOD(i); - if (lod && !lod->isTetrahedron() && lod->getNumVolumeFaces() > 0) - { - volume->copyVolumeFaces(lod); - group->derefLOD(lod); - return; - } - - group->derefLOD(lod); - } - - //no lower LOD is a available, is a higher lod available? - for (S32 i = detail+1; i < 4; ++i) - { - LLVolume* lod = group->refLOD(i); - if (lod && !lod->isTetrahedron() && lod->getNumVolumeFaces() > 0) - { - volume->copyVolumeFaces(lod); - group->derefLOD(lod); - return; - } - - group->derefLOD(lod); - } - } - else - { - llerrs << "WTF?" << llendl; - } - - //nothing found, so make a tetrahedron - volume->makeTetrahedron(); - } -} - -//static -void LLPipeline::getMeshAssetCallback(LLVFS *vfs, - const LLUUID& asset_uuid, - LLAssetType::EType type, - void* user_data, S32 status, LLExtStat ext_status) -{ - gPipeline.mPendingMeshes.push_back(new LLMeshThread(asset_uuid, (LLVolume*) user_data)); -} - - -LLPipeline::LLMeshThread::LLMeshThread(LLUUID mesh_id, LLVolume* target, S32 detail) -: LLThread("mesh_loading_thread") -{ - mMeshID = mesh_id; - mVolume = NULL; - mDetail = target->getDetail(); - - if (detail == -1) - { - mDetailIndex = LLVolumeLODGroup::getVolumeDetailFromScale(target->getDetail()); - } - else - { - mDetailIndex = detail; - } - - mTargetVolume = target; -} - -LLPipeline::LLMeshThread::~LLMeshThread() -{ - -} - -void LLPipeline::LLMeshThread::run() -{ - if (!gAssetStorage || LLApp::instance()->isQuitting()) - { - return; - } - - char* buffer = NULL; - S32 size = 0; - - LLVFS* vfs = gAssetStorage->mVFS; - - { - LLVFile file(vfs, mMeshID, LLAssetType::AT_MESH, LLVFile::READ); - file.waitForLock(VFSLOCK_READ); - size = file.getSize(); - - if (size == 0) - { - gPipeline.meshLoaded(this); - return; - } - - buffer = new char[size]; - file.read((U8*)&buffer[0], size); - } - - { - std::string buffer_string(buffer, size); - std::istringstream buffer_stream(buffer_string); - - { - LLVolumeParams volume_params; - volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE); - volume_params.setSculptID(mMeshID, LL_SCULPT_TYPE_MESH); - mVolume = new LLVolume(volume_params, mDetail); - mVolume->createVolumeFacesFromStream(buffer_stream); - } - } - delete[] buffer; - - gPipeline.meshLoaded(this); -} - -void LLPipeline::meshLoaded(LLPipeline::LLMeshThread* mesh_thread) -{ - LLMutexLock lock(mMeshMutex); - mLoadedMeshes.push_back(mesh_thread); -} - -void LLPipeline::notifyLoadedMeshes() -{ //called from main thread - - U32 max_thread_count = llmax(gSavedSettings.getU32("MeshThreadCount"), (U32) 1); - while (mMeshThreadCount < max_thread_count && !mPendingMeshes.empty()) - { - LLMeshThread* mesh_thread = mPendingMeshes.front(); - mesh_thread->start(); - ++mMeshThreadCount; - mPendingMeshes.pop_front(); - } - - LLMutexLock lock(mMeshMutex); - std::list stopping_threads; - - for (std::list::iterator iter = mLoadedMeshes.begin(); iter != mLoadedMeshes.end(); ++iter) - { //for each mesh done loading - LLMeshThread* mesh = *iter; - - if (!mesh->isStopped()) - { //don't process a LLMeshThread until it's stopped - stopping_threads.push_back(mesh); - continue; - } - - S32 detail = mesh->mDetailIndex; - - //get list of objects waiting to be notified this mesh is loaded - mesh_load_map::iterator obj_iter = mLoadingMeshes[detail].find(mesh->mMeshID); - - if (mesh->mVolume && obj_iter != mLoadingMeshes[detail].end()) - { - //make sure target volume is still valid - BOOL valid = FALSE; - - for (std::set::iterator vobj_iter = obj_iter->second.begin(); vobj_iter != obj_iter->second.end(); ++vobj_iter) - { - LLVOVolume* vobj = (LLVOVolume*) gObjectList.findObject(*vobj_iter); - - if (vobj) - { - if (vobj->getVolume() == mesh->mTargetVolume) - { - valid = TRUE; - } - } - } - - - if (valid) - { - if (mesh->mVolume->getNumVolumeFaces() <= 0) - { - llwarns << "Mesh loading returned empty volume." << llendl; - mesh->mVolume->makeTetrahedron(); - } - - mesh->mTargetVolume->copyVolumeFaces(mesh->mVolume); - - for (std::set::iterator vobj_iter = obj_iter->second.begin(); vobj_iter != obj_iter->second.end(); ++vobj_iter) - { - LLVOVolume* vobj = (LLVOVolume*) gObjectList.findObject(*vobj_iter); - if (vobj) - { - vobj->notifyMeshLoaded(); - } - } - } - - mLoadingMeshes[detail].erase(mesh->mMeshID); - } - - delete mesh; - --mMeshThreadCount; - } - - mLoadedMeshes = stopping_threads; -} - diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index f41f6173a9..0b040acf51 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -58,6 +58,8 @@ class LLCubeMap; class LLCullResult; class LLVOAvatar; class LLGLSLShader; +class LLCurlRequest; +class LLMeshResponder; typedef enum e_avatar_skinning_method { @@ -278,10 +280,6 @@ public: LLCullResult::sg_list_t::iterator beginAlphaGroups(); LLCullResult::sg_list_t::iterator endAlphaGroups(); - - //mesh management functions - void loadMesh(LLVOVolume* volume, LLUUID mesh_id, S32 detail = 0); - void addTrianglesDrawn(S32 count); BOOL hasRenderType(const U32 type) const { return (type && (mRenderTypeMask & (1< > mesh_load_map; mesh_load_map mLoadingMeshes[4]; - LLMutex* mMeshMutex; - - class LLMeshThread : public LLThread - { - public: - LLPointer mVolume; - LLVolume* mTargetVolume; - LLUUID mMeshID; - F32 mDetail; - S32 mDetailIndex; - LLMeshThread(LLUUID mesh_id, LLVolume* target, S32 detail = -1); - ~LLMeshThread(); - void run(); - }; - - static void getMeshAssetCallback(LLVFS *vfs, - const LLUUID& asset_uuid, - LLAssetType::EType type, - void* user_data, S32 status, LLExtStat ext_status); - - std::list mLoadedMeshes; - std::list mPendingMeshes; - U32 mMeshThreadCount; - - void meshLoaded(LLMeshThread* mesh_thread); - void notifyLoadedMeshes(); + typedef std::list mesh_response_list; + mesh_response_list mMeshResponseList; LLPointer mFaceSelectImagep; LLPointer mBloomImagep; -- cgit v1.3 From 081fa98a47d2b592ada0fbb049ff959ac2cd6294 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Tue, 15 Dec 2009 17:43:05 -0600 Subject: HTTP Mesh transfer relatively blocking-free. --- indra/llmath/llvolume.cpp | 2 +- indra/newview/app_settings/settings.xml | 11 +++++++++++ indra/newview/llvovolume.cpp | 20 ++++++++++++++++---- 3 files changed, 28 insertions(+), 5 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 44ff173502..844918432d 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2171,7 +2171,7 @@ void LLVolume::makeTetrahedron() LLVolumeFace face; - F32 x = 0.5f; + F32 x = 0.25f; LLVector3 p[] = { //unit tetrahedron corners LLVector3(x,x,x), diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index a4142b41b0..4f17775dfd 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -7463,6 +7463,17 @@ Value 8 + MeshMaxConcurrentRequests + + Comment + Number of threads to use for loading meshes. + Persist + 1 + Type + U32 + Value + 32 + SafeMode diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index f66f0c2d72..ea0aa54751 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -862,13 +862,21 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool { LLVolumeParams volume_params = params; + S32 lod = mLOD; + if (isSculpted()) { // if it's a mesh if ((volume_params.getSculptType() & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH) { //meshes might not have all LODs, get the force detail to best existing LOD LLUUID mesh_id = params.getSculptID(); - mLOD = gMeshRepo.getActualMeshLOD(mesh_id, mLOD); + + //profile and path params don't matter for meshes + volume_params = LLVolumeParams(); + volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE); + volume_params.setSculptID(mesh_id, LL_SCULPT_TYPE_MESH); + + lod = gMeshRepo.getActualMeshLOD(mesh_id, lod); } } @@ -901,13 +909,13 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool - if ((LLPrimitive::setVolume(volume_params, mLOD, (mVolumeImpl && mVolumeImpl->isVolumeUnique()))) || mSculptChanged) + if ((LLPrimitive::setVolume(volume_params, lod, (mVolumeImpl && mVolumeImpl->isVolumeUnique()))) || mSculptChanged) { mFaceMappingChanged = TRUE; if (mVolumeImpl) { - mVolumeImpl->onSetVolume(volume_params, detail); + mVolumeImpl->onSetVolume(volume_params, mLOD); } if (isSculpted()) @@ -919,7 +927,11 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool { //load request not yet issued, request pipeline load this mesh LLUUID asset_id = volume_params.getSculptID(); - gMeshRepo.loadMesh(this, asset_id, LLVolumeLODGroup::getVolumeDetailFromScale(getVolume()->getDetail())); + S32 available_lod = gMeshRepo.loadMesh(this, asset_id, lod); + if (available_lod != lod) + { + LLPrimitive::setVolume(volume_params, available_lod); + } } } else // otherwise is sculptie -- cgit v1.3 From 512a5736dceb1cc6db286e5f5baad867ac7a5935 Mon Sep 17 00:00:00 2001 From: "Karl Stiefvater (qarl)" Date: Wed, 23 Dec 2009 14:40:48 -0600 Subject: LODs for scene upload --- indra/llmath/llvolume.cpp | 14 ++++++++++++++ indra/llmath/llvolume.h | 2 ++ indra/newview/CMakeLists.txt | 2 ++ 3 files changed, 18 insertions(+) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 844918432d..de32070da1 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -3807,6 +3807,20 @@ S32 LLVolume::getNumTriangleIndices() const return count; } + +S32 LLVolume::getNumTriangles() const +{ + U32 triangle_count = 0; + + for (S32 i = 0; i < getNumVolumeFaces(); ++i) + { + triangle_count += getVolumeFace(i).mIndices.size()/3; + } + + return triangle_count; +} + + //----------------------------------------------------------------------------- // generateSilhouetteVertices() //----------------------------------------------------------------------------- diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 9970b24a94..e3ab648fe3 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -912,6 +912,8 @@ public: // returns number of triangle indeces required for path/profile mesh S32 getNumTriangleIndices() const; + S32 getNumTriangles() const; + void generateSilhouetteVertices(std::vector &vertices, std::vector &normals, std::vector &segments, diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 193109e9f4..cae426e37b 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -285,6 +285,7 @@ set(viewer_SOURCE_FILES llmemoryview.cpp llmenucommands.cpp llmeshrepository.cpp + llmeshreduction.cpp llmetricperformancetester.cpp llmimetypes.cpp llmorphview.cpp @@ -796,6 +797,7 @@ set(viewer_HEADER_FILES llmemoryview.h llmenucommands.h llmeshrepository.h + llmeshreduction.h llmetricperformancetester.h llmimetypes.h llmorphview.h -- cgit v1.3 From d3e84ea77baa7d60fe225f7b440297e9a49318a6 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Wed, 20 Jan 2010 15:08:29 -0600 Subject: First stab at making model importer act more like scene importer. Upload button still doesn't work. --- indra/llmath/m4math.cpp | 17 +++++++++++++++++ indra/llmath/m4math.h | 1 + 2 files changed, 18 insertions(+) (limited to 'indra/llmath') diff --git a/indra/llmath/m4math.cpp b/indra/llmath/m4math.cpp index 7c7f60154d..3700142982 100644 --- a/indra/llmath/m4math.cpp +++ b/indra/llmath/m4math.cpp @@ -785,6 +785,23 @@ bool operator!=(const LLMatrix4 &a, const LLMatrix4 &b) return FALSE; } +bool operator<(const LLMatrix4& a, const LLMatrix4 &b) +{ + U32 i, j; + for (i = 0; i < NUM_VALUES_IN_MAT4; i++) + { + for (j = 0; j < NUM_VALUES_IN_MAT4; j++) + { + if (a.mMatrix[i][j] != b.mMatrix[i][j]) + { + return a.mMatrix[i][j] < b.mMatrix[i][j]; + } + } + } + + return false; +} + const LLMatrix4& operator*=(LLMatrix4 &a, F32 k) { U32 i, j; diff --git a/indra/llmath/m4math.h b/indra/llmath/m4math.h index de981b7646..6007b96bd9 100644 --- a/indra/llmath/m4math.h +++ b/indra/llmath/m4math.h @@ -237,6 +237,7 @@ public: friend bool operator==(const LLMatrix4 &a, const LLMatrix4 &b); // Return a == b friend bool operator!=(const LLMatrix4 &a, const LLMatrix4 &b); // Return a != b + friend bool operator<(const LLMatrix4 &a, const LLMatrix4& b); // Return a < b friend const LLMatrix4& operator+=(LLMatrix4 &a, const LLMatrix4 &b); // Return a + b friend const LLMatrix4& operator-=(LLMatrix4 &a, const LLMatrix4 &b); // Return a - b -- cgit v1.3 From 024c0ebe19588f8452bae7ea01756fd7b4b30540 Mon Sep 17 00:00:00 2001 From: "Karl Stiefvater (qarl)" Date: Fri, 29 Jan 2010 14:33:04 -0600 Subject: enable mirror and invert flags for meshes. --- indra/llmath/llvolume.cpp | 59 +++++++++++++++++++++++++++++++++++++++++--- indra/llmath/llvolume.h | 7 +++--- indra/newview/llvovolume.cpp | 7 +++--- 3 files changed, 62 insertions(+), 11 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index de32070da1..0328c09c9a 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1694,7 +1694,7 @@ LLVolume::LLVolume(const LLVolumeParams ¶ms, const F32 detail, const BOOL ge generate(); - if (mParams.getSculptID().isNull() && params.getSculptType() == LL_SCULPT_TYPE_NONE) + if (mParams.getSculptID().isNull() && mParams.getSculptType() == LL_SCULPT_TYPE_NONE) { createVolumeFaces(); } @@ -2142,6 +2142,59 @@ BOOL LLVolume::unpackVolumeFaces(std::istream& is, S32 size) (F32) t[1] / 65535.f * tc_range.mV[1] + min_tc.mV[1]); } + + // modifier flags? + BOOL do_mirror = (mParams.getSculptType() & LL_SCULPT_FLAG_MIRROR); + BOOL do_invert = (mParams.getSculptType() &LL_SCULPT_FLAG_INVERT); + + + // translate to actions: + BOOL do_reflect_x = FALSE; + BOOL do_reverse_triangles = FALSE; + BOOL do_invert_normals = FALSE; + + if (do_mirror) + { + do_reflect_x = TRUE; + do_reverse_triangles = !do_reverse_triangles; + } + + if (do_invert) + { + do_invert_normals = TRUE; + do_reverse_triangles = !do_reverse_triangles; + } + + // now do the work + + if (do_reflect_x) + { + for (S32 i = 0; i < face.mVertices.size(); i++) + { + face.mVertices[i].mPosition.mV[VX] *= -1.0f; + face.mVertices[i].mNormal.mV[VX] *= -1.0f; + } + } + + if (do_invert_normals) + { + for (S32 i = 0; i < face.mVertices.size(); i++) + { + face.mVertices[i].mNormal *= -1.0f; + } + } + + if (do_reverse_triangles) + { + for (U32 j = 0; j < face.mIndices.size(); j += 3) + { + // swap the 2nd and 3rd index + S32 swap = face.mIndices[j+1]; + face.mIndices[j+1] = face.mIndices[j+2]; + face.mIndices[j+2] = swap; + } + } + } } @@ -3838,7 +3891,7 @@ void LLVolume::generateSilhouetteVertices(std::vector &vertices, normals.clear(); segments.clear(); - if (mParams.getSculptType() == LL_SCULPT_TYPE_MESH) + if ((mParams.getSculptType() & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH) { return; } @@ -5500,7 +5553,7 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) { mIndices.resize(num_indices); - if (volume->getParams().getSculptType() != LL_SCULPT_TYPE_MESH) + if ((volume->getParams().getSculptType() & LL_SCULPT_TYPE_MASK) != LL_SCULPT_TYPE_MESH) { mEdge.resize(num_indices); } diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index e3ab648fe3..0bc64f4487 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -183,12 +183,11 @@ const U8 LL_SCULPT_TYPE_SPHERE = 1; const U8 LL_SCULPT_TYPE_TORUS = 2; const U8 LL_SCULPT_TYPE_PLANE = 3; const U8 LL_SCULPT_TYPE_CYLINDER = 4; - -const U8 LL_SCULPT_TYPE_MASK = LL_SCULPT_TYPE_SPHERE | LL_SCULPT_TYPE_TORUS | LL_SCULPT_TYPE_PLANE | LL_SCULPT_TYPE_CYLINDER; - -// need to change this (these) names const U8 LL_SCULPT_TYPE_MESH = 5; +const U8 LL_SCULPT_TYPE_MASK = LL_SCULPT_TYPE_SPHERE | LL_SCULPT_TYPE_TORUS | LL_SCULPT_TYPE_PLANE | + LL_SCULPT_TYPE_CYLINDER | LL_SCULPT_TYPE_MESH; + const U8 LL_SCULPT_FLAG_INVERT = 64; const U8 LL_SCULPT_FLAG_MIRROR = 128; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 4acf3cb6fb..3f1ddc0ee7 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -905,14 +905,13 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool // if it's a mesh if ((volume_params.getSculptType() & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH) { //meshes might not have all LODs, get the force detail to best existing LOD + LLUUID mesh_id = params.getSculptID(); //profile and path params don't matter for meshes - volume_params = LLVolumeParams(); volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE); - volume_params.setSculptID(mesh_id, LL_SCULPT_TYPE_MESH); - lod = gMeshRepo.getActualMeshLOD(mesh_id, lod); + lod = gMeshRepo.getActualMeshLOD(volume_params, lod); } } @@ -963,7 +962,7 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool { //load request not yet issued, request pipeline load this mesh LLUUID asset_id = volume_params.getSculptID(); - S32 available_lod = gMeshRepo.loadMesh(this, asset_id, lod); + S32 available_lod = gMeshRepo.loadMesh(this, volume_params, lod); if (available_lod != lod) { LLPrimitive::setVolume(volume_params, available_lod); -- cgit v1.3 From 1805369b58d98677c726bb0bcb52618bd66e8fdd Mon Sep 17 00:00:00 2001 From: "Karl Stiefvater (qarl)" Date: Wed, 3 Feb 2010 18:08:19 -0600 Subject: handle reflected geometry in scene import implement determinant for 4x4 matrices fix materials for collada --- indra/llmath/m4math.cpp | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/m4math.cpp b/indra/llmath/m4math.cpp index 3700142982..5c112b52b2 100644 --- a/indra/llmath/m4math.cpp +++ b/indra/llmath/m4math.cpp @@ -221,8 +221,33 @@ const LLMatrix4& LLMatrix4::transpose() F32 LLMatrix4::determinant() const { - llerrs << "Not implemented!" << llendl; - return 0.f; + F32 value = + mMatrix[0][3] * mMatrix[1][2] * mMatrix[2][1] * mMatrix[3][0] - + mMatrix[0][2] * mMatrix[1][3] * mMatrix[2][1] * mMatrix[3][0] - + mMatrix[0][3] * mMatrix[1][1] * mMatrix[2][2] * mMatrix[3][0] + + mMatrix[0][1] * mMatrix[1][3] * mMatrix[2][2] * mMatrix[3][0] + + mMatrix[0][2] * mMatrix[1][1] * mMatrix[2][3] * mMatrix[3][0] - + mMatrix[0][1] * mMatrix[1][2] * mMatrix[2][3] * mMatrix[3][0] - + mMatrix[0][3] * mMatrix[1][2] * mMatrix[2][0] * mMatrix[3][1] + + mMatrix[0][2] * mMatrix[1][3] * mMatrix[2][0] * mMatrix[3][1] + + mMatrix[0][3] * mMatrix[1][0] * mMatrix[2][2] * mMatrix[3][1] - + mMatrix[0][0] * mMatrix[1][3] * mMatrix[2][2] * mMatrix[3][1] - + mMatrix[0][2] * mMatrix[1][0] * mMatrix[2][3] * mMatrix[3][1] + + mMatrix[0][0] * mMatrix[1][2] * mMatrix[2][3] * mMatrix[3][1] + + mMatrix[0][3] * mMatrix[1][1] * mMatrix[2][0] * mMatrix[3][2] - + mMatrix[0][1] * mMatrix[1][3] * mMatrix[2][0] * mMatrix[3][2] - + mMatrix[0][3] * mMatrix[1][0] * mMatrix[2][1] * mMatrix[3][2] + + mMatrix[0][0] * mMatrix[1][3] * mMatrix[2][1] * mMatrix[3][2] + + mMatrix[0][1] * mMatrix[1][0] * mMatrix[2][3] * mMatrix[3][2] - + mMatrix[0][0] * mMatrix[1][1] * mMatrix[2][3] * mMatrix[3][2] - + mMatrix[0][2] * mMatrix[1][1] * mMatrix[2][0] * mMatrix[3][3] + + mMatrix[0][1] * mMatrix[1][2] * mMatrix[2][0] * mMatrix[3][3] + + mMatrix[0][2] * mMatrix[1][0] * mMatrix[2][1] * mMatrix[3][3] - + mMatrix[0][0] * mMatrix[1][2] * mMatrix[2][1] * mMatrix[3][3] - + mMatrix[0][1] * mMatrix[1][0] * mMatrix[2][2] * mMatrix[3][3] + + mMatrix[0][0] * mMatrix[1][1] * mMatrix[2][2] * mMatrix[3][3]; + + return value; } // Only works for pure orthonormal, homogeneous transform matrices. -- cgit v1.3 From 095a5e84408b47ef3c5610e111aefe51d77633ca Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Sat, 6 Feb 2010 17:33:12 -0600 Subject: Draw prims using triangle strips instead of triangle lists. --- indra/llmath/llvolume.cpp | 201 +++++++++++++++++++++++++------- indra/llmath/llvolume.h | 4 +- indra/newview/app_settings/settings.xml | 11 ++ indra/newview/lldrawpool.cpp | 4 +- indra/newview/lldrawpoolalpha.cpp | 8 +- indra/newview/lldrawpoolbump.cpp | 8 +- indra/newview/lldrawpooltree.cpp | 4 +- indra/newview/llface.cpp | 25 +++- indra/newview/llspatialpartition.cpp | 3 +- indra/newview/llspatialpartition.h | 1 + indra/newview/llviewercontrol.cpp | 1 + indra/newview/llviewerjointmesh.cpp | 2 +- indra/newview/llvotree.cpp | 6 +- indra/newview/llvovolume.cpp | 16 ++- indra/newview/llvowlsky.cpp | 2 +- indra/newview/pipeline.cpp | 15 ++- indra/newview/pipeline.h | 4 +- 17 files changed, 242 insertions(+), 73 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index df4c618ac1..cd7d7a12e3 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -4520,15 +4520,65 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build) if (!partial_build) { - int idxs[] = {0,1,(grid_size+1)+1,(grid_size+1)+1,(grid_size+1),0}; - for(int gx = 0;gx=0;i--)mIndices.push_back(vtop+(gy*(grid_size+1))+gx+idxs[i]); - }else{ - for(int i=0;i<6;i++)mIndices.push_back(vtop+(gy*(grid_size+1))+gx+idxs[i]); + mTriStrip.clear(); + S32 idxs[] = {0,1,(grid_size+1)+1,(grid_size+1)+1,(grid_size+1),0}; + for(S32 gx = 0;gx=0;i--) + { + mIndices.push_back(vtop+(gy*(grid_size+1))+gx+idxs[i]); + } + + if (gy == 0) + { + mTriStrip.push_back((gx+1)*(grid_size+1)); + mTriStrip.push_back((gx+1)*(grid_size+1)); + mTriStrip.push_back(gx*(grid_size+1)); + } + + mTriStrip.push_back(gy+1+(gx+1)*(grid_size+1)); + mTriStrip.push_back(gy+1+gx*(grid_size+1)); + + + if (gy == grid_size-1) + { + mTriStrip.push_back(gy+1+gx*(grid_size+1)); + } + } + else + { + for(S32 i=0;i<6;i++) + { + mIndices.push_back(vtop+(gy*(grid_size+1))+gx+idxs[i]); + } + + if (gy == 0) + { + mTriStrip.push_back(gx*(grid_size+1)); + mTriStrip.push_back(gx*(grid_size+1)); + mTriStrip.push_back((gx+1)*(grid_size+1)); + } + + mTriStrip.push_back(gy+1+gx*(grid_size+1)); + mTriStrip.push_back(gy+1+(gx+1)*(grid_size+1)); + + if (gy == grid_size-1) + { + mTriStrip.push_back(gy+1+(gx+1)*(grid_size+1)); + } } } + + } + + if (mTriStrip.size()%2 == 1) + { + mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]); } } @@ -4770,6 +4820,8 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) pt2--; } } + + makeTriStrip(); } else { @@ -4874,67 +4926,108 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) pt2--; } } + + makeTriStrip(); } } else { // Not hollow, generate the triangle fan. + U16 v1 = 2; + U16 v2 = 1; + if (mTypeMask & TOP_MASK) { - if (mTypeMask & OPEN_MASK) - { - // SOLID OPEN TOP - // Generate indices - // This is a tri-fan, so we reuse the same first point for all triangles. - for (S32 i = 0; i < (num_vertices - 2); i++) - { - mIndices[3*i] = num_vertices - 1; - mIndices[3*i+1] = i; - mIndices[3*i+2] = i + 1; - } - } - else - { - // SOLID CLOSED TOP - for (S32 i = 0; i < (num_vertices - 2); i++) - { - //MSMSM fix these caps but only for the un-cut case - mIndices[3*i] = num_vertices - 1; - mIndices[3*i+1] = i; - mIndices[3*i+2] = i + 1; - } - } + v1 = 1; + v2 = 2; + } + + for (S32 i = 0; i < (num_vertices - 2); i++) + { + mIndices[3*i] = num_vertices - 1; + mIndices[3*i+v1] = i; + mIndices[3*i+v2] = i + 1; + } + + //make tri strip + if (mTypeMask & OPEN_MASK) + { + makeTriStrip(); } else { - if (mTypeMask & OPEN_MASK) + S32 j = num_vertices-2; + if (mTypeMask & TOP_MASK) { - // SOLID OPEN BOTTOM - // Generate indices - // This is a tri-fan, so we reuse the same first point for all triangles. - for (S32 i = 0; i < (num_vertices - 2); i++) + mTriStrip.push_back(0); + for (S32 i = 1; i <= j; ++i) { - mIndices[3*i] = num_vertices - 1; - mIndices[3*i+1] = i + 1; - mIndices[3*i+2] = i; + mTriStrip.push_back(i); + if (i != j) + { + mTriStrip.push_back(j); + } + --j; } } else { - // SOLID CLOSED BOTTOM - for (S32 i = 0; i < (num_vertices - 2); i++) + mTriStrip.push_back(j); + for (S32 i = 1; i <= j; ++i) { - //MSMSM fix these caps but only for the un-cut case - mIndices[3*i] = num_vertices - 1; - mIndices[3*i+1] = i + 1; - mIndices[3*i+2] = i; + if (i != j) + { + mTriStrip.push_back(j); + } + mTriStrip.push_back(i); + --j; } } + + mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]); + + if (mTriStrip.size()%2 == 1) + { + mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]); + } } } + return TRUE; } +void LLVolumeFace::makeTriStrip() +{ + for (U32 i = 0; i < mIndices.size(); i+=3) + { + U16 i0 = mIndices[i]; + U16 i1 = mIndices[i+1]; + U16 i2 = mIndices[i+2]; + + if ((i/3)%2 == 1) + { + mTriStrip.push_back(i0); + mTriStrip.push_back(i0); + mTriStrip.push_back(i1); + mTriStrip.push_back(i2); + mTriStrip.push_back(i2); + } + else + { + mTriStrip.push_back(i2); + mTriStrip.push_back(i2); + mTriStrip.push_back(i1); + mTriStrip.push_back(i0); + mTriStrip.push_back(i0); + } + } + + if (mTriStrip.size()%2 == 1) + { + mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]); + } +} + void LLVolumeFace::createBinormals() { LLMemType m1(LLMemType::MTYPE_VOLUME); @@ -5135,9 +5228,14 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) if (!partial_build) { + mTriStrip.clear(); + // Now we generate the indices. for (t = 0; t < (mNumT-1); t++) { + //prepend terminating index to strip + mTriStrip.push_back(mNumS*t); + for (s = 0; s < (mNumS-1); s++) { mIndices[cur_index++] = s + mNumS*t; //bottom left @@ -5147,6 +5245,14 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) mIndices[cur_index++] = s+1 + mNumS*t; //bottom right mIndices[cur_index++] = s+1 + mNumS*(t+1); //top right + if (s == 0) + { + mTriStrip.push_back(s+mNumS*t); + mTriStrip.push_back(s+mNumS*(t+1)); + } + mTriStrip.push_back(s+1+mNumS*t); + mTriStrip.push_back(s+1+mNumS*(t+1)); + mEdge[cur_edge++] = (mNumS-1)*2*t+s*2+1; //bottom left/top right neighbor face if (t < mNumT-2) { //top right/top left neighbor face mEdge[cur_edge++] = (mNumS-1)*2*(t+1)+s*2+1; @@ -5187,6 +5293,13 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) } mEdge[cur_edge++] = (mNumS-1)*2*t+s*2; //top right/bottom left neighbor face } + //append terminating vertex to strip + mTriStrip.push_back(mNumS-1+mNumS*(t+1)); + } + + if (mTriStrip.size()%2 == 1) + { + mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]); } } diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 871b334452..d9f80f0e30 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -798,7 +798,8 @@ public: BOOL create(LLVolume* volume, BOOL partial_build = FALSE); void createBinormals(); - + void makeTriStrip(); + class VertexData { public: @@ -839,6 +840,7 @@ public: std::vector mVertices; std::vector mIndices; + std::vector mTriStrip; std::vector mEdge; private: diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 8a447502b0..ce19dda9a5 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -7386,6 +7386,17 @@ Value 1 + RenderUseTriStrips + + Comment + Use triangle strips for rendering prims. + Persist + 1 + Type + Boolean + Value + 1 + RenderUseFarClip Comment diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp index 95ddacb722..ef946ac49e 100644 --- a/indra/newview/lldrawpool.cpp +++ b/indra/newview/lldrawpool.cpp @@ -496,8 +496,8 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture) params.mGroup->rebuildMesh(); } params.mVertexBuffer->setBuffer(mask); - params.mVertexBuffer->drawRange(LLRender::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset); - gPipeline.addTrianglesDrawn(params.mCount/3); + params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset); + gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode); } if (params.mTextureMatrix && texture && params.mTexture.notNull()) diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp index 6d77361414..0e02bc4b01 100644 --- a/indra/newview/lldrawpoolalpha.cpp +++ b/indra/newview/lldrawpoolalpha.cpp @@ -250,8 +250,8 @@ void LLDrawPoolAlpha::renderAlphaHighlight(U32 mask) params.mGroup->rebuildMesh(); } params.mVertexBuffer->setBuffer(mask); - params.mVertexBuffer->drawRange(LLRender::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset); - gPipeline.addTrianglesDrawn(params.mCount/3); + params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset); + gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode); } } } @@ -380,8 +380,8 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask) } params.mVertexBuffer->setBuffer(mask); - params.mVertexBuffer->drawRange(LLRender::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset); - gPipeline.addTrianglesDrawn(params.mCount/3); + params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset); + gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode); if (params.mTextureMatrix && params.mTexture.notNull()) { diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index 03a8b108e2..d09d4a412f 100644 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -560,8 +560,8 @@ void LLDrawPoolBump::renderGroup(LLSpatialGroup* group, U32 type, U32 mask, BOOL params.mGroup->rebuildMesh(); } params.mVertexBuffer->setBuffer(mask); - params.mVertexBuffer->drawRange(LLRender::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset); - gPipeline.addTrianglesDrawn(params.mCount/3); + params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset); + gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode); } } @@ -1231,8 +1231,8 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture) params.mGroup->rebuildMesh(); } params.mVertexBuffer->setBuffer(mask); - params.mVertexBuffer->drawRange(LLRender::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset); - gPipeline.addTrianglesDrawn(params.mCount/3); + params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset); + gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode); if (params.mTextureMatrix) { if (mShiny) diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp index 5521fb05a8..1a5d55d793 100644 --- a/indra/newview/lldrawpooltree.cpp +++ b/indra/newview/lldrawpooltree.cpp @@ -115,7 +115,7 @@ void LLDrawPoolTree::render(S32 pass) LLFace *face = *iter; face->mVertexBuffer->setBuffer(LLDrawPoolTree::VERTEX_DATA_MASK); face->mVertexBuffer->drawRange(LLRender::TRIANGLES, 0, face->mVertexBuffer->getRequestedVerts()-1, face->mVertexBuffer->getRequestedIndices(), 0); - gPipeline.addTrianglesDrawn(face->mVertexBuffer->getRequestedIndices()/3); + gPipeline.addTrianglesDrawn(face->mVertexBuffer->getRequestedIndices()); } } } @@ -237,7 +237,7 @@ void LLDrawPoolTree::renderForSelect() face->mVertexBuffer->setBuffer(LLDrawPoolTree::VERTEX_DATA_MASK); face->mVertexBuffer->drawRange(LLRender::TRIANGLES, 0, face->mVertexBuffer->getRequestedVerts()-1, face->mVertexBuffer->getRequestedIndices(), 0); - gPipeline.addTrianglesDrawn(face->mVertexBuffer->getRequestedIndices()/3); + gPipeline.addTrianglesDrawn(face->mVertexBuffer->getRequestedIndices()); } } } diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 965ac1cad0..93840e077c 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -868,7 +868,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, llpushcallstacks ; const LLVolumeFace &vf = volume.getVolumeFace(f); S32 num_vertices = (S32)vf.mVertices.size(); - S32 num_indices = (S32)vf.mIndices.size(); + S32 num_indices = LLPipeline::sUseTriStrips ? (S32)vf.mTriStrip.size() : (S32) vf.mIndices.size(); if (mVertexBuffer.notNull()) { @@ -1058,9 +1058,19 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, if (full_rebuild) { mVertexBuffer->getIndexStrider(indicesp, mIndicesIndex); - for (U16 i = 0; i < num_indices; i++) + if (LLPipeline::sUseTriStrips) { - *indicesp++ = vf.mIndices[i] + index_offset; + for (U16 i = 0; i < num_indices; i++) + { + *indicesp++ = vf.mTriStrip[i] + index_offset; + } + } + else + { + for (U16 i = 0; i < num_indices; i++) + { + *indicesp++ = vf.mIndices[i] + index_offset; + } } } @@ -1572,8 +1582,13 @@ S32 LLFace::pushVertices(const U16* index_array) const { if (mIndicesCount) { - mVertexBuffer->drawRange(LLRender::TRIANGLES, mGeomIndex, mGeomIndex+mGeomCount-1, mIndicesCount, mIndicesIndex); - gPipeline.addTrianglesDrawn(mIndicesCount/3); + U32 render_type = LLRender::TRIANGLES; + if (mDrawInfo) + { + render_type = mDrawInfo->mDrawMode; + } + mVertexBuffer->drawRange(render_type, mGeomIndex, mGeomIndex+mGeomCount-1, mIndicesCount, mIndicesIndex); + gPipeline.addTrianglesDrawn(mIndicesCount, render_type); } return mIndicesCount; diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 2a57d48f16..d6e9256fee 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -3380,7 +3380,8 @@ LLDrawInfo::LLDrawInfo(U16 start, U16 end, U32 count, U32 offset, mVSize(0.f), mGroup(NULL), mFace(NULL), - mDistance(0.f) + mDistance(0.f), + mDrawMode(LLRender::TRIANGLES) { mDebugColor = (rand() << 16) + rand(); if (mStart >= mVertexBuffer->getRequestedVerts() || diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index 64c2a9acbc..7896488379 100644 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -93,6 +93,7 @@ public: LLFace* mFace; //associated face F32 mDistance; LLVector3 mExtents[2]; + U32 mDrawMode; struct CompareTexture { diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 827d34138f..0b7f6900ed 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -510,6 +510,7 @@ void settings_setup_listeners() gSavedSettings.getControl("FirstPersonAvatarVisible")->getSignal()->connect(boost::bind(&handleRenderAvatarMouselookChanged, _2)); gSavedSettings.getControl("RenderFarClip")->getSignal()->connect(boost::bind(&handleRenderFarClipChanged, _2)); gSavedSettings.getControl("RenderTerrainDetail")->getSignal()->connect(boost::bind(&handleTerrainDetailChanged, _2)); + gSavedSettings.getControl("RenderUseTriStrips")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2)); gSavedSettings.getControl("RenderAnimateTrees")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2)); gSavedSettings.getControl("RenderAvatarVP")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2)); gSavedSettings.getControl("VertexShaderEnable")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2)); diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp index 1a67fc0966..7225aa1523 100644 --- a/indra/newview/llviewerjointmesh.cpp +++ b/indra/newview/llviewerjointmesh.cpp @@ -626,7 +626,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy) mFace->mVertexBuffer->drawRange(LLRender::TRIANGLES, start, end, count, offset); glPopMatrix(); } - gPipeline.addTrianglesDrawn(count/3); + gPipeline.addTrianglesDrawn(count); triangle_count += count; diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index 24f1c4bd24..55e2c58a52 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -1141,7 +1141,7 @@ U32 LLVOTree::drawBranchPipeline(LLMatrix4& matrix, U16* indicesp, S32 trunk_LOD glLoadMatrixf((F32*) scale_mat.mMatrix); glDrawElements(GL_TRIANGLES, sLODIndexCount[trunk_LOD], GL_UNSIGNED_SHORT, indicesp + sLODIndexOffset[trunk_LOD]); - gPipeline.addTrianglesDrawn(LEAF_INDICES/3); + gPipeline.addTrianglesDrawn(LEAF_INDICES); stop_glerror(); ret += sLODIndexCount[trunk_LOD]; } @@ -1191,7 +1191,7 @@ U32 LLVOTree::drawBranchPipeline(LLMatrix4& matrix, U16* indicesp, S32 trunk_LOD glLoadMatrixf((F32*) scale_mat.mMatrix); glDrawElements(GL_TRIANGLES, LEAF_INDICES, GL_UNSIGNED_SHORT, indicesp); - gPipeline.addTrianglesDrawn(LEAF_INDICES/3); + gPipeline.addTrianglesDrawn(LEAF_INDICES); stop_glerror(); ret += LEAF_INDICES; } @@ -1216,7 +1216,7 @@ U32 LLVOTree::drawBranchPipeline(LLMatrix4& matrix, U16* indicesp, S32 trunk_LOD glLoadMatrixf((F32*) scale_mat.mMatrix); glDrawElements(GL_TRIANGLES, LEAF_INDICES, GL_UNSIGNED_SHORT, indicesp); - gPipeline.addTrianglesDrawn(LEAF_INDICES/3); + gPipeline.addTrianglesDrawn(LEAF_INDICES); stop_glerror(); ret += LEAF_INDICES; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 25ed931fb5..b87ad7fc47 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1514,7 +1514,14 @@ void LLVOVolume::updateFaceSize(S32 idx) else { const LLVolumeFace& vol_face = getVolume()->getVolumeFace(idx); - facep->setSize(vol_face.mVertices.size(), vol_face.mIndices.size()); + if (LLPipeline::sUseTriStrips) + { + facep->setSize(vol_face.mVertices.size(), vol_face.mTriStrip.size()); + } + else + { + facep->setSize(vol_face.mVertices.size(), vol_face.mIndices.size()); + } } } @@ -3264,6 +3271,11 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep, draw_info->mExtents[0] = facep->mExtents[0]; draw_info->mExtents[1] = facep->mExtents[1]; validate_draw_info(*draw_info); + + if (LLPipeline::sUseTriStrips) + { + draw_info->mDrawMode = LLRender::TRIANGLE_STRIP; + } } } @@ -3348,7 +3360,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) drawablep->updateFaceSize(i); LLFace* facep = drawablep->getFace(i); - if (cur_total > max_total) + if (cur_total > max_total || facep->getIndicesCount() <= 0 || facep->getGeomCount() <= 0) { facep->mVertexBuffer = NULL; facep->mLastVertexBuffer = NULL; diff --git a/indra/newview/llvowlsky.cpp b/indra/newview/llvowlsky.cpp index 0272a2ab34..1749ccef94 100644 --- a/indra/newview/llvowlsky.cpp +++ b/indra/newview/llvowlsky.cpp @@ -519,7 +519,7 @@ void LLVOWLSky::drawDome(void) LLRender::TRIANGLE_STRIP, 0, strips_segment->getRequestedVerts()-1, strips_segment->getRequestedIndices(), 0); - gPipeline.addTrianglesDrawn(strips_segment->getRequestedIndices() - 2); + gPipeline.addTrianglesDrawn(strips_segment->getRequestedIndices(), LLRender::TRIANGLE_STRIP); } #else diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index d5f87b73fe..91da9e39e0 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -270,6 +270,7 @@ BOOL LLPipeline::sDelayVBUpdate = TRUE; BOOL LLPipeline::sFastAlpha = TRUE; BOOL LLPipeline::sDisableShaders = FALSE; BOOL LLPipeline::sRenderBump = TRUE; +BOOL LLPipeline::sUseTriStrips = TRUE; BOOL LLPipeline::sUseFarClip = TRUE; BOOL LLPipeline::sShadowRender = FALSE; BOOL LLPipeline::sWaterReflections = FALSE; @@ -358,6 +359,7 @@ void LLPipeline::init() sDynamicLOD = gSavedSettings.getBOOL("RenderDynamicLOD"); sRenderBump = gSavedSettings.getBOOL("RenderObjectBump"); + sUseTriStrips = gSavedSettings.getBOOL("RenderUseTriStrips"); sRenderAttachedLights = gSavedSettings.getBOOL("RenderAttachedLights"); sRenderAttachedParticles = gSavedSettings.getBOOL("RenderAttachedParticles"); @@ -3495,9 +3497,19 @@ void LLPipeline::renderGeomShadow(LLCamera& camera) } -void LLPipeline::addTrianglesDrawn(S32 count) +void LLPipeline::addTrianglesDrawn(S32 index_count, U32 render_type) { assertInitialized(); + S32 count = 0; + if (render_type == LLRender::TRIANGLE_STRIP) + { + count = index_count-2; + } + else + { + count = index_count/3; + } + mTrianglesDrawn += count; mBatchCount++; mMaxBatchSize = llmax(mMaxBatchSize, count); @@ -5349,6 +5361,7 @@ void LLPipeline::resetVertexBuffers(LLDrawable* drawable) void LLPipeline::resetVertexBuffers() { sRenderBump = gSavedSettings.getBOOL("RenderObjectBump"); + sUseTriStrips = gSavedSettings.getBOOL("RenderUseTriStrips"); for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); iter != LLWorld::getInstance()->getRegionList().end(); ++iter) diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index c5285943e8..1bf2ee941b 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -277,7 +277,7 @@ public: LLCullResult::sg_list_t::iterator beginAlphaGroups(); LLCullResult::sg_list_t::iterator endAlphaGroups(); - void addTrianglesDrawn(S32 count); + void addTrianglesDrawn(S32 index_count, U32 render_type = LLRender::TRIANGLES); BOOL hasRenderType(const U32 type) const { return (type && (mRenderTypeMask & (1< Date: Mon, 8 Feb 2010 10:14:11 -0600 Subject: Enable FBO multisampling for OSX. Fix bad triangle in prim caps. --- indra/llmath/llvolume.cpp | 4 ++-- indra/llrender/llrendertarget.cpp | 11 ----------- indra/newview/llviewerdisplay.cpp | 4 ++++ 3 files changed, 6 insertions(+), 13 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index cd7d7a12e3..ae5c9bc8cf 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -4960,7 +4960,7 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) if (mTypeMask & TOP_MASK) { mTriStrip.push_back(0); - for (S32 i = 1; i <= j; ++i) + for (S32 i = 0; i <= j; ++i) { mTriStrip.push_back(i); if (i != j) @@ -4973,7 +4973,7 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) else { mTriStrip.push_back(j); - for (S32 i = 1; i <= j; ++i) + for (S32 i = 0; i <= j; ++i) { if (i != j) { diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index d9520b3bf6..3f2558f1f5 100644 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -390,8 +390,6 @@ void LLRenderTarget::flush(BOOL fetch_depth) } else { -#if !LL_DARWIN - stop_glerror(); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); @@ -435,7 +433,6 @@ void LLRenderTarget::flush(BOOL fetch_depth) } } } -#endif glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); } @@ -444,7 +441,6 @@ void LLRenderTarget::flush(BOOL fetch_depth) void LLRenderTarget::copyContents(LLRenderTarget& source, S32 srcX0, S32 srcY0, S32 srcX1, S32 srcY1, S32 dstX0, S32 dstY0, S32 dstX1, S32 dstY1, U32 mask, U32 filter) { -#if !LL_DARWIN gGL.flush(); if (!source.mFBO || !mFBO) { @@ -483,14 +479,12 @@ void LLRenderTarget::copyContents(LLRenderTarget& source, S32 srcX0, S32 srcY0, stop_glerror(); } } -#endif } //static void LLRenderTarget::copyContentsToFramebuffer(LLRenderTarget& source, S32 srcX0, S32 srcY0, S32 srcX1, S32 srcY1, S32 dstX0, S32 dstY0, S32 dstX1, S32 dstY1, U32 mask, U32 filter) { -#if !LL_DARWIN if (!source.mFBO) { llerrs << "Cannot copy framebuffer contents for non FBO render targets." << llendl; @@ -507,7 +501,6 @@ void LLRenderTarget::copyContentsToFramebuffer(LLRenderTarget& source, S32 srcX0 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); stop_glerror(); } -#endif } BOOL LLRenderTarget::isComplete() const @@ -652,7 +645,6 @@ void LLMultisampleBuffer::allocate(U32 resx, U32 resy, U32 color_fmt, BOOL depth void LLMultisampleBuffer::addColorAttachment(U32 color_fmt) { -#if !LL_DARWIN if (color_fmt == 0) { return; @@ -693,12 +685,10 @@ void LLMultisampleBuffer::addColorAttachment(U32 color_fmt) } mTex.push_back(tex); -#endif } void LLMultisampleBuffer::allocateDepth() { -#if !LL_DARWIN glGenRenderbuffersEXT(1, (GLuint* ) &mDepth); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, mDepth); if (mStencil) @@ -709,6 +699,5 @@ void LLMultisampleBuffer::allocateDepth() { glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, mSamples, GL_DEPTH_COMPONENT16_ARB, mResX, mResY); } -#endif } diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index ba256d70e8..64b3bccd4c 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -862,10 +862,14 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) if (LLPipeline::sRenderDeferred && !LLPipeline::sUnderWaterRender) { gPipeline.mDeferredScreen.flush(); + LLRenderTarget::copyContentsToFramebuffer(gPipeline.mDeferredScreen, 0, 0, gPipeline.mDeferredScreen.getWidth(), gPipeline.mDeferredScreen.getHeight(), + 0, 0, gPipeline.mDeferredScreen.getWidth(), gPipeline.mDeferredScreen.getHeight(), GL_DEPTH_BUFFER_BIT, GL_NEAREST); } else { gPipeline.mScreen.flush(); + LLRenderTarget::copyContentsToFramebuffer(gPipeline.mScreen, 0, 0, gPipeline.mScreen.getWidth(), gPipeline.mScreen.getHeight(), + 0, 0, gPipeline.mScreen.getWidth(), gPipeline.mScreen.getHeight(), GL_DEPTH_BUFFER_BIT, GL_NEAREST); } } -- cgit v1.3 From 2cb5b0b66ec9633d4c6563acf5ff9d0f7bc7cbf7 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Tue, 9 Feb 2010 12:26:09 -0600 Subject: consolidate button work in progress --- indra/llmath/llvolume.cpp | 19 +++++++++++++++++++ indra/llmath/llvolume.h | 2 ++ 2 files changed, 21 insertions(+) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index de32070da1..596c5fe231 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -5468,6 +5468,25 @@ void LLVolumeFace::createBinormals() } } +void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& transform, LLMatrix4& norm_transform) +{ + for (U32 i = 0; i < face.mVertices.size(); ++i) + { + VertexData v = face.mVertices[i]; + v.mPosition *= mat; + v.mNormal *= norm_transform; + + + mVertices.push_back(v); + } + + U16 offset = mIndices.size(); + for (U32 i = 0; i < face.mIndices.size(); ++i) + { + mIndices.push_back(face.mIndices[i]+offset); + } +} + BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) { LLMemType m1(LLMemType::MTYPE_VOLUME); diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index e3ab648fe3..1bf6fac305 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -805,6 +805,8 @@ public: BOOL create(LLVolume* volume, BOOL partial_build = FALSE); void createBinormals(); + void appendFace(const LLVolumeFace& face); + class VertexData { public: -- cgit v1.3 From ffcbbf4aaabc652c2050ca6147a9388217cfcaa7 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 11 Feb 2010 18:00:00 -0600 Subject: Multi-threaded asset uploading with proper ordering first draft. --- indra/llmath/llvolume.cpp | 20 ++++++++++++++++---- indra/llmath/llvolume.h | 2 +- indra/llmessage/llcurl.cpp | 28 ++++++++++++++++++++++++++++ indra/llmessage/llcurl.h | 3 +++ indra/llmessage/llhttpclient.cpp | 1 + indra/newview/llface.cpp | 4 ++-- indra/newview/llviewermenufile.h | 10 ++++++++++ 7 files changed, 61 insertions(+), 7 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index d1716e1407..7e1517fba7 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -5614,19 +5614,31 @@ void LLVolumeFace::createBinormals() } } -void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& transform, LLMatrix4& norm_transform) +void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat, LLMatrix4& norm_mat) { + U16 offset = mVertices.size(); + + for (U32 i = 0; i < face.mVertices.size(); ++i) { VertexData v = face.mVertices[i]; - v.mPosition *= mat; - v.mNormal *= norm_transform; + v.mPosition = v.mPosition*mat; + v.mNormal = v.mNormal * norm_mat; mVertices.push_back(v); + + if (offset == 0 && i == 0) + { + mExtents[0] = mExtents[1] = v.mPosition; + } + else + { + update_min_max(mExtents[0], mExtents[1], v.mPosition); + } } - U16 offset = mIndices.size(); + for (U32 i = 0; i < face.mIndices.size(); ++i) { mIndices.push_back(face.mIndices[i]+offset); diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 1059c29566..36811785dc 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -805,7 +805,7 @@ public: void createBinormals(); void makeTriStrip(); - void appendFace(const LLVolumeFace& face); + void appendFace(const LLVolumeFace& face, LLMatrix4& transform, LLMatrix4& normal_tranform); class VertexData { diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp index 024e17a777..b93b94cd25 100644 --- a/indra/llmessage/llcurl.cpp +++ b/indra/llmessage/llcurl.cpp @@ -55,6 +55,7 @@ #include "llstl.h" #include "llsdserialize.h" #include "llthread.h" +#include "llvfile.h" ////////////////////////////////////////////////////////////////////////////// /* @@ -801,7 +802,34 @@ bool LLCurlRequest::post(const std::string& url, bool res = addEasy(easy); return res; } + +bool LLCurlRequest::post(const std::string& url, + const headers_t& headers, + const std::string& data, + LLCurl::ResponderPtr responder) +{ + LLCurl::Easy* easy = allocEasy(); + if (!easy) + { + return false; + } + easy->prepRequest(url, headers, responder); + + easy->getInput().write(data.data(), data.size()); + S32 bytes = easy->getInput().str().length(); + easy->setopt(CURLOPT_POST, 1); + easy->setopt(CURLOPT_POSTFIELDS, (void*)NULL); + easy->setopt(CURLOPT_POSTFIELDSIZE, bytes); + + easy->slist_append("Content-Type: application/octet-stream"); + easy->setHeaders(); + + lldebugs << "POSTING: " << bytes << " bytes." << llendl; + bool res = addEasy(easy); + return res; +} + // Note: call once per frame S32 LLCurlRequest::process() { diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h index caf02cccd9..4302c19113 100644 --- a/indra/llmessage/llcurl.h +++ b/indra/llmessage/llcurl.h @@ -44,6 +44,7 @@ #include #include // TODO: remove dependency +#include "llassettype.h" #include "llbuffer.h" #include "lliopipe.h" #include "llsd.h" @@ -213,6 +214,8 @@ public: void get(const std::string& url, LLCurl::ResponderPtr responder); bool getByteRange(const std::string& url, const headers_t& headers, S32 offset, S32 length, LLCurl::ResponderPtr responder); bool post(const std::string& url, const headers_t& headers, const LLSD& data, LLCurl::ResponderPtr responder); + bool post(const std::string& url, const headers_t& headers, const std::string& data, LLCurl::ResponderPtr responder); + S32 process(); S32 getQueued(); diff --git a/indra/llmessage/llhttpclient.cpp b/indra/llmessage/llhttpclient.cpp index dd56e18caf..46952fa434 100644 --- a/indra/llmessage/llhttpclient.cpp +++ b/indra/llmessage/llhttpclient.cpp @@ -194,6 +194,7 @@ namespace fileBuffer = new U8 [fileSize]; vfile.read(fileBuffer, fileSize); ostream.write((char*)fileBuffer, fileSize); + delete [] fileBuffer; eos = true; return STATUS_DONE; } diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 0a9976f511..4822c303bf 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -1081,14 +1081,14 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, mVertexBuffer->getIndexStrider(indicesp, mIndicesIndex); if (LLPipeline::sUseTriStrips) { - for (U16 i = 0; i < num_indices; i++) + for (U32 i = 0; i < num_indices; i++) { *indicesp++ = vf.mTriStrip[i] + index_offset; } } else { - for (U16 i = 0; i < num_indices; i++) + for (U32 i = 0; i < num_indices; i++) { *indicesp++ = vf.mIndices[i] + index_offset; } diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h index 7167903311..7ffa5d5e57 100644 --- a/indra/newview/llviewermenufile.h +++ b/indra/newview/llviewermenufile.h @@ -100,4 +100,14 @@ void assign_defaults_and_show_upload_message( const std::string& display_name, std::string& description); +LLSD generate_new_resource_upload_capability_body( + LLAssetType::EType asset_type, + const std::string& name, + const std::string& desc, + LLFolderType::EType destination_folder_type, + LLInventoryType::EType inv_type, + U32 next_owner_perms, + U32 group_perms, + U32 everyone_perms); + #endif -- cgit v1.3 From ee8036712847315141c78d37646d629796442d09 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Wed, 17 Feb 2010 18:08:00 -0600 Subject: 16-bit limit awareness when consolidating models. --- indra/llmath/llvolume.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 7c98536e72..33a00b80ca 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -5619,6 +5619,10 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat, LLMatrix { U16 offset = mVertices.size(); + if (face.mVertices.size() + mVertices.size() > 65536) + { + llerrs << "Cannot append face -- 16-bit overflow will occur." << llendl; + } for (U32 i = 0; i < face.mVertices.size(); ++i) { -- cgit v1.3 From 237f1a1ba362aa2dfd9bb386e431713bdfcad2dc Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Fri, 19 Feb 2010 12:41:08 -0600 Subject: Consolidate now preserves materials. --- indra/llmath/v4color.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'indra/llmath') diff --git a/indra/llmath/v4color.h b/indra/llmath/v4color.h index d6fbdec61e..6b63b976b0 100644 --- a/indra/llmath/v4color.h +++ b/indra/llmath/v4color.h @@ -114,6 +114,7 @@ class LLColor4 const LLColor4& operator=(const LLColor3 &a); // Assigns vec3 to vec4 and returns vec4 + bool operator<(const LLColor4& rhs) const; friend std::ostream& operator<<(std::ostream& s, const LLColor4 &a); // Print a friend LLColor4 operator+(const LLColor4 &a, const LLColor4 &b); // Return vector a + b friend LLColor4 operator-(const LLColor4 &a, const LLColor4 &b); // Return vector a minus b @@ -595,6 +596,23 @@ inline LLColor4 lerp(const LLColor4 &a, const LLColor4 &b, F32 u) a.mV[VW] + (b.mV[VW] - a.mV[VW]) * u); } +inline bool LLColor4::operator<(const LLColor4& rhs) const +{ + if (mV[0] != rhs.mV[0]) + { + return mV[0] < rhs.mV[0]; + } + if (mV[1] != rhs.mV[1]) + { + return mV[1] < rhs.mV[1]; + } + if (mV[2] != rhs.mV[2]) + { + return mV[2] < rhs.mV[2]; + } + + return mV[3] < rhs.mV[3]; +} void LLColor4::clamp() { -- cgit v1.3 From 066f9de07ecfcf142103f646695e5be63a22a667 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Tue, 23 Feb 2010 16:57:06 -0600 Subject: Fix for normals getting squished on consolidation. Replaced some magic numbers with constants. Switched up throttling of mesh upload HTTP posts to prevent overloading one capability at a time. Added some feedback on upload progress via debug text. Made debug text move with side panel (keep debug text from rendering on top of side panel). --- indra/llmath/llvolume.cpp | 1 + indra/newview/llviewerwindow.cpp | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 33a00b80ca..704308f20f 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -5630,6 +5630,7 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat, LLMatrix v.mPosition = v.mPosition*mat; v.mNormal = v.mNormal * norm_mat; + v.mNormal.normalize(); mVertices.push_back(v); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index fd59ea41b2..5c039c9f94 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -31,7 +31,6 @@ */ #include "llviewerprecompiledheaders.h" - #include "llviewerwindow.h" #if LL_WINDOWS @@ -45,6 +44,7 @@ #include #include "llfloaterreg.h" +#include "llmeshrepository.h" #include "llpanellogin.h" #include "llviewerkeyboard.h" #include "llviewermenu.h" @@ -318,7 +318,7 @@ public: mTextColor = LLColor4( 0.86f, 0.86f, 0.86f, 1.f ); // Draw stuff growing up from right lower corner of screen - U32 xpos = mWindow->getWindowWidthScaled() - 350; + U32 xpos = mWindow->getWorldViewWidthScaled() - 350; U32 ypos = 64; const U32 y_inc = 20; @@ -583,6 +583,22 @@ public: ypos += y_inc; } } + + //temporary hack to give feedback on mesh upload progress + if (!gMeshRepo.mUploads.empty()) + { + for (std::vector::iterator iter = gMeshRepo.mUploads.begin(); + iter != gMeshRepo.mUploads.end(); ++iter) + { + LLMeshUploadThread* thread = *iter; + + addText(xpos, ypos, llformat("Mesh Upload -- price quote: %d:%d | upload: %d:%d | create: %d", + thread->mPendingConfirmations, thread->mUploadQ.size(), + thread->mPendingUploads, thread->mConfirmedQ.size(), + thread->mCompletedQ.size())); + ypos += y_inc; + } + } } void draw() -- cgit v1.3 From 3c78771acee787e087bd2e2391397794d4d98f6d Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Wed, 24 Feb 2010 22:02:01 -0600 Subject: Removed scale from model importer. Removed support for scale entry in mesh assets. Fixed MeshMaxConcurrentRequests being ignored. Added mesh download queue debug text. --- indra/llmath/llvolume.cpp | 4 ---- indra/newview/llviewerwindow.cpp | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 704308f20f..904786079f 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2098,8 +2098,6 @@ BOOL LLVolume::unpackVolumeFaces(std::istream& is, S32 size) min_tc.setValue(mdl[i]["TexCoord0Domain"]["Min"]); max_tc.setValue(mdl[i]["TexCoord0Domain"]["Max"]); - F32 scale = llclamp((F32) mdl[i]["Scale"].asReal(), 1.f, 10.f); - LLVector3 pos_range = max_pos - min_pos; LLVector2 tc_range = max_tc - min_tc; @@ -2117,8 +2115,6 @@ BOOL LLVolume::unpackVolumeFaces(std::istream& is, S32 size) (F32) v[1] / 65535.f * pos_range.mV[1] + min_pos.mV[1], (F32) v[2] / 65535.f * pos_range.mV[2] + min_pos.mV[2]); - face.mVertices[j].mPosition *= scale; - if (j == 0) { min = max = face.mVertices[j].mPosition; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 6bdb322c09..f554acf1df 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -599,6 +599,20 @@ public: ypos += y_inc; } } + + S32 pending = (S32) gMeshRepo.mPendingRequests.size(); + S32 header = (S32) gMeshRepo.mThread->mHeaderReqQ.size(); + S32 lod = (S32) gMeshRepo.mThread->mLODReqQ.size(); + + if (pending + header + lod + LLMeshRepoThread::sActiveHeaderRequests + LLMeshRepoThread::sActiveLODRequests != 0) + { + addText(xpos, ypos, llformat ("Mesh Queue - %d pending (%d:%d header | %d:%d LOD)", + pending, + LLMeshRepoThread::sActiveHeaderRequests, header, + LLMeshRepoThread::sActiveLODRequests, lod)); + + ypos += y_inc; + } } void draw() -- cgit v1.3 From b414b5067e3e47da7d9baf490d94534b4c65a8eb Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Sun, 28 Feb 2010 16:40:30 -0600 Subject: Remove some dead code. Add LH transform to LLVector3 Add DebugShowUploadCost Make LOD generation on model preview less finnicky. Remove error level based LOD generation. Better framing of model before upload. Better error handling for model uploader. Remove [COST] argument from model upload menu item. Remove L$ check from model upload menu item being enabled. --- indra/llmath/m4math.cpp | 31 ------------ indra/llmath/m4math.h | 5 +- indra/llmath/v3math.cpp | 22 +++++++++ indra/llmath/v3math.h | 3 ++ indra/llrender/llvertexbuffer.cpp | 6 +++ indra/newview/app_settings/settings.xml | 13 ++++- indra/newview/llviewermenu.cpp | 3 +- indra/newview/llviewermenufile.cpp | 10 ++++ indra/newview/llviewermessage.cpp | 1 - indra/newview/llviewerwindow.cpp | 14 ++++++ indra/newview/pipeline.cpp | 57 ++++++++++++++++++++++ indra/newview/pipeline.h | 4 ++ .../skins/default/xui/en/menu_inventory_add.xml | 4 +- indra/newview/skins/default/xui/en/menu_viewer.xml | 11 +++++ .../skins/default/xui/en/panel_main_inventory.xml | 4 +- 15 files changed, 145 insertions(+), 43 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/m4math.cpp b/indra/llmath/m4math.cpp index 5c112b52b2..ce5428f0e1 100644 --- a/indra/llmath/m4math.cpp +++ b/indra/llmath/m4math.cpp @@ -684,37 +684,6 @@ const LLMatrix4& LLMatrix4::initMatrix(const LLMatrix3 &mat, const LLVector4 & // LLMatrix4 Operators - -/* Not implemented to help enforce code consistency with the syntax of - row-major notation. This is a Good Thing. -LLVector4 operator*(const LLMatrix4 &a, const LLVector4 &b) -{ - // Operate "to the right" on column-vector b - LLVector4 vec; - vec.mV[VX] = a.mMatrix[VX][VX] * b.mV[VX] + - a.mMatrix[VY][VX] * b.mV[VY] + - a.mMatrix[VZ][VX] * b.mV[VZ] + - a.mMatrix[VW][VX] * b.mV[VW]; - - vec.mV[VY] = a.mMatrix[VX][VY] * b.mV[VX] + - a.mMatrix[VY][VY] * b.mV[VY] + - a.mMatrix[VZ][VY] * b.mV[VZ] + - a.mMatrix[VW][VY] * b.mV[VW]; - - vec.mV[VZ] = a.mMatrix[VX][VZ] * b.mV[VX] + - a.mMatrix[VY][VZ] * b.mV[VY] + - a.mMatrix[VZ][VZ] * b.mV[VZ] + - a.mMatrix[VW][VZ] * b.mV[VW]; - - vec.mV[VW] = a.mMatrix[VX][VW] * b.mV[VX] + - a.mMatrix[VY][VW] * b.mV[VY] + - a.mMatrix[VZ][VW] * b.mV[VZ] + - a.mMatrix[VW][VW] * b.mV[VW]; - return vec; -} -*/ - - LLVector4 operator*(const LLVector4 &a, const LLMatrix4 &b) { // Operate "to the left" on row-vector a diff --git a/indra/llmath/m4math.h b/indra/llmath/m4math.h index 6007b96bd9..40599a0886 100644 --- a/indra/llmath/m4math.h +++ b/indra/llmath/m4math.h @@ -226,10 +226,7 @@ public: // Operators // -// Not implemented to enforce code that agrees with symbolic syntax -// friend LLVector4 operator*(const LLMatrix4 &a, const LLVector4 &b); // Apply rotation a to vector b - -// friend inline LLMatrix4 operator*(const LLMatrix4 &a, const LLMatrix4 &b); // Return a * b + // friend inline LLMatrix4 operator*(const LLMatrix4 &a, const LLMatrix4 &b); // Return a * b friend LLVector4 operator*(const LLVector4 &a, const LLMatrix4 &b); // Return transform of vector a by matrix b friend const LLVector3 operator*(const LLVector3 &a, const LLMatrix4 &b); // Return full transform of a by matrix b friend LLVector4 rotate_vector(const LLVector4 &a, const LLMatrix4 &b); // Rotates a but does not translate diff --git a/indra/llmath/v3math.cpp b/indra/llmath/v3math.cpp index 63683ed496..82aad6550b 100644 --- a/indra/llmath/v3math.cpp +++ b/indra/llmath/v3math.cpp @@ -197,6 +197,28 @@ const LLVector3& LLVector3::rotVec(const LLQuaternion &q) return *this; } +const LLVector3& LLVector3::transVec(const LLMatrix4& mat) +{ + setVec( + mV[VX] * mat.mMatrix[VX][VX] + + mV[VY] * mat.mMatrix[VX][VY] + + mV[VZ] * mat.mMatrix[VX][VZ] + + mat.mMatrix[VX][VW], + + mV[VX] * mat.mMatrix[VY][VX] + + mV[VY] * mat.mMatrix[VY][VY] + + mV[VZ] * mat.mMatrix[VY][VZ] + + mat.mMatrix[VY][VW], + + mV[VX] * mat.mMatrix[VZ][VX] + + mV[VY] * mat.mMatrix[VZ][VY] + + mV[VZ] * mat.mMatrix[VZ][VZ] + + mat.mMatrix[VZ][VW]); + + return *this; +} + + const LLVector3& LLVector3::rotVec(F32 angle, const LLVector3 &vec) { if ( !vec.isExactlyZero() && angle ) diff --git a/indra/llmath/v3math.h b/indra/llmath/v3math.h index 73738cffd2..76dd938887 100644 --- a/indra/llmath/v3math.h +++ b/indra/llmath/v3math.h @@ -36,10 +36,12 @@ #include "llerror.h" #include "llmath.h" + #include "llsd.h" class LLVector2; class LLVector4; class LLMatrix3; +class LLMatrix4; class LLVector3d; class LLQuaternion; @@ -115,6 +117,7 @@ class LLVector3 const LLVector3& rotVec(F32 angle, F32 x, F32 y, F32 z); // Rotates about x,y,z by angle radians const LLVector3& rotVec(const LLMatrix3 &mat); // Rotates by LLMatrix4 mat const LLVector3& rotVec(const LLQuaternion &q); // Rotates by LLQuaternion q + const LLVector3& transVec(const LLMatrix4& mat); // Transforms by LLMatrix4 mat (mat * v) const LLVector3& scaleVec(const LLVector3& vec); // scales per component by vec LLVector3 scaledVec(const LLVector3& vec) const; // get a copy of this vector scaled by vec diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 116e265914..415d2f603b 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -668,6 +668,12 @@ void LLVertexBuffer::allocateBuffer(S32 nverts, S32 nindices, bool create) { LLMemType mt2(LLMemType::MTYPE_VERTEX_ALLOCATE_BUFFER); + if (nverts < 0 || nindices < 0 || + nverts > 65536) + { + llerrs << "Bad vertex buffer allocation: " << nverts << " : " << nindices << llendl; + } + updateNumVerts(nverts); updateNumIndices(nindices); diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index bb90aeb91a..cb30147925 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1687,7 +1687,7 @@ DebugShowRenderInfo Comment - Show depth buffer contents + Show stats about current scene Persist 1 Type @@ -1695,6 +1695,17 @@ Value 0 + DebugShowUploadCost + + Comment + Show what it would cost to upload assets in current scene + Persist + 1 + Type + Boolean + Value + 0 + DebugShowRenderMatrices Comment diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index b25d622d17..9404d7ce6b 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -445,8 +445,7 @@ void init_menus() gMenuHolder->childSetLabelArg("Upload Sound", "[COST]", upload_cost); gMenuHolder->childSetLabelArg("Upload Animation", "[COST]", upload_cost); gMenuHolder->childSetLabelArg("Bulk Upload", "[COST]", upload_cost); - gMenuHolder->childSetLabelArg("Upload Model", "[COST]", upload_cost); - + gAFKMenu = gMenuBarView->getChild("Set Away", TRUE); gBusyMenu = gMenuBarView->getChild("Set Busy", TRUE); gAttachSubMenu = gMenuBarView->findChildMenuByName("Attach Object", TRUE); diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 0f26975149..53688f1210 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -92,6 +92,15 @@ class LLFileEnableUpload : public view_listener_t } }; +class LLFileEnableUploadModel : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + bool new_value = gAgent.getRegion() && !gAgent.getRegion()->getCapability("NewFileAgentInventoryVariablePrice").empty(); + return new_value; + } +}; + //============================================================================ #if LL_WINDOWS @@ -1283,6 +1292,7 @@ void init_menu_file() view_listener_t::addCommit(new LLFileQuit(), "File.Quit"); view_listener_t::addEnable(new LLFileEnableUpload(), "File.EnableUpload"); + view_listener_t::addEnable(new LLFileEnableUploadModel(), "File.EnableUploadModel"); // "File.SaveTexture" moved to llpanelmaininventory so that it can be properly handled. } diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 6a9e6f090f..a8702b2c6b 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -4842,7 +4842,6 @@ void process_economy_data(LLMessageSystem *msg, void** /*user_data*/) gMenuHolder->childSetLabelArg("Upload Image", "[COST]", llformat("%d", upload_cost)); gMenuHolder->childSetLabelArg("Upload Sound", "[COST]", llformat("%d", upload_cost)); - gMenuHolder->childSetLabelArg("Upload Model", "[COST]", llformat("%d", upload_cost)); gMenuHolder->childSetLabelArg("Upload Animation", "[COST]", llformat("%d", upload_cost)); gMenuHolder->childSetLabelArg("Bulk Upload", "[COST]", llformat("%d", upload_cost)); } diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index f554acf1df..5b21e13bf1 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -584,6 +584,20 @@ public: } } + + if (gSavedSettings.getBOOL("DebugShowUploadCost")) + { + addText(xpos, ypos, llformat(" Meshes: L$%d", gPipeline.mDebugMeshUploadCost)); + ypos += y_inc/2.f; + addText(xpos, ypos, llformat(" Sculpties: L$%d", gPipeline.mDebugSculptUploadCost)); + ypos += y_inc/2.f; + addText(xpos, ypos, llformat(" Textures: L$%d", gPipeline.mDebugTextureUploadCost)); + ypos += y_inc/2.f; + addText(xpos, ypos, "Upload Cost: "); + + ypos += y_inc; + } + //temporary hack to give feedback on mesh upload progress if (!gMeshRepo.mUploads.empty()) { diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 559ae83182..43b2104135 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -3553,6 +3553,63 @@ void LLPipeline::renderDebug() } } + if (gSavedSettings.getBOOL("DebugShowUploadCost")) + { + std::set textures; + std::set sculpts; + std::set meshes; + + BOOL selected = TRUE; + if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) + { + selected = FALSE; + } + + for (LLCullResult::sg_list_t::iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter) + { + LLSpatialGroup* group = *iter; + LLSpatialGroup::OctreeNode* node = group->mOctreeNode; + for (LLSpatialGroup::OctreeNode::element_iter elem = node->getData().begin(); elem != node->getData().end(); ++elem) + { + LLDrawable* drawable = *elem; + LLVOVolume* volume = drawable->getVOVolume(); + if (volume && volume->isSelected() == selected) + { + for (U32 i = 0; i < volume->getNumTEs(); ++i) + { + LLTextureEntry* te = volume->getTE(i); + textures.insert(te->getID()); + } + + if (volume->isSculpted()) + { + LLUUID sculpt_id = volume->getVolume()->getParams().getSculptID(); + if (volume->isMesh()) + { + meshes.insert(sculpt_id); + } + else + { + sculpts.insert(sculpt_id); + } + } + } + } + } + + gPipeline.mDebugTextureUploadCost = textures.size() * 10; + gPipeline.mDebugSculptUploadCost = sculpts.size()*10; + + U32 mesh_cost = 0; + + for (std::set::iterator iter = meshes.begin(); iter != meshes.end(); ++iter) + { + mesh_cost += gMeshRepo.getResourceCost(*iter)*10; + } + + gPipeline.mDebugMeshUploadCost = mesh_cost; + } + for (LLCullResult::bridge_list_t::const_iterator i = sCull->beginVisibleBridge(); i != sCull->endVisibleBridge(); ++i) { LLSpatialBridge* bridge = *i; diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 33c18c1b86..814c54326a 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -435,6 +435,10 @@ public: S32 mNumVisibleNodes; S32 mVerticesRelit; + S32 mDebugTextureUploadCost; + S32 mDebugSculptUploadCost; + S32 mDebugMeshUploadCost; + S32 mLightingChanges; S32 mGeometryChanges; diff --git a/indra/newview/skins/default/xui/en/menu_inventory_add.xml b/indra/newview/skins/default/xui/en/menu_inventory_add.xml index 0d974075f5..05a4e60de7 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory_add.xml @@ -43,14 +43,14 @@ function="File.EnableUpload" /> + function="File.EnableUploadModel" /> + + + + + function="File.EnableUploadModel" /> Date: Tue, 9 Mar 2010 14:28:06 -0600 Subject: Tool tips for model preview. Rename "Impostor" to "Lowest" --- indra/llmath/llvolume.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 904786079f..d85c56046f 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1918,7 +1918,7 @@ BOOL LLVolume::createVolumeFacesFromStream(std::istream& is) std::string nm[] = { - "impostor", + "lowest_lod", "low_lod", "medium_lod", "high_lod" -- cgit v1.3 From 4c0e2f79219913b57424bfe136b75a6a58fb8639 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 11 Mar 2010 12:02:37 -0600 Subject: "Generate Normals" is less busted now. --- indra/llmath/llvolume.cpp | 67 ++++++++++++++++++++++++++++++++++++++++++++--- indra/llmath/llvolume.h | 33 +++++++++++++++++++++++ 2 files changed, 97 insertions(+), 3 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index d85c56046f..9ea3912a88 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1882,9 +1882,15 @@ bool LLVolumeFace::VertexData::compareNormal(const LLVolumeFace::VertexData& rhs bool retval = false; if (rhs.mPosition == mPosition && rhs.mTexCoord == mTexCoord) { - F32 cur_angle = rhs.mNormal*mNormal; - - retval = cur_angle > angle_cutoff; + if (angle_cutoff > 1.f) + { + retval = (mNormal == rhs.mNormal); + } + else + { + F32 cur_angle = rhs.mNormal*mNormal; + retval = cur_angle > angle_cutoff; + } } return retval; @@ -4953,6 +4959,61 @@ BOOL LLVolumeFace::create(LLVolume* volume, BOOL partial_build) } } +void LLVolumeFace::optimize(F32 angle_cutoff) +{ + LLVolumeFace new_face; + + VertexMapData::PointMap point_map; + + //remove redundant vertices + for (U32 i = 0; i < mIndices.size(); ++i) + { + U16 index = mIndices[i]; + + LLVolumeFace::VertexData cv = mVertices[index]; + + BOOL found = FALSE; + VertexMapData::PointMap::iterator point_iter = point_map.find(cv.mPosition); + if (point_iter != point_map.end()) + { //duplicate point might exist + for (U32 j = 0; j < point_iter->second.size(); ++j) + { + LLVolumeFace::VertexData& tv = (point_iter->second)[j]; + if (tv.compareNormal(cv, angle_cutoff)) + { + found = TRUE; + new_face.mIndices.push_back((point_iter->second)[j].mIndex); + break; + } + } + } + + if (!found) + { + new_face.mVertices.push_back(cv); + U16 index = (U16) new_face.mVertices.size()-1; + new_face.mIndices.push_back(index); + + VertexMapData d; + d.mPosition = cv.mPosition; + d.mTexCoord = cv.mTexCoord; + d.mNormal = cv.mNormal; + d.mIndex = index; + if (point_iter != point_map.end()) + { + point_iter->second.push_back(d); + } + else + { + point_map[d.mPosition].push_back(d); + } + } + } + + mVertices = new_face.mVertices; + mIndices = new_face.mIndices; +} + void LerpPlanarVertex(LLVolumeFace::VertexData& v0, LLVolumeFace::VertexData& v1, LLVolumeFace::VertexData& v2, diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 36811785dc..f1c1fdceba 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -820,6 +820,39 @@ public: bool compareNormal(const VertexData& rhs, F32 angle_cutoff) const; }; + class VertexMapData : public LLVolumeFace::VertexData + { + public: + U16 mIndex; + + bool operator==(const LLVolumeFace::VertexData& rhs) const + { + return mPosition == rhs.mPosition && + mTexCoord == rhs.mTexCoord && + mNormal == rhs.mNormal; + } + + struct ComparePosition + { + bool operator()(const LLVector3& a, const LLVector3& b) const + { + if (a.mV[0] != b.mV[0]) + { + return a.mV[0] < b.mV[0]; + } + if (a.mV[1] != b.mV[1]) + { + return a.mV[1] < b.mV[1]; + } + return a.mV[2] < b.mV[2]; + } + }; + + typedef std::map, VertexMapData::ComparePosition > PointMap; + }; + + void optimize(F32 angle_cutoff = 2.f); + enum { SINGLE_MASK = 0x0001, -- cgit v1.3 From 71d11af31083ced30da7b67a2a63e624c93b44a3 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Sat, 13 Mar 2010 17:39:32 -0600 Subject: Mesh cache. Has a bug. --- indra/llmath/llvolume.cpp | 28 ++++++++++++++-------------- indra/llmath/llvolume.h | 2 +- indra/llvfs/llvfile.cpp | 2 +- 3 files changed, 16 insertions(+), 16 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 9ea3912a88..52a3fb2195 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1962,7 +1962,7 @@ BOOL LLVolume::createVolumeFacesFromStream(std::istream& is) return unpackVolumeFaces(is, header[nm[lod]]["size"].asInteger()); } -BOOL LLVolume::unpackVolumeFaces(std::istream& is, S32 size) +bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) { U8* result = NULL; U32 cur_size = 0; @@ -2002,7 +2002,7 @@ BOOL LLVolume::unpackVolumeFaces(std::istream& is, S32 size) inflateEnd(&strm); free(result); delete [] in; - return FALSE; + return false; } switch (ret) @@ -2014,7 +2014,7 @@ BOOL LLVolume::unpackVolumeFaces(std::istream& is, S32 size) inflateEnd(&strm); free(result); delete [] in; - return FALSE; + return false; break; } @@ -2032,7 +2032,7 @@ BOOL LLVolume::unpackVolumeFaces(std::istream& is, S32 size) if (ret != Z_STREAM_END) { free(result); - return FALSE; + return false; } } @@ -2047,7 +2047,7 @@ BOOL LLVolume::unpackVolumeFaces(std::istream& is, S32 size) if (!LLSDSerialize::deserialize(mdl, istr, cur_size)) { llwarns << "not a valid mesh asset!" << llendl; - return FALSE; + return false; } } @@ -2074,7 +2074,7 @@ BOOL LLVolume::unpackVolumeFaces(std::istream& is, S32 size) LLVolumeFace& face = mVolumeFaces[i]; - face.mHasBinormals = FALSE; + face.mHasBinormals = false; //copy out indices face.mIndices.resize(idx.size()/2); @@ -2146,24 +2146,24 @@ BOOL LLVolume::unpackVolumeFaces(std::istream& is, S32 size) // modifier flags? - BOOL do_mirror = (mParams.getSculptType() & LL_SCULPT_FLAG_MIRROR); - BOOL do_invert = (mParams.getSculptType() &LL_SCULPT_FLAG_INVERT); + bool do_mirror = (mParams.getSculptType() & LL_SCULPT_FLAG_MIRROR); + bool do_invert = (mParams.getSculptType() &LL_SCULPT_FLAG_INVERT); // translate to actions: - BOOL do_reflect_x = FALSE; - BOOL do_reverse_triangles = FALSE; - BOOL do_invert_normals = FALSE; + bool do_reflect_x = false; + bool do_reverse_triangles = false; + bool do_invert_normals = false; if (do_mirror) { - do_reflect_x = TRUE; + do_reflect_x = true; do_reverse_triangles = !do_reverse_triangles; } if (do_invert) { - do_invert_normals = TRUE; + do_invert_normals = true; do_reverse_triangles = !do_reverse_triangles; } @@ -2201,7 +2201,7 @@ BOOL LLVolume::unpackVolumeFaces(std::istream& is, S32 size) } mSculptLevel = 0; // success! - return TRUE; + return true; } void tetrahedron_set_normal(LLVolumeFace::VertexData* cv) diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index f1c1fdceba..60c1569e55 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -1009,7 +1009,7 @@ protected: public: virtual BOOL createVolumeFacesFromFile(const std::string& file_name); virtual BOOL createVolumeFacesFromStream(std::istream& is); - virtual BOOL unpackVolumeFaces(std::istream& is, S32 size); + virtual bool unpackVolumeFaces(std::istream& is, S32 size); virtual void makeTetrahedron(); virtual BOOL isTetrahedron(); diff --git a/indra/llvfs/llvfile.cpp b/indra/llvfs/llvfile.cpp index e0e282d7af..6751f3eb93 100644 --- a/indra/llvfs/llvfile.cpp +++ b/indra/llvfs/llvfile.cpp @@ -320,7 +320,7 @@ BOOL LLVFile::setMaxSize(S32 size) if (!mVFS->checkAvailable(size)) { - LLFastTimer t(FTM_VFILE_WAIT); + //LLFastTimer t(FTM_VFILE_WAIT); S32 count = 0; while (sVFSThread->getPending() > 1000) { -- cgit v1.3 From 807d835c2bfc5d794a74f9690d1fafbe55ff88cc Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Fri, 2 Apr 2010 14:43:05 -0500 Subject: First draft of skin weights in .mesh asset --- indra/llcommon/llsdserialize.cpp | 137 +++++++++++++++++++++++++++++++++++++++ indra/llcommon/llsdserialize.h | 4 ++ indra/llmath/llvolume.cpp | 135 +++++++++++++------------------------- indra/llmath/llvolume.h | 6 ++ 4 files changed, 192 insertions(+), 90 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llcommon/llsdserialize.cpp b/indra/llcommon/llsdserialize.cpp index cf337be161..c341b15539 100644 --- a/indra/llcommon/llsdserialize.cpp +++ b/indra/llcommon/llsdserialize.cpp @@ -39,6 +39,7 @@ #include #include "apr_base64.h" +#include "zlib/zlib.h" // for davep's dirty little zip functions #if !LL_WINDOWS #include // htonl & ntohl @@ -1989,3 +1990,139 @@ std::ostream& operator<<(std::ostream& s, const LLSD& llsd) return s; } + +//dirty little zippers -- yell at davep if these are horrid + +//return a string containing gzipped bytes of binary serialized LLSD +// VERY inefficient -- creates several copies of LLSD block in memory +std::string zip_llsd(LLSD& data) +{ + std::stringstream llsd_strm; + + LLSDSerialize::serialize(data, llsd_strm, LLSDSerialize::LLSD_BINARY); + + z_stream strm; + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + + S32 ret = deflateInit(&strm, Z_BEST_COMPRESSION); + if (ret != Z_OK) + { + llwarns << "Failed to compress LLSD block." << llendl; + return std::string(); + } + + std::string source = llsd_strm.str(); + + strm.avail_in = source.size(); + strm.next_in = (U8*) source.data(); + U8* output = new U8[strm.avail_in]; + strm.avail_out = strm.avail_in; + strm.next_out = output; + ret = deflate(&strm, Z_FINISH); + if (ret != Z_STREAM_END) + { + delete [] output; + llwarns << "Failed to compress LLSD block." << llendl; + } + + std::string::size_type size = source.size()-strm.avail_out; + + std::string result((char*) output, size); + deflateEnd(&strm); + delete [] output; + + return result; +} + +//decompress a block of LLSD from provided istream +// not very efficient -- creats a copy of decompressed LLSD block in memory +// and deserializes from that copy using LLSDSerialize +bool unzip_llsd(LLSD& data, std::istream& is, S32 size) +{ + U8* result = NULL; + U32 cur_size = 0; + z_stream strm; + + const U32 CHUNK = 65536; + + U8 *in = new U8[size]; + is.read((char*) in, size); + + U8 out[CHUNK]; + + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + strm.avail_in = size; + strm.next_in = in; + + S32 ret = inflateInit(&strm); + + if (ret != Z_OK) + { + llerrs << "WTF?" << llendl; + } + + do + { + strm.avail_out = CHUNK; + strm.next_out = out; + ret = inflate(&strm, Z_NO_FLUSH); + if (ret == Z_STREAM_ERROR) + { + inflateEnd(&strm); + free(result); + delete [] in; + return false; + } + + switch (ret) + { + case Z_NEED_DICT: + ret = Z_DATA_ERROR; + case Z_DATA_ERROR: + case Z_MEM_ERROR: + inflateEnd(&strm); + free(result); + delete [] in; + return false; + break; + } + + U32 have = CHUNK-strm.avail_out; + + result = (U8*) realloc(result, cur_size + have); + memcpy(result+cur_size, out, have); + cur_size += have; + + } while (strm.avail_out == 0); + + inflateEnd(&strm); + delete [] in; + + if (ret != Z_STREAM_END) + { + free(result); + return false; + } + + //result now points to the decompressed LLSD block + { + std::string res_str((char*) result, cur_size); + std::istringstream istr(res_str); + + if (!LLSDSerialize::deserialize(data, istr, cur_size)) + { + llwarns << "Failed to unzip LLSD block" << llendl; + return false; + } + } + + free(result); + return true; +} + + + diff --git a/indra/llcommon/llsdserialize.h b/indra/llcommon/llsdserialize.h index 2f2b292189..390eaca783 100644 --- a/indra/llcommon/llsdserialize.h +++ b/indra/llcommon/llsdserialize.h @@ -796,4 +796,8 @@ public: } }; +//dirty little zip functions -- yell at davep +LL_COMMON_API std::string zip_llsd(LLSD& data); +LL_COMMON_API bool unzip_llsd(LLSD& data, std::istream& is, S32 size); + #endif // LL_LLSDSERIALIZE_H diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 52a3fb2195..c563af592f 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -47,8 +47,6 @@ #include "llvolume.h" #include "llstl.h" #include "llsdserialize.h" -#include "zlib/zlib.h" - #define DEBUG_SILHOUETTE_BINORMALS 0 #define DEBUG_SILHOUETTE_NORMALS 0 // TomY: Use this to display normals using the silhouette @@ -1964,97 +1962,15 @@ BOOL LLVolume::createVolumeFacesFromStream(std::istream& is) bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) { - U8* result = NULL; - U32 cur_size = 0; - - { - //input stream is now pointing at a zlib compressed block of LLSD - //decompress block - z_stream strm; - - const U32 CHUNK = 65536; - - U8 *in = new U8[size]; - is.read((char*) in, size); - - U8 out[CHUNK]; - - strm.zalloc = Z_NULL; - strm.zfree = Z_NULL; - strm.opaque = Z_NULL; - strm.avail_in = size; - strm.next_in = in; - - S32 ret = inflateInit(&strm); - - if (ret != Z_OK) - { - llerrs << "WTF?" << llendl; - } - - do - { - strm.avail_out = CHUNK; - strm.next_out = out; - ret = inflate(&strm, Z_NO_FLUSH); - if (ret == Z_STREAM_ERROR) - { - inflateEnd(&strm); - free(result); - delete [] in; - return false; - } - - switch (ret) - { - case Z_NEED_DICT: - ret = Z_DATA_ERROR; - case Z_DATA_ERROR: - case Z_MEM_ERROR: - inflateEnd(&strm); - free(result); - delete [] in; - return false; - break; - } - - U32 have = CHUNK-strm.avail_out; - - result = (U8*) realloc(result, cur_size + have); - memcpy(result+cur_size, out, have); - cur_size += have; - - } while (strm.avail_out == 0); - - inflateEnd(&strm); - delete [] in; - - if (ret != Z_STREAM_END) - { - free(result); - return false; - } - } - - //result now points to the decompressed LLSD block - + //input stream is now pointing at a zlib compressed block of LLSD + //decompress block LLSD mdl; - + if (!unzip_llsd(mdl, is, size)) { - std::string res_str((char*) result, cur_size); - std::istringstream istr(res_str); - - if (!LLSDSerialize::deserialize(mdl, istr, cur_size)) - { - llwarns << "not a valid mesh asset!" << llendl; - return false; - } + llwarns << "not a valid mesh asset!" << llendl; + return false; } - - - free(result); - - + { U32 face_count = mdl.size(); @@ -2094,11 +2010,50 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) U32 num_verts = pos.size()/(3*2); face.mVertices.resize(num_verts); + if (mdl[i].has("Weights")) + { + face.mWeights.resize(num_verts); + LLSD::Binary weights = mdl[i]["Weights"]; + + LLSD::Binary::iterator iter = weights.begin(); + + U32 cur_vertex = 0; + while (iter != weights.end()) + { + const S32 END_INFLUENCES = 0xFF; + U8 joint = *(iter++); + + U32 cur_influence = 0; + while (joint != END_INFLUENCES) + { + U16 influence = *(iter++); + influence = influence << 8; + influence |= *(iter++); + + F32 w = llmin((F32) influence / 65535.f, 0.99999f); + face.mWeights[cur_vertex].mV[cur_influence++] = (F32) joint + w; + + if (cur_influence >= 4) + { + joint = END_INFLUENCES; + } + else + { + joint = *(iter++); + } + } + + cur_vertex++; + iter++; + } + } + LLVector3 min_pos; LLVector3 max_pos; LLVector2 min_tc; LLVector2 max_tc; + min_pos.setValue(mdl[i]["PositionDomain"]["Min"]); max_pos.setValue(mdl[i]["PositionDomain"]["Max"]); min_tc.setValue(mdl[i]["TexCoord0Domain"]["Min"]); diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 60c1569e55..c6a156ae37 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -49,6 +49,7 @@ class LLVolume; //#include "vmath.h" #include "v2math.h" #include "v3math.h" +#include "v4math.h" #include "llquaternion.h" #include "llstrider.h" #include "v4coloru.h" @@ -887,6 +888,11 @@ public: std::vector mTriStrip; std::vector mEdge; + //list of skin weights for rigged volumes + // format is mWeights[vertex_index].mV[influence] = . + // mWeights.size() should be empty or match mVertices.size() + std::vector mWeights; + private: BOOL createUnCutCubeCap(LLVolume* volume, BOOL partial_build = FALSE); BOOL createCap(LLVolume* volume, BOOL partial_build = FALSE); -- cgit v1.3 From 47ffcdb93d6e2ac1f9d497e43e0213c98d129254 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Tue, 6 Apr 2010 16:24:08 -0500 Subject: Rigged attachments (almost works). --- indra/llmath/llvolume.cpp | 22 +++++--- indra/llrender/llglslshader.cpp | 14 ++++- indra/llrender/llglslshader.h | 3 +- indra/llrender/llshadermgr.cpp | 8 +++ indra/newview/lldrawpoolavatar.cpp | 26 ++++++++- indra/newview/lldrawpoolavatar.h | 2 + indra/newview/llface.cpp | 18 +++++- indra/newview/llface.h | 4 +- indra/newview/llspatialpartition.h | 7 +++ indra/newview/llviewershadermgr.cpp | 25 +++++++++ indra/newview/llviewershadermgr.h | 3 + indra/newview/llvoavatar.cpp | 109 ++++++++++++++++++++++++++++++++++++ indra/newview/llvoavatar.h | 1 + indra/newview/llvovolume.cpp | 20 +++++++ 14 files changed, 247 insertions(+), 15 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index c563af592f..fdd48b9e9e 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2013,22 +2013,23 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) if (mdl[i].has("Weights")) { face.mWeights.resize(num_verts); + LLSD::Binary weights = mdl[i]["Weights"]; - LLSD::Binary::iterator iter = weights.begin(); + U32 idx = 0; U32 cur_vertex = 0; - while (iter != weights.end()) + while (idx < weights.size() && cur_vertex < num_verts) { - const S32 END_INFLUENCES = 0xFF; - U8 joint = *(iter++); + const U8 END_INFLUENCES = 0xFF; + U8 joint = weights[idx++]; U32 cur_influence = 0; while (joint != END_INFLUENCES) { - U16 influence = *(iter++); + U16 influence = weights[idx++]; influence = influence << 8; - influence |= *(iter++); + influence |= weights[idx++]; F32 w = llmin((F32) influence / 65535.f, 0.99999f); face.mWeights[cur_vertex].mV[cur_influence++] = (F32) joint + w; @@ -2039,13 +2040,18 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) } else { - joint = *(iter++); + joint = weights[idx++]; } } cur_vertex++; - iter++; } + + if (cur_vertex != num_verts || idx != weights.size()) + { + llwarns << "Vertex weight count does not match vertex count!" << llendl; + } + } LLVector3 min_pos; diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index ca92cb6580..949057df04 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -61,7 +61,7 @@ BOOL shouldChange(const LLVector4& v1, const LLVector4& v2) LLShaderFeatures::LLShaderFeatures() : calculatesLighting(false), isShiny(false), isFullbright(false), hasWaterFog(false), -hasTransport(false), hasSkinning(false), hasAtmospherics(false), isSpecular(false), +hasTransport(false), hasSkinning(false), hasObjectSkinning(false), hasAtmospherics(false), isSpecular(false), hasGamma(false), hasLighting(false), calculatesAtmospherics(false) { } @@ -717,6 +717,18 @@ GLint LLGLSLShader::getUniformLocation(const string& uniform) return -1; } +GLint LLGLSLShader::getAttribLocation(U32 attrib) +{ + if (attrib < mAttribute.size()) + { + return mAttribute[attrib]; + } + else + { + return -1; + } +} + void LLGLSLShader::uniform1i(const string& uniform, GLint v) { GLint location = getUniformLocation(uniform); diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h index 166d4af04c..dc493ba162 100644 --- a/indra/llrender/llglslshader.h +++ b/indra/llrender/llglslshader.h @@ -48,6 +48,7 @@ public: bool hasWaterFog; // implies no gamma bool hasTransport; // implies no lighting (it's possible to have neither though) bool hasSkinning; + bool hasObjectSkinning; bool hasAtmospherics; bool hasGamma; @@ -109,7 +110,7 @@ public: void vertexAttrib4fv(U32 index, GLfloat* v); GLint getUniformLocation(const std::string& uniform); - + GLint getAttribLocation(U32 attrib); GLint mapUniformTextureChannel(GLint location, GLenum type); diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index 1286e91e49..23b76351eb 100644 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -152,6 +152,14 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader) return FALSE; } } + + if (features->hasObjectSkinning) + { + if (!shader->attachObject("avatar/objectSkinV.glsl")) + { + return FALSE; + } + } /////////////////////////////////////// // Attach Fragment Shader Features Next diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 012e41383f..9311a5f60e 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -320,7 +320,7 @@ void LLDrawPoolAvatar::renderShadow(S32 pass) S32 LLDrawPoolAvatar::getNumPasses() { - return LLPipeline::sImpostorRender ? 1 : 3; + return LLPipeline::sImpostorRender ? 1 : 4; } void LLDrawPoolAvatar::render(S32 pass) @@ -357,6 +357,8 @@ void LLDrawPoolAvatar::beginRenderPass(S32 pass) break; case 2: beginSkinned(); + case 3: + beginRigged(); break; } } @@ -381,6 +383,10 @@ void LLDrawPoolAvatar::endRenderPass(S32 pass) break; case 2: endSkinned(); + break; + case 3: + endRigged(); + break; } } @@ -566,6 +572,18 @@ void LLDrawPoolAvatar::endSkinned() gGL.getTexUnit(0)->activate(); } +void LLDrawPoolAvatar::beginRigged() +{ + gSkinnedObjectSimpleProgram.bind(); + LLVertexBuffer::sWeight4Loc = gSkinnedObjectSimpleProgram.getAttribLocation(LLViewerShaderMgr::OBJECT_WEIGHT); +} + +void LLDrawPoolAvatar::endRigged() +{ + gSkinnedObjectSimpleProgram.unbind(); + LLVertexBuffer::sWeight4Loc = -1; +} + void LLDrawPoolAvatar::beginDeferredSkinned() { sShaderLevel = mVertexShaderLevel; @@ -711,6 +729,12 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) avatarp->renderRigid(); return; } + + if (pass == 3) + { + avatarp->renderSkinnedAttachments(); + return; + } if (sShaderLevel > 0) { diff --git a/indra/newview/lldrawpoolavatar.h b/indra/newview/lldrawpoolavatar.h index b947943619..c43aa9b1e3 100644 --- a/indra/newview/lldrawpoolavatar.h +++ b/indra/newview/lldrawpoolavatar.h @@ -90,10 +90,12 @@ public: void beginRigid(); void beginFootShadow(); void beginSkinned(); + void beginRigged(); void endRigid(); void endFootShadow(); void endSkinned(); + void endRigged(); void beginDeferredImpostor(); void beginDeferredRigid(); diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 53330e4d98..bc3e04db18 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -888,7 +888,8 @@ static LLFastTimer::DeclareTimer FTM_FACE_GET_GEOM("Face Geom"); BOOL LLFace::getGeometryVolume(const LLVolume& volume, const S32 &f, const LLMatrix4& mat_vert, const LLMatrix3& mat_normal, - const U16 &index_offset) + const U16 &index_offset, + bool force_rebuild) { LLFastTimer t(FTM_FACE_GET_GEOM); const LLVolumeFace &vf = volume.getVolumeFace(f); @@ -925,8 +926,9 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, LLStrider colors; LLStrider binormals; LLStrider indicesp; + LLStrider weights; - BOOL full_rebuild = mDrawablep->isState(LLDrawable::REBUILD_VOLUME); + BOOL full_rebuild = force_rebuild || mDrawablep->isState(LLDrawable::REBUILD_VOLUME); BOOL global_volume = mDrawablep->getVOVolume()->isVolumeGlobal(); LLVector3 scale; @@ -944,6 +946,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, BOOL rebuild_tcoord = full_rebuild || mDrawablep->isState(LLDrawable::REBUILD_TCOORD); BOOL rebuild_normal = rebuild_pos && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_NORMAL); BOOL rebuild_binormal = rebuild_pos && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_BINORMAL); + bool rebuild_weights = rebuild_pos && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_WEIGHT4); const LLTextureEntry *tep = mVObjp->getTE(f); U8 bump_code = tep ? tep->getBumpmap() : 0; @@ -960,7 +963,11 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, { mVertexBuffer->getBinormalStrider(binormals, mGeomIndex); } - + if (rebuild_weights) + { + mVertexBuffer->getWeight4Strider(weights, mGeomIndex); + } + F32 tcoord_xoffset = 0.f ; F32 tcoord_yoffset = 0.f ; F32 tcoord_xscale = 1.f ; @@ -1338,6 +1345,11 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, *binormals++ = binormal; } + if (rebuild_weights) + { + *weights++ = vf.mWeights[i]; + } + if (rebuild_color) { *colors++ = color; diff --git a/indra/newview/llface.h b/indra/newview/llface.h index 67dd97e6f7..06ec043c76 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -73,6 +73,7 @@ public: HUD_RENDER = 0x0008, USE_FACE_COLOR = 0x0010, TEXTURE_ANIM = 0x0020, + RIGGED = 0x0040, }; static void initClass(); @@ -145,7 +146,8 @@ public: BOOL getGeometryVolume(const LLVolume& volume, const S32 &f, const LLMatrix4& mat_vert, const LLMatrix3& mat_normal, - const U16 &index_offset); + const U16 &index_offset, + bool force_rebuild = false); // For avatar U16 getGeometryAvatar( diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index d74216de2d..b5e5967374 100644 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -615,6 +615,13 @@ public: class LLVolumeGeometryManager: public LLGeometryManager { public: + typedef enum + { + NONE = 0, + BATCH_SORT, + DISTANCE_SORT + } eSortType; + virtual ~LLVolumeGeometryManager() { } virtual void rebuildGeom(LLSpatialGroup* group); virtual void rebuildMesh(LLSpatialGroup* group); diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index a0d0b9d490..8a68dd6ea7 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -77,6 +77,9 @@ LLGLSLShader gObjectFullbrightShinyProgram; LLGLSLShader gObjectShinyProgram; LLGLSLShader gObjectShinyWaterProgram; +//object hardware skinning shaders +LLGLSLShader gSkinnedObjectSimpleProgram; + //environment shaders LLGLSLShader gTerrainProgram; LLGLSLShader gTerrainWaterProgram; @@ -148,6 +151,7 @@ LLViewerShaderMgr::LLViewerShaderMgr() : mShaderList.push_back(&gObjectSimpleProgram); mShaderList.push_back(&gObjectFullbrightProgram); mShaderList.push_back(&gObjectFullbrightShinyProgram); + mShaderList.push_back(&gSkinnedObjectSimpleProgram); mShaderList.push_back(&gTerrainProgram); mShaderList.push_back(&gTerrainWaterProgram); mShaderList.push_back(&gObjectSimpleWaterProgram); @@ -195,6 +199,7 @@ void LLViewerShaderMgr::initAttribsAndUniforms(void) mReservedAttribs.push_back("materialColor"); mReservedAttribs.push_back("specularColor"); mReservedAttribs.push_back("binormal"); + mReservedAttribs.push_back("object_weight"); mAvatarAttribs.reserve(5); mAvatarAttribs.push_back("weight"); @@ -548,6 +553,9 @@ void LLViewerShaderMgr::unloadShaders() gObjectShinyProgram.unload(); gObjectFullbrightShinyProgram.unload(); gObjectShinyWaterProgram.unload(); + + gSkinnedObjectSimpleProgram.unload(); + gWaterProgram.unload(); gUnderWaterProgram.unload(); gTerrainProgram.unload(); @@ -625,6 +633,7 @@ BOOL LLViewerShaderMgr::loadBasicShaders() shaders.push_back( make_pair( "lighting/lightSpecularV.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); shaders.push_back( make_pair( "windlight/atmosphericsV.glsl", mVertexShaderLevel[SHADER_WINDLIGHT] ) ); shaders.push_back( make_pair( "avatar/avatarSkinV.glsl", 1 ) ); + shaders.push_back( make_pair( "avatar/objectSkinV.glsl", 1 ) ); // We no longer have to bind the shaders to global glhandles, they are automatically added to a map now. for (U32 i = 0; i < shaders.size(); i++) @@ -1214,6 +1223,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() gObjectSimpleWaterProgram.unload(); gObjectFullbrightProgram.unload(); gObjectFullbrightWaterProgram.unload(); + gSkinnedObjectSimpleProgram.unload(); return FALSE; } @@ -1323,6 +1333,21 @@ BOOL LLViewerShaderMgr::loadShadersObject() success = gObjectFullbrightShinyProgram.createShader(NULL, &mShinyUniforms); } + if (success) + { + gSkinnedObjectSimpleProgram.mName = "Skinned Simple Shader"; + gSkinnedObjectSimpleProgram.mFeatures.calculatesLighting = true; + gSkinnedObjectSimpleProgram.mFeatures.calculatesAtmospherics = true; + gSkinnedObjectSimpleProgram.mFeatures.hasGamma = true; + gSkinnedObjectSimpleProgram.mFeatures.hasAtmospherics = true; + gSkinnedObjectSimpleProgram.mFeatures.hasLighting = true; + gSkinnedObjectSimpleProgram.mFeatures.hasObjectSkinning = true; + gSkinnedObjectSimpleProgram.mShaderFiles.clear(); + gSkinnedObjectSimpleProgram.mShaderFiles.push_back(make_pair("objects/simpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); + gSkinnedObjectSimpleProgram.mShaderFiles.push_back(make_pair("objects/simpleF.glsl", GL_FRAGMENT_SHADER_ARB)); + gSkinnedObjectSimpleProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; + success = gSkinnedObjectSimpleProgram.createShader(NULL, NULL); + } if( !success ) { diff --git a/indra/newview/llviewershadermgr.h b/indra/newview/llviewershadermgr.h index ac2b4624e0..83a650cdbc 100644 --- a/indra/newview/llviewershadermgr.h +++ b/indra/newview/llviewershadermgr.h @@ -82,6 +82,7 @@ public: MATERIAL_COLOR = 0, SPECULAR_COLOR, BINORMAL, + OBJECT_WEIGHT, END_RESERVED_ATTRIBS } eGLSLReservedAttribs; @@ -313,6 +314,8 @@ extern LLGLSLShader gObjectFullbrightShinyProgram; extern LLGLSLShader gObjectShinyProgram; extern LLGLSLShader gObjectShinyWaterProgram; +extern LLGLSLShader gSkinnedObjectSimpleProgram; + //environment shaders extern LLGLSLShader gTerrainProgram; extern LLGLSLShader gTerrainWaterProgram; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index c400e8510e..535440692f 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -64,6 +64,7 @@ #include "llkeyframefallmotion.h" #include "llkeyframestandmotion.h" #include "llkeyframewalkmotion.h" +#include "llmeshrepository.h" #include "llmutelist.h" #include "llmoveview.h" #include "llquantize.h" @@ -79,6 +80,7 @@ #include "llviewermenu.h" #include "llviewerobjectlist.h" #include "llviewerparcelmgr.h" +#include "llviewershadermgr.h" #include "llviewerstats.h" #include "llvoavatarself.h" #include "llvovolume.h" @@ -3644,6 +3646,113 @@ bool LLVOAvatar::shouldAlphaMask() } +U32 LLVOAvatar::renderSkinnedAttachments() +{ + U32 num_indices = 0; + + const U32 data_mask = LLVertexBuffer::MAP_VERTEX | + LLVertexBuffer::MAP_NORMAL | + LLVertexBuffer::MAP_TEXCOORD0 | + LLVertexBuffer::MAP_WEIGHT4; + + for (attachment_map_t::const_iterator iter = mAttachmentPoints.begin(); + iter != mAttachmentPoints.end(); + ++iter) + { + LLViewerJointAttachment* attachment = iter->second; + for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin(); + attachment_iter != attachment->mAttachedObjects.end(); + ++attachment_iter) + { + const LLViewerObject* attached_object = (*attachment_iter); + if (attached_object && !attached_object->isHUDAttachment()) + { + const LLDrawable* drawable = attached_object->mDrawable; + if (drawable) + { + for (S32 i = 0; i < drawable->getNumFaces(); ++i) + { + LLFace* face = drawable->getFace(i); + if (face->isState(LLFace::RIGGED)) + { + LLVolume* volume = attached_object->getVolume(); + const LLVolumeFace& vol_face = volume->getVolumeFace(i); + + const LLMeshSkinInfo* skin = NULL; + LLVertexBuffer* buff = face->mVertexBuffer; + + if (!buff || + !buff->hasDataType(LLVertexBuffer::TYPE_WEIGHT4) || + buff->getRequestedVerts() != vol_face.mVertices.size()) + { + face->mVertexBuffer = NULL; + face->mLastVertexBuffer = NULL; + buff = NULL; + + LLUUID mesh_id = volume->getParams().getSculptID(); + if (mesh_id.notNull()) + { + skin = gMeshRepo.getSkinInfo(mesh_id); + if (skin) + { + face->mVertexBuffer = new LLVertexBuffer(data_mask, 0); + face->mVertexBuffer->allocateBuffer(vol_face.mVertices.size(), vol_face.mIndices.size(), true); + + face->setGeomIndex(0); + face->setIndicesIndex(0); + + U16 offset = 0; + + LLMatrix4 mat_vert = skin->mBindShapeMatrix; + LLMatrix3 mat_normal; + + face->getGeometryVolume(*volume, i, mat_vert, mat_normal, offset, true); + buff = face->mVertexBuffer; + } + } + } + + if (buff) + { + if (skin) + { + LLMatrix4 mat[64]; + + for (U32 i = 0; i < skin->mJointNames.size(); ++i) + { + LLJoint* joint = getJoint(skin->mJointNames[i]); + if (joint) + { + mat[i] = skin->mInvBindMatrix[i]; + mat[i] *= joint->getWorldMatrix(); + } + } + + gSkinnedObjectSimpleProgram.uniformMatrix4fv("matrixPalette", + skin->mJointNames.size(), + FALSE, + (GLfloat*) mat[0].mMatrix); + + buff->setBuffer(data_mask); + + U16 start = face->getGeomStart(); + U16 end = start + face->getGeomCount(); + S32 offset = face->getIndicesStart(); + U32 count = face->getIndicesCount(); + + buff->drawRange(LLRender::TRIANGLES, start, end, count, offset); + } + } + } + } + } + } + } + } + + return num_indices; +} + //----------------------------------------------------------------------------- // renderSkinned() //----------------------------------------------------------------------------- diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index d5485413f4..b0535a4a26 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -339,6 +339,7 @@ public: U32 renderImpostor(LLColor4U color = LLColor4U(255,255,255,255), S32 diffuse_channel = 0); U32 renderRigid(); U32 renderSkinned(EAvatarRenderPass pass); + U32 renderSkinnedAttachments(); U32 renderTransparent(BOOL first_pass); void renderCollisionVolumes(); static void deleteCachedImages(bool clearAll=true); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index bc83e11fd2..56fb42bb89 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -3496,6 +3496,10 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) drawablep->clearState(LLDrawable::HAS_ALPHA); + bool rigged = vobj->isAttachment() && + vobj->isMesh() && + gMeshRepo.getSkinInfo(vobj->getVolume()->getParams().getSculptID()); + //for each face for (S32 i = 0; i < drawablep->getNumFaces(); i++) { @@ -3503,6 +3507,22 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) drawablep->updateFaceSize(i); LLFace* facep = drawablep->getFace(i); + if (rigged) + { + if (!facep->isState(LLFace::RIGGED)) + { + facep->mVertexBuffer = NULL; + facep->mLastVertexBuffer = NULL; + facep->setState(LLFace::RIGGED); + } + + continue; + } + else + { + facep->clearState(LLFace::RIGGED); + } + if (cur_total > max_total || facep->getIndicesCount() <= 0 || facep->getGeomCount() <= 0) { facep->mVertexBuffer = NULL; -- cgit v1.3 From bd216c96498585ca01e1634877d4b184f20fa45f Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 22 Apr 2010 16:52:05 -0500 Subject: Fix for shadows from skyboxes hitting the ground. --- indra/llmath/llcamera.h | 2 +- indra/newview/pipeline.cpp | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llcamera.h b/indra/llmath/llcamera.h index 0c81067919..d6c5f7bbb1 100644 --- a/indra/llmath/llcamera.h +++ b/indra/llmath/llcamera.h @@ -143,7 +143,7 @@ private: public: LLVector3 mAgentFrustum[8]; //8 corners of 6-plane frustum F32 mFrustumCornerDist; //distance to corner of frustum against far clip plane - LLPlane getAgentPlane(U32 idx) { return mAgentPlanes[idx].p; } + LLPlane& getAgentPlane(U32 idx) { return mAgentPlanes[idx].p; } public: LLCamera(); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index a36f6831c3..5a173d8460 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -8118,6 +8118,14 @@ void LLPipeline::generateSunShadow(LLCamera& camera) LLVector3 n = gSavedSettings.getVector3("RenderShadowNearDist"); //F32 nearDist[] = { n.mV[0], n.mV[1], n.mV[2], n.mV[2] }; + //put together a universal "near clip" plane for shadow frusta + LLPlane shadow_near_clip; + { + LLVector3 p = gAgent.getPositionAgent(); + p += mSunDir * gSavedSettings.getF32("RenderFarClip")*2.f; + shadow_near_clip.setVec(p, mSunDir); + } + LLVector3 lightDir = -mSunDir; lightDir.normVec(); @@ -8551,7 +8559,8 @@ void LLPipeline::generateSunShadow(LLCamera& camera) LLViewerCamera::updateFrustumPlanes(shadow_cam, FALSE, FALSE, TRUE); - shadow_cam.ignoreAgentFrustumPlane(LLCamera::AGENT_PLANE_NEAR); + //shadow_cam.ignoreAgentFrustumPlane(LLCamera::AGENT_PLANE_NEAR); + shadow_cam.getAgentPlane(LLCamera::AGENT_PLANE_NEAR).set(shadow_near_clip); //translate and scale to from [-1, 1] to [0, 1] glh::matrix4f trans(0.5f, 0.f, 0.f, 0.5f, -- cgit v1.3 From 07c0389f50ccef13ad2699e149dc4b87de3dbd70 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Tue, 27 Apr 2010 01:50:06 -0500 Subject: Proper byte ordering when decoding skin weights. --- indra/llmath/llvolume.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index fdd48b9e9e..9d2d157c76 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2028,8 +2028,7 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) while (joint != END_INFLUENCES) { U16 influence = weights[idx++]; - influence = influence << 8; - influence |= weights[idx++]; + influence |= ((U16) weights[idx++] << 8); F32 w = llmin((F32) influence / 65535.f, 0.99999f); face.mWeights[cur_vertex].mV[cur_influence++] = (F32) joint + w; -- cgit v1.3 From d71716aa6dde434b6356cfe85e3a8fce376056dd Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Wed, 28 Apr 2010 02:53:12 -0500 Subject: Make LLVolume::createSide a little faster. --- indra/llmath/llvolume.cpp | 82 ++++++++++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 37 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 9d2d157c76..5ffc61ce9c 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -87,6 +87,8 @@ const F32 SKEW_MAX = 0.95f; const F32 SCULPT_MIN_AREA = 0.002f; const S32 SCULPT_MIN_AREA_DETAIL = 1; +#define GEN_TRI_STRIP 0 + BOOL check_same_clock_dir( const LLVector3& pt1, const LLVector3& pt2, const LLVector3& pt3, const LLVector3& norm) { LLVector3 test = (pt2-pt1)%(pt3-pt2); @@ -5079,7 +5081,9 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build) if (!partial_build) { +#if GEN_TRI_STRIP mTriStrip.clear(); +#endif S32 idxs[] = {0,1,(grid_size+1)+1,(grid_size+1)+1,(grid_size+1),0}; for(S32 gx = 0;gx 2) ? mNumS/2 : mNumS; @@ -5771,15 +5779,6 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) mVertices[cur_vertex].mNormal = LLVector3(0,0,0); mVertices[cur_vertex].mBinormal = LLVector3(0,0,0); - - if (cur_vertex == 0) - { - face_min = face_max = mesh[i].mPos; - } - else - { - update_min_max(face_min, face_max, mesh[i].mPos); - } cur_vertex++; @@ -5813,12 +5812,22 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) mVertices[cur_vertex].mNormal = LLVector3(0,0,0); mVertices[cur_vertex].mBinormal = LLVector3(0,0,0); - update_min_max(face_min,face_max,mesh[i].mPos); - cur_vertex++; } } + + //get bounding box for this side + LLVector3& face_min = mExtents[0]; + LLVector3& face_max = mExtents[1]; + mCenter.clearVec(); + + face_min = face_max = mVertices[0].mPosition; + for (U32 i = 1; i < mVertices.size(); ++i) + { + update_min_max(face_min, face_max, mVertices[i].mPosition); + } + mCenter = (face_min + face_max) * 0.5f; S32 cur_index = 0; @@ -5827,13 +5836,17 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) if (!partial_build) { +#if GEN_TRI_STRIP mTriStrip.clear(); +#endif // Now we generate the indices. for (t = 0; t < (mNumT-1); t++) { +#if GEN_TRI_STRIP //prepend terminating index to strip mTriStrip.push_back(mNumS*t); +#endif for (s = 0; s < (mNumS-1); s++) { @@ -5844,6 +5857,7 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) mIndices[cur_index++] = s+1 + mNumS*t; //bottom right mIndices[cur_index++] = s+1 + mNumS*(t+1); //top right +#if GEN_TRI_STRIP if (s == 0) { mTriStrip.push_back(s+mNumS*t); @@ -5851,6 +5865,7 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) } mTriStrip.push_back(s+1+mNumS*t); mTriStrip.push_back(s+1+mNumS*(t+1)); +#endif mEdge[cur_edge++] = (mNumS-1)*2*t+s*2+1; //bottom left/top right neighbor face if (t < mNumT-2) { //top right/top left neighbor face @@ -5892,44 +5907,37 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) } mEdge[cur_edge++] = (mNumS-1)*2*t+s*2; //top right/bottom left neighbor face } +#if GEN_TRI_STRIP //append terminating vertex to strip mTriStrip.push_back(mNumS-1+mNumS*(t+1)); +#endif } +#if GEN_TRI_STRIP if (mTriStrip.size()%2 == 1) { mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]); } +#endif } //generate normals for (U32 i = 0; i < mIndices.size()/3; i++) //for each triangle { - const S32 i0 = mIndices[i*3+0]; - const S32 i1 = mIndices[i*3+1]; - const S32 i2 = mIndices[i*3+2]; - const VertexData& v0 = mVertices[i0]; - const VertexData& v1 = mVertices[i1]; - const VertexData& v2 = mVertices[i2]; + const U16* idx = &(mIndices[i*3]); + + VertexData* v[] = + { &mVertices[idx[0]], &mVertices[idx[1]], &mVertices[idx[2]] }; //calculate triangle normal - LLVector3 norm = (v0.mPosition-v1.mPosition) % (v0.mPosition-v2.mPosition); + LLVector3 norm = (v[0]->mPosition-v[1]->mPosition) % (v[0]->mPosition-v[2]->mPosition); - for (U32 j = 0; j < 3; j++) - { //add triangle normal to vertices - const S32 idx = mIndices[i*3+j]; - mVertices[idx].mNormal += norm; // * (weight_sum - d[j])/weight_sum; - } + v[0]->mNormal += norm; + v[1]->mNormal += norm; + v[2]->mNormal += norm; //even out quad contributions - if ((i & 1) == 0) - { - mVertices[i2].mNormal += norm; - } - else - { - mVertices[i1].mNormal += norm; - } + v[i%2+1]->mNormal += norm; } // adjust normals based on wrapping and stitching -- cgit v1.3 From 4a501bb437f86175f6e8e2d015969595f55fa705 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Wed, 28 Apr 2010 02:53:12 -0500 Subject: Make LLVolume::createSide a little faster. (transplanted from 4d43e3b83ccffd725ec6cb234ddcfa0833f17a9f) --- indra/llmath/llvolume.cpp | 129 +++++++++++++++++++++++++++------------------- 1 file changed, 76 insertions(+), 53 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 39b7453ffc..3c3356f41d 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1,25 +1,31 @@ /** * @file llvolume.cpp * - * $LicenseInfo:firstyear=2002&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * $LicenseInfo:firstyear=2002&license=viewergpl$ + * + * Copyright (c) 2002-2009, Linden Research, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. * $/LicenseInfo$ */ @@ -80,6 +86,8 @@ const F32 SKEW_MAX = 0.95f; const F32 SCULPT_MIN_AREA = 0.002f; const S32 SCULPT_MIN_AREA_DETAIL = 1; +#define GEN_TRI_STRIP 0 + BOOL check_same_clock_dir( const LLVector3& pt1, const LLVector3& pt2, const LLVector3& pt3, const LLVector3& norm) { LLVector3 test = (pt2-pt1)%(pt3-pt2); @@ -1682,7 +1690,7 @@ LLVolume::LLVolume(const LLVolumeParams ¶ms, const F32 detail, const BOOL ge mGenerateSingleFace = generate_single_face; generate(); - if (mParams.getSculptID().isNull()) + if (mParams.getSculptID().isNull() && params.getSculptType() == LL_SCULPT_TYPE_NONE) { createVolumeFaces(); } @@ -1858,6 +1866,11 @@ void LLVolume::createVolumeFaces() LLProfile::Face& face = mProfilep->mFaces[i]; vf.mBeginS = face.mIndex; vf.mNumS = face.mCount; + if (vf.mNumS < 0) + { + llerrs << "Volume face corruption detected." << llendl; + } + vf.mBeginT = 0; vf.mNumT= getPath().mPath.size(); vf.mID = i; @@ -1901,6 +1914,10 @@ void LLVolume::createVolumeFaces() if (face.mFlat && vf.mNumS > 2) { //flat inner faces have to copy vert normals vf.mNumS = vf.mNumS*2; + if (vf.mNumS < 0) + { + llerrs << "Volume face corruption detected." << llendl; + } } } else @@ -4515,7 +4532,9 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build) if (!partial_build) { +#if GEN_TRI_STRIP mTriStrip.clear(); +#endif S32 idxs[] = {0,1,(grid_size+1)+1,(grid_size+1)+1,(grid_size+1),0}; for(S32 gx = 0;gx 2) ? mNumS/2 : mNumS; @@ -5167,15 +5190,6 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) mVertices[cur_vertex].mNormal = LLVector3(0,0,0); mVertices[cur_vertex].mBinormal = LLVector3(0,0,0); - - if (cur_vertex == 0) - { - face_min = face_max = mesh[i].mPos; - } - else - { - update_min_max(face_min, face_max, mesh[i].mPos); - } cur_vertex++; @@ -5209,12 +5223,22 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) mVertices[cur_vertex].mNormal = LLVector3(0,0,0); mVertices[cur_vertex].mBinormal = LLVector3(0,0,0); - update_min_max(face_min,face_max,mesh[i].mPos); - cur_vertex++; } } + + //get bounding box for this side + LLVector3& face_min = mExtents[0]; + LLVector3& face_max = mExtents[1]; + mCenter.clearVec(); + + face_min = face_max = mVertices[0].mPosition; + for (U32 i = 1; i < mVertices.size(); ++i) + { + update_min_max(face_min, face_max, mVertices[i].mPosition); + } + mCenter = (face_min + face_max) * 0.5f; S32 cur_index = 0; @@ -5223,13 +5247,17 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) if (!partial_build) { +#if GEN_TRI_STRIP mTriStrip.clear(); +#endif // Now we generate the indices. for (t = 0; t < (mNumT-1); t++) { +#if GEN_TRI_STRIP //prepend terminating index to strip mTriStrip.push_back(mNumS*t); +#endif for (s = 0; s < (mNumS-1); s++) { @@ -5240,6 +5268,7 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) mIndices[cur_index++] = s+1 + mNumS*t; //bottom right mIndices[cur_index++] = s+1 + mNumS*(t+1); //top right +#if GEN_TRI_STRIP if (s == 0) { mTriStrip.push_back(s+mNumS*t); @@ -5247,6 +5276,7 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) } mTriStrip.push_back(s+1+mNumS*t); mTriStrip.push_back(s+1+mNumS*(t+1)); +#endif mEdge[cur_edge++] = (mNumS-1)*2*t+s*2+1; //bottom left/top right neighbor face if (t < mNumT-2) { //top right/top left neighbor face @@ -5288,44 +5318,37 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) } mEdge[cur_edge++] = (mNumS-1)*2*t+s*2; //top right/bottom left neighbor face } +#if GEN_TRI_STRIP //append terminating vertex to strip mTriStrip.push_back(mNumS-1+mNumS*(t+1)); +#endif } +#if GEN_TRI_STRIP if (mTriStrip.size()%2 == 1) { mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]); } +#endif } //generate normals for (U32 i = 0; i < mIndices.size()/3; i++) //for each triangle { - const S32 i0 = mIndices[i*3+0]; - const S32 i1 = mIndices[i*3+1]; - const S32 i2 = mIndices[i*3+2]; - const VertexData& v0 = mVertices[i0]; - const VertexData& v1 = mVertices[i1]; - const VertexData& v2 = mVertices[i2]; + const U16* idx = &(mIndices[i*3]); + + VertexData* v[] = + { &mVertices[idx[0]], &mVertices[idx[1]], &mVertices[idx[2]] }; //calculate triangle normal - LLVector3 norm = (v0.mPosition-v1.mPosition) % (v0.mPosition-v2.mPosition); + LLVector3 norm = (v[0]->mPosition-v[1]->mPosition) % (v[0]->mPosition-v[2]->mPosition); - for (U32 j = 0; j < 3; j++) - { //add triangle normal to vertices - const S32 idx = mIndices[i*3+j]; - mVertices[idx].mNormal += norm; // * (weight_sum - d[j])/weight_sum; - } + v[0]->mNormal += norm; + v[1]->mNormal += norm; + v[2]->mNormal += norm; //even out quad contributions - if ((i & 1) == 0) - { - mVertices[i2].mNormal += norm; - } - else - { - mVertices[i1].mNormal += norm; - } + v[i%2+1]->mNormal += norm; } // adjust normals based on wrapping and stitching -- cgit v1.3 From 8919f4811a7dcaf47dc58159e0ba4ba042183325 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Fri, 21 May 2010 23:55:18 -0500 Subject: blah --- indra/llmath/llvolume.cpp | 262 ++++++++++++++++++++++++++++++------------ indra/llmath/llvolume.h | 27 +++-- indra/llmath/v3math.h | 15 +++ indra/newview/llappviewer.cpp | 4 + 4 files changed, 230 insertions(+), 78 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 5ffc61ce9c..4e342b0b48 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -43,10 +43,12 @@ #include "v4math.h" #include "m4math.h" #include "m3math.h" +#include "llmatrix4a.h" #include "lldarray.h" #include "llvolume.h" #include "llstl.h" #include "llsdserialize.h" +#include "llvector4a.h" #define DEBUG_SILHOUETTE_BINORMALS 0 #define DEBUG_SILHOUETTE_NORMALS 0 // TomY: Use this to display normals using the silhouette @@ -1992,11 +1994,10 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) LLVolumeFace& face = mVolumeFaces[i]; - face.mHasBinormals = false; - //copy out indices - face.mIndices.resize(idx.size()/2); - if (idx.empty() || face.mIndices.size() < 3) + face.resizeIndices(idx.size()/2); + + if (idx.empty() || face.mNumIndices < 3) { //why is there an empty index list? llerrs <<"WTF?" << llendl; continue; @@ -2010,7 +2011,7 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) //copy out vertices U32 num_verts = pos.size()/(3*2); - face.mVertices.resize(num_verts); + face.resizeVertices(num_verts); if (mdl[i].has("Weights")) { @@ -2059,7 +2060,6 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) LLVector3 max_pos; LLVector2 min_tc; LLVector2 max_tc; - min_pos.setValue(mdl[i]["PositionDomain"]["Min"]); max_pos.setValue(mdl[i]["PositionDomain"]["Max"]); @@ -2074,36 +2074,44 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) min = max = LLVector3(0,0,0); + F32* pos_out = face.mPositions; + F32* norm_out = face.mNormals; + F32* tc_out = face.mTexCoords; + for (U32 j = 0; j < num_verts; ++j) { U16* v = (U16*) &(pos[j*3*2]); - face.mVertices[j].mPosition.setVec( - (F32) v[0] / 65535.f * pos_range.mV[0] + min_pos.mV[0], - (F32) v[1] / 65535.f * pos_range.mV[1] + min_pos.mV[1], - (F32) v[2] / 65535.f * pos_range.mV[2] + min_pos.mV[2]); + pos_out[0] = (F32) v[0] / 65535.f * pos_range.mV[0] + min_pos.mV[0]; + pos_out[1] = (F32) v[1] / 65535.f * pos_range.mV[1] + min_pos.mV[1]; + pos_out[2] = (F32) v[2] / 65535.f * pos_range.mV[2] + min_pos.mV[2]; + if (j == 0) { - min = max = face.mVertices[j].mPosition; + min = max = LLVector3(pos_out); } else { - update_min_max(min,max,face.mVertices[j].mPosition); + update_min_max(min,max,pos_out); } + pos_out += 4; + U16* n = (U16*) &(norm[j*3*2]); - face.mVertices[j].mNormal.setVec( - (F32) n[0] / 65535.f * 2.f - 1.f, - (F32) n[1] / 65535.f * 2.f - 1.f, - (F32) n[2] / 65535.f * 2.f - 1.f); + + norm_out[0] = (F32) n[0] / 65535.f * 2.f - 1.f; + norm_out[1] = (F32) n[1] / 65535.f * 2.f - 1.f; + norm_out[2] = (F32) n[2] / 65535.f * 2.f - 1.f; + norm_out += 4; U16* t = (U16*) &(tc[j*2*2]); - face.mVertices[j].mTexCoord.setVec( - (F32) t[0] / 65535.f * tc_range.mV[0] + min_tc.mV[0], - (F32) t[1] / 65535.f * tc_range.mV[1] + min_tc.mV[1]); + tc_out[0] = (F32) t[0] / 65535.f * tc_range.mV[0] + min_tc.mV[0]; + tc_out[1] = (F32) t[1] / 65535.f * tc_range.mV[1] + min_tc.mV[1]; + + tc_out += 8; } @@ -2133,24 +2141,29 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) if (do_reflect_x) { - for (S32 i = 0; i < face.mVertices.size(); i++) + LLVector4a* p = (LLVector4a*) face.mPositions; + LLVector4a* n = (LLVector4a*) face.mNormals; + + for (S32 i = 0; i < face.mNumVertices; i++) { - face.mVertices[i].mPosition.mV[VX] *= -1.0f; - face.mVertices[i].mNormal.mV[VX] *= -1.0f; + p[i].mul(-1.0f); + n[i].mul(-1.0f); } } if (do_invert_normals) { - for (S32 i = 0; i < face.mVertices.size(); i++) + LLVector4a* n = (LLVector4a*) face.mNormals; + + for (S32 i = 0; i < face.mNumVertices; i++) { - face.mVertices[i].mNormal *= -1.0f; + n[i].mul(-1.0f); } } if (do_reverse_triangles) { - for (U32 j = 0; j < face.mIndices.size(); j += 3) + for (U32 j = 0; j < face.mNumIndices; j += 3) { // swap the 2nd and 3rd index S32 swap = face.mIndices[j+1]; @@ -2215,9 +2228,28 @@ void LLVolume::makeTetrahedron() tetrahedron_set_normal(cv); - face.mVertices.push_back(cv[0]); - face.mVertices.push_back(cv[1]); - face.mVertices.push_back(cv[2]); + face.resizeVertices(12); + face.resizeIndices(12); + + LLVector4a* v = (LLVector4a*) face.mPositions; + LLVector4a* n = (LLVector4a*) face.mNormals; + LLVector2* tc = (LLVector2*) face.mTexCoords; + + v[0].load3(cv[0].mPosition.mV); + v[1].load3(cv[1].mPosition.mV); + v[2].load3(cv[2].mPosition.mV); + v += 3; + + n[0].load3(cv[0].mNormal.mV); + n[1].load3(cv[1].mNormal.mV); + n[2].load3(cv[2].mNormal.mV); + n += 3; + + tc[0] = cv[0].mTexCoord; + tc[1] = cv[1].mTexCoord; + tc[2] = cv[2].mTexCoord; + tc += 3; + //side 2 cv[0].mPosition = p[3]; @@ -2226,9 +2258,20 @@ void LLVolume::makeTetrahedron() tetrahedron_set_normal(cv); - face.mVertices.push_back(cv[0]); - face.mVertices.push_back(cv[1]); - face.mVertices.push_back(cv[2]); + v[0].load3(cv[0].mPosition.mV); + v[1].load3(cv[1].mPosition.mV); + v[2].load3(cv[2].mPosition.mV); + v += 3; + + n[0].load3(cv[0].mNormal.mV); + n[1].load3(cv[1].mNormal.mV); + n[2].load3(cv[2].mNormal.mV); + n += 3; + + tc[0] = cv[0].mTexCoord; + tc[1] = cv[1].mTexCoord; + tc[2] = cv[2].mTexCoord; + tc += 3; //side 3 cv[0].mPosition = p[3]; @@ -2237,9 +2280,20 @@ void LLVolume::makeTetrahedron() tetrahedron_set_normal(cv); - face.mVertices.push_back(cv[0]); - face.mVertices.push_back(cv[1]); - face.mVertices.push_back(cv[2]); + v[0].load3(cv[0].mPosition.mV); + v[1].load3(cv[1].mPosition.mV); + v[2].load3(cv[2].mPosition.mV); + v += 3; + + n[0].load3(cv[0].mNormal.mV); + n[1].load3(cv[1].mNormal.mV); + n[2].load3(cv[2].mNormal.mV); + n += 3; + + tc[0] = cv[0].mTexCoord; + tc[1] = cv[1].mTexCoord; + tc[2] = cv[2].mTexCoord; + tc += 3; //side 4 cv[0].mPosition = p[2]; @@ -2248,14 +2302,25 @@ void LLVolume::makeTetrahedron() tetrahedron_set_normal(cv); - face.mVertices.push_back(cv[0]); - face.mVertices.push_back(cv[1]); - face.mVertices.push_back(cv[2]); + v[0].load3(cv[0].mPosition.mV); + v[1].load3(cv[1].mPosition.mV); + v[2].load3(cv[2].mPosition.mV); + v += 3; + + n[0].load3(cv[0].mNormal.mV); + n[1].load3(cv[1].mNormal.mV); + n[2].load3(cv[2].mNormal.mV); + n += 3; + + tc[0] = cv[0].mTexCoord; + tc[1] = cv[1].mTexCoord; + tc[2] = cv[2].mTexCoord; + tc += 3; //set index buffer - for (U32 i = 0; i < 12; i++) + for (U16 i = 0; i < 12; i++) { - face.mIndices.push_back(i); + face.mIndices[i] = i; } mVolumeFaces.push_back(face); @@ -3831,7 +3896,7 @@ S32 LLVolume::getNumTriangles() const for (S32 i = 0; i < getNumVolumeFaces(); ++i) { - triangle_count += getVolumeFace(i).mIndices.size()/3; + triangle_count += getVolumeFace(i).mNumIndices/3; } return triangle_count; @@ -3844,13 +3909,22 @@ S32 LLVolume::getNumTriangles() const void LLVolume::generateSilhouetteVertices(std::vector &vertices, std::vector &normals, std::vector &segments, - const LLVector3& obj_cam_vec, - const LLMatrix4& mat, - const LLMatrix3& norm_mat, + const LLVector3& obj_cam_vec_in, + const LLMatrix4& mat_in, + const LLMatrix3& norm_mat_in, S32 face_mask) { LLMemType m1(LLMemType::MTYPE_VOLUME); + LLMatrix4a mat; + mat.loadu(mat_in); + + LLMatrix4a norm_mat; + norm_mat.loadu(norm_mat_in); + + LLVector4a obj_cam_vec; + obj_cam_vec.load3(obj_cam_vec_in.mV); + vertices.clear(); normals.clear(); segments.clear(); @@ -3868,7 +3942,7 @@ void LLVolume::generateSilhouetteVertices(std::vector &vertices, LLVolumeFace& face = *iter; if (!(face_mask & (0x1 << cur_index++)) || - face.mIndices.empty() || face.mEdge.empty()) + face.mNumIndices == 0 || face.mEdge.empty()) { continue; } @@ -3885,7 +3959,7 @@ void LLVolume::generateSilhouetteVertices(std::vector &vertices, #if DEBUG_SILHOUETTE_EDGE_MAP //for each triangle - U32 count = face.mIndices.size(); + U32 count = face.mNumIndices; for (U32 j = 0; j < count/3; j++) { //get vertices S32 v1 = face.mIndices[j*3+0]; @@ -3938,7 +4012,7 @@ void LLVolume::generateSilhouetteVertices(std::vector &vertices, #elif DEBUG_SILHOUETTE_NORMALS //for each vertex - for (U32 j = 0; j < face.mVertices.size(); j++) { + for (U32 j = 0; j < face.mNumVertices; j++) { vertices.push_back(face.mVertices[j].mPosition); vertices.push_back(face.mVertices[j].mPosition + face.mVertices[j].mNormal*0.1f); normals.push_back(LLVector3(0,0,1)); @@ -3964,26 +4038,36 @@ void LLVolume::generateSilhouetteVertices(std::vector &vertices, //for each triangle std::vector fFacing; - vector_append(fFacing, face.mIndices.size()/3); - for (U32 j = 0; j < face.mIndices.size()/3; j++) + vector_append(fFacing, face.mNumIndices/3); + + LLVector4a* v = (LLVector4a*) face.mPositions; + LLVector4a* n = (LLVector4a*) face.mNormals; + + for (U32 j = 0; j < face.mNumIndices/3; j++) { //approximate normal S32 v1 = face.mIndices[j*3+0]; S32 v2 = face.mIndices[j*3+1]; S32 v3 = face.mIndices[j*3+2]; - LLVector3 norm = (face.mVertices[v1].mPosition - face.mVertices[v2].mPosition) % - (face.mVertices[v2].mPosition - face.mVertices[v3].mPosition); - - if (norm.magVecSquared() < 0.00000001f) + LLVector4a c1,c2; + c1.setSub(v[v1], v[v2]); + c2.setSub(v[v2], v[v3]); + + LLVector4a norm; + + norm.setCross3(c1, c2); + + if (norm.dot3(norm) < 0.00000001f) { fFacing[j] = AWAY | TOWARDS; } else { //get view vector - LLVector3 view = (obj_cam_vec-face.mVertices[v1].mPosition); - bool away = view * norm > 0.0f; + LLVector4a view; + view.setSub(obj_cam_vec, v[v1]); + bool away = view.dot3(norm) > 0.0f; if (away) { fFacing[j] = AWAY; @@ -3996,7 +4080,7 @@ void LLVolume::generateSilhouetteVertices(std::vector &vertices, } //for each triangle - for (U32 j = 0; j < face.mIndices.size()/3; j++) + for (U32 j = 0; j < face.mNumIndices/3; j++) { if (fFacing[j] == (AWAY | TOWARDS)) { //this is a degenerate triangle @@ -4029,9 +4113,14 @@ void LLVolume::generateSilhouetteVertices(std::vector &vertices, S32 v1 = face.mIndices[j*3+k]; S32 v2 = face.mIndices[j*3+((k+1)%3)]; - vertices.push_back(face.mVertices[v1].mPosition*mat); - LLVector3 norm1 = face.mVertices[v1].mNormal * norm_mat; - norm1.normVec(); + LLVector4a t; + mat.affineTransform(v[v1], t); + vertices.push_back(LLVector3(t[0], t[1], t[2])); + + norm_mat.rotate(n[v1], t); + + t.normalize3Fast(); + LLVector3 norm1 = LLVector3(t[0], t[1], t[2]); normals.push_back(norm1); vertices.push_back(face.mVertices[v2].mPosition*mat); @@ -4088,7 +4177,7 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, genBinormals(i); } - for (U32 tri = 0; tri < face.mIndices.size()/3; tri++) + for (U32 tri = 0; tri < face.mNumIndices/3; tri++) { S32 index1 = face.mIndices[tri*3+0]; S32 index2 = face.mIndices[tri*3+1]; @@ -4928,7 +5017,7 @@ void LLVolumeFace::optimize(F32 angle_cutoff) VertexMapData::PointMap point_map; //remove redundant vertices - for (U32 i = 0; i < mIndices.size(); ++i) + for (U32 i = 0; i < mNumIndices; ++i) { U16 index = mIndices[i]; @@ -4953,7 +5042,7 @@ void LLVolumeFace::optimize(F32 angle_cutoff) if (!found) { new_face.mVertices.push_back(cv); - U16 index = (U16) new_face.mVertices.size()-1; + U16 index = (U16) new_face.mNumVertices-1; new_face.mIndices.push_back(index); VertexMapData d; @@ -5053,7 +5142,7 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build) mVertices.clear(); } - S32 vtop = mVertices.size(); + S32 vtop = mNumVertices; for(int gx = 0;gx 65536) + if (face.mNumVertices + mNumVertices > 65536) { llerrs << "Cannot append face -- 16-bit overflow will occur." << llendl; } - for (U32 i = 0; i < face.mVertices.size(); ++i) + for (U32 i = 0; i < face.mNumVertices; ++i) { VertexData v = face.mVertices[i]; v.mPosition = v.mPosition*mat; @@ -5676,7 +5796,7 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat, LLMatrix } - for (U32 i = 0; i < face.mIndices.size(); ++i) + for (U32 i = 0; i < face.mNumIndices; ++i) { mIndices.push_back(face.mIndices[i]+offset); } @@ -5823,7 +5943,7 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) mCenter.clearVec(); face_min = face_max = mVertices[0].mPosition; - for (U32 i = 1; i < mVertices.size(); ++i) + for (U32 i = 1; i < mNumVertices; ++i) { update_min_max(face_min, face_max, mVertices[i].mPosition); } @@ -5922,7 +6042,7 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) } //generate normals - for (U32 i = 0; i < mIndices.size()/3; i++) //for each triangle + for (U32 i = 0; i < mNumIndices/3; i++) //for each triangle { const U16* idx = &(mIndices[i*3]); diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index c6a156ae37..17be642d4a 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -794,20 +794,28 @@ public: LLVolumeFace() : mID(0), mTypeMask(0), - mHasBinormals(FALSE), mBeginS(0), mBeginT(0), mNumS(0), - mNumT(0) + mNumT(0), + mNumVertices(0), + mNumIndices(0), + mPositions(NULL), + mNormals(NULL), + mBinormals(NULL), + mTexCoords(NULL), + mIndices(NULL) { } BOOL create(LLVolume* volume, BOOL partial_build = FALSE); void createBinormals(); - void makeTriStrip(); void appendFace(const LLVolumeFace& face, LLMatrix4& transform, LLMatrix4& normal_tranform); + void resizeVertices(S32 num_verts); + void resizeIndices(S32 num_indices); + class VertexData { public: @@ -873,7 +881,6 @@ public: S32 mID; U32 mTypeMask; LLVector3 mCenter; - BOOL mHasBinormals; // Only used for INNER/OUTER faces S32 mBeginS; @@ -883,9 +890,15 @@ public: LLVector3 mExtents[2]; //minimum and maximum point of face - std::vector mVertices; - std::vector mIndices; - std::vector mTriStrip; + S32 mNumVertices; + S32 mNumIndices; + + F32* mPositions; + F32* mNormals; + F32* mBinormals; + F32* mTexCoords; + U16* mIndices; + std::vector mEdge; //list of skin weights for rigged volumes diff --git a/indra/llmath/v3math.h b/indra/llmath/v3math.h index 76dd938887..0e7d72e958 100644 --- a/indra/llmath/v3math.h +++ b/indra/llmath/v3math.h @@ -532,6 +532,21 @@ inline void update_min_max(LLVector3& min, LLVector3& max, const LLVector3& pos) } } +inline void update_min_max(LLVector3& min, LLVector3& max, const F32* pos) +{ + for (U32 i = 0; i < 3; i++) + { + if (min.mV[i] > pos[i]) + { + min.mV[i] = pos[i]; + } + if (max.mV[i] < pos[i]) + { + max.mV[i] = pos[i]; + } + } +} + inline F32 angle_between(const LLVector3& a, const LLVector3& b) { LLVector3 an = a; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 6de34d9458..600e3294eb 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -79,6 +79,7 @@ #include "llteleporthistory.h" #include "lllocationhistory.h" #include "llfasttimerview.h" +#include "llvector4a.h" #include "llviewermenufile.h" #include "llvoicechannel.h" #include "llvoavatarself.h" @@ -612,6 +613,9 @@ bool LLAppViewer::init() // LLFastTimer::reset(); + // initialize SSE options + LLVector4a::initClass(); + // Need to do this initialization before we do anything else, since anything // that touches files should really go through the lldir API gDirUtilp->initAppDirs("SecondLife"); -- cgit v1.3 From 4d57cb3c0975ff0bcea0d6fb3498f2d90962ff16 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Sat, 22 May 2010 04:35:02 -0500 Subject: Vectorize/memory align buffers in llvolumeface WIP --- indra/llmath/llvolume.cpp | 720 ++++++++++++++++---------------- indra/llmath/llvolume.h | 35 +- indra/newview/lldrawpoolavatar.cpp | 6 +- indra/newview/llface.cpp | 55 +-- indra/newview/llfloaterimagepreview.cpp | 6 +- indra/newview/llhudicon.cpp | 2 + indra/newview/llhudtext.cpp | 5 + indra/newview/llviewercamera.cpp | 5 +- indra/newview/llvograss.cpp | 2 + indra/newview/llvotextbubble.cpp | 33 +- indra/newview/llvovolume.cpp | 29 +- 11 files changed, 474 insertions(+), 424 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 4e342b0b48..01fe2be371 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1,4 +1,5 @@ /** + * @file llvolume.cpp * * $LicenseInfo:firstyear=2002&license=viewergpl$ @@ -89,8 +90,6 @@ const F32 SKEW_MAX = 0.95f; const F32 SCULPT_MIN_AREA = 0.002f; const S32 SCULPT_MIN_AREA_DETAIL = 1; -#define GEN_TRI_STRIP 0 - BOOL check_same_clock_dir( const LLVector3& pt1, const LLVector3& pt2, const LLVector3& pt3, const LLVector3& norm) { LLVector3 test = (pt2-pt1)%(pt3-pt2); @@ -134,21 +133,25 @@ BOOL LLLineSegmentBoxIntersect(const LLVector3& start, const LLVector3& end, con // and returns the intersection point along dir in intersection_t. // Moller-Trumbore algorithm -BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, const LLVector3& vert2, const LLVector3& orig, const LLVector3& dir, +BOOL LLTriangleRayIntersect(const LLVector4a& vert0, const LLVector4a& vert1, const LLVector4a& vert2, const LLVector4a& orig, const LLVector4a& dir, F32* intersection_a, F32* intersection_b, F32* intersection_t, BOOL two_sided) { F32 u, v, t; /* find vectors for two edges sharing vert0 */ - LLVector3 edge1 = vert1 - vert0; + LLVector4a edge1; + edge1.setSub(vert1, vert0); - LLVector3 edge2 = vert2 - vert0;; + + LLVector4a edge2; + edge2.setSub(vert2, vert0); /* begin calculating determinant - also used to calculate U parameter */ - LLVector3 pvec = dir % edge2; - + LLVector4a pvec; + pvec.setCross3(dir, edge2); + /* if determinant is near zero, ray lies in plane of triangle */ - F32 det = edge1 * pvec; + F32 det = edge1.dot3(pvec); if (!two_sided) { @@ -158,10 +161,11 @@ BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, cons } /* calculate distance from vert0 to ray origin */ - LLVector3 tvec = orig - vert0; + LLVector4a tvec; + tvec.setSub(orig, vert0); /* calculate U parameter and test bounds */ - u = tvec * pvec; + u = tvec.dot3(pvec); if (u < 0.f || u > det) { @@ -169,17 +173,18 @@ BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, cons } /* prepare to test V parameter */ - LLVector3 qvec = tvec % edge1; + LLVector4a qvec; + qvec.setCross3(tvec, edge1); /* calculate V parameter and test bounds */ - v = dir * qvec; + v = dir.dot3(qvec); if (v < 0.f || u + v > det) { return FALSE; } /* calculate t, scale parameters, ray intersects triangle */ - t = edge2 * qvec; + t = edge2.dot3(qvec); F32 inv_det = 1.0 / det; t *= inv_det; u *= inv_det; @@ -195,20 +200,22 @@ BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, cons F32 inv_det = 1.0 / det; /* calculate distance from vert0 to ray origin */ - LLVector3 tvec = orig - vert0; + LLVector4a tvec; + tvec.setSub(orig, vert0); /* calculate U parameter and test bounds */ - u = (tvec * pvec) * inv_det; + u = (tvec.dot3(pvec)) * inv_det; if (u < 0.f || u > 1.f) { return FALSE; } /* prepare to test V parameter */ - LLVector3 qvec = tvec - edge1; + LLVector4a qvec; + qvec.setSub(tvec, edge1); /* calculate V parameter and test bounds */ - v = (dir * qvec) * inv_det; + v = (dir.dot3(qvec)) * inv_det; if (v < 0.f || u + v > 1.f) { @@ -216,7 +223,7 @@ BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, cons } /* calculate t, ray intersects triangle */ - t = (edge2 * qvec) * inv_det; + t = (edge2.dot3(qvec)) * inv_det; } if (intersection_a != NULL) @@ -4120,13 +4127,14 @@ void LLVolume::generateSilhouetteVertices(std::vector &vertices, norm_mat.rotate(n[v1], t); t.normalize3Fast(); - LLVector3 norm1 = LLVector3(t[0], t[1], t[2]); - normals.push_back(norm1); + normals.push_back(LLVector3(t[0], t[1], t[2])); - vertices.push_back(face.mVertices[v2].mPosition*mat); - LLVector3 norm2 = face.mVertices[v2].mNormal * norm_mat; - norm2.normVec(); - normals.push_back(norm2); + mat.affineTransform(v[v2], t); + vertices.push_back(LLVector3(t[0], t[1], t[2])); + + norm_mat.rotate(n[v2], t); + t.normalize3Fast(); + normals.push_back(LLVector3(t[0], t[1], t[2])); segments.push_back(vertices.size()); } @@ -4177,6 +4185,10 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, genBinormals(i); } + LLVector4a starta, dira; + + LLVector4a* p = (LLVector4a*) face.mPositions; + for (U32 tri = 0; tri < face.mNumIndices/3; tri++) { S32 index1 = face.mIndices[tri*3+0]; @@ -4185,15 +4197,15 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, F32 a, b, t; - if (LLTriangleRayIntersect(face.mVertices[index1].mPosition, - face.mVertices[index2].mPosition, - face.mVertices[index3].mPosition, - start, dir, &a, &b, &t, FALSE)) + if (LLTriangleRayIntersect(p[index1], + p[index2], + p[index3], + starta, dira, &a, &b, &t, FALSE)) { if ((t >= 0.f) && // if hit is after start (t <= 1.f) && // and before end (t < closest_t)) // and this hit is closer - { + { closest_t = t; hit_face = i; @@ -4201,27 +4213,35 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, { *intersection = start + dir * closest_t; } - + + if (tex_coord != NULL) - { - *tex_coord = ((1.f - a - b) * face.mVertices[index1].mTexCoord + - a * face.mVertices[index2].mTexCoord + - b * face.mVertices[index3].mTexCoord); + { + LLVector2* tc = (LLVector2*) face.mTexCoords; + *tex_coord = ((1.f - a - b) * tc[index1] + + a * tc[index2] + + b * tc[index3]); } if (normal != NULL) - { - *normal = ((1.f - a - b) * face.mVertices[index1].mNormal + - a * face.mVertices[index2].mNormal + - b * face.mVertices[index3].mNormal); + { + LLVector4* norm = (LLVector4*) face.mNormals; + + *normal = ((1.f - a - b) * LLVector3(norm[index1]) + + a * LLVector3(norm[index2]) + + b * LLVector3(norm[index3])); } if (bi_normal != NULL) - { - *bi_normal = ((1.f - a - b) * face.mVertices[index1].mBinormal + - a * face.mVertices[index2].mBinormal + - b * face.mVertices[index3].mBinormal); + { + LLVector4* binormal = (LLVector4*) face.mBinormals; + if (binormal) + { + *bi_normal = ((1.f - a - b) * LLVector3(binormal[index1]) + + a * LLVector3(binormal[index2]) + + b * LLVector3(binormal[index3])); + } } } @@ -4992,6 +5012,14 @@ std::ostream& operator<<(std::ostream &s, const LLVolume *volumep) return s; } +LLVolumeFace::~LLVolumeFace() +{ + _mm_free(mPositions); + _mm_free(mNormals); + _mm_free(mTexCoords); + _mm_free(mIndices); + _mm_free(mBinormals); +} BOOL LLVolumeFace::create(LLVolume* volume, BOOL partial_build) { @@ -5012,6 +5040,7 @@ BOOL LLVolumeFace::create(LLVolume* volume, BOOL partial_build) void LLVolumeFace::optimize(F32 angle_cutoff) { +#if 0 //disabling until a vectorized version is available LLVolumeFace new_face; VertexMapData::PointMap point_map; @@ -5063,6 +5092,7 @@ void LLVolumeFace::optimize(F32 angle_cutoff) mVertices = new_face.mVertices; mIndices = new_face.mIndices; +#endif } void LerpPlanarVertex(LLVolumeFace::VertexData& v0, @@ -5127,20 +5157,22 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build) corners[1].mTexCoord=corners[2].mTexCoord; corners[2].mTexCoord=swap; } - baseVert.mBinormal = calc_binormal_from_triangle( + + LLVector4a binormal; + + calc_binormal_from_triangle( binormal, corners[0].mPosition, corners[0].mTexCoord, corners[1].mPosition, corners[1].mTexCoord, corners[2].mPosition, corners[2].mTexCoord); - for(int t = 0; t < 4; t++){ - corners[t].mBinormal = baseVert.mBinormal; - corners[t].mNormal = baseVert.mNormal; - } - mHasBinormals = TRUE; - if (partial_build) - { - mVertices.clear(); - } + S32 size = (grid_size+1)*(grid_size+1); + resizeVertices(size); + allocateBinormals(size); + + LLVector4a* pos = (LLVector4a*) mPositions; + LLVector4a* norm = (LLVector4a*) mNormals; + LLVector4a* binorm = (LLVector4a*) mBinormals; + LLVector2* tc = (LLVector2*) mTexCoords; S32 vtop = mNumVertices; for(int gx = 0;gx=0;i--) { - mIndices.push_back(vtop+(gy*(grid_size+1))+gx+idxs[i]); - } - -#if GEN_TRI_STRIP - if (gy == 0) - { - mTriStrip.push_back((gx+1)*(grid_size+1)); - mTriStrip.push_back((gx+1)*(grid_size+1)); - mTriStrip.push_back(gx*(grid_size+1)); - } - - mTriStrip.push_back(gy+1+(gx+1)*(grid_size+1)); - mTriStrip.push_back(gy+1+gx*(grid_size+1)); - - - if (gy == grid_size-1) - { - mTriStrip.push_back(gy+1+gx*(grid_size+1)); - } -#endif + *out++ = (vtop+(gy*(grid_size+1))+gx+idxs[i]); + } } else { for(S32 i=0;i<6;i++) { - mIndices.push_back(vtop+(gy*(grid_size+1))+gx+idxs[i]); - } - -#if GEN_TRI_STRIP - if (gy == 0) - { - mTriStrip.push_back(gx*(grid_size+1)); - mTriStrip.push_back(gx*(grid_size+1)); - mTriStrip.push_back((gx+1)*(grid_size+1)); + *out++ = (vtop+(gy*(grid_size+1))+gx+idxs[i]); } - - mTriStrip.push_back(gy+1+gx*(grid_size+1)); - mTriStrip.push_back(gy+1+(gx+1)*(grid_size+1)); - - if (gy == grid_size-1) - { - mTriStrip.push_back(gy+1+(gx+1)*(grid_size+1)); - } -#endif } } } - -#if GEN_TRI_STRIP - if (mTriStrip.size()%2 == 1) - { - mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]); - } -#endif } return TRUE; @@ -5267,11 +5262,25 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) num_vertices = profile.size(); num_indices = (profile.size() - 2)*3; - mVertices.resize(num_vertices); + if (!(mTypeMask & HOLLOW_MASK) && !(mTypeMask & OPEN_MASK)) + { + resizeVertices(num_vertices+1); + allocateBinormals(num_vertices+1); - if (!partial_build) + if (!partial_build) + { + resizeIndices(num_indices+3); + } + } + else { - mIndices.resize(num_indices); + resizeVertices(num_vertices); + allocateBinormals(num_vertices); + + if (!partial_build) + { + resizeIndices(num_indices); + } } S32 max_s = volume->getProfile().getTotal(); @@ -5298,79 +5307,87 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) LLVector3& min = mExtents[0]; LLVector3& max = mExtents[1]; + LLVector2* tc = (LLVector2*) mTexCoords; + LLVector4a* pos = (LLVector4a*) mPositions; + LLVector4a* norm = (LLVector4a*) mNormals; + LLVector4a* binorm = (LLVector4a*) mBinormals; + // Copy the vertices into the array for (S32 i = 0; i < num_vertices; i++) { if (mTypeMask & TOP_MASK) { - mVertices[i].mTexCoord.mV[0] = profile[i].mV[0]+0.5f; - mVertices[i].mTexCoord.mV[1] = profile[i].mV[1]+0.5f; + tc[i].mV[0] = profile[i].mV[0]+0.5f; + tc[i].mV[1] = profile[i].mV[1]+0.5f; } else { // Mirror for underside. - mVertices[i].mTexCoord.mV[0] = profile[i].mV[0]+0.5f; - mVertices[i].mTexCoord.mV[1] = 0.5f - profile[i].mV[1]; + tc[i].mV[0] = profile[i].mV[0]+0.5f; + tc[i].mV[1] = 0.5f - profile[i].mV[1]; } - mVertices[i].mPosition = mesh[i + offset].mPos; + pos[i].load3(mesh[i + offset].mPos.mV); if (i == 0) { - min = max = mVertices[i].mPosition; - min_uv = max_uv = mVertices[i].mTexCoord; + min = max = mesh[i+offset].mPos; + min_uv = max_uv = tc[i]; } else { - update_min_max(min,max, mVertices[i].mPosition); - update_min_max(min_uv, max_uv, mVertices[i].mTexCoord); + update_min_max(min,max, mesh[i+offset].mPos); + update_min_max(min_uv, max_uv, tc[i]); } } mCenter = (min+max)*0.5f; cuv = (min_uv + max_uv)*0.5f; - LLVector3 binormal = calc_binormal_from_triangle( + LLVector4a binormal; + calc_binormal_from_triangle(binormal, mCenter, cuv, - mVertices[0].mPosition, mVertices[0].mTexCoord, - mVertices[1].mPosition, mVertices[1].mTexCoord); - binormal.normVec(); + mesh[0+offset].mPos, tc[0], + mesh[1+offset].mPos, tc[1]); + binormal.normalize3Fast(); + + LLVector4a normal; + LLVector4a d0, d1; + LLVector4a center; + + center.load3(mCenter.mV); - LLVector3 d0; - LLVector3 d1; - LLVector3 normal; + d0.setSub(center, pos[0]); + d1.setSub(center, pos[1]); - d0 = mCenter-mVertices[0].mPosition; - d1 = mCenter-mVertices[1].mPosition; + if (mTypeMask & TOP_MASK) + { + normal.setCross3(d0, d1); + } + else + { + normal.setCross3(d1, d0); + } - normal = (mTypeMask & TOP_MASK) ? (d0%d1) : (d1%d0); - normal.normVec(); + normal.normalize3Fast(); VertexData vd; vd.mPosition = mCenter; - vd.mNormal = normal; - vd.mBinormal = binormal; vd.mTexCoord = cuv; if (!(mTypeMask & HOLLOW_MASK) && !(mTypeMask & OPEN_MASK)) { - mVertices.push_back(vd); + pos[num_vertices].load4a((F32*) ¢er.mQ); + tc[num_vertices] = cuv; num_vertices++; - if (!partial_build) - { - vector_append(mIndices, 3); - } } - for (S32 i = 0; i < num_vertices; i++) { - mVertices[i].mBinormal = binormal; - mVertices[i].mNormal = normal; + binorm[i].load4a((F32*) &binormal.mQ); + norm[i].load4a((F32*) &normal.mQ); } - mHasBinormals = TRUE; - if (partial_build) { return TRUE; @@ -5478,8 +5495,6 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) pt2--; } } - - makeTriStrip(); } else { @@ -5584,8 +5599,6 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) pt2--; } } - - makeTriStrip(); } } else @@ -5607,131 +5620,63 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) mIndices[3*i+v2] = i + 1; } -#if GEN_TRI_STRIP - //make tri strip - if (mTypeMask & OPEN_MASK) - { - makeTriStrip(); - } - else - { - S32 j = num_vertices-2; - if (mTypeMask & TOP_MASK) - { - mTriStrip.push_back(0); - for (S32 i = 0; i <= j; ++i) - { - mTriStrip.push_back(i); - if (i != j) - { - mTriStrip.push_back(j); - } - --j; - } - } - else - { - mTriStrip.push_back(j); - for (S32 i = 0; i <= j; ++i) - { - if (i != j) - { - mTriStrip.push_back(j); - } - mTriStrip.push_back(i); - --j; - } - } - - mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]); - if (mTriStrip.size()%2 == 1) - { - mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]); - } - } -#endif } return TRUE; } -void LLVolumeFace::makeTriStrip() -{ -#if GEN_TRI_STRIP - for (U32 i = 0; i < mNumIndices; i+=3) - { - U16 i0 = mIndices[i]; - U16 i1 = mIndices[i+1]; - U16 i2 = mIndices[i+2]; - - if ((i/3)%2 == 1) - { - mTriStrip.push_back(i0); - mTriStrip.push_back(i0); - mTriStrip.push_back(i1); - mTriStrip.push_back(i2); - mTriStrip.push_back(i2); - } - else - { - mTriStrip.push_back(i2); - mTriStrip.push_back(i2); - mTriStrip.push_back(i1); - mTriStrip.push_back(i0); - mTriStrip.push_back(i0); - } - } - - if (mTriStrip.size()%2 == 1) - { - mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]); - } -#endif -} - void LLVolumeFace::createBinormals() { LLMemType m1(LLMemType::MTYPE_VOLUME); - if (!mHasBinormals) + if (!mBinormals) { + allocateBinormals(mNumVertices); + //generate binormals + LLStrider pos; + pos = (LLVector3*) mPositions; + pos.setStride(16); + + LLVector2* tc = (LLVector2*) mTexCoords; + LLVector4a* binorm = (LLVector4a*) mBinormals; + for (U32 i = 0; i < mNumIndices/3; i++) { //for each triangle - const VertexData& v0 = mVertices[mIndices[i*3+0]]; - const VertexData& v1 = mVertices[mIndices[i*3+1]]; - const VertexData& v2 = mVertices[mIndices[i*3+2]]; + const U16& i0 = mIndices[i*3+0]; + const U16& i1 = mIndices[i*3+1]; + const U16& i2 = mIndices[i*3+2]; //calculate binormal - LLVector3 binorm = calc_binormal_from_triangle(v0.mPosition, v0.mTexCoord, - v1.mPosition, v1.mTexCoord, - v2.mPosition, v2.mTexCoord); + LLVector4a binormal; + calc_binormal_from_triangle(binormal, + pos[i0], tc[i0], + pos[i1], tc[i1], + pos[i2], tc[i2]); - for (U32 j = 0; j < 3; j++) - { //add triangle normal to vertices - mVertices[mIndices[i*3+j]].mBinormal += binorm; // * (weight_sum - d[j])/weight_sum; - } + + //add triangle normal to vertices + binorm[i0].add(binormal); + binorm[i1].add(binormal); + binorm[i2].add(binormal); //even out quad contributions if (i % 2 == 0) { - mVertices[mIndices[i*3+2]].mBinormal += binorm; + binorm[i2].add(binormal); } else { - mVertices[mIndices[i*3+1]].mBinormal += binorm; + binorm[i1].add(binormal); } } //normalize binormals for (U32 i = 0; i < mNumVertices; i++) { - mVertices[i].mBinormal.normVec(); - mVertices[i].mNormal.normVec(); + binorm[i].normalize3Fast(); } - - mHasBinormals = TRUE; } } @@ -5754,6 +5699,13 @@ void LLVolumeFace::resizeVertices(S32 num_verts) mNumVertices = num_verts; } +void LLVolumeFace::allocateBinormals(S32 num_verts) +{ + _mm_free(mBinormals); + mBinormals = (F32*) _mm_malloc(num_verts*16, 16); +} + + void LLVolumeFace::resizeIndices(S32 num_indices) { _mm_free(mIndices); @@ -5761,44 +5713,107 @@ void LLVolumeFace::resizeIndices(S32 num_indices) //pad index block end to allow for QWORD reads S32 size = ((num_indices*2) + 0xF) & ~0xF; - mIndices = (U16*) _mm_malloc(size); + mIndices = (U16*) _mm_malloc(size,16); mNumIndices = num_indices; } -void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat, LLMatrix4& norm_mat) +void LLVolumeFace::fillFromLegacyData(std::vector& v, std::vector& idx) +{ + resizeVertices(v.size()); + resizeIndices(idx.size()); + + for (U32 i = 0; i < v.size(); ++i) + { + for (U32 j = 0; j < 3; ++j) + { + mPositions[i*4+j] = v[i].mPosition[j]; + mNormals[i*4+j] = v[i].mNormal[j]; + } + + mTexCoords[i*2+0] = v[i].mTexCoord.mV[0]; + mTexCoords[i*2+1] = v[i].mTexCoord.mV[1]; + } + + for (U32 i = 0; i < idx.size(); ++i) + { + mIndices[i] = idx[i]; + } +} + +void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMatrix4& norm_mat_in) { U16 offset = mNumVertices; - if (face.mNumVertices + mNumVertices > 65536) + S32 new_count = face.mNumVertices + mNumVertices; + + if (new_count > 65536) { llerrs << "Cannot append face -- 16-bit overflow will occur." << llendl; } + + F32* new_pos = (F32*) _mm_malloc(new_count*16, 16); + F32* new_norm = (F32*) _mm_malloc(new_count*16, 16); + F32* new_tc = (F32*) _mm_malloc((new_count*8+0xF) & ~0xF, 16); + + LLVector4a::memcpyNonAliased16(new_pos, mPositions, new_count*4); + LLVector4a::memcpyNonAliased16(new_norm, mNormals, new_count*4); + LLVector4a::memcpyNonAliased16(new_tc, mTexCoords, new_count*2); + + _mm_free(mPositions); + _mm_free(mNormals); + _mm_free(mTexCoords); + + mPositions = new_pos; + mNormals = new_norm; + mTexCoords = new_tc; + + mNumVertices = new_count; + + LLVector4a* dst_pos = (LLVector4a*) mPositions+offset; + LLVector2* dst_tc = (LLVector2*) mTexCoords+offset; + LLVector4a* dst_norm = (LLVector4a*) mNormals+offset; + + LLVector4a* src_pos = (LLVector4a*) face.mPositions; + LLVector2* src_tc = (LLVector2*) face.mTexCoords; + LLVector4a* src_norm = (LLVector4a*) face.mNormals; + + LLMatrix4a mat, norm_mat; + mat.loadu(mat_in); + norm_mat.loadu(norm_mat_in); + for (U32 i = 0; i < face.mNumVertices; ++i) { - VertexData v = face.mVertices[i]; - v.mPosition = v.mPosition*mat; - v.mNormal = v.mNormal * norm_mat; + mat.affineTransform(src_pos[i], dst_pos[i]); + norm_mat.rotate(src_norm[i], dst_norm[i]); + dst_norm[i].normalize3Fast(); - v.mNormal.normalize(); - - mVertices.push_back(v); + dst_tc[i] = src_tc[i]; if (offset == 0 && i == 0) { - mExtents[0] = mExtents[1] = v.mPosition; + mExtents[0] = mExtents[1] = LLVector3((F32*) &(dst_pos[i].mQ)); } else { - update_min_max(mExtents[0], mExtents[1], v.mPosition); + update_min_max(mExtents[0], mExtents[1], (F32*) &(dst_pos[i].mQ)); } } - + + new_count = mNumIndices + face.mNumIndices; + U16* new_indices = (U16*) _mm_malloc((new_count*2+0xF) & ~0xF, 16); + LLVector4a::memcpyNonAliased16((F32*) new_indices, (F32*) mIndices, new_count/2); + _mm_free(mIndices); + mIndices = new_indices; + mNumIndices = new_count; + + U16* dst_idx = mIndices+offset; + for (U32 i = 0; i < face.mNumIndices; ++i) { - mIndices.push_back(face.mIndices[i]+offset); + dst_idx[i] = face.mIndices[i]+offset; } } @@ -5828,21 +5843,20 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) num_vertices = mNumS*mNumT; num_indices = (mNumS-1)*(mNumT-1)*6; - mVertices.resize(num_vertices); - if (!partial_build) { - mIndices.resize(num_indices); + resizeVertices(num_vertices); + resizeIndices(num_indices); if ((volume->getParams().getSculptType() & LL_SCULPT_TYPE_MASK) != LL_SCULPT_TYPE_MESH) { mEdge.resize(num_indices); } } - else - { - mHasBinormals = FALSE; - } + + LLVector4a* pos = (LLVector4a*) mPositions; + LLVector4a* norm = (LLVector4a*) mNormals; + LLVector2* tc = (LLVector2*) mTexCoords; S32 begin_stex = llfloor( profile[mBeginS].mV[2] ); S32 num_s = ((mTypeMask & INNER_MASK) && (mTypeMask & FLAT_MASK) && mNumS > 2) ? mNumS/2 : mNumS; @@ -5894,21 +5908,21 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) i = mBeginS + s + max_s*t; } - mVertices[cur_vertex].mPosition = mesh[i].mPos; - mVertices[cur_vertex].mTexCoord = LLVector2(ss,tt); + pos[cur_vertex].load3(mesh[i].mPos.mV); + tc[cur_vertex] = LLVector2(ss,tt); - mVertices[cur_vertex].mNormal = LLVector3(0,0,0); - mVertices[cur_vertex].mBinormal = LLVector3(0,0,0); + norm[cur_vertex].clear(); cur_vertex++; if ((mTypeMask & INNER_MASK) && (mTypeMask & FLAT_MASK) && mNumS > 2 && s > 0) { - mVertices[cur_vertex].mPosition = mesh[i].mPos; - mVertices[cur_vertex].mTexCoord = LLVector2(ss,tt); + + pos[cur_vertex].load3(mesh[i].mPos.mV); + tc[cur_vertex] = LLVector2(ss,tt); - mVertices[cur_vertex].mNormal = LLVector3(0,0,0); - mVertices[cur_vertex].mBinormal = LLVector3(0,0,0); + norm[cur_vertex].clear(); + cur_vertex++; } } @@ -5926,12 +5940,10 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) i = mBeginS + s + max_s*t; ss = profile[mBeginS + s].mV[2] - begin_stex; - mVertices[cur_vertex].mPosition = mesh[i].mPos; - mVertices[cur_vertex].mTexCoord = LLVector2(ss,tt); - - mVertices[cur_vertex].mNormal = LLVector3(0,0,0); - mVertices[cur_vertex].mBinormal = LLVector3(0,0,0); - + pos[cur_vertex].load3(mesh[i].mPos.mV); + tc[cur_vertex] = LLVector2(ss,tt); + norm[cur_vertex].clear(); + cur_vertex++; } } @@ -5942,10 +5954,11 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) LLVector3& face_max = mExtents[1]; mCenter.clearVec(); - face_min = face_max = mVertices[0].mPosition; + face_min = face_max = LLVector3((F32*) &(pos[i].mQ)); + for (U32 i = 1; i < mNumVertices; ++i) { - update_min_max(face_min, face_max, mVertices[i].mPosition); + update_min_max(face_min, face_max, (F32*) &(pos[i].mQ)); } mCenter = (face_min + face_max) * 0.5f; @@ -5956,18 +5969,9 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) if (!partial_build) { -#if GEN_TRI_STRIP - mTriStrip.clear(); -#endif - // Now we generate the indices. for (t = 0; t < (mNumT-1); t++) { -#if GEN_TRI_STRIP - //prepend terminating index to strip - mTriStrip.push_back(mNumS*t); -#endif - for (s = 0; s < (mNumS-1); s++) { mIndices[cur_index++] = s + mNumS*t; //bottom left @@ -5977,16 +5981,6 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) mIndices[cur_index++] = s+1 + mNumS*t; //bottom right mIndices[cur_index++] = s+1 + mNumS*(t+1); //top right -#if GEN_TRI_STRIP - if (s == 0) - { - mTriStrip.push_back(s+mNumS*t); - mTriStrip.push_back(s+mNumS*(t+1)); - } - mTriStrip.push_back(s+1+mNumS*t); - mTriStrip.push_back(s+1+mNumS*(t+1)); -#endif - mEdge[cur_edge++] = (mNumS-1)*2*t+s*2+1; //bottom left/top right neighbor face if (t < mNumT-2) { //top right/top left neighbor face mEdge[cur_edge++] = (mNumS-1)*2*(t+1)+s*2+1; @@ -6027,52 +6021,55 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) } mEdge[cur_edge++] = (mNumS-1)*2*t+s*2; //top right/bottom left neighbor face } -#if GEN_TRI_STRIP - //append terminating vertex to strip - mTriStrip.push_back(mNumS-1+mNumS*(t+1)); -#endif } - -#if GEN_TRI_STRIP - if (mTriStrip.size()%2 == 1) - { - mTriStrip.push_back(mTriStrip[mTriStrip.size()-1]); - } -#endif } //generate normals for (U32 i = 0; i < mNumIndices/3; i++) //for each triangle { const U16* idx = &(mIndices[i*3]); - - VertexData* v[] = - { &mVertices[idx[0]], &mVertices[idx[1]], &mVertices[idx[2]] }; - - //calculate triangle normal - LLVector3 norm = (v[0]->mPosition-v[1]->mPosition) % (v[0]->mPosition-v[2]->mPosition); + - v[0]->mNormal += norm; - v[1]->mNormal += norm; - v[2]->mNormal += norm; + LLVector4a* v[] = + { pos+idx[0], pos+idx[1], pos+idx[2] }; + + LLVector4a* n[] = + { norm+idx[0], norm+idx[1], norm+idx[2] }; + + //calculate triangle normal + LLVector4a a, b, c; + + a.setSub(*v[0], *v[1]); + b.setSub(*v[0], *v[2]); + c.setCross3(a,b); + n[0]->add(c); + n[1]->add(c); + n[2]->add(c); + //even out quad contributions - v[i%2+1]->mNormal += norm; + n[i%2+1]->add(c); } // adjust normals based on wrapping and stitching - BOOL s_bottom_converges = ((mVertices[0].mPosition - mVertices[mNumS*(mNumT-2)].mPosition).magVecSquared() < 0.000001f); - BOOL s_top_converges = ((mVertices[mNumS-1].mPosition - mVertices[mNumS*(mNumT-2)+mNumS-1].mPosition).magVecSquared() < 0.000001f); + LLVector4a top; + top.setSub(pos[0], pos[mNumS*(mNumT-2)]); + BOOL s_bottom_converges = (top.dot3(top) < 0.000001f); + + top.setSub(pos[mNumS-1], pos[mNumS*(mNumT-2)+mNumS-1]); + BOOL s_top_converges = (top.dot3(top) < 0.000001f); + if (sculpt_stitching == LL_SCULPT_TYPE_NONE) // logic for non-sculpt volumes { if (volume->getPath().isOpen() == FALSE) { //wrap normals on T for (S32 i = 0; i < mNumS; i++) { - LLVector3 norm = mVertices[i].mNormal + mVertices[mNumS*(mNumT-1)+i].mNormal; - mVertices[i].mNormal = norm; - mVertices[mNumS*(mNumT-1)+i].mNormal = norm; + LLVector4a n; + n.setAdd(norm[i], norm[mNumS*(mNumT-1)+i]); + norm[i] = n; + norm[mNumS*(mNumT-1)+i] = n; } } @@ -6080,9 +6077,10 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) { //wrap normals on S for (S32 i = 0; i < mNumT; i++) { - LLVector3 norm = mVertices[mNumS*i].mNormal + mVertices[mNumS*i+mNumS-1].mNormal; - mVertices[mNumS * i].mNormal = norm; - mVertices[mNumS * i+mNumS-1].mNormal = norm; + LLVector4a n; + n.setAdd(norm[mNumS*i], norm[mNumS*i+mNumS-1]); + norm[mNumS * i] = n; + norm[mNumS * i+mNumS-1] = n; } } @@ -6093,7 +6091,7 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) { //all lower S have same normal for (S32 i = 0; i < mNumT; i++) { - mVertices[mNumS*i].mNormal = LLVector3(1,0,0); + norm[mNumS*i].set(1,0,0); } } @@ -6101,7 +6099,7 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) { //all upper S have same normal for (S32 i = 0; i < mNumT; i++) { - mVertices[mNumS*i+mNumS-1].mNormal = LLVector3(-1,0,0); + norm[mNumS*i+mNumS-1].set(-1,0,0); } } } @@ -6129,30 +6127,33 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) { // average normals for north pole - LLVector3 average(0.0, 0.0, 0.0); + LLVector4a average; + average.clear(); + for (S32 i = 0; i < mNumS; i++) { - average += mVertices[i].mNormal; + average.add(norm[i]); } // set average for (S32 i = 0; i < mNumS; i++) { - mVertices[i].mNormal = average; + norm[i] = average; } // average normals for south pole - average = LLVector3(0.0, 0.0, 0.0); + average.clear(); + for (S32 i = 0; i < mNumS; i++) { - average += mVertices[i + mNumS * (mNumT - 1)].mNormal; + average.add(norm[i + mNumS * (mNumT - 1)]); } // set average for (S32 i = 0; i < mNumS; i++) { - mVertices[i + mNumS * (mNumT - 1)].mNormal = average; + norm[i + mNumS * (mNumT - 1)] = average; } } @@ -6162,23 +6163,22 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) { for (S32 i = 0; i < mNumT; i++) { - LLVector3 norm = mVertices[mNumS*i].mNormal + mVertices[mNumS*i+mNumS-1].mNormal; - mVertices[mNumS * i].mNormal = norm; - mVertices[mNumS * i+mNumS-1].mNormal = norm; + LLVector4a n; + n.setAdd(norm[mNumS*i], norm[mNumS*i+mNumS-1]); + norm[mNumS * i] = n; + norm[mNumS * i+mNumS-1] = n; } } - - if (wrap_t) { for (S32 i = 0; i < mNumS; i++) { - LLVector3 norm = mVertices[i].mNormal + mVertices[mNumS*(mNumT-1)+i].mNormal; - mVertices[i].mNormal = norm; - mVertices[mNumS*(mNumT-1)+i].mNormal = norm; + LLVector4a n; + n.setAdd(norm[i], norm[mNumS*(mNumT-1)+i]); + norm[i] = n; + norm[mNumS*(mNumT-1)+i] = n; } - } } @@ -6188,7 +6188,8 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) // Finds binormal based on three vertices with texture coordinates. // Fills in dummy values if the triangle has degenerate texture coordinates. -LLVector3 calc_binormal_from_triangle( +void calc_binormal_from_triangle(LLVector4a& binormal, + const LLVector3& pos0, const LLVector2& tex0, const LLVector3& pos1, @@ -6196,33 +6197,42 @@ LLVector3 calc_binormal_from_triangle( const LLVector3& pos2, const LLVector2& tex2) { - LLVector3 rx0( pos0.mV[VX], tex0.mV[VX], tex0.mV[VY] ); - LLVector3 rx1( pos1.mV[VX], tex1.mV[VX], tex1.mV[VY] ); - LLVector3 rx2( pos2.mV[VX], tex2.mV[VX], tex2.mV[VY] ); + LLVector4a rx0; rx0.set( pos0.mV[VX], tex0.mV[VX], tex0.mV[VY] ); + LLVector4a rx1; rx1.set( pos1.mV[VX], tex1.mV[VX], tex1.mV[VY] ); + LLVector4a rx2; rx2.set( pos2.mV[VX], tex2.mV[VX], tex2.mV[VY] ); - LLVector3 ry0( pos0.mV[VY], tex0.mV[VX], tex0.mV[VY] ); - LLVector3 ry1( pos1.mV[VY], tex1.mV[VX], tex1.mV[VY] ); - LLVector3 ry2( pos2.mV[VY], tex2.mV[VX], tex2.mV[VY] ); + LLVector4a ry0; ry0.set( pos0.mV[VY], tex0.mV[VX], tex0.mV[VY] ); + LLVector4a ry1; ry1.set( pos1.mV[VY], tex1.mV[VX], tex1.mV[VY] ); + LLVector4a ry2; ry2.set( pos2.mV[VY], tex2.mV[VX], tex2.mV[VY] ); - LLVector3 rz0( pos0.mV[VZ], tex0.mV[VX], tex0.mV[VY] ); - LLVector3 rz1( pos1.mV[VZ], tex1.mV[VX], tex1.mV[VY] ); - LLVector3 rz2( pos2.mV[VZ], tex2.mV[VX], tex2.mV[VY] ); + LLVector4a rz0; rz0.set( pos0.mV[VZ], tex0.mV[VX], tex0.mV[VY] ); + LLVector4a rz1; rz1.set( pos1.mV[VZ], tex1.mV[VX], tex1.mV[VY] ); + LLVector4a rz2; rz2.set( pos2.mV[VZ], tex2.mV[VX], tex2.mV[VY] ); - LLVector3 r0 = (rx0 - rx1) % (rx0 - rx2); - LLVector3 r1 = (ry0 - ry1) % (ry0 - ry2); - LLVector3 r2 = (rz0 - rz1) % (rz0 - rz2); + LLVector4a lhs, rhs; + + LLVector4a r0; + lhs.setSub(rx0, rx1); rhs.setSub(rx0, rx2); + r0.setCross3(lhs, rhs); + + LLVector4a r1; + lhs.setSub(ry0, ry1); rhs.setSub(ry0, ry2); + r1.setCross3(lhs, rhs); + + LLVector4a r2; + lhs.setSub(rz0, rz1); rhs.setSub(rz0, rz2); + r2.setCross3(lhs, rhs); - if( r0.mV[VX] && r1.mV[VX] && r2.mV[VX] ) + if( r0[VX] && r1[VX] && r2[VX] ) { - LLVector3 binormal( - -r0.mV[VZ] / r0.mV[VX], - -r1.mV[VZ] / r1.mV[VX], - -r2.mV[VZ] / r2.mV[VX]); + binormal.set( + -r0[VZ] / r0[VX], + -r1[VZ] / r1[VX], + -r2[VZ] / r2[VX]); // binormal.normVec(); - return binormal; } else { - return LLVector3( 0, 1 , 0 ); + binormal.set( 0, 1 , 0 ); } } diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 17be642d4a..911db6f94b 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -40,6 +40,7 @@ class LLPathParams; class LLVolumeParams; class LLProfile; class LLPath; +class LLVector4a; class LLVolumeFace; class LLVolume; @@ -791,6 +792,19 @@ public: class LLVolumeFace { public: + class VertexData + { + public: + LLVector3 mPosition; + LLVector3 mNormal; + LLVector3 mBinormal; + LLVector2 mTexCoord; + + bool operator<(const VertexData& rhs) const; + bool operator==(const VertexData& rhs) const; + bool compareNormal(const VertexData& rhs, F32 angle_cutoff) const; + }; + LLVolumeFace() : mID(0), mTypeMask(0), @@ -808,26 +822,18 @@ public: { } + ~LLVolumeFace(); + BOOL create(LLVolume* volume, BOOL partial_build = FALSE); void createBinormals(); void appendFace(const LLVolumeFace& face, LLMatrix4& transform, LLMatrix4& normal_tranform); void resizeVertices(S32 num_verts); + void allocateBinormals(S32 num_verts); void resizeIndices(S32 num_indices); + void fillFromLegacyData(std::vector& v, std::vector& idx); - class VertexData - { - public: - LLVector3 mPosition; - LLVector3 mNormal; - LLVector3 mBinormal; - LLVector2 mTexCoord; - - bool operator<(const VertexData& rhs) const; - bool operator==(const VertexData& rhs) const; - bool compareNormal(const VertexData& rhs, F32 angle_cutoff) const; - }; class VertexMapData : public LLVolumeFace::VertexData { @@ -1051,7 +1057,8 @@ public: std::ostream& operator<<(std::ostream &s, const LLVolumeParams &volume_params); -LLVector3 calc_binormal_from_triangle( +void calc_binormal_from_triangle( + LLVector4a& binormal, const LLVector3& pos0, const LLVector2& tex0, const LLVector3& pos1, @@ -1060,7 +1067,7 @@ LLVector3 calc_binormal_from_triangle( const LLVector2& tex2); BOOL LLLineSegmentBoxIntersect(const LLVector3& start, const LLVector3& end, const LLVector3& center, const LLVector3& size); -BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, const LLVector3& vert2, const LLVector3& orig, const LLVector3& dir, +BOOL LLTriangleRayIntersect(const LLVector4a& vert0, const LLVector4a& vert1, const LLVector4a& vert2, const LLVector4a& orig, const LLVector4a& dir, F32* intersection_a, F32* intersection_b, F32* intersection_t, BOOL two_sided); diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 4fb8f5266e..0fa0e80cb7 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -1201,14 +1201,14 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLFace* face, const LLMeshSk if (!buff || buff->getTypeMask() != data_mask || - buff->getRequestedVerts() != vol_face.mVertices.size()) + buff->getRequestedVerts() != vol_face.mNumVertices) { face->setGeomIndex(0); face->setIndicesIndex(0); - face->setSize(vol_face.mVertices.size(), vol_face.mIndices.size()); + face->setSize(vol_face.mNumVertices, vol_face.mNumIndices); face->mVertexBuffer = new LLVertexBuffer(data_mask, 0); - face->mVertexBuffer->allocateBuffer(vol_face.mVertices.size(), vol_face.mIndices.size(), true); + face->mVertexBuffer->allocateBuffer(vol_face.mNumVertices, vol_face.mNumIndices, true); U16 offset = 0; diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 53dc335c16..77e8a6fdf9 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -928,8 +928,8 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, { LLFastTimer t(FTM_FACE_GET_GEOM); const LLVolumeFace &vf = volume.getVolumeFace(f); - S32 num_vertices = (S32)vf.mVertices.size(); - S32 num_indices = LLPipeline::sUseTriStrips ? (S32)vf.mTriStrip.size() : (S32) vf.mIndices.size(); + S32 num_vertices = (S32)vf.mNumVertices; + S32 num_indices = (S32) vf.mNumIndices; if (mVertexBuffer.notNull()) { @@ -1128,19 +1128,9 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, if (full_rebuild) { mVertexBuffer->getIndexStrider(indicesp, mIndicesIndex); - if (LLPipeline::sUseTriStrips) + for (U32 i = 0; i < (U32) num_indices; i++) { - for (U32 i = 0; i < (U32) num_indices; i++) - { - *indicesp++ = vf.mTriStrip[i] + index_offset; - } - } - else - { - for (U32 i = 0; i < (U32) num_indices; i++) - { - *indicesp++ = vf.mIndices[i] + index_offset; - } + *indicesp++ = vf.mIndices[i] + index_offset; } } @@ -1214,28 +1204,41 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, bool bake_sunlight = !getTextureEntry()->getFullbright() && !mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_NORMAL); + //VECTORIZE THIS for (S32 i = 0; i < num_vertices; i++) { + LLVector3 vf_binormal; + if (vf.mBinormals) + { + vf_binormal.set(vf.mBinormals+i*4); + } + + LLVector3 vf_normal; + vf_normal.set(vf.mNormals+i*4); + + LLVector3 vf_position; + vf_position.set(vf.mPositions+i*4); + if (rebuild_tcoord) { - LLVector2 tc = vf.mVertices[i].mTexCoord; + LLVector2 tc(vf.mTexCoords+i*2); if (texgen != LLTextureEntry::TEX_GEN_DEFAULT) { - LLVector3 vec = vf.mVertices[i].mPosition; + LLVector3 vec = vf_position; vec.scaleVec(scale); switch (texgen) { case LLTextureEntry::TEX_GEN_PLANAR: - planarProjection(tc, vf.mVertices[i].mNormal, vf.mCenter, vec); + planarProjection(tc, vf_normal, vf.mCenter, vec); break; case LLTextureEntry::TEX_GEN_SPHERICAL: - sphericalProjection(tc, vf.mVertices[i].mNormal, vf.mCenter, vec); + sphericalProjection(tc, vf_normal, vf.mCenter, vec); break; case LLTextureEntry::TEX_GEN_CYLINDRICAL: - cylindricalProjection(tc, vf.mVertices[i].mNormal, vf.mCenter, vec); + cylindricalProjection(tc, vf_normal, vf.mCenter, vec); break; default: break; @@ -1345,10 +1348,10 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, if (bump_code && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_TEXCOORD1)) { - LLVector3 tangent = vf.mVertices[i].mBinormal % vf.mVertices[i].mNormal; + LLVector3 tangent = vf_binormal % vf_normal; LLMatrix3 tangent_to_object; - tangent_to_object.setRows(tangent, vf.mVertices[i].mBinormal, vf.mVertices[i].mNormal); + tangent_to_object.setRows(tangent, vf_binormal, vf_normal); LLVector3 binormal = binormal_dir * tangent_to_object; binormal = binormal * mat_normal; @@ -1366,12 +1369,12 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, if (rebuild_pos) { - *vertices++ = vf.mVertices[i].mPosition * mat_vert; + *vertices++ = vf_position * mat_vert; } if (rebuild_normal) { - LLVector3 normal = vf.mVertices[i].mNormal * mat_normal; + LLVector3 normal = vf_normal * mat_normal; normal.normVec(); *normals++ = normal; @@ -1379,21 +1382,21 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, if (rebuild_binormal) { - LLVector3 binormal = vf.mVertices[i].mBinormal * mat_normal; + LLVector3 binormal = vf_binormal * mat_normal; binormal.normVec(); *binormals++ = binormal; } if (rebuild_weights && vf.mWeights.size() > i) { - *weights++ = vf.mWeights[i]; + (*weights++) = vf.mWeights[i]; } if (rebuild_color) { if (bake_sunlight) { - LLVector3 normal = vf.mVertices[i].mNormal * mat_normal; + LLVector3 normal = vf_normal * mat_normal; normal.normVec(); F32 da = normal * gPipeline.mSunDir; diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp index 159e4b41ca..dae301ae29 100644 --- a/indra/newview/llfloaterimagepreview.cpp +++ b/indra/newview/llfloaterimagepreview.cpp @@ -852,6 +852,7 @@ S8 LLImagePreviewSculpted::getType() const void LLImagePreviewSculpted::setPreviewTarget(LLImageRaw* imagep, F32 distance) { +#if 0 //VECTORIZE THIS mCameraDistance = distance; mCameraZoom = 1.f; mCameraPitch = 0.f; @@ -892,6 +893,7 @@ void LLImagePreviewSculpted::setPreviewTarget(LLImageRaw* imagep, F32 distance) { *(index_strider++) = vf.mIndices[i]; } +#endif } @@ -901,7 +903,7 @@ void LLImagePreviewSculpted::setPreviewTarget(LLImageRaw* imagep, F32 distance) BOOL LLImagePreviewSculpted::render() { mNeedsUpdate = FALSE; - +#if 0 //VECTORIZE THIS LLGLSUIDefault def; LLGLDisable no_blend(GL_BLEND); LLGLEnable cull(GL_CULL_FACE); @@ -959,7 +961,7 @@ BOOL LLImagePreviewSculpted::render() mVertexBuffer->draw(LLRender::TRIANGLES, num_indices, 0); gGL.popMatrix(); - +#endif return TRUE; } diff --git a/indra/newview/llhudicon.cpp b/indra/newview/llhudicon.cpp index 28b0e7356a..c7ad0bde7e 100644 --- a/indra/newview/llhudicon.cpp +++ b/indra/newview/llhudicon.cpp @@ -271,6 +271,7 @@ BOOL LLHUDIcon::lineSegmentIntersect(const LLVector3& start, const LLVector3& en LLVector3 upper_left = icon_position - (x_scale * 0.5f) + y_scale; LLVector3 upper_right = icon_position + (x_scale * 0.5f) + y_scale; +#if 0 //VECTORIZE THIS F32 t = 0.f; LLVector3 dir = end-start; @@ -284,6 +285,7 @@ BOOL LLHUDIcon::lineSegmentIntersect(const LLVector3& start, const LLVector3& en } return TRUE; } +#endif return FALSE; } diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp index 9ed5d13831..64c01d0937 100644 --- a/indra/newview/llhudtext.cpp +++ b/indra/newview/llhudtext.cpp @@ -206,6 +206,8 @@ BOOL LLHUDText::lineSegmentIntersect(const LLVector3& start, const LLVector3& en gGL.end(); } +#if 0 //VECTORIZE THIS + LLVector3 dir = end-start; F32 t = 0.f; @@ -218,6 +220,9 @@ BOOL LLHUDText::lineSegmentIntersect(const LLVector3& start, const LLVector3& en return TRUE; } } + +#endif + } return FALSE; diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp index aa82c216d9..7eca276358 100644 --- a/indra/newview/llviewercamera.cpp +++ b/indra/newview/llviewercamera.cpp @@ -788,13 +788,14 @@ BOOL LLViewerCamera::areVertsVisible(LLViewerObject* volumep, BOOL all_verts) LLMatrix4 render_mat(vo_volume->getRenderRotation(), LLVector4(vo_volume->getRenderPosition())); num_faces = volume->getNumVolumeFaces(); + //VECTORIZE THIS for (i = 0; i < num_faces; i++) { const LLVolumeFace& face = volume->getVolumeFace(i); - for (U32 v = 0; v < face.mVertices.size(); v++) + for (U32 v = 0; v < face.mNumVertices; v++) { - LLVector4 vec = LLVector4(face.mVertices[v].mPosition) * mat; + LLVector4 vec = LLVector4(face.mPositions+v*4) * mat; if (drawablep->isActive()) { diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp index a82afbeb76..edb97eef24 100644 --- a/indra/newview/llvograss.cpp +++ b/indra/newview/llvograss.cpp @@ -640,6 +640,7 @@ BOOL LLVOGrass::lineSegmentIntersect(const LLVector3& start, const LLVector3& en position.mV[2] += blade_height; v[3] = v1 = position + mRegionp->getOriginAgent(); +#if 0 //VECTORIZE THIS F32 a,b,t; @@ -703,6 +704,7 @@ BOOL LLVOGrass::lineSegmentIntersect(const LLVector3& start, const LLVector3& en } } } +#endif } return ret; diff --git a/indra/newview/llvotextbubble.cpp b/indra/newview/llvotextbubble.cpp index 428ef20006..339da3c0bf 100644 --- a/indra/newview/llvotextbubble.cpp +++ b/indra/newview/llvotextbubble.cpp @@ -45,6 +45,7 @@ #include "llviewertexturelist.h" #include "llvolume.h" #include "pipeline.h" +#include "llvector4a.h" #include "llviewerregion.h" LLVOTextBubble::LLVOTextBubble(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp) @@ -217,7 +218,7 @@ void LLVOTextBubble::updateFaceSize(S32 idx) else { const LLVolumeFace& vol_face = getVolume()->getVolumeFace(idx); - face->setSize(vol_face.mVertices.size(), vol_face.mIndices.size()); + face->setSize(vol_face.mNumVertices, vol_face.mNumIndices); } } @@ -235,19 +236,37 @@ void LLVOTextBubble::getGeometry(S32 idx, const LLVolumeFace& face = getVolume()->getVolumeFace(idx); - LLVector3 pos = getPositionAgent(); + LLVector4a pos; + pos.load3(getPositionAgent().mV); + + LLVector4a scale; + scale.load3(getScale().mV); + LLColor4U color = LLColor4U(getTE(idx)->getColor()); U32 offset = mDrawable->getFace(idx)->getGeomIndex(); - for (U32 i = 0; i < face.mVertices.size(); i++) + LLVector4a* dst_pos = (LLVector4a*) verticesp.get(); + LLVector4a* src_pos = (LLVector4a*) face.mPositions; + + LLVector4a* dst_norm = (LLVector4a*) normalsp.get(); + LLVector4a* src_norm = (LLVector4a*) face.mNormals; + + LLVector2* dst_tc = (LLVector2*) texcoordsp.get(); + LLVector2* src_tc = (LLVector2*) face.mTexCoords; + + LLVector4a::memcpyNonAliased16((F32*) dst_norm, (F32*) src_norm, face.mNumVertices*4); + LLVector4a::memcpyNonAliased16((F32*) dst_tc, (F32*) src_tc, face.mNumVertices*2); + + + for (U32 i = 0; i < face.mNumVertices; i++) { - *verticesp++ = face.mVertices[i].mPosition.scaledVec(getScale()) + pos; - *normalsp++ = face.mVertices[i].mNormal; - *texcoordsp++ = face.mVertices[i].mTexCoord; + LLVector4a t; + t.setMul(src_pos[i], scale); + dst_pos[i].setAdd(t, pos); *colorsp++ = color; } - for (U32 i = 0; i < face.mIndices.size(); i++) + for (U32 i = 0; i < face.mNumIndices; i++) { *indicesp++ = face.mIndices[i] + offset; } diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index cea964a100..7d80a66041 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -60,6 +60,7 @@ #include "llflexibleobject.h" #include "llsky.h" #include "lltexturefetch.h" +#include "llvector4a.h" #include "llviewercamera.h" #include "llviewertexturelist.h" #include "llviewerobjectlist.h" @@ -1601,14 +1602,8 @@ void LLVOVolume::updateFaceSize(S32 idx) else { const LLVolumeFace& vol_face = getVolume()->getVolumeFace(idx); - if (LLPipeline::sUseTriStrips) - { - facep->setSize(vol_face.mVertices.size(), vol_face.mTriStrip.size()); - } - else - { - facep->setSize(vol_face.mVertices.size(), vol_face.mIndices.size()); - } + facep->setSize(vol_face.mNumVertices, vol_face.mNumIndices); + } } @@ -1863,21 +1858,25 @@ bool LLVOVolume::hasMedia() const LLVector3 LLVOVolume::getApproximateFaceNormal(U8 face_id) { LLVolume* volume = getVolume(); - LLVector3 result; + LLVector4a result; + result.clear(); + + LLVector3 ret; if (volume && face_id < volume->getNumVolumeFaces()) { const LLVolumeFace& face = volume->getVolumeFace(face_id); - for (S32 i = 0; i < (S32)face.mVertices.size(); ++i) + for (S32 i = 0; i < (S32)face.mNumVertices; ++i) { - result += face.mVertices[i].mNormal; + result.add(*((LLVector4a*) face.mNormals+i*4)); } - result = volumeDirectionToAgent(result); - result.normVec(); + LLVector3 ret((F32*) &result.mQ); + ret = volumeDirectionToAgent(ret); + ret.normVec(); } - return result; + return ret; } void LLVOVolume::requestMediaDataUpdate(bool isNew) @@ -3032,7 +3031,7 @@ F32 LLVOVolume::getBinRadius() for (S32 i = 0; i < volume->getNumVolumeFaces(); ++i) { const LLVolumeFace& face = volume->getVolumeFace(i); - vert_count += face.mVertices.size(); + vert_count += face.mNumVertices; } scale = 1.f/llmax(vert_count/1024.f, 1.f); -- cgit v1.3 From d7cab99ba74b214c557d9b5e02a7800b6a25c109 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Sat, 22 May 2010 12:37:53 -0500 Subject: Fix for a couple dumb mistakes. --- indra/llmath/llvolume.cpp | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 01fe2be371..88969af4bd 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -5206,7 +5206,7 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build) if (!partial_build) { - resizeIndices(grid_size*6); + resizeIndices(grid_size*grid_size*6); U16* out = mIndices; @@ -5689,12 +5689,21 @@ void LLVolumeFace::resizeVertices(S32 num_verts) mBinormals = NULL; - mPositions = (F32*) _mm_malloc(num_verts*16, 16); - mNormals = (F32*) _mm_malloc(num_verts*16, 16); + if (num_verts) + { + mPositions = (F32*) _mm_malloc(num_verts*16, 16); + mNormals = (F32*) _mm_malloc(num_verts*16, 16); - //pad texture coordinate block end to allow for QWORD reads - S32 size = ((num_verts*8) + 0xF) & ~0xF; - mTexCoords = (F32*) _mm_malloc(size, 16); + //pad texture coordinate block end to allow for QWORD reads + S32 size = ((num_verts*8) + 0xF) & ~0xF; + mTexCoords = (F32*) _mm_malloc(size, 16); + } + else + { + mPositions = NULL; + mNormals = NULL; + mTexCoords = NULL; + } mNumVertices = num_verts; } @@ -5710,10 +5719,17 @@ void LLVolumeFace::resizeIndices(S32 num_indices) { _mm_free(mIndices); - //pad index block end to allow for QWORD reads - S32 size = ((num_indices*2) + 0xF) & ~0xF; - - mIndices = (U16*) _mm_malloc(size,16); + if (num_indices) + { + //pad index block end to allow for QWORD reads + S32 size = ((num_indices*2) + 0xF) & ~0xF; + + mIndices = (U16*) _mm_malloc(size,16); + } + else + { + mIndices = NULL; + } mNumIndices = num_indices; } @@ -5954,7 +5970,7 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) LLVector3& face_max = mExtents[1]; mCenter.clearVec(); - face_min = face_max = LLVector3((F32*) &(pos[i].mQ)); + face_min = face_max = LLVector3((F32*) &(pos[0].mQ)); for (U32 i = 1; i < mNumVertices; ++i) { -- cgit v1.3 From 8c32e3bf29337e330a313d0e4865ebd03ad9ca50 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Mon, 24 May 2010 14:03:10 -0500 Subject: Fix for bad indexes on cube faces. Extra validation on vertex buffers. --- indra/llmath/llvolume.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 88969af4bd..31544016db 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -4173,7 +4173,7 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, for (S32 i = start_face; i <= end_face; i++) { - const LLVolumeFace &face = getVolumeFace((U32)i); + LLVolumeFace &face = mVolumeFaces[i]; LLVector3 box_center = (face.mExtents[0] + face.mExtents[1]) / 2.f; LLVector3 box_size = face.mExtents[1] - face.mExtents[0]; @@ -4235,6 +4235,10 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, if (bi_normal != NULL) { + if (!face.mBinormals) + { + face.createBinormals(); + } LLVector4* binormal = (LLVector4*) face.mBinormals; if (binormal) { @@ -5174,7 +5178,6 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build) LLVector4a* binorm = (LLVector4a*) mBinormals; LLVector2* tc = (LLVector2*) mTexCoords; - S32 vtop = mNumVertices; for(int gx = 0;gx=0;i--) { - *out++ = (vtop+(gy*(grid_size+1))+gx+idxs[i]); + *out++ = ((gy*(grid_size+1))+gx+idxs[i]); } } else { for(S32 i=0;i<6;i++) { - *out++ = (vtop+(gy*(grid_size+1))+gx+idxs[i]); + *out++ = ((gy*(grid_size+1))+gx+idxs[i]); } } } -- cgit v1.3 From a2eb86b00927439afcf27219e38e58eba421294f Mon Sep 17 00:00:00 2001 From: "Matthew Breindel (Falcon)" Date: Mon, 24 May 2010 13:37:59 -0700 Subject: Ack. Fixed a bunch of stupid type mistakes in llvector4a. --- indra/llmath/CMakeLists.txt | 2 ++ indra/llmath/llvolume.cpp | 12 ++++++------ indra/newview/llpanelobject.cpp | 17 +++++++++++++++++ indra/newview/llviewerregion.cpp | 3 ++- 4 files changed, 27 insertions(+), 7 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt index e93fe90650..367486eee7 100644 --- a/indra/llmath/CMakeLists.txt +++ b/indra/llmath/CMakeLists.txt @@ -62,6 +62,8 @@ set(llmath_HEADER_FILES llv4matrix3.h llv4matrix4.h llv4vector3.h + llvector4a.h + llmatrix4a.h llvolume.h llvolumemgr.h llsdutil_math.h diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 88969af4bd..d7d36d901d 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -4126,14 +4126,14 @@ void LLVolume::generateSilhouetteVertices(std::vector &vertices, norm_mat.rotate(n[v1], t); - t.normalize3Fast(); + t.normalize3fast(); normals.push_back(LLVector3(t[0], t[1], t[2])); mat.affineTransform(v[v2], t); vertices.push_back(LLVector3(t[0], t[1], t[2])); norm_mat.rotate(n[v2], t); - t.normalize3Fast(); + t.normalize3fast(); normals.push_back(LLVector3(t[0], t[1], t[2])); segments.push_back(vertices.size()); @@ -5349,7 +5349,7 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) mCenter, cuv, mesh[0+offset].mPos, tc[0], mesh[1+offset].mPos, tc[1]); - binormal.normalize3Fast(); + binormal.normalize3fast(); LLVector4a normal; LLVector4a d0, d1; @@ -5369,7 +5369,7 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) normal.setCross3(d1, d0); } - normal.normalize3Fast(); + normal.normalize3fast(); VertexData vd; vd.mPosition = mCenter; @@ -5675,7 +5675,7 @@ void LLVolumeFace::createBinormals() //normalize binormals for (U32 i = 0; i < mNumVertices; i++) { - binorm[i].normalize3Fast(); + binorm[i].normalize3fast(); } } } @@ -5803,7 +5803,7 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat { mat.affineTransform(src_pos[i], dst_pos[i]); norm_mat.rotate(src_norm[i], dst_norm[i]); - dst_norm[i].normalize3Fast(); + dst_norm[i].normalize3fast(); dst_tc[i] = src_tc[i]; diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index 669ff3ffd6..77f3984ecb 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -1241,6 +1241,16 @@ void LLPanelObject::sendIsPhantom() } } +#include "llsdutil.h" +class CostResponder : public LLHTTPClient::Responder +{ +public: + CostResponder(U32 id) { mID = id; } + virtual void result(const LLSD& content) { llinfos << ll_pretty_print_sd(content) << llendl; } + + U32 mID; +}; + void LLPanelObject::sendPhysicsShapeType() { U8 value = (U8)mComboPhysicsShapeType->getCurrentIndex(); @@ -1255,6 +1265,13 @@ void LLPanelObject::sendPhysicsShapeType() { llinfos << "update physics shape type not changed" << llendl; } + + std::string url = gAgent.getRegion()->getCapability("GetObjectCost"); + LLSD body = LLSD::emptyArray(); + + body.append(LLSelectMgr::getInstance()->getSelection()->getFirstObject()->getID()); + + LLHTTPClient::post( url, body, new CostResponder(body[0].asInteger()) ); } void LLPanelObject::sendCastShadows() diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 4fdabd7ff0..268e14674e 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1497,6 +1497,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url) capabilityNames.append("FetchLibDescendents"); capabilityNames.append("GetTexture"); capabilityNames.append("GetMesh"); + capabilityNames.append("GetObjectCost"); capabilityNames.append("GroupProposalBallot"); capabilityNames.append("HomeLocation"); capabilityNames.append("LandResources"); @@ -1513,13 +1514,13 @@ void LLViewerRegion::setSeedCapability(const std::string& url) capabilityNames.append("ProvisionVoiceAccountRequest"); capabilityNames.append("RemoteParcelRequest"); capabilityNames.append("RequestTextureDownload"); - capabilityNames.append("SimulatorFeatures"); capabilityNames.append("SearchStatRequest"); capabilityNames.append("SearchStatTracking"); capabilityNames.append("SendPostcard"); capabilityNames.append("SendUserReport"); capabilityNames.append("SendUserReportWithScreenshot"); capabilityNames.append("ServerReleaseNotes"); + capabilityNames.append("SimulatorFeatures"); capabilityNames.append("StartGroupProposal"); capabilityNames.append("TextureStats"); capabilityNames.append("UntrustedSimulatorMessage"); -- cgit v1.3 From c0b654dd4bee466a2ccbf050e532fb4a05acc549 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Mon, 24 May 2010 17:33:41 -0500 Subject: Fix for bad feeding of vectorized raycast. --- indra/llmath/llvolume.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 2ff1463b7c..f05e6eb9d9 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -4187,6 +4187,9 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, LLVector4a starta, dira; + starta.load3(start.mV); + dira.load3(dir.mV); + LLVector4a* p = (LLVector4a*) face.mPositions; for (U32 tri = 0; tri < face.mNumIndices/3; tri++) @@ -4235,17 +4238,10 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, if (bi_normal != NULL) { - if (!face.mBinormals) - { - face.createBinormals(); - } LLVector4* binormal = (LLVector4*) face.mBinormals; - if (binormal) - { - *bi_normal = ((1.f - a - b) * LLVector3(binormal[index1]) + + *bi_normal = ((1.f - a - b) * LLVector3(binormal[index1]) + a * LLVector3(binormal[index2]) + b * LLVector3(binormal[index3])); - } } } -- cgit v1.3 From e6fe3b1f1aa888e4594c89154ef895b3cf5498e9 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Tue, 25 May 2010 03:55:01 -0500 Subject: Better vectorization of various things. Turn off debug gl by default. --- indra/llcommon/lldefs.h | 8 + indra/llmath/llvolume.cpp | 383 ++++++++++++++++++++------------ indra/llmath/llvolume.h | 110 +++++++-- indra/newview/app_settings/settings.xml | 4 +- indra/newview/llface.cpp | 8 +- indra/newview/llfloaterimagepreview.cpp | 20 +- indra/newview/llhudicon.cpp | 43 +++- indra/newview/llhudtext.cpp | 5 - indra/newview/llviewercamera.cpp | 16 +- indra/newview/llvograss.cpp | 7 +- indra/newview/llvovolume.cpp | 2 +- 11 files changed, 404 insertions(+), 202 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llcommon/lldefs.h b/indra/llcommon/lldefs.h index f3b5ca361f..10e6cb34bf 100644 --- a/indra/llcommon/lldefs.h +++ b/indra/llcommon/lldefs.h @@ -242,5 +242,13 @@ inline LLDATATYPE llclampb(const LLDATATYPE& a) return llmin(llmax(a, (LLDATATYPE)0), (LLDATATYPE)255); } +template +inline void llswap(LLDATATYPE& lhs, LLDATATYPE& rhs) +{ + LLDATATYPE tmp = lhs; + lhs = rhs; + rhs = tmp; +} + #endif // LL_LLDEFS_H diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index f05e6eb9d9..d8fbc081fa 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -237,6 +237,21 @@ BOOL LLTriangleRayIntersect(const LLVector4a& vert0, const LLVector4a& vert1, co return TRUE; } +//helper for non-aligned vectors +BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, const LLVector3& vert2, const LLVector3& orig, const LLVector3& dir, + F32* intersection_a, F32* intersection_b, F32* intersection_t, BOOL two_sided) +{ + LLVector4a vert0a, vert1a, vert2a, origa, dira; + vert0a.load3(vert0.mV); + vert1a.load3(vert1.mV); + vert2a.load3(vert2.mV); + origa.load3(orig.mV); + dira.load3(dir.mV); + + return LLTriangleRayIntersect(vert0a, vert1a, vert2a, origa, dira, + intersection_a, intersection_b, intersection_t, two_sided); +} + //------------------------------------------------------------------- // statics @@ -1889,15 +1904,15 @@ bool LLVolumeFace::VertexData::operator==(const LLVolumeFace::VertexData& rhs)co bool LLVolumeFace::VertexData::compareNormal(const LLVolumeFace::VertexData& rhs, F32 angle_cutoff) const { bool retval = false; - if (rhs.mPosition == mPosition && rhs.mTexCoord == mTexCoord) + if (rhs.mData[POSITION].equal3(mData[POSITION]) && rhs.mTexCoord == mTexCoord) { if (angle_cutoff > 1.f) { - retval = (mNormal == rhs.mNormal); + retval = (mData[NORMAL].equal3(rhs.mData[NORMAL])); } else { - F32 cur_angle = rhs.mNormal*mNormal; + F32 cur_angle = rhs.mData[NORMAL].dot3(mData[NORMAL]); retval = cur_angle > angle_cutoff; } } @@ -2081,9 +2096,9 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) min = max = LLVector3(0,0,0); - F32* pos_out = face.mPositions; - F32* norm_out = face.mNormals; - F32* tc_out = face.mTexCoords; + F32* pos_out = (F32*) face.mPositions; + F32* norm_out = (F32*) face.mNormals; + F32* tc_out = (F32*) face.mTexCoords; for (U32 j = 0; j < num_verts; ++j) { @@ -2188,13 +2203,15 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) void tetrahedron_set_normal(LLVolumeFace::VertexData* cv) { - LLVector3 nrm = (cv[1].mPosition-cv[0].mPosition)%(cv[2].mPosition-cv[0].mPosition); - - nrm.normVec(); - - cv[0].mNormal = nrm; - cv[1].mNormal = nrm; - cv[2].mNormal = nrm; + LLVector4a v0; + v0.setSub(cv[1].getPosition(), cv[0].getNormal()); + LLVector4a v1; + v1.setSub(cv[2].getNormal(), cv[0].getPosition()); + + cv[0].getNormal().setCross3(v0,v1); + cv[0].getNormal().normalize3fast(); + cv[1].setNormal(cv[0].getNormal()); + cv[2].setNormal(cv[1].getNormal()); } BOOL LLVolume::isTetrahedron() @@ -2209,12 +2226,12 @@ void LLVolume::makeTetrahedron() LLVolumeFace face; F32 x = 0.25f; - LLVector3 p[] = + LLVector4a p[] = { //unit tetrahedron corners - LLVector3(x,x,x), - LLVector3(-x,-x,x), - LLVector3(-x,x,-x), - LLVector3(x,-x,-x) + LLVector4a(x,x,x), + LLVector4a(-x,-x,x), + LLVector4a(-x,x,-x), + LLVector4a(x,-x,-x) }; face.mExtents[0].setVec(-x,-x,-x); @@ -2229,9 +2246,9 @@ void LLVolume::makeTetrahedron() //side 1 - cv[0].mPosition = p[1]; - cv[1].mPosition = p[0]; - cv[2].mPosition = p[2]; + cv[0].setPosition(p[1]); + cv[1].setPosition(p[0]); + cv[2].setPosition(p[2]); tetrahedron_set_normal(cv); @@ -2242,14 +2259,14 @@ void LLVolume::makeTetrahedron() LLVector4a* n = (LLVector4a*) face.mNormals; LLVector2* tc = (LLVector2*) face.mTexCoords; - v[0].load3(cv[0].mPosition.mV); - v[1].load3(cv[1].mPosition.mV); - v[2].load3(cv[2].mPosition.mV); + v[0] = cv[0].getPosition(); + v[1] = cv[1].getPosition(); + v[2] = cv[2].getPosition(); v += 3; - n[0].load3(cv[0].mNormal.mV); - n[1].load3(cv[1].mNormal.mV); - n[2].load3(cv[2].mNormal.mV); + n[0] = cv[0].getNormal(); + n[1] = cv[1].getNormal(); + n[2] = cv[2].getNormal(); n += 3; tc[0] = cv[0].mTexCoord; @@ -2259,20 +2276,20 @@ void LLVolume::makeTetrahedron() //side 2 - cv[0].mPosition = p[3]; - cv[1].mPosition = p[0]; - cv[2].mPosition = p[1]; + cv[0].setPosition(p[3]); + cv[1].setPosition(p[0]); + cv[2].setPosition(p[1]); tetrahedron_set_normal(cv); - v[0].load3(cv[0].mPosition.mV); - v[1].load3(cv[1].mPosition.mV); - v[2].load3(cv[2].mPosition.mV); + v[0] = cv[0].getPosition(); + v[1] = cv[1].getPosition(); + v[2] = cv[2].getPosition(); v += 3; - n[0].load3(cv[0].mNormal.mV); - n[1].load3(cv[1].mNormal.mV); - n[2].load3(cv[2].mNormal.mV); + n[0] = cv[0].getNormal(); + n[1] = cv[1].getNormal(); + n[2] = cv[2].getNormal(); n += 3; tc[0] = cv[0].mTexCoord; @@ -2281,20 +2298,20 @@ void LLVolume::makeTetrahedron() tc += 3; //side 3 - cv[0].mPosition = p[3]; - cv[1].mPosition = p[1]; - cv[2].mPosition = p[2]; + cv[0].setPosition(p[3]); + cv[1].setPosition(p[1]); + cv[2].setPosition(p[2]); tetrahedron_set_normal(cv); - v[0].load3(cv[0].mPosition.mV); - v[1].load3(cv[1].mPosition.mV); - v[2].load3(cv[2].mPosition.mV); + v[0] = cv[0].getPosition(); + v[1] = cv[1].getPosition(); + v[2] = cv[2].getPosition(); v += 3; - n[0].load3(cv[0].mNormal.mV); - n[1].load3(cv[1].mNormal.mV); - n[2].load3(cv[2].mNormal.mV); + n[0] = cv[0].getNormal(); + n[1] = cv[1].getNormal(); + n[2] = cv[2].getNormal(); n += 3; tc[0] = cv[0].mTexCoord; @@ -2303,20 +2320,20 @@ void LLVolume::makeTetrahedron() tc += 3; //side 4 - cv[0].mPosition = p[2]; - cv[1].mPosition = p[0]; - cv[2].mPosition = p[3]; + cv[0].setPosition(p[2]); + cv[1].setPosition(p[0]); + cv[2].setPosition(p[3]); tetrahedron_set_normal(cv); - v[0].load3(cv[0].mPosition.mV); - v[1].load3(cv[1].mPosition.mV); - v[2].load3(cv[2].mPosition.mV); + v[0] = cv[0].getPosition(); + v[1] = cv[1].getPosition(); + v[2] = cv[2].getPosition(); v += 3; - n[0].load3(cv[0].mNormal.mV); - n[1].load3(cv[1].mNormal.mV); - n[2].load3(cv[2].mNormal.mV); + n[0] = cv[0].getNormal(); + n[1] = cv[1].getNormal(); + n[2] = cv[2].getNormal(); n += 3; tc[0] = cv[0].mTexCoord; @@ -3974,9 +3991,9 @@ void LLVolume::generateSilhouetteVertices(std::vector &vertices, S32 v3 = face.mIndices[j*3+2]; //get current face center - LLVector3 cCenter = (face.mVertices[v1].mPosition + - face.mVertices[v2].mPosition + - face.mVertices[v3].mPosition) / 3.0f; + LLVector3 cCenter = (face.mVertices[v1].getPosition() + + face.mVertices[v2].getPosition() + + face.mVertices[v3].getPosition()) / 3.0f; //for each edge for (S32 k = 0; k < 3; k++) { @@ -3994,9 +4011,9 @@ void LLVolume::generateSilhouetteVertices(std::vector &vertices, v3 = face.mIndices[nIndex*3+2]; //get neighbor face center - LLVector3 nCenter = (face.mVertices[v1].mPosition + - face.mVertices[v2].mPosition + - face.mVertices[v3].mPosition) / 3.0f; + LLVector3 nCenter = (face.mVertices[v1].getPosition() + + face.mVertices[v2].getPosition() + + face.mVertices[v3].getPosition()) / 3.0f; //draw line vertices.push_back(cCenter); @@ -4020,14 +4037,14 @@ void LLVolume::generateSilhouetteVertices(std::vector &vertices, //for each vertex for (U32 j = 0; j < face.mNumVertices; j++) { - vertices.push_back(face.mVertices[j].mPosition); - vertices.push_back(face.mVertices[j].mPosition + face.mVertices[j].mNormal*0.1f); + vertices.push_back(face.mVertices[j].getPosition()); + vertices.push_back(face.mVertices[j].getPosition() + face.mVertices[j].getNormal()*0.1f); normals.push_back(LLVector3(0,0,1)); normals.push_back(LLVector3(0,0,1)); segments.push_back(vertices.size()); #if DEBUG_SILHOUETTE_BINORMALS - vertices.push_back(face.mVertices[j].mPosition); - vertices.push_back(face.mVertices[j].mPosition + face.mVertices[j].mBinormal*0.1f); + vertices.push_back(face.mVertices[j].getPosition()); + vertices.push_back(face.mVertices[j].getPosition() + face.mVertices[j].mBinormal*0.1f); normals.push_back(LLVector3(0,0,1)); normals.push_back(LLVector3(0,0,1)); segments.push_back(vertices.size()); @@ -5038,9 +5055,15 @@ BOOL LLVolumeFace::create(LLVolume* volume, BOOL partial_build) } } +void LLVolumeFace::getVertexData(U16 index, LLVolumeFace::VertexData& cv) +{ + cv.setPosition(mPositions[index]); + cv.setNormal(mNormals[index]); + cv.mTexCoord = mTexCoords[index]; +} + void LLVolumeFace::optimize(F32 angle_cutoff) { -#if 0 //disabling until a vectorized version is available LLVolumeFace new_face; VertexMapData::PointMap point_map; @@ -5050,10 +5073,11 @@ void LLVolumeFace::optimize(F32 angle_cutoff) { U16 index = mIndices[i]; - LLVolumeFace::VertexData cv = mVertices[index]; - + LLVolumeFace::VertexData cv; + getVertexData(index, cv); + BOOL found = FALSE; - VertexMapData::PointMap::iterator point_iter = point_map.find(cv.mPosition); + VertexMapData::PointMap::iterator point_iter = point_map.find(cv.getPosition()); if (point_iter != point_map.end()) { //duplicate point might exist for (U32 j = 0; j < point_iter->second.size(); ++j) @@ -5062,7 +5086,7 @@ void LLVolumeFace::optimize(F32 angle_cutoff) if (tv.compareNormal(cv, angle_cutoff)) { found = TRUE; - new_face.mIndices.push_back((point_iter->second)[j].mIndex); + new_face.pushIndex((point_iter->second)[j].mIndex); break; } } @@ -5070,14 +5094,14 @@ void LLVolumeFace::optimize(F32 angle_cutoff) if (!found) { - new_face.mVertices.push_back(cv); + new_face.pushVertex(cv); U16 index = (U16) new_face.mNumVertices-1; - new_face.mIndices.push_back(index); + new_face.pushIndex(index); VertexMapData d; - d.mPosition = cv.mPosition; + d.setPosition(cv.getPosition()); d.mTexCoord = cv.mTexCoord; - d.mNormal = cv.mNormal; + d.setNormal(cv.getNormal()); d.mIndex = index; if (point_iter != point_map.end()) { @@ -5085,14 +5109,23 @@ void LLVolumeFace::optimize(F32 angle_cutoff) } else { - point_map[d.mPosition].push_back(d); + point_map[d.getPosition()].push_back(d); } } } - mVertices = new_face.mVertices; - mIndices = new_face.mIndices; -#endif + swapData(new_face); +} + +void LLVolumeFace::swapData(LLVolumeFace& rhs) +{ + llswap(rhs.mPositions, mPositions); + llswap(rhs.mNormals, mNormals); + llswap(rhs.mBinormals, mBinormals); + llswap(rhs.mTexCoords, mTexCoords); + llswap(rhs.mIndices,mIndices); + llswap(rhs.mNumVertices, mNumVertices); + llswap(rhs.mNumIndices, mNumIndices); } void LerpPlanarVertex(LLVolumeFace::VertexData& v0, @@ -5102,10 +5135,21 @@ void LerpPlanarVertex(LLVolumeFace::VertexData& v0, F32 coef01, F32 coef02) { - vout.mPosition = v0.mPosition + ((v1.mPosition-v0.mPosition)*coef01)+((v2.mPosition-v0.mPosition)*coef02); + + LLVector4a lhs; + lhs.setSub(v1.getPosition(), v0.getPosition()); + lhs.mul(coef01); + LLVector4a rhs; + rhs.setSub(v2.getPosition(), v0.getPosition()); + rhs.mul(coef02); + + rhs.add(lhs); + rhs.add(v0.getPosition()); + + vout.setPosition(rhs); + vout.mTexCoord = v0.mTexCoord + ((v1.mTexCoord-v0.mTexCoord)*coef01)+((v2.mTexCoord-v0.mTexCoord)*coef02); - vout.mNormal = v0.mNormal; - vout.mBinormal = v0.mBinormal; + vout.setNormal(v0.getNormal()); } BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build) @@ -5137,16 +5181,22 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build) VertexData corners[4]; VertexData baseVert; for(int t = 0; t < 4; t++){ - corners[t].mPosition = mesh[offset + (grid_size*t)].mPos; + corners[t].getPosition().load3( mesh[offset + (grid_size*t)].mPos.mV); corners[t].mTexCoord.mV[0] = profile[grid_size*t].mV[0]+0.5f; corners[t].mTexCoord.mV[1] = 0.5f - profile[grid_size*t].mV[1]; } - baseVert.mNormal = - ((corners[1].mPosition-corners[0].mPosition) % - (corners[2].mPosition-corners[1].mPosition)); - baseVert.mNormal.normVec(); + + { + LLVector4a lhs; + lhs.setSub(corners[1].getPosition(), corners[0].getPosition()); + LLVector4a rhs; + rhs.setSub(corners[2].getPosition(), corners[1].getPosition()); + baseVert.getNormal().setCross3(lhs, rhs); + baseVert.getNormal().normalize3fast(); + } + if(!(mTypeMask & TOP_MASK)){ - baseVert.mNormal *= -1.0f; + baseVert.getNormal().mul(-1.0f); }else{ //Swap the UVs on the U(X) axis for top face LLVector2 swap; @@ -5161,9 +5211,9 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build) LLVector4a binormal; calc_binormal_from_triangle( binormal, - corners[0].mPosition, corners[0].mTexCoord, - corners[1].mPosition, corners[1].mTexCoord, - corners[2].mPosition, corners[2].mTexCoord); + corners[0].getPosition(), corners[0].mTexCoord, + corners[1].getPosition(), corners[1].mTexCoord, + corners[2].getPosition(), corners[2].mTexCoord); S32 size = (grid_size+1)*(grid_size+1); resizeVertices(size); @@ -5185,18 +5235,18 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build) (F32)gx/(F32)grid_size, (F32)gy/(F32)grid_size); - (*pos++).load3(newVert.mPosition.mV); - (*norm++).load3(baseVert.mNormal.mV); - (*tc++) = newVert.mTexCoord; - (*binorm++).load4a((F32*) &binormal.mQ); + *pos++ = newVert.getPosition(); + *norm++ = baseVert.getNormal(); + *tc++ = newVert.mTexCoord; + *binorm++ = binormal; if (gx == 0 && gy == 0) { - min = max = newVert.mPosition; + min = max = LLVector3(newVert.getPosition().getF32()); } else { - update_min_max(min,max,newVert.mPosition); + update_min_max(min,max,newVert.getPosition().getF32()); } } } @@ -5343,18 +5393,19 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) mCenter = (min+max)*0.5f; cuv = (min_uv + max_uv)*0.5f; + LLVector4a center; + center.load3(mCenter.mV); + LLVector4a binormal; calc_binormal_from_triangle(binormal, - mCenter, cuv, - mesh[0+offset].mPos, tc[0], - mesh[1+offset].mPos, tc[1]); + center, cuv, + pos[0], tc[0], + pos[1], tc[1]); binormal.normalize3fast(); LLVector4a normal; LLVector4a d0, d1; - LLVector4a center; - - center.load3(mCenter.mV); + d0.setSub(center, pos[0]); d1.setSub(center, pos[1]); @@ -5371,7 +5422,7 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) normal.normalize3fast(); VertexData vd; - vd.mPosition = mCenter; + vd.getPosition().load3(mCenter.mV); vd.mTexCoord = cuv; if (!(mTypeMask & HOLLOW_MASK) && !(mTypeMask & OPEN_MASK)) @@ -5634,10 +5685,7 @@ void LLVolumeFace::createBinormals() allocateBinormals(mNumVertices); //generate binormals - LLStrider pos; - pos = (LLVector3*) mPositions; - pos.setStride(16); - + LLVector4a* pos = mPositions; LLVector2* tc = (LLVector2*) mTexCoords; LLVector4a* binorm = (LLVector4a*) mBinormals; @@ -5690,12 +5738,12 @@ void LLVolumeFace::resizeVertices(S32 num_verts) if (num_verts) { - mPositions = (F32*) _mm_malloc(num_verts*16, 16); - mNormals = (F32*) _mm_malloc(num_verts*16, 16); + mPositions = (LLVector4a*) _mm_malloc(num_verts*16, 16); + mNormals = (LLVector4a*) _mm_malloc(num_verts*16, 16); //pad texture coordinate block end to allow for QWORD reads S32 size = ((num_verts*8) + 0xF) & ~0xF; - mTexCoords = (F32*) _mm_malloc(size, 16); + mTexCoords = (LLVector2*) _mm_malloc(size, 16); } else { @@ -5707,10 +5755,61 @@ void LLVolumeFace::resizeVertices(S32 num_verts) mNumVertices = num_verts; } +void LLVolumeFace::pushVertex(const LLVolumeFace::VertexData& cv) +{ + pushVertex(cv.getPosition(), cv.getNormal(), cv.mTexCoord); +} + +void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, const LLVector2& tc) +{ + S32 new_verts = mNumVertices+1; + S32 new_size = new_verts*16; + + //positions + LLVector4a* dst = (LLVector4a*) _mm_malloc(new_size, 16); + if (mPositions) + { + LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mPositions, new_size/4); + _mm_free(mPositions); + } + mPositions = dst; + + //normals + dst = (LLVector4a*) _mm_malloc(new_size, 16); + if (mNormals) + { + LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mNormals, new_size/4); + _mm_free(mNormals); + } + mNormals = dst; + + //tex coords + new_size = ((new_verts*8)+0xF) & ~0xF; + + { + LLVector2* dst = (LLVector2*) _mm_malloc(new_size, 16); + if (mTexCoords) + { + LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mTexCoords, new_size/4); + _mm_free(mTexCoords); + } + } + + //just clear binormals + _mm_free(mBinormals); + mBinormals = NULL; + + mPositions[mNumVertices] = pos; + mNormals[mNumVertices] = norm; + mTexCoords[mNumVertices] = tc; + + mNumVertices++; +} + void LLVolumeFace::allocateBinormals(S32 num_verts) { _mm_free(mBinormals); - mBinormals = (F32*) _mm_malloc(num_verts*16, 16); + mBinormals = (LLVector4a*) _mm_malloc(num_verts*16, 16); } @@ -5733,6 +5832,23 @@ void LLVolumeFace::resizeIndices(S32 num_indices) mNumIndices = num_indices; } +void LLVolumeFace::pushIndex(const U16& idx) +{ + S32 new_count = mNumIndices + 1; + S32 new_size = ((new_count*2)+0xF) & ~0xF; + + S32 old_size = (mNumIndices+0xF) & ~0xF; + if (new_size != old_size) + { + U16* dst = (U16*) _mm_malloc(new_size, 16); + LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mIndices, new_size/4); + _mm_free(mIndices); + mIndices = dst; + } + + mIndices[mNumIndices++] = idx; +} + void LLVolumeFace::fillFromLegacyData(std::vector& v, std::vector& idx) { resizeVertices(v.size()); @@ -5740,14 +5856,9 @@ void LLVolumeFace::fillFromLegacyData(std::vector& v, for (U32 i = 0; i < v.size(); ++i) { - for (U32 j = 0; j < 3; ++j) - { - mPositions[i*4+j] = v[i].mPosition[j]; - mNormals[i*4+j] = v[i].mNormal[j]; - } - - mTexCoords[i*2+0] = v[i].mTexCoord.mV[0]; - mTexCoords[i*2+1] = v[i].mTexCoord.mV[1]; + mPositions[i] = v[i].getPosition(); + mNormals[i] = v[i].getNormal(); + mTexCoords[i] = v[i].mTexCoord; } for (U32 i = 0; i < idx.size(); ++i) @@ -5768,13 +5879,13 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat } - F32* new_pos = (F32*) _mm_malloc(new_count*16, 16); - F32* new_norm = (F32*) _mm_malloc(new_count*16, 16); - F32* new_tc = (F32*) _mm_malloc((new_count*8+0xF) & ~0xF, 16); + LLVector4a* new_pos = (LLVector4a*) _mm_malloc(new_count*16, 16); + LLVector4a* new_norm = (LLVector4a*) _mm_malloc(new_count*16, 16); + LLVector2* new_tc = (LLVector2*) _mm_malloc((new_count*8+0xF) & ~0xF, 16); - LLVector4a::memcpyNonAliased16(new_pos, mPositions, new_count*4); - LLVector4a::memcpyNonAliased16(new_norm, mNormals, new_count*4); - LLVector4a::memcpyNonAliased16(new_tc, mTexCoords, new_count*2); + LLVector4a::memcpyNonAliased16((F32*) new_pos, (F32*) mPositions, new_count*4); + LLVector4a::memcpyNonAliased16((F32*) new_norm, (F32*) mNormals, new_count*4); + LLVector4a::memcpyNonAliased16((F32*) new_tc, (F32*) mTexCoords, new_count*2); _mm_free(mPositions); _mm_free(mNormals); @@ -6205,24 +6316,24 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) // Fills in dummy values if the triangle has degenerate texture coordinates. void calc_binormal_from_triangle(LLVector4a& binormal, - const LLVector3& pos0, + const LLVector4a& pos0, const LLVector2& tex0, - const LLVector3& pos1, + const LLVector4a& pos1, const LLVector2& tex1, - const LLVector3& pos2, + const LLVector4a& pos2, const LLVector2& tex2) { - LLVector4a rx0; rx0.set( pos0.mV[VX], tex0.mV[VX], tex0.mV[VY] ); - LLVector4a rx1; rx1.set( pos1.mV[VX], tex1.mV[VX], tex1.mV[VY] ); - LLVector4a rx2; rx2.set( pos2.mV[VX], tex2.mV[VX], tex2.mV[VY] ); + LLVector4a rx0( pos0[VX], tex0.mV[VX], tex0.mV[VY] ); + LLVector4a rx1( pos1[VX], tex1.mV[VX], tex1.mV[VY] ); + LLVector4a rx2( pos2[VX], tex2.mV[VX], tex2.mV[VY] ); - LLVector4a ry0; ry0.set( pos0.mV[VY], tex0.mV[VX], tex0.mV[VY] ); - LLVector4a ry1; ry1.set( pos1.mV[VY], tex1.mV[VX], tex1.mV[VY] ); - LLVector4a ry2; ry2.set( pos2.mV[VY], tex2.mV[VX], tex2.mV[VY] ); + LLVector4a ry0( pos0[VY], tex0.mV[VX], tex0.mV[VY] ); + LLVector4a ry1( pos1[VY], tex1.mV[VX], tex1.mV[VY] ); + LLVector4a ry2( pos2[VY], tex2.mV[VX], tex2.mV[VY] ); - LLVector4a rz0; rz0.set( pos0.mV[VZ], tex0.mV[VX], tex0.mV[VY] ); - LLVector4a rz1; rz1.set( pos1.mV[VZ], tex1.mV[VX], tex1.mV[VY] ); - LLVector4a rz2; rz2.set( pos2.mV[VZ], tex2.mV[VX], tex2.mV[VY] ); + LLVector4a rz0( pos0[VZ], tex0.mV[VX], tex0.mV[VY] ); + LLVector4a rz1( pos1[VZ], tex1.mV[VX], tex1.mV[VY] ); + LLVector4a rz2( pos2[VZ], tex2.mV[VX], tex2.mV[VY] ); LLVector4a lhs, rhs; diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 911db6f94b..aa58d6d114 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -40,7 +40,6 @@ class LLPathParams; class LLVolumeParams; class LLProfile; class LLPath; -class LLVector4a; class LLVolumeFace; class LLVolume; @@ -56,6 +55,7 @@ class LLVolume; #include "v4coloru.h" #include "llrefcount.h" #include "llfile.h" +#include "llvector4a.h" //============================================================================ @@ -794,15 +794,74 @@ class LLVolumeFace public: class VertexData { + enum + { + POSITION = 0, + NORMAL = 1 + }; + + private: + void init() + { + mData = (LLVector4a*) _mm_malloc(32, 16); + } public: - LLVector3 mPosition; - LLVector3 mNormal; - LLVector3 mBinormal; + VertexData() + { + init(); + } + + VertexData(const VertexData& rhs) + { + init(); + LLVector4a::memcpyNonAliased16((F32*) mData, (F32*) rhs.mData, 8); + mTexCoord = rhs.mTexCoord; + } + + ~VertexData() + { + _mm_free(mData); + } + + LLVector4a& getPosition() + { + return mData[POSITION]; + } + + LLVector4a& getNormal() + { + return mData[NORMAL]; + } + + const LLVector4a& getPosition() const + { + return mData[POSITION]; + } + + const LLVector4a& getNormal() const + { + return mData[NORMAL]; + } + + + void setPosition(const LLVector4a& pos) + { + mData[POSITION] = pos; + } + + void setNormal(const LLVector4a& norm) + { + mData[NORMAL] = norm; + } + LLVector2 mTexCoord; bool operator<(const VertexData& rhs) const; bool operator==(const VertexData& rhs) const; bool compareNormal(const VertexData& rhs, F32 angle_cutoff) const; + + private: + LLVector4a* mData; }; LLVolumeFace() : @@ -834,6 +893,13 @@ public: void resizeIndices(S32 num_indices); void fillFromLegacyData(std::vector& v, std::vector& idx); + void pushVertex(const VertexData& cv); + void pushVertex(const LLVector4a& pos, const LLVector4a& norm, const LLVector2& tc); + void pushIndex(const U16& idx); + + void swapData(LLVolumeFace& rhs); + + void getVertexData(U16 indx, LLVolumeFace::VertexData& cv); class VertexMapData : public LLVolumeFace::VertexData { @@ -842,28 +908,20 @@ public: bool operator==(const LLVolumeFace::VertexData& rhs) const { - return mPosition == rhs.mPosition && + return getPosition().equal3(rhs.getPosition()) && mTexCoord == rhs.mTexCoord && - mNormal == rhs.mNormal; + getNormal().equal3(rhs.getNormal()); } struct ComparePosition { - bool operator()(const LLVector3& a, const LLVector3& b) const + bool operator()(const LLVector4a& a, const LLVector4a& b) const { - if (a.mV[0] != b.mV[0]) - { - return a.mV[0] < b.mV[0]; - } - if (a.mV[1] != b.mV[1]) - { - return a.mV[1] < b.mV[1]; - } - return a.mV[2] < b.mV[2]; + return a.less3(b); } }; - typedef std::map, VertexMapData::ComparePosition > PointMap; + typedef std::map, VertexMapData::ComparePosition > PointMap; }; void optimize(F32 angle_cutoff = 2.f); @@ -899,10 +957,10 @@ public: S32 mNumVertices; S32 mNumIndices; - F32* mPositions; - F32* mNormals; - F32* mBinormals; - F32* mTexCoords; + LLVector4a* mPositions; + LLVector4a* mNormals; + LLVector4a* mBinormals; + LLVector2* mTexCoords; U16* mIndices; std::vector mEdge; @@ -1059,14 +1117,18 @@ std::ostream& operator<<(std::ostream &s, const LLVolumeParams &volume_params); void calc_binormal_from_triangle( LLVector4a& binormal, - const LLVector3& pos0, + const LLVector4a& pos0, const LLVector2& tex0, - const LLVector3& pos1, + const LLVector4a& pos1, const LLVector2& tex1, - const LLVector3& pos2, + const LLVector4a& pos2, const LLVector2& tex2); BOOL LLLineSegmentBoxIntersect(const LLVector3& start, const LLVector3& end, const LLVector3& center, const LLVector3& size); + +BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, const LLVector3& vert2, const LLVector3& orig, const LLVector3& dir, + F32* intersection_a, F32* intersection_b, F32* intersection_t, BOOL two_sided); + BOOL LLTriangleRayIntersect(const LLVector4a& vert0, const LLVector4a& vert1, const LLVector4a& vert2, const LLVector4a& orig, const LLVector4a& dir, F32* intersection_a, F32* intersection_b, F32* intersection_t, BOOL two_sided); diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index b0a4c02a43..9b7cc04120 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -6278,7 +6278,7 @@ Type Boolean Value - 1 + 0 RenderDebugPipeline @@ -7735,7 +7735,7 @@ Type Boolean Value - 0 + 1 RenderUseStreamVBO diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 679875e6bd..db3c5cca33 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -1216,18 +1216,18 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, LLVector3 vf_binormal; if (vf.mBinormals) { - vf_binormal.set(vf.mBinormals+i*4); + vf_binormal.setVec(vf.mBinormals[i].getF32()); } LLVector3 vf_normal; - vf_normal.set(vf.mNormals+i*4); + vf_normal.set(vf.mNormals[i].getF32()); LLVector3 vf_position; - vf_position.set(vf.mPositions+i*4); + vf_position.set(vf.mPositions[i].getF32()); if (rebuild_tcoord) { - LLVector2 tc(vf.mTexCoords+i*2); + LLVector2 tc(vf.mTexCoords[i]); if (texgen != LLTextureEntry::TEX_GEN_DEFAULT) { diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp index dae301ae29..28fe2a14b7 100644 --- a/indra/newview/llfloaterimagepreview.cpp +++ b/indra/newview/llfloaterimagepreview.cpp @@ -852,7 +852,6 @@ S8 LLImagePreviewSculpted::getType() const void LLImagePreviewSculpted::setPreviewTarget(LLImageRaw* imagep, F32 distance) { -#if 0 //VECTORIZE THIS mCameraDistance = distance; mCameraZoom = 1.f; mCameraPitch = 0.f; @@ -865,8 +864,8 @@ void LLImagePreviewSculpted::setPreviewTarget(LLImageRaw* imagep, F32 distance) } const LLVolumeFace &vf = mVolume->getVolumeFace(0); - U32 num_indices = vf.mIndices.size(); - U32 num_vertices = vf.mVertices.size(); + U32 num_indices = vf.mNumIndices; + U32 num_vertices = vf.mNumVertices; mVertexBuffer = new LLVertexBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL, 0); mVertexBuffer->allocateBuffer(num_vertices, num_indices, TRUE); @@ -880,10 +879,16 @@ void LLImagePreviewSculpted::setPreviewTarget(LLImageRaw* imagep, F32 distance) mVertexBuffer->getIndexStrider(index_strider); // build vertices and normals + LLStrider pos; + pos = (LLVector3*) vf.mPositions; pos.setStride(16); + LLStrider norm; + norm = (LLVector3*) vf.mNormals; norm.setStride(16); + + for (U32 i = 0; i < num_vertices; i++) { - *(vertex_strider++) = vf.mVertices[i].mPosition; - LLVector3 normal = vf.mVertices[i].mNormal; + *(vertex_strider++) = *pos++; + LLVector3 normal = *norm++; normal.normalize(); *(normal_strider++) = normal; } @@ -893,7 +898,6 @@ void LLImagePreviewSculpted::setPreviewTarget(LLImageRaw* imagep, F32 distance) { *(index_strider++) = vf.mIndices[i]; } -#endif } @@ -903,7 +907,6 @@ void LLImagePreviewSculpted::setPreviewTarget(LLImageRaw* imagep, F32 distance) BOOL LLImagePreviewSculpted::render() { mNeedsUpdate = FALSE; -#if 0 //VECTORIZE THIS LLGLSUIDefault def; LLGLDisable no_blend(GL_BLEND); LLGLEnable cull(GL_CULL_FACE); @@ -948,7 +951,7 @@ BOOL LLImagePreviewSculpted::render() LLViewerCamera::getInstance()->setPerspective(FALSE, mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight, FALSE); const LLVolumeFace &vf = mVolume->getVolumeFace(0); - U32 num_indices = vf.mIndices.size(); + U32 num_indices = vf.mNumIndices; mVertexBuffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL); @@ -961,7 +964,6 @@ BOOL LLImagePreviewSculpted::render() mVertexBuffer->draw(LLRender::TRIANGLES, num_indices, 0); gGL.popMatrix(); -#endif return TRUE; } diff --git a/indra/newview/llhudicon.cpp b/indra/newview/llhudicon.cpp index c7ad0bde7e..3c5a4de7f8 100644 --- a/indra/newview/llhudicon.cpp +++ b/indra/newview/llhudicon.cpp @@ -39,6 +39,7 @@ #include "llviewerobject.h" #include "lldrawable.h" +#include "llvector4a.h" #include "llviewercamera.h" #include "llviewertexture.h" #include "llviewerwindow.h" @@ -266,26 +267,44 @@ BOOL LLHUDIcon::lineSegmentIntersect(const LLVector3& start, const LLVector3& en LLVector3 x_scale = image_aspect * (F32)gViewerWindow->getWindowHeightScaled() * mScale * scale_factor * x_pixel_vec; LLVector3 y_scale = (F32)gViewerWindow->getWindowHeightScaled() * mScale * scale_factor * y_pixel_vec; - LLVector3 lower_left = icon_position - (x_scale * 0.5f); - LLVector3 lower_right = icon_position + (x_scale * 0.5f); - LLVector3 upper_left = icon_position - (x_scale * 0.5f) + y_scale; - LLVector3 upper_right = icon_position + (x_scale * 0.5f) + y_scale; + LLVector4a x_scalea; + LLVector4a icon_positiona; + LLVector4a y_scalea; -#if 0 //VECTORIZE THIS - - F32 t = 0.f; - LLVector3 dir = end-start; + x_scalea.load3(x_scale.mV); + x_scalea.mul(0.5f); + y_scalea.load3(y_scale.mV); + + icon_positiona.load3(icon_position.mV); - if (LLTriangleRayIntersect(upper_right, upper_left, lower_right, start, dir, NULL, NULL, &t, FALSE) || - LLTriangleRayIntersect(upper_left, lower_left, lower_right, start, dir, NULL, NULL, &t, FALSE)) + LLVector4a lower_left; + lower_left.setSub(icon_positiona, x_scalea); + LLVector4a lower_right; + lower_right.setAdd(icon_positiona, x_scalea); + LLVector4a upper_left; + upper_left.setAdd(lower_left, y_scalea); + LLVector4a upper_right; + upper_right.setAdd(lower_right, y_scalea); + + F32 t = 0.f; + LLVector4a enda; + enda.load3(end.mV); + LLVector4a starta; + starta.load3(start.mV); + LLVector4a dir; + dir.setSub(enda, starta); + + if (LLTriangleRayIntersect(upper_right, upper_left, lower_right, starta, dir, NULL, NULL, &t, FALSE) || + LLTriangleRayIntersect(upper_left, lower_left, lower_right, starta, dir, NULL, NULL, &t, FALSE)) { if (intersection) { - *intersection = start + dir*t; + dir.mul(t); + starta.add(dir); + *intersection = LLVector3((F32*) &starta.mQ); } return TRUE; } -#endif return FALSE; } diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp index 64c01d0937..9ed5d13831 100644 --- a/indra/newview/llhudtext.cpp +++ b/indra/newview/llhudtext.cpp @@ -206,8 +206,6 @@ BOOL LLHUDText::lineSegmentIntersect(const LLVector3& start, const LLVector3& en gGL.end(); } -#if 0 //VECTORIZE THIS - LLVector3 dir = end-start; F32 t = 0.f; @@ -220,9 +218,6 @@ BOOL LLHUDText::lineSegmentIntersect(const LLVector3& start, const LLVector3& en return TRUE; } } - -#endif - } return FALSE; diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp index 7eca276358..cef7c4abbb 100644 --- a/indra/newview/llviewercamera.cpp +++ b/indra/newview/llviewercamera.cpp @@ -38,6 +38,7 @@ // Viewer includes #include "llagent.h" #include "llagentcamera.h" +#include "llmatrix4a.h" #include "llviewercontrol.h" #include "llviewerobjectlist.h" #include "llviewerregion.h" @@ -787,22 +788,29 @@ BOOL LLViewerCamera::areVertsVisible(LLViewerObject* volumep, BOOL all_verts) LLMatrix4 render_mat(vo_volume->getRenderRotation(), LLVector4(vo_volume->getRenderPosition())); + LLMatrix4a render_mata; + render_mata.loadu(render_mat); + LLMatrix4a mata; + mata.loadu(mat); + num_faces = volume->getNumVolumeFaces(); - //VECTORIZE THIS for (i = 0; i < num_faces; i++) { const LLVolumeFace& face = volume->getVolumeFace(i); for (U32 v = 0; v < face.mNumVertices; v++) { - LLVector4 vec = LLVector4(face.mPositions+v*4) * mat; + const LLVector4a& src_vec = face.mPositions[v]; + LLVector4a vec; + mata.affineTransform(src_vec, vec); if (drawablep->isActive()) { - vec = vec * render_mat; + LLVector4a t = vec; + render_mata.affineTransform(t, vec); } - BOOL in_frustum = pointInFrustum(LLVector3(vec)) > 0; + BOOL in_frustum = pointInFrustum(LLVector3(vec.getF32())) > 0; if (( !in_frustum && all_verts) || (in_frustum && !all_verts)) diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp index b40e6af496..d2842fd62c 100644 --- a/indra/newview/llvograss.cpp +++ b/indra/newview/llvograss.cpp @@ -594,9 +594,9 @@ BOOL LLVOGrass::lineSegmentIntersect(const LLVector3& start, const LLVector3& en LLVector2 tc[4]; LLVector3 v[4]; - // LLVector3 n[4]; // unused! + LLVector3 n[4]; - // F32 closest_t = 1.f; // unused! + F32 closest_t = 1.f; for (S32 i = 0; i < mNumBlades; i++) { @@ -640,8 +640,6 @@ BOOL LLVOGrass::lineSegmentIntersect(const LLVector3& start, const LLVector3& en position.mV[2] += blade_height; v[3] = v1 = position + mRegionp->getOriginAgent(); -#if 0 //VECTORIZE THIS - F32 a,b,t; BOOL hit = FALSE; @@ -704,7 +702,6 @@ BOOL LLVOGrass::lineSegmentIntersect(const LLVector3& start, const LLVector3& en } } } -#endif } return ret; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index d57a535050..8022f81f19 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1868,7 +1868,7 @@ LLVector3 LLVOVolume::getApproximateFaceNormal(U8 face_id) const LLVolumeFace& face = volume->getVolumeFace(face_id); for (S32 i = 0; i < (S32)face.mNumVertices; ++i) { - result.add(*((LLVector4a*) face.mNormals+i*4)); + result.add(face.mNormals[i]); } LLVector3 ret((F32*) &result.mQ); -- cgit v1.3 From c98b1b3fd9341834978aff0e841714e206d28c0a Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Wed, 26 May 2010 03:29:19 -0500 Subject: Fully aligned llvolume --- indra/llmath/llvolume.cpp | 353 ++++++++++++++++++++++------- indra/llmath/llvolume.h | 99 +++----- indra/llmath/v3math.h | 1 - indra/newview/llface.cpp | 272 +++++++++++++--------- indra/newview/llpanelprimmediacontrols.cpp | 4 +- indra/newview/llvovolume.cpp | 3 +- 6 files changed, 468 insertions(+), 264 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index d8fbc081fa..9b6e2488e6 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -107,22 +107,27 @@ BOOL check_same_clock_dir( const LLVector3& pt1, const LLVector3& pt2, const LLV BOOL LLLineSegmentBoxIntersect(const LLVector3& start, const LLVector3& end, const LLVector3& center, const LLVector3& size) { - float fAWdU[3]; - LLVector3 dir; - LLVector3 diff; + return LLLineSegmentBoxIntersect(start.mV, end.mV, center.mV, size.mV); +} + +BOOL LLLineSegmentBoxIntersect(const F32* start, const F32* end, const F32* center, const F32* size) +{ + F32 fAWdU[3]; + F32 dir[3]; + F32 diff[3]; for (U32 i = 0; i < 3; i++) { - dir.mV[i] = 0.5f * (end.mV[i] - start.mV[i]); - diff.mV[i] = (0.5f * (end.mV[i] + start.mV[i])) - center.mV[i]; - fAWdU[i] = fabsf(dir.mV[i]); - if(fabsf(diff.mV[i])>size.mV[i] + fAWdU[i]) return false; + dir[i] = 0.5f * (end[i] - start[i]); + diff[i] = (0.5f * (end[i] + start[i])) - center[i]; + fAWdU[i] = fabsf(dir[i]); + if(fabsf(diff[i])>size[i] + fAWdU[i]) return false; } float f; - f = dir.mV[1] * diff.mV[2] - dir.mV[2] * diff.mV[1]; if(fabsf(f)>size.mV[1]*fAWdU[2] + size.mV[2]*fAWdU[1]) return false; - f = dir.mV[2] * diff.mV[0] - dir.mV[0] * diff.mV[2]; if(fabsf(f)>size.mV[0]*fAWdU[2] + size.mV[2]*fAWdU[0]) return false; - f = dir.mV[0] * diff.mV[1] - dir.mV[1] * diff.mV[0]; if(fabsf(f)>size.mV[0]*fAWdU[1] + size.mV[1]*fAWdU[0]) return false; + f = dir[1] * diff[2] - dir[2] * diff[1]; if(fabsf(f)>size[1]*fAWdU[2] + size[2]*fAWdU[1]) return false; + f = dir[2] * diff[0] - dir[0] * diff[2]; if(fabsf(f)>size[0]*fAWdU[2] + size[2]*fAWdU[0]) return false; + f = dir[0] * diff[1] - dir[1] * diff[0]; if(fabsf(f)>size[0]*fAWdU[1] + size[1]*fAWdU[0]) return false; return true; } @@ -1869,6 +1874,59 @@ BOOL LLVolume::generate() return FALSE; } +void LLVolumeFace::VertexData::init() +{ + mData = (LLVector4a*) _mm_malloc(32, 16); +} + +LLVolumeFace::VertexData::VertexData() +{ + init(); +} + +LLVolumeFace::VertexData::VertexData(const VertexData& rhs) +{ + init(); + LLVector4a::memcpyNonAliased16((F32*) mData, (F32*) rhs.mData, 8); + mTexCoord = rhs.mTexCoord; +} + +LLVolumeFace::VertexData::~VertexData() +{ + _mm_free(mData); +} + +LLVector4a& LLVolumeFace::VertexData::getPosition() +{ + return mData[POSITION]; +} + +LLVector4a& LLVolumeFace::VertexData::getNormal() +{ + return mData[NORMAL]; +} + +const LLVector4a& LLVolumeFace::VertexData::getPosition() const +{ + return mData[POSITION]; +} + +const LLVector4a& LLVolumeFace::VertexData::getNormal() const +{ + return mData[NORMAL]; +} + + +void LLVolumeFace::VertexData::setPosition(const LLVector4a& pos) +{ + mData[POSITION] = pos; +} + +void LLVolumeFace::VertexData::setNormal(const LLVector4a& norm) +{ + mData[NORMAL] = norm; +} + bool LLVolumeFace::VertexData::operator<(const LLVolumeFace::VertexData& rhs)const { const U8* l = (const U8*) this; @@ -2037,7 +2095,7 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) if (mdl[i].has("Weights")) { - face.mWeights.resize(num_verts); + face.allocateWeights(num_verts); LLSD::Binary weights = mdl[i]["Weights"]; @@ -2050,13 +2108,15 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) U8 joint = weights[idx++]; U32 cur_influence = 0; + LLVector4 wght(0,0,0,0); + while (joint != END_INFLUENCES) { U16 influence = weights[idx++]; influence |= ((U16) weights[idx++] << 8); F32 w = llmin((F32) influence / 65535.f, 0.99999f); - face.mWeights[cur_vertex].mV[cur_influence++] = (F32) joint + w; + wght.mV[cur_influence++] = (F32) joint + w; if (cur_influence >= 4) { @@ -2068,6 +2128,8 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) } } + face.mWeights[cur_vertex].loadua(wght.mV); + cur_vertex++; } @@ -2078,62 +2140,70 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) } - LLVector3 min_pos; - LLVector3 max_pos; + LLVector3 minp; + LLVector3 maxp; LLVector2 min_tc; LLVector2 max_tc; - min_pos.setValue(mdl[i]["PositionDomain"]["Min"]); - max_pos.setValue(mdl[i]["PositionDomain"]["Max"]); + minp.setValue(mdl[i]["PositionDomain"]["Min"]); + maxp.setValue(mdl[i]["PositionDomain"]["Max"]); + LLVector4a min_pos, max_pos; + min_pos.load3(minp.mV); + max_pos.load3(maxp.mV); + min_tc.setValue(mdl[i]["TexCoord0Domain"]["Min"]); max_tc.setValue(mdl[i]["TexCoord0Domain"]["Max"]); - LLVector3 pos_range = max_pos - min_pos; + LLVector4a pos_range; + pos_range.setSub(max_pos, min_pos); LLVector2 tc_range = max_tc - min_tc; - LLVector3& min = face.mExtents[0]; - LLVector3& max = face.mExtents[1]; - - min = max = LLVector3(0,0,0); + LLVector4a& min = face.mExtents[0]; + LLVector4a& max = face.mExtents[1]; - F32* pos_out = (F32*) face.mPositions; - F32* norm_out = (F32*) face.mNormals; - F32* tc_out = (F32*) face.mTexCoords; + min.clear(); + max.clear(); + + LLVector4a* pos_out = face.mPositions; + LLVector4a* norm_out = face.mNormals; + LLVector2* tc_out = face.mTexCoords; for (U32 j = 0; j < num_verts; ++j) { U16* v = (U16*) &(pos[j*3*2]); - pos_out[0] = (F32) v[0] / 65535.f * pos_range.mV[0] + min_pos.mV[0]; - pos_out[1] = (F32) v[1] / 65535.f * pos_range.mV[1] + min_pos.mV[1]; - pos_out[2] = (F32) v[2] / 65535.f * pos_range.mV[2] + min_pos.mV[2]; - + pos_out->set((F32) v[0], (F32) v[1], (F32) v[2]); + pos_out->div(65535.f); + pos_out->mul(pos_range); + pos_out->add(min_pos); if (j == 0) { - min = max = LLVector3(pos_out); + min = *pos_out; + max = min; } else { - update_min_max(min,max,pos_out); + min.setMin(*pos_out); + max.setMax(*pos_out); } - pos_out += 4; + pos_out++; U16* n = (U16*) &(norm[j*3*2]); - - norm_out[0] = (F32) n[0] / 65535.f * 2.f - 1.f; - norm_out[1] = (F32) n[1] / 65535.f * 2.f - 1.f; - norm_out[2] = (F32) n[2] / 65535.f * 2.f - 1.f; - norm_out += 4; + norm_out->set((F32) n[0], (F32) n[1], (F32) n[2]); + norm_out->div(65535.f); + norm_out->mul(2.f); + norm_out->sub(1.f); + norm_out++; U16* t = (U16*) &(tc[j*2*2]); - tc_out[0] = (F32) t[0] / 65535.f * tc_range.mV[0] + min_tc.mV[0]; - tc_out[1] = (F32) t[1] / 65535.f * tc_range.mV[1] + min_tc.mV[1]; + tc_out->mV[0] = (F32) t[0] / 65535.f * tc_range.mV[0] + min_tc.mV[0]; + tc_out->mV[1] = (F32) t[1] / 65535.f * tc_range.mV[1] + min_tc.mV[1]; - tc_out += 8; + tc_out++; } @@ -2234,8 +2304,8 @@ void LLVolume::makeTetrahedron() LLVector4a(x,-x,-x) }; - face.mExtents[0].setVec(-x,-x,-x); - face.mExtents[1].setVec(x,x,x); + face.mExtents[0].splat(-x); + face.mExtents[1].splat(x); LLVolumeFace::VertexData cv[3]; @@ -4165,6 +4235,18 @@ void LLVolume::generateSilhouetteVertices(std::vector &vertices, S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, S32 face, LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal) +{ + LLVector4a starta, enda; + starta.load3(start.mV); + enda.load3(end.mV); + + return lineSegmentIntersect(starta, enda, face, intersection, tex_coord, normal, bi_normal); + +} + +S32 LLVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, + S32 face, + LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal) { S32 hit_face = -1; @@ -4182,7 +4264,8 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, end_face = face; } - LLVector3 dir = end - start; + LLVector4a dir; + dir.setSub(end, start); F32 closest_t = 2.f; // must be larger than 1 @@ -4192,21 +4275,20 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, { LLVolumeFace &face = mVolumeFaces[i]; - LLVector3 box_center = (face.mExtents[0] + face.mExtents[1]) / 2.f; - LLVector3 box_size = face.mExtents[1] - face.mExtents[0]; + LLVector4a box_center; + box_center.setAdd(face.mExtents[0], face.mExtents[1]); + box_center.mul(0.5f); + + LLVector4a box_size; + box_size.setSub(face.mExtents[1], face.mExtents[0]); - if (LLLineSegmentBoxIntersect(start, end, box_center, box_size)) + if (LLLineSegmentBoxIntersect(start.getF32(), end.getF32(), box_center.getF32(), box_size.getF32())) { if (bi_normal != NULL) // if the caller wants binormals, we may need to generate them { genBinormals(i); } - LLVector4a starta, dira; - - starta.load3(start.mV); - dira.load3(dir.mV); - LLVector4a* p = (LLVector4a*) face.mPositions; for (U32 tri = 0; tri < face.mNumIndices/3; tri++) @@ -4220,7 +4302,7 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, if (LLTriangleRayIntersect(p[index1], p[index2], p[index3], - starta, dira, &a, &b, &t, FALSE)) + start, dir, &a, &b, &t, FALSE)) { if ((t >= 0.f) && // if hit is after start (t <= 1.f) && // and before end @@ -4231,7 +4313,10 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, if (intersection != NULL) { - *intersection = start + dir * closest_t; + LLVector4a intersect = dir; + intersect.mul(closest_t); + intersect.add(start); + intersection->set(intersect.getF32()); } @@ -5029,6 +5114,107 @@ std::ostream& operator<<(std::ostream &s, const LLVolume *volumep) return s; } +LLVolumeFace::LLVolumeFace() : + mID(0), + mTypeMask(0), + mBeginS(0), + mBeginT(0), + mNumS(0), + mNumT(0), + mNumVertices(0), + mNumIndices(0), + mPositions(NULL), + mNormals(NULL), + mBinormals(NULL), + mTexCoords(NULL), + mIndices(NULL), + mWeights(NULL) +{ + mExtents = (LLVector4a*) _mm_malloc(48, 16); + mCenter = mExtents+2; +} + +LLVolumeFace::LLVolumeFace(const LLVolumeFace& src) +{ + mExtents = (LLVector4a*) _mm_malloc(48, 16); + mCenter = mExtents+2; + *this = src; +} + +LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) +{ + if (&src == this) + { //self assignment, do nothing + return *this; + } + + mID = src.mID; + mTypeMask = src.mTypeMask; + mBeginS = src.mBeginS; + mBeginT = src.mBeginT; + mNumS = src.mNumS; + mNumT = src.mNumT; + + mNumVertices = 0; + mNumIndices = 0; + mPositions = NULL; + mNormals = NULL; + mBinormals = NULL; + mTexCoords = NULL; + mWeights = NULL; + mIndices = NULL; + + LLVector4a::memcpyNonAliased16((F32*) mExtents, (F32*) src.mExtents, 12); + + resizeVertices(src.mNumVertices); + resizeIndices(src.mNumIndices); + + if (mNumVertices) + { + S32 vert_size = mNumVertices*4; + S32 tc_size = (mNumVertices*8+0xF) & ~0xF; + tc_size /= 4; + + LLVector4a::memcpyNonAliased16((F32*) mPositions, (F32*) src.mPositions, vert_size); + LLVector4a::memcpyNonAliased16((F32*) mNormals, (F32*) src.mNormals, vert_size); + LLVector4a::memcpyNonAliased16((F32*) mTexCoords, (F32*) src.mTexCoords, vert_size); + + if (src.mBinormals) + { + allocateBinormals(src.mNumVertices); + LLVector4a::memcpyNonAliased16((F32*) mBinormals, (F32*) src.mBinormals, vert_size); + } + else + { + _mm_free(mBinormals); + mBinormals = NULL; + } + + if (src.mWeights) + { + allocateWeights(src.mNumVertices); + LLVector4a::memcpyNonAliased16((F32*) mWeights, (F32*) src.mWeights, vert_size); + } + else + { + _mm_free(mWeights); + mWeights = NULL; + } + } + + if (mNumIndices) + { + S32 idx_size = (mNumIndices*2+0xF) & ~0xF; + idx_size /= 4; + + LLVector4a::memcpyNonAliased16((F32*) mIndices, (F32*) src.mIndices, idx_size); + } + + + //delete + return *this; +} + LLVolumeFace::~LLVolumeFace() { _mm_free(mPositions); @@ -5036,6 +5222,8 @@ LLVolumeFace::~LLVolumeFace() _mm_free(mTexCoords); _mm_free(mIndices); _mm_free(mBinormals); + _mm_free(mWeights); + _mm_free(mExtents); } BOOL LLVolumeFace::create(LLVolume* volume, BOOL partial_build) @@ -5169,8 +5357,8 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build) num_vertices = (grid_size+1)*(grid_size+1); num_indices = quad_count * 4; - LLVector3& min = mExtents[0]; - LLVector3& max = mExtents[1]; + LLVector4a& min = mExtents[0]; + LLVector4a& max = mExtents[1]; S32 offset = 0; if (mTypeMask & TOP_MASK) @@ -5242,16 +5430,18 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build) if (gx == 0 && gy == 0) { - min = max = LLVector3(newVert.getPosition().getF32()); + min = max = newVert.getPosition(); } else { - update_min_max(min,max,newVert.getPosition().getF32()); + min.setMin(newVert.getPosition()); + max.setMax(newVert.getPosition()); } } } - mCenter = (min + max) * 0.5f; + mCenter->setAdd(min, max); + mCenter->mul(0.5f); if (!partial_build) { @@ -5335,7 +5525,7 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) S32 max_s = volume->getProfile().getTotal(); S32 max_t = volume->getPath().mPath.size(); - mCenter.clearVec(); + mCenter->clear(); S32 offset = 0; if (mTypeMask & TOP_MASK) @@ -5353,8 +5543,8 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) LLVector2 cuv; LLVector2 min_uv, max_uv; - LLVector3& min = mExtents[0]; - LLVector3& max = mExtents[1]; + LLVector4a& min = mExtents[0]; + LLVector4a& max = mExtents[1]; LLVector2* tc = (LLVector2*) mTexCoords; LLVector4a* pos = (LLVector4a*) mPositions; @@ -5380,25 +5570,24 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) if (i == 0) { - min = max = mesh[i+offset].mPos; + min = max = pos[i]; min_uv = max_uv = tc[i]; } else { - update_min_max(min,max, mesh[i+offset].mPos); + update_min_max(min,max,pos[i]); update_min_max(min_uv, max_uv, tc[i]); } } - mCenter = (min+max)*0.5f; - cuv = (min_uv + max_uv)*0.5f; + mCenter->setAdd(min, max); + mCenter->mul(0.5f); - LLVector4a center; - center.load3(mCenter.mV); + cuv = (min_uv + max_uv)*0.5f; LLVector4a binormal; calc_binormal_from_triangle(binormal, - center, cuv, + *mCenter, cuv, pos[0], tc[0], pos[1], tc[1]); binormal.normalize3fast(); @@ -5407,8 +5596,8 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) LLVector4a d0, d1; - d0.setSub(center, pos[0]); - d1.setSub(center, pos[1]); + d0.setSub(*mCenter, pos[0]); + d1.setSub(*mCenter, pos[1]); if (mTypeMask & TOP_MASK) { @@ -5422,12 +5611,12 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) normal.normalize3fast(); VertexData vd; - vd.getPosition().load3(mCenter.mV); + vd.setPosition(*mCenter); vd.mTexCoord = cuv; if (!(mTypeMask & HOLLOW_MASK) && !(mTypeMask & OPEN_MASK)) { - pos[num_vertices].load4a((F32*) ¢er.mQ); + pos[num_vertices] = *mCenter; tc[num_vertices] = cuv; num_vertices++; } @@ -5812,6 +6001,11 @@ void LLVolumeFace::allocateBinormals(S32 num_verts) mBinormals = (LLVector4a*) _mm_malloc(num_verts*16, 16); } +void LLVolumeFace::allocateWeights(S32 num_verts) +{ + _mm_free(mWeights); + mWeights = (LLVector4a*) _mm_malloc(num_verts*16, 16); +} void LLVolumeFace::resizeIndices(S32 num_indices) { @@ -5919,11 +6113,11 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat if (offset == 0 && i == 0) { - mExtents[0] = mExtents[1] = LLVector3((F32*) &(dst_pos[i].mQ)); + mExtents[0] = mExtents[1] = dst_pos[i]; } else { - update_min_max(mExtents[0], mExtents[1], (F32*) &(dst_pos[i].mQ)); + update_min_max(mExtents[0], mExtents[1], dst_pos[i]); } } @@ -6076,18 +6270,19 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) //get bounding box for this side - LLVector3& face_min = mExtents[0]; - LLVector3& face_max = mExtents[1]; - mCenter.clearVec(); + LLVector4a& face_min = mExtents[0]; + LLVector4a& face_max = mExtents[1]; + mCenter->clear(); - face_min = face_max = LLVector3((F32*) &(pos[0].mQ)); + face_min = face_max = pos[0]; for (U32 i = 1; i < mNumVertices; ++i) { - update_min_max(face_min, face_max, (F32*) &(pos[i].mQ)); + update_min_max(face_min, face_max, pos[i]); } - mCenter = (face_min + face_max) * 0.5f; + mCenter->setAdd(face_min, face_max); + mCenter->mul(0.5f); S32 cur_index = 0; S32 cur_edge = 0; diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index aa58d6d114..7c63266aab 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -50,12 +50,13 @@ class LLVolume; #include "v2math.h" #include "v3math.h" #include "v4math.h" +#include "llvector4a.h" #include "llquaternion.h" #include "llstrider.h" #include "v4coloru.h" #include "llrefcount.h" #include "llfile.h" -#include "llvector4a.h" + //============================================================================ @@ -801,59 +802,19 @@ public: }; private: - void init() - { - mData = (LLVector4a*) _mm_malloc(32, 16); - } + void init(); public: - VertexData() - { - init(); - } - - VertexData(const VertexData& rhs) - { - init(); - LLVector4a::memcpyNonAliased16((F32*) mData, (F32*) rhs.mData, 8); - mTexCoord = rhs.mTexCoord; - } - - ~VertexData() - { - _mm_free(mData); - } - - LLVector4a& getPosition() - { - return mData[POSITION]; - } - - LLVector4a& getNormal() - { - return mData[NORMAL]; - } - - const LLVector4a& getPosition() const - { - return mData[POSITION]; - } - - const LLVector4a& getNormal() const - { - return mData[NORMAL]; - } + VertexData(); + VertexData(const VertexData& rhs); + ~VertexData(); + LLVector4a& getPosition(); + LLVector4a& getNormal(); + const LLVector4a& getPosition() const; + const LLVector4a& getNormal() const; + void setPosition(const LLVector4a& pos); + void setNormal(const LLVector4a& norm); - void setPosition(const LLVector4a& pos) - { - mData[POSITION] = pos; - } - - void setNormal(const LLVector4a& norm) - { - mData[NORMAL] = norm; - } - LLVector2 mTexCoord; bool operator<(const VertexData& rhs) const; @@ -864,22 +825,9 @@ public: LLVector4a* mData; }; - LLVolumeFace() : - mID(0), - mTypeMask(0), - mBeginS(0), - mBeginT(0), - mNumS(0), - mNumT(0), - mNumVertices(0), - mNumIndices(0), - mPositions(NULL), - mNormals(NULL), - mBinormals(NULL), - mTexCoords(NULL), - mIndices(NULL) - { - } + LLVolumeFace(); + LLVolumeFace(const LLVolumeFace& src); + LLVolumeFace& operator=(const LLVolumeFace& rhs); ~LLVolumeFace(); @@ -890,6 +838,7 @@ public: void resizeVertices(S32 num_verts); void allocateBinormals(S32 num_verts); + void allocateWeights(S32 num_verts); void resizeIndices(S32 num_indices); void fillFromLegacyData(std::vector& v, std::vector& idx); @@ -944,15 +893,15 @@ public: public: S32 mID; U32 mTypeMask; - LLVector3 mCenter; - + // Only used for INNER/OUTER faces S32 mBeginS; S32 mBeginT; S32 mNumS; S32 mNumT; - LLVector3 mExtents[2]; //minimum and maximum point of face + LLVector4a* mExtents; //minimum and maximum point of face + LLVector4a* mCenter; S32 mNumVertices; S32 mNumIndices; @@ -968,7 +917,7 @@ public: //list of skin weights for rigged volumes // format is mWeights[vertex_index].mV[influence] = . // mWeights.size() should be empty or match mVertices.size() - std::vector mWeights; + LLVector4a* mWeights; private: BOOL createUnCutCubeCap(LLVolume* volume, BOOL partial_build = FALSE); @@ -1051,6 +1000,13 @@ public: LLVector3* normal = NULL, // return the surface normal at the intersection point LLVector3* bi_normal = NULL // return the surface bi-normal at the intersection point ); + + S32 lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, + S32 face = 1, + LLVector3* intersection = NULL, + LLVector2* tex_coord = NULL, + LLVector3* normal = NULL, + LLVector3* bi_normal = NULL); // The following cleans up vertices and triangles, // getting rid of degenerate triangles and duplicate vertices, @@ -1124,6 +1080,7 @@ void calc_binormal_from_triangle( const LLVector4a& pos2, const LLVector2& tex2); +BOOL LLLineSegmentBoxIntersect(const F32* start, const F32* end, const F32* center, const F32* size); BOOL LLLineSegmentBoxIntersect(const LLVector3& start, const LLVector3& end, const LLVector3& center, const LLVector3& size); BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, const LLVector3& vert2, const LLVector3& orig, const LLVector3& dir, diff --git a/indra/llmath/v3math.h b/indra/llmath/v3math.h index 0e7d72e958..75c860a91e 100644 --- a/indra/llmath/v3math.h +++ b/indra/llmath/v3math.h @@ -36,7 +36,6 @@ #include "llerror.h" #include "llmath.h" - #include "llsd.h" class LLVector2; class LLVector4; diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index db3c5cca33..5cdfdbacde 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -39,6 +39,7 @@ #include "llviewercontrol.h" #include "llvolume.h" #include "m3math.h" +#include "llmatrix4a.h" #include "v3color.h" #include "lldrawpoolavatar.h" @@ -74,35 +75,43 @@ The resulting texture coordinate is: u = 2(B dot P) v = 2(T dot P) */ -void planarProjection(LLVector2 &tc, const LLVector3& normal, - const LLVector3 &mCenter, const LLVector3& vec) -{ //DONE! - LLVector3 binormal; - float d = normal * LLVector3(1,0,0); +void planarProjection(LLVector2 &tc, const LLVector4a& normal, + const LLVector4a ¢er, const LLVector4a& vec) +{ + LLVector4a binormal; + F32 d = normal[0]; + if (d >= 0.5f || d <= -0.5f) { - binormal = LLVector3(0,1,0); - if (normal.mV[0] < 0) + if (d < 0) { - binormal = -binormal; + binormal.set(0,-1,0); + } + else + { + binormal.set(0, 1, 0); } } else { - binormal = LLVector3(1,0,0); - if (normal.mV[1] > 0) + if (normal[1] > 0) + { + binormal.set(-1,0,0); + } + else { - binormal = -binormal; + binormal.set(1,0,0); } } - LLVector3 tangent = binormal % normal; + LLVector4a tangent; + tangent.setCross3(binormal,normal); - tc.mV[1] = -((tangent*vec)*2 - 0.5f); - tc.mV[0] = 1.0f+((binormal*vec)*2 - 0.5f); + tc.mV[1] = -((tangent.dot3(vec))*2 - 0.5f); + tc.mV[0] = 1.0f+((binormal.dot3(vec))*2 - 0.5f); } -void sphericalProjection(LLVector2 &tc, const LLVector3& normal, - const LLVector3 &mCenter, const LLVector3& vec) +void sphericalProjection(LLVector2 &tc, const LLVector4a& normal, + const LLVector4a &mCenter, const LLVector4a& vec) { //BROKEN /*tc.mV[0] = acosf(vd.mNormal * LLVector3(1,0,0))/3.14159f; @@ -113,7 +122,7 @@ void sphericalProjection(LLVector2 &tc, const LLVector3& normal, }*/ } -void cylindricalProjection(LLVector2 &tc, const LLVector3& normal, const LLVector3 &mCenter, const LLVector3& vec) +void cylindricalProjection(LLVector2 &tc, const LLVector4a& normal, const LLVector4a &mCenter, const LLVector4a& vec) { //BROKEN /*LLVector3 binormal; float d = vd.mNormal * LLVector3(1,0,0); @@ -371,7 +380,14 @@ void LLFace::setSize(S32 num_vertices, S32 num_indices, bool align) if (align) { //allocate vertices in blocks of 4 for alignment - S32 num_vertices = (num_vertices + 0x3) & ~0x3; + num_vertices = (num_vertices + 0x3) & ~0x3; + } + else + { + if (mDrawablep->getVOVolume()) + { + llerrs << "WTF?" << llendl; + } } if (mGeomCount != num_vertices || @@ -722,6 +738,7 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f, // mLastVertexBuffer = NULL; //} + //VECTORIZE THIS LLVector3 min,max; if (f >= volume.getNumVolumeFaces()) @@ -732,8 +749,8 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f, else { const LLVolumeFace &face = volume.getVolumeFace(f); - min = face.mExtents[0]; - max = face.mExtents[1]; + min.set(face.mExtents[0].getF32()); + max.set(face.mExtents[1].getF32()); } //min, max are in volume space, convert to drawable render space @@ -824,18 +841,26 @@ LLVector2 LLFace::surfaceToTexture(LLVector2 surface_coord, LLVector3 position, return surface_coord; } + //VECTORIZE THIS // see if we have a non-default mapping U8 texgen = getTextureEntry()->getTexGen(); if (texgen != LLTextureEntry::TEX_GEN_DEFAULT) { - LLVector3 center = mDrawablep->getVOVolume()->getVolume()->getVolumeFace(mTEOffset).mCenter; + LLVector4a& center = *(mDrawablep->getVOVolume()->getVolume()->getVolumeFace(mTEOffset).mCenter); - LLVector3 scale = (mDrawablep->getVOVolume()->isVolumeGlobal()) ? LLVector3(1,1,1) : mVObjp->getScale(); - LLVector3 volume_position = mDrawablep->getVOVolume()->agentPositionToVolume(position); - volume_position.scaleVec(scale); + LLVector4a volume_position; + volume_position.load3(mDrawablep->getVOVolume()->agentPositionToVolume(position).mV); - LLVector3 volume_normal = mDrawablep->getVOVolume()->agentDirectionToVolume(normal); - volume_normal.normalize(); + if (!mDrawablep->getVOVolume()->isVolumeGlobal()) + { + LLVector4a scale; + scale.load3(mVObjp->getScale().mV); + volume_position.mul(scale); + } + + LLVector4a volume_normal; + volume_normal.load3(mDrawablep->getVOVolume()->agentDirectionToVolume(normal).mV); + volume_normal.normalize3fast(); switch (texgen) { @@ -928,7 +953,7 @@ static LLFastTimer::DeclareTimer FTM_FACE_GET_GEOM("Face Geom"); BOOL LLFace::getGeometryVolume(const LLVolume& volume, const S32 &f, - const LLMatrix4& mat_vert, const LLMatrix3& mat_normal, + const LLMatrix4& mat_vert_in, const LLMatrix3& mat_norm_in, const U16 &index_offset, bool force_rebuild) { @@ -960,14 +985,18 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, } } - LLStrider vertices; + LLStrider vert; + LLVector4a* vertices = NULL; LLStrider tex_coords; LLStrider tex_coords2; - LLStrider normals; + LLVector4a* normals = NULL; + LLStrider norm; LLStrider colors; - LLStrider binormals; + LLVector4a* binormals = NULL; + LLStrider binorm; LLStrider indicesp; - LLStrider weights; + LLVector4a* weights = NULL; + LLStrider wght; BOOL full_rebuild = force_rebuild || mDrawablep->isState(LLDrawable::REBUILD_VOLUME); @@ -982,11 +1011,11 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, scale = mVObjp->getScale(); } - BOOL rebuild_pos = full_rebuild || mDrawablep->isState(LLDrawable::REBUILD_POSITION); - BOOL rebuild_color = full_rebuild || mDrawablep->isState(LLDrawable::REBUILD_COLOR); - BOOL rebuild_tcoord = full_rebuild || mDrawablep->isState(LLDrawable::REBUILD_TCOORD); - BOOL rebuild_normal = rebuild_pos && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_NORMAL); - BOOL rebuild_binormal = rebuild_pos && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_BINORMAL); + bool rebuild_pos = full_rebuild || mDrawablep->isState(LLDrawable::REBUILD_POSITION); + bool rebuild_color = full_rebuild || mDrawablep->isState(LLDrawable::REBUILD_COLOR); + bool rebuild_tcoord = full_rebuild || mDrawablep->isState(LLDrawable::REBUILD_TCOORD); + bool rebuild_normal = rebuild_pos && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_NORMAL); + bool rebuild_binormal = rebuild_pos && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_BINORMAL); bool rebuild_weights = rebuild_pos && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_WEIGHT4); const LLTextureEntry *tep = mVObjp->getTE(f); @@ -994,19 +1023,23 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, if (rebuild_pos) { - mVertexBuffer->getVertexStrider(vertices, mGeomIndex); + mVertexBuffer->getVertexStrider(vert, mGeomIndex); + vertices = (LLVector4a*) vert.get(); } if (rebuild_normal) { - mVertexBuffer->getNormalStrider(normals, mGeomIndex); + mVertexBuffer->getNormalStrider(norm, mGeomIndex); + normals = (LLVector4a*) norm.get(); } if (rebuild_binormal) { - mVertexBuffer->getBinormalStrider(binormals, mGeomIndex); + mVertexBuffer->getBinormalStrider(binorm, mGeomIndex); + binormals = (LLVector4a*) binorm.get(); } if (rebuild_weights) { - mVertexBuffer->getWeight4Strider(weights, mGeomIndex); + mVertexBuffer->getWeight4Strider(wght, mGeomIndex); + weights = (LLVector4a*) wght.get(); } F32 tcoord_xoffset = 0.f ; @@ -1058,8 +1091,6 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, LLVector2 tmin, tmax; - - if (rebuild_tcoord) { if (tep) @@ -1142,9 +1173,9 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, //bump setup - LLVector3 binormal_dir( -sin_ang, cos_ang, 0 ); - LLVector3 bump_s_primary_light_ray; - LLVector3 bump_t_primary_light_ray; + LLVector4a binormal_dir( -sin_ang, cos_ang, 0 ); + LLVector4a bump_s_primary_light_ray; + LLVector4a bump_t_primary_light_ray; LLQuaternion bump_quat; if (mDrawablep->isActive()) @@ -1196,8 +1227,9 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, LLVector3 moon_ray = gSky.getMoonDirection(); LLVector3& primary_light_ray = (sun_ray.mV[VZ] > 0) ? sun_ray : moon_ray; - bump_s_primary_light_ray = offset_multiple * s_scale * primary_light_ray; - bump_t_primary_light_ray = offset_multiple * t_scale * primary_light_ray; + bump_s_primary_light_ray; + bump_s_primary_light_ray.load3((offset_multiple * s_scale * primary_light_ray).mV); + bump_t_primary_light_ray.load3((offset_multiple * t_scale * primary_light_ray).mV); } U8 texgen = getTextureEntry()->getTexGen(); @@ -1206,45 +1238,47 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, mVObjp->getVolume()->genBinormals(f); } + LLMatrix4a mat_normal; + + if (rebuild_normal || rebuild_binormal || rebuild_tcoord) + { + mat_normal.loadu(mat_norm_in); + } + //if it's not fullbright and has no normals, bake sunlight based on face normal bool bake_sunlight = !getTextureEntry()->getFullbright() && !mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_NORMAL); - //VECTORIZE THIS - for (S32 i = 0; i < num_vertices; i++) + if (rebuild_tcoord) { - LLVector3 vf_binormal; - if (vf.mBinormals) - { - vf_binormal.setVec(vf.mBinormals[i].getF32()); - } + LLVector4a scalea; + scalea.load3(scale.mV); - LLVector3 vf_normal; - vf_normal.set(vf.mNormals[i].getF32()); - LLVector3 vf_position; - vf_position.set(vf.mPositions[i].getF32()); - - if (rebuild_tcoord) - { + for (S32 i = 0; i < num_vertices; i++) + { LLVector2 tc(vf.mTexCoords[i]); + LLVector4a& norm = vf.mNormals[i]; + + LLVector4a& center = *(vf.mCenter); + if (texgen != LLTextureEntry::TEX_GEN_DEFAULT) { - LLVector3 vec = vf_position; + LLVector4a vec = vf.mPositions[i]; - vec.scaleVec(scale); + vec.mul(scalea); switch (texgen) { case LLTextureEntry::TEX_GEN_PLANAR: - planarProjection(tc, vf_normal, vf.mCenter, vec); + planarProjection(tc, norm, center, vec); break; case LLTextureEntry::TEX_GEN_SPHERICAL: - sphericalProjection(tc, vf_normal, vf.mCenter, vec); + sphericalProjection(tc, norm, center, vec); break; case LLTextureEntry::TEX_GEN_CYLINDRICAL: - cylindricalProjection(tc, vf_normal, vf.mCenter, vec); + cylindricalProjection(tc, norm, center, vec); break; default: break; @@ -1351,68 +1385,84 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, *tex_coords++ = tc; - + if (bump_code && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_TEXCOORD1)) { - LLVector3 tangent = vf_binormal % vf_normal; - - LLMatrix3 tangent_to_object; - tangent_to_object.setRows(tangent, vf_binormal, vf_normal); - LLVector3 binormal = binormal_dir * tangent_to_object; - binormal = binormal * mat_normal; - + LLVector4a tangent; + tangent.setCross3(vf.mBinormals[i], vf.mNormals[i]); + + LLMatrix4a tangent_to_object; + tangent_to_object.setRows(tangent, vf.mBinormals[i], vf.mNormals[i]); + LLVector4a t; + tangent_to_object.rotate(binormal_dir, t); + LLVector4a binormal; + mat_normal.rotate(t, binormal); + + //VECTORIZE THIS if (mDrawablep->isActive()) { - binormal *= bump_quat; + LLVector3 t; + t.set(binormal.getF32()); + t *= bump_quat; + binormal.load3(t.mV); } - binormal.normVec(); - tc += LLVector2( bump_s_primary_light_ray * tangent, bump_t_primary_light_ray * binormal ); + binormal.normalize3fast(); + tc += LLVector2( bump_s_primary_light_ray.dot3(tangent), bump_t_primary_light_ray.dot3(binormal) ); *tex_coords2++ = tc; } } - - if (rebuild_pos) - { - *vertices++ = vf_position * mat_vert; - } - - if (rebuild_normal) - { - LLVector3 normal = vf_normal * mat_normal; - normal.normVec(); - - *normals++ = normal; + } + + if (rebuild_pos) + { + LLMatrix4a mat_vert; + mat_vert.loadu(mat_vert_in); + + for (S32 i = 0; i < num_vertices; i++) + { + mat_vert.affineTransform(vf.mPositions[i], vertices[i]); } + } - if (rebuild_binormal) - { - LLVector3 binormal = vf_binormal * mat_normal; - binormal.normVec(); - *binormals++ = binormal; + if (rebuild_normal) + { + for (S32 i = 0; i < num_vertices; i++) + { + LLVector4a normal; + mat_normal.rotate(vf.mNormals[i], normal); + normal.normalize3fast(); + normals[i] = normal; } + } - if (rebuild_weights && vf.mWeights.size() > i) - { - (*weights++) = vf.mWeights[i]; + if (rebuild_binormal) + { + for (S32 i = 0; i < num_vertices; i++) + { + LLVector4a binormal; + mat_normal.rotate(vf.mBinormals[i], binormal); + binormal.normalize3fast(); + binormals[i] = binormal; } + } + + if (rebuild_weights && vf.mWeights) + { + LLVector4a::memcpyNonAliased16((F32*) weights, (F32*) vf.mWeights, num_vertices/4); + } - if (rebuild_color) - { - if (bake_sunlight) - { - LLVector3 normal = vf_normal * mat_normal; - normal.normVec(); - - F32 da = normal * gPipeline.mSunDir; + if (rebuild_color) + { + LLVector4a src; - *colors++ = LLColor4U(U8(color.mV[0]*da), U8(color.mV[1]*da), U8(color.mV[2]*da), color.mV[3]); - } - else - { - *colors++ = color; - } + src.splat(reinterpret_cast(color.mAll)); + + F32* dst = (F32*) colors.get(); + for (S32 i = 0; i < num_vertices; i+=4) + { + LLVector4a::copy4a(dst+i, (F32*) &src); } } diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 0648d99685..a5804aa04e 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -574,7 +574,9 @@ void LLPanelPrimMediaControls::updateShape() { const LLVolumeFace& vf = volume->getVolumeFace(mTargetObjectFace); - const LLVector3* ext = vf.mExtents; + LLVector3 ext[2]; + ext[0].set(vf.mExtents[0].getF32()); + ext[1].set(vf.mExtents[1].getF32()); LLVector3 center = (ext[0]+ext[1])*0.5f; LLVector3 size = (ext[1]-ext[0])*0.5f; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 8022f81f19..c03ec67c79 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1602,7 +1602,8 @@ void LLVOVolume::updateFaceSize(S32 idx) else { const LLVolumeFace& vol_face = getVolume()->getVolumeFace(idx); - facep->setSize(vol_face.mNumVertices, vol_face.mNumIndices); + facep->setSize(vol_face.mNumVertices, vol_face.mNumIndices, + true); // <--- volume faces should be padded for 16-byte alignment } } -- cgit v1.3 From 0e7f4dc5cef8a97cb1dd08aa2f79538ced267888 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Sat, 29 May 2010 05:37:38 -0500 Subject: Octree per LLVolumeFace WIP --- indra/llmath/lloctree.h | 18 + indra/llmath/llvolume.cpp | 625 ++++++++++++++++++++++------- indra/llmath/llvolume.h | 45 ++- indra/newview/llhudicon.cpp | 7 +- indra/newview/llhudtext.cpp | 7 +- indra/newview/llpanelprimmediacontrols.cpp | 1 + indra/newview/llspatialpartition.cpp | 30 ++ indra/newview/llvograss.cpp | 8 +- 8 files changed, 582 insertions(+), 159 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index 2f34fb1bb0..8bba12783f 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -72,6 +72,13 @@ public: virtual void visit(const LLOctreeNode* branch) = 0; }; +template +class LLOctreeTravelerDepthFirst : public LLOctreeTraveler +{ +public: + virtual void traverse(const LLOctreeNode* node); +}; + template class LLOctreeNode : public LLTreeNode { @@ -710,4 +717,15 @@ void LLOctreeTraveler::traverse(const LLOctreeNode* node) traverse(node->getChild(i)); } } + +template +void LLOctreeTravelerDepthFirst::traverse(const LLOctreeNode* node) +{ + for (U32 i = 0; i < node->getChildCount(); i++) + { + traverse(node->getChild(i)); + } + node->accept(this); +} + #endif diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 9b6e2488e6..d261811aa2 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -45,6 +45,7 @@ #include "m4math.h" #include "m3math.h" #include "llmatrix4a.h" +#include "lloctree.h" #include "lldarray.h" #include "llvolume.h" #include "llstl.h" @@ -132,6 +133,51 @@ BOOL LLLineSegmentBoxIntersect(const F32* start, const F32* end, const F32* cent return true; } +BOOL LLLineSegmentBoxIntersect(const LLVector4a& start, const LLVector4a& end, const LLVector4a& center, const LLVector4a& size) +{ + LLVector4a fAWdU; + LLVector4a dir; + LLVector4a diff; + + dir.setSub(end, start); + dir.mul(0.5f); + + diff.setAdd(end,start); + diff.mul(0.5f); + diff.sub(center); + fAWdU.setAbs(dir); + + LLVector4a rhs; + rhs.setAdd(size, fAWdU); + + LLVector4a lhs; + lhs.setAbs(diff); + + S32 grt = lhs.greaterThan4(rhs).getComparisonMask(); + + if (grt & 0x7) + { + return false; + } + + LLVector4a f; + f.setCross3(dir, diff); + f.setAbs(f); + + LLVector4a v0; v0.mQ = _mm_shuffle_ps(size.mQ, size.mQ, _MM_SHUFFLE(3,1,0,0)); + LLVector4a v1; v1.mQ = _mm_shuffle_ps(fAWdU.mQ, fAWdU.mQ, _MM_SHUFFLE(3,2,2,1)); + lhs.setMul(v0, v1); + + v0.mQ = _mm_shuffle_ps(size.mQ, size.mQ, _MM_SHUFFLE(3,2,2,1)); + v1.mQ = _mm_shuffle_ps(fAWdU.mQ, fAWdU.mQ, _MM_SHUFFLE(3,1,0,0)); + rhs.setMul(v0, v1); + rhs.add(lhs); + + grt = f.greaterThan4(rhs).getComparisonMask(); + + return (grt & 0x7) ? false : true; +} + // intersect test between triangle vert0, vert1, vert2 and a ray from orig in direction dir. // returns TRUE if intersecting and returns barycentric coordinates in intersection_a, intersection_b, @@ -139,15 +185,13 @@ BOOL LLLineSegmentBoxIntersect(const F32* start, const F32* end, const F32* cent // Moller-Trumbore algorithm BOOL LLTriangleRayIntersect(const LLVector4a& vert0, const LLVector4a& vert1, const LLVector4a& vert2, const LLVector4a& orig, const LLVector4a& dir, - F32* intersection_a, F32* intersection_b, F32* intersection_t, BOOL two_sided) + F32& intersection_a, F32& intersection_b, F32& intersection_t) { - F32 u, v, t; /* find vectors for two edges sharing vert0 */ LLVector4a edge1; edge1.setSub(vert1, vert0); - LLVector4a edge2; edge2.setSub(vert2, vert0); @@ -156,87 +200,116 @@ BOOL LLTriangleRayIntersect(const LLVector4a& vert0, const LLVector4a& vert1, co pvec.setCross3(dir, edge2); /* if determinant is near zero, ray lies in plane of triangle */ - F32 det = edge1.dot3(pvec); - - if (!two_sided) + LLVector4a det; + det.setAllDot3(edge1, pvec); + + if (det.greaterEqual4(LLVector4a::getApproximatelyZero()).getComparisonMask()) { - if (det < F_APPROXIMATELY_ZERO) - { - return FALSE; - } - /* calculate distance from vert0 to ray origin */ LLVector4a tvec; tvec.setSub(orig, vert0); /* calculate U parameter and test bounds */ - u = tvec.dot3(pvec); + LLVector4a u; + u.setAllDot3(tvec,pvec); - if (u < 0.f || u > det) + if (u.greaterEqual4(LLVector4a::getZero()).getComparisonMask() && + u.lessEqual4(det).getComparisonMask()) { - return FALSE; + /* prepare to test V parameter */ + LLVector4a qvec; + qvec.setCross3(tvec, edge1); + + /* calculate V parameter and test bounds */ + LLVector4a v; + v.setAllDot3(dir, qvec); + + + //if (!(v < 0.f || u + v > det)) + + LLVector4a sum_uv; + sum_uv.setAdd(u, v); + + S32 v_gequal = v.greaterEqual4(LLVector4a::getZero()).getComparisonMask(); + S32 sum_lequal = sum_uv.lessEqual4(det).getComparisonMask(); + + if (v_gequal && sum_lequal) + { + /* calculate t, scale parameters, ray intersects triangle */ + LLVector4a t; + t.setAllDot3(edge2,qvec); + + t.div(det); + u.div(det); + v.div(det); + + intersection_a = u[0]; + intersection_b = v[0]; + intersection_t = t[0]; + return TRUE; + } } - - /* prepare to test V parameter */ - LLVector4a qvec; - qvec.setCross3(tvec, edge1); + } - /* calculate V parameter and test bounds */ - v = dir.dot3(qvec); - if (v < 0.f || u + v > det) - { - return FALSE; - } + return FALSE; +} - /* calculate t, scale parameters, ray intersects triangle */ - t = edge2.dot3(qvec); - F32 inv_det = 1.0 / det; - t *= inv_det; - u *= inv_det; - v *= inv_det; - } +BOOL LLTriangleRayIntersectTwoSided(const LLVector4a& vert0, const LLVector4a& vert1, const LLVector4a& vert2, const LLVector4a& orig, const LLVector4a& dir, + F32& intersection_a, F32& intersection_b, F32& intersection_t) +{ + F32 u, v, t; - else // two sided - { - if (det > -F_APPROXIMATELY_ZERO && det < F_APPROXIMATELY_ZERO) - { - return FALSE; - } - F32 inv_det = 1.0 / det; + /* find vectors for two edges sharing vert0 */ + LLVector4a edge1; + edge1.setSub(vert1, vert0); + + + LLVector4a edge2; + edge2.setSub(vert2, vert0); - /* calculate distance from vert0 to ray origin */ - LLVector4a tvec; - tvec.setSub(orig, vert0); - - /* calculate U parameter and test bounds */ - u = (tvec.dot3(pvec)) * inv_det; - if (u < 0.f || u > 1.f) - { - return FALSE; - } + /* begin calculating determinant - also used to calculate U parameter */ + LLVector4a pvec; + pvec.setCross3(dir, edge2); - /* prepare to test V parameter */ - LLVector4a qvec; - qvec.setSub(tvec, edge1); - - /* calculate V parameter and test bounds */ - v = (dir.dot3(qvec)) * inv_det; - - if (v < 0.f || u + v > 1.f) - { - return FALSE; - } + /* if determinant is near zero, ray lies in plane of triangle */ + F32 det = edge1.dot3(pvec); + + + if (det > -F_APPROXIMATELY_ZERO && det < F_APPROXIMATELY_ZERO) + { + return FALSE; + } + + F32 inv_det = 1.f / det; + + /* calculate distance from vert0 to ray origin */ + LLVector4a tvec; + tvec.setSub(orig, vert0); + + /* calculate U parameter and test bounds */ + u = (tvec.dot3(pvec)) * inv_det; + if (u < 0.f || u > 1.f) + { + return FALSE; + } - /* calculate t, ray intersects triangle */ - t = (edge2.dot3(qvec)) * inv_det; + /* prepare to test V parameter */ + tvec.sub(edge1); + + /* calculate V parameter and test bounds */ + v = (dir.dot3(tvec)) * inv_det; + + if (v < 0.f || u + v > 1.f) + { + return FALSE; } + + /* calculate t, ray intersects triangle */ + t = (edge2.dot3(tvec)) * inv_det; - if (intersection_a != NULL) - *intersection_a = u; - if (intersection_b != NULL) - *intersection_b = v; - if (intersection_t != NULL) - *intersection_t = t; + intersection_a = u; + intersection_b = v; + intersection_t = t; return TRUE; @@ -244,7 +317,7 @@ BOOL LLTriangleRayIntersect(const LLVector4a& vert0, const LLVector4a& vert1, co //helper for non-aligned vectors BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, const LLVector3& vert2, const LLVector3& orig, const LLVector3& dir, - F32* intersection_a, F32* intersection_b, F32* intersection_t, BOOL two_sided) + F32& intersection_a, F32& intersection_b, F32& intersection_t, BOOL two_sided) { LLVector4a vert0a, vert1a, vert2a, origa, dira; vert0a.load3(vert0.mV); @@ -253,11 +326,130 @@ BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, cons origa.load3(orig.mV); dira.load3(dir.mV); - return LLTriangleRayIntersect(vert0a, vert1a, vert2a, origa, dira, - intersection_a, intersection_b, intersection_t, two_sided); + if (two_sided) + { + return LLTriangleRayIntersectTwoSided(vert0a, vert1a, vert2a, origa, dira, + intersection_a, intersection_b, intersection_t); + } + else + { + return LLTriangleRayIntersect(vert0a, vert1a, vert2a, origa, dira, + intersection_a, intersection_b, intersection_t); + } } +class LLVolumeOctreeListener : public LLOctreeListener +{ +public: + + LLVolumeOctreeListener(LLOctreeNode* node) + { + node->addListener(this); + + mBounds = (LLVector4a*) _mm_malloc(sizeof(LLVector4a)*4, 16); + mExtents = mBounds+2; + } + + ~LLVolumeOctreeListener() + { + _mm_free(mBounds); + } + + //LISTENER FUNCTIONS + virtual void handleChildAddition(const LLOctreeNode* parent, + LLOctreeNode* child) + { + new LLVolumeOctreeListener(child); + } + + virtual void handleStateChange(const LLTreeNode* node) { } + virtual void handleChildRemoval(const LLOctreeNode* parent, + const LLOctreeNode* child) { } + virtual void handleInsertion(const LLTreeNode* node, LLVolumeFace::Triangle* tri) { } + virtual void handleRemoval(const LLTreeNode* node, LLVolumeFace::Triangle* tri) { } + virtual void handleDestruction(const LLTreeNode* node) { } + + +public: + LLVector4a* mBounds; // bounding box (center, size) of this node and all its children (tight fit to objects) + LLVector4a* mExtents; // extents (min, max) of this node and all its children +}; + +class LLVolumeOctreeRebound : public LLOctreeTravelerDepthFirst +{ +public: + const LLVolumeFace* mFace; + + LLVolumeOctreeRebound(const LLVolumeFace* face) + { + mFace = face; + } + + virtual void visit(const LLOctreeNode* branch) + { + LLVolumeOctreeListener* node = (LLVolumeOctreeListener*) branch->getListener(0); + + LLVector4a& min = node->mExtents[0]; + LLVector4a& max = node->mExtents[1]; + + if (branch->getElementCount() != 0) + { + const LLVolumeFace::Triangle* tri = *(branch->getData().begin()); + + min = *(tri->mV[0]); + max = *(tri->mV[0]); + + for (LLOctreeNode::const_element_iter iter = + branch->getData().begin(); iter != branch->getData().end(); ++iter) + { + //stretch by triangles in node + tri = *iter; + + min.setMin(*tri->mV[0]); + min.setMin(*tri->mV[1]); + min.setMin(*tri->mV[2]); + + max.setMax(*tri->mV[0]); + max.setMax(*tri->mV[1]); + max.setMax(*tri->mV[2]); + } + + for (S32 i = 0; i < branch->getChildCount(); ++i) + { //stretch by child extents + LLVolumeOctreeListener* child = (LLVolumeOctreeListener*) branch->getChild(i)->getListener(0); + min.setMin(child->mExtents[0]); + max.setMax(child->mExtents[1]); + } + } + else if (branch->getChildCount() != 0) + { + LLVolumeOctreeListener* child = (LLVolumeOctreeListener*) branch->getChild(0)->getListener(0); + + min = child->mExtents[0]; + max = child->mExtents[1]; + + for (S32 i = 1; i < branch->getChildCount(); ++i) + { //stretch by child extents + child = (LLVolumeOctreeListener*) branch->getChild(i)->getListener(0); + min.setMin(child->mExtents[0]); + max.setMax(child->mExtents[1]); + } + } + else + { + llerrs << "WTF? Empty leaf" << llendl; + } + + node->mBounds[0].setAdd(min, max); + node->mBounds[0].mul(0.5f); + + node->mBounds[1].setSub(max,min); + node->mBounds[1].mul(0.5f); + } +}; + + //------------------------------------------------------------------- // statics //------------------------------------------------------------------- @@ -4244,6 +4436,114 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, } +class LLOctreeTriangleRayIntersect : public LLOctreeTraveler +{ +public: + const LLVolumeFace* mFace; + LLVector4a mStart; + LLVector4a mDir; + LLVector4a mEnd; + LLVector3* mIntersection; + LLVector2* mTexCoord; + LLVector3* mNormal; + LLVector3* mBinormal; + F32* mClosestT; + bool mHitFace; + + LLOctreeTriangleRayIntersect(const LLVector4a& start, const LLVector4a& dir, + const LLVolumeFace* face, F32* closest_t, + LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal) + : mFace(face), + mStart(start), + mDir(dir), + mIntersection(intersection), + mTexCoord(tex_coord), + mNormal(normal), + mBinormal(bi_normal), + mClosestT(closest_t), + mHitFace(false) + { + mEnd.setAdd(mStart, mDir); + } + + void traverse(const LLOctreeNode* node) + { + LLVolumeOctreeListener* vl = (LLVolumeOctreeListener*) node->getListener(0); + + /*const F32* start = mStart.getF32(); + const F32* end = mEnd.getF32(); + const F32* center = vl->mBounds[0].getF32(); + const F32* size = vl->mBounds[1].getF32();*/ + + if (LLLineSegmentBoxIntersect(mStart, mEnd, vl->mBounds[0], vl->mBounds[1])) + { + node->accept(this); + for (S32 i = 0; i < node->getChildCount(); ++i) + { + traverse(node->getChild(i)); + } + } + } + + void visit(const LLOctreeNode* node) + { + for (LLOctreeNode::const_element_iter iter = + node->getData().begin(); iter != node->getData().end(); ++iter) + { + const LLVolumeFace::Triangle* tri = *iter; + + F32 a, b, t; + + if (LLTriangleRayIntersect(*tri->mV[0], *tri->mV[1], *tri->mV[2], + mStart, mDir, a, b, t)) + { + if ((t >= 0.f) && // if hit is after start + (t <= 1.f) && // and before end + (t < *mClosestT)) // and this hit is closer + { + *mClosestT = t; + mHitFace = true; + + if (mIntersection != NULL) + { + LLVector4a intersect = mDir; + intersect.mul(*mClosestT); + intersect.add(mStart); + mIntersection->set(intersect.getF32()); + } + + + if (mTexCoord != NULL) + { + LLVector2* tc = (LLVector2*) mFace->mTexCoords; + *mTexCoord = ((1.f - a - b) * tc[tri->mIndex[0]] + + a * tc[tri->mIndex[1]] + + b * tc[tri->mIndex[2]]); + + } + + if (mNormal != NULL) + { + LLVector4* norm = (LLVector4*) mFace->mNormals; + + *mNormal = ((1.f - a - b) * LLVector3(norm[tri->mIndex[0]]) + + a * LLVector3(norm[tri->mIndex[1]]) + + b * LLVector3(norm[tri->mIndex[2]])); + } + + if (mBinormal != NULL) + { + LLVector4* binormal = (LLVector4*) mFace->mBinormals; + *mBinormal = ((1.f - a - b) * LLVector3(binormal[tri->mIndex[0]]) + + a * LLVector3(binormal[tri->mIndex[1]]) + + b * LLVector3(binormal[tri->mIndex[2]])); + } + } + } + } + } +}; + S32 LLVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, S32 face, LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal) @@ -4288,66 +4588,19 @@ S32 LLVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& en { genBinormals(i); } - - LLVector4a* p = (LLVector4a*) face.mPositions; - for (U32 tri = 0; tri < face.mNumIndices/3; tri++) + if (!face.mOctree) { - S32 index1 = face.mIndices[tri*3+0]; - S32 index2 = face.mIndices[tri*3+1]; - S32 index3 = face.mIndices[tri*3+2]; - - F32 a, b, t; + face.createOctree(); + } - if (LLTriangleRayIntersect(p[index1], - p[index2], - p[index3], - start, dir, &a, &b, &t, FALSE)) - { - if ((t >= 0.f) && // if hit is after start - (t <= 1.f) && // and before end - (t < closest_t)) // and this hit is closer - { - closest_t = t; - hit_face = i; - - if (intersection != NULL) - { - LLVector4a intersect = dir; - intersect.mul(closest_t); - intersect.add(start); - intersection->set(intersect.getF32()); - } - - - if (tex_coord != NULL) - { - LLVector2* tc = (LLVector2*) face.mTexCoords; - *tex_coord = ((1.f - a - b) * tc[index1] + - a * tc[index2] + - b * tc[index3]); - - } - - if (normal != NULL) - { - LLVector4* norm = (LLVector4*) face.mNormals; - - *normal = ((1.f - a - b) * LLVector3(norm[index1]) + - a * LLVector3(norm[index2]) + - b * LLVector3(norm[index3])); - } - - if (bi_normal != NULL) - { - LLVector4* binormal = (LLVector4*) face.mBinormals; - *bi_normal = ((1.f - a - b) * LLVector3(binormal[index1]) + - a * LLVector3(binormal[index2]) + - b * LLVector3(binormal[index3])); - } + LLVector4a* p = (LLVector4a*) face.mPositions; - } - } + LLOctreeTriangleRayIntersect intersect(start, dir, &face, &closest_t, intersection, tex_coord, normal, bi_normal); + intersect.traverse(face.mOctree); + if (intersect.mHitFace) + { + hit_face = i; } } } @@ -5128,13 +5381,29 @@ LLVolumeFace::LLVolumeFace() : mBinormals(NULL), mTexCoords(NULL), mIndices(NULL), - mWeights(NULL) + mWeights(NULL), + mOctree(NULL) { mExtents = (LLVector4a*) _mm_malloc(48, 16); mCenter = mExtents+2; } LLVolumeFace::LLVolumeFace(const LLVolumeFace& src) +: mID(0), + mTypeMask(0), + mBeginS(0), + mBeginT(0), + mNumS(0), + mNumT(0), + mNumVertices(0), + mNumIndices(0), + mPositions(NULL), + mNormals(NULL), + mBinormals(NULL), + mTexCoords(NULL), + mIndices(NULL), + mWeights(NULL), + mOctree(NULL) { mExtents = (LLVector4a*) _mm_malloc(48, 16); mCenter = mExtents+2; @@ -5157,13 +5426,9 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) mNumVertices = 0; mNumIndices = 0; - mPositions = NULL; - mNormals = NULL; - mBinormals = NULL; - mTexCoords = NULL; - mWeights = NULL; - mIndices = NULL; + freeData(); + LLVector4a::memcpyNonAliased16((F32*) mExtents, (F32*) src.mExtents, 12); resizeVertices(src.mNumVertices); @@ -5179,6 +5444,7 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) LLVector4a::memcpyNonAliased16((F32*) mNormals, (F32*) src.mNormals, vert_size); LLVector4a::memcpyNonAliased16((F32*) mTexCoords, (F32*) src.mTexCoords, vert_size); + if (src.mBinormals) { allocateBinormals(src.mNumVertices); @@ -5216,18 +5482,38 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) } LLVolumeFace::~LLVolumeFace() +{ + _mm_free(mExtents); + mExtents = NULL; + + freeData(); +} + +void LLVolumeFace::freeData() { _mm_free(mPositions); + mPositions = NULL; _mm_free(mNormals); + mNormals = NULL; _mm_free(mTexCoords); + mTexCoords = NULL; _mm_free(mIndices); + mIndices = NULL; _mm_free(mBinormals); + mBinormals = NULL; _mm_free(mWeights); - _mm_free(mExtents); + mWeights = NULL; + + delete mOctree; + mOctree = NULL; } BOOL LLVolumeFace::create(LLVolume* volume, BOOL partial_build) { + //tree for this face is no longer valid + delete mOctree; + mOctree = NULL; + if (mTypeMask & CAP_MASK) { return createCap(volume, partial_build); @@ -5250,6 +5536,18 @@ void LLVolumeFace::getVertexData(U16 index, LLVolumeFace::VertexData& cv) cv.mTexCoord = mTexCoords[index]; } +bool LLVolumeFace::VertexMapData::operator==(const LLVolumeFace::VertexData& rhs) const +{ + return getPosition().equal3(rhs.getPosition()) && + mTexCoord == rhs.mTexCoord && + getNormal().equal3(rhs.getNormal()); +} + +bool LLVolumeFace::VertexMapData::ComparePosition::operator()(const LLVector4a& a, const LLVector4a& b) const +{ + return a.less3(b); +} + void LLVolumeFace::optimize(F32 angle_cutoff) { LLVolumeFace new_face; @@ -5305,6 +5603,65 @@ void LLVolumeFace::optimize(F32 angle_cutoff) swapData(new_face); } + +void LLVolumeFace::createOctree() +{ + mOctree = new LLOctreeRoot(LLVector3d(0,0,0), LLVector3d(1,1,1), NULL); + new LLVolumeOctreeListener(mOctree); + + for (U32 i = 0; i < mNumIndices; i+= 3) + { + Triangle* tri = new Triangle(); + + const LLVector4a& v0 = mPositions[mIndices[i]]; + const LLVector4a& v1 = mPositions[mIndices[i+1]]; + const LLVector4a& v2 = mPositions[mIndices[i+2]]; + + tri->mV[0] = &v0; + tri->mV[1] = &v1; + tri->mV[2] = &v2; + + tri->mIndex[0] = mIndices[i]; + tri->mIndex[1] = mIndices[i+1]; + tri->mIndex[2] = mIndices[i+2]; + + LLVector4a min = v0; + min.setMin(v1); + min.setMin(v2); + + LLVector4a max = v0; + max.setMax(v1); + max.setMax(v2); + + LLVector4a center; + center.setAdd(min, max); + center.mul(0.5f); + + + tri->mPositionGroup.setVec(center[0], center[1], center[2]); + + LLVector4a size; + size.setSub(max,min); + + tri->mRadius = size.length3() * 0.5f; + + mOctree->insert(tri); + } + + LLVolumeOctreeRebound rebound(this); + rebound.traverse(mOctree); +} + +const LLVector3d& LLVolumeFace::Triangle::getPositionGroup() const +{ + return mPositionGroup; +} + +const F64& LLVolumeFace::Triangle::getBinRadius() const +{ + return mRadius; +} + void LLVolumeFace::swapData(LLVolumeFace& rhs) { llswap(rhs.mPositions, mPositions); diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 7c63266aab..a40a21b405 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -40,6 +40,9 @@ class LLPathParams; class LLVolumeParams; class LLProfile; class LLPath; + +template class LLOctreeNode; +class LLVector4a; class LLVolumeFace; class LLVolume; @@ -49,15 +52,14 @@ class LLVolume; //#include "vmath.h" #include "v2math.h" #include "v3math.h" +#include "v3dmath.h" #include "v4math.h" -#include "llvector4a.h" #include "llquaternion.h" #include "llstrider.h" #include "v4coloru.h" #include "llrefcount.h" #include "llfile.h" - //============================================================================ const S32 MIN_DETAIL_FACES = 6; @@ -830,6 +832,9 @@ public: LLVolumeFace& operator=(const LLVolumeFace& rhs); ~LLVolumeFace(); +private: + void freeData(); +public: BOOL create(LLVolume* volume, BOOL partial_build = FALSE); void createBinormals(); @@ -855,26 +860,19 @@ public: public: U16 mIndex; - bool operator==(const LLVolumeFace::VertexData& rhs) const - { - return getPosition().equal3(rhs.getPosition()) && - mTexCoord == rhs.mTexCoord && - getNormal().equal3(rhs.getNormal()); - } + bool operator==(const LLVolumeFace::VertexData& rhs) const; struct ComparePosition { - bool operator()(const LLVector4a& a, const LLVector4a& b) const - { - return a.less3(b); - } + bool operator()(const LLVector4a& a, const LLVector4a& b) const; }; typedef std::map, VertexMapData::ComparePosition > PointMap; }; void optimize(F32 angle_cutoff = 2.f); - + void createOctree(); + enum { SINGLE_MASK = 0x0001, @@ -919,6 +917,21 @@ public: // mWeights.size() should be empty or match mVertices.size() LLVector4a* mWeights; + class Triangle : public LLRefCount + { + public: + const LLVector4a* mV[3]; + U16 mIndex[3]; + + LLVector3d mPositionGroup; + F64 mRadius; + + virtual const LLVector3d& getPositionGroup() const; + virtual const F64& getBinRadius() const; + }; + + LLOctreeNode* mOctree; + private: BOOL createUnCutCubeCap(LLVolume* volume, BOOL partial_build = FALSE); BOOL createCap(LLVolume* volume, BOOL partial_build = FALSE); @@ -1084,10 +1097,12 @@ BOOL LLLineSegmentBoxIntersect(const F32* start, const F32* end, const F32* cent BOOL LLLineSegmentBoxIntersect(const LLVector3& start, const LLVector3& end, const LLVector3& center, const LLVector3& size); BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, const LLVector3& vert2, const LLVector3& orig, const LLVector3& dir, - F32* intersection_a, F32* intersection_b, F32* intersection_t, BOOL two_sided); + F32& intersection_a, F32& intersection_b, F32& intersection_t, BOOL two_sided); BOOL LLTriangleRayIntersect(const LLVector4a& vert0, const LLVector4a& vert1, const LLVector4a& vert2, const LLVector4a& orig, const LLVector4a& dir, - F32* intersection_a, F32* intersection_b, F32* intersection_t, BOOL two_sided); + F32& intersection_a, F32& intersection_b, F32& intersection_t); +BOOL LLTriangleRayIntersectTwoSided(const LLVector4a& vert0, const LLVector4a& vert1, const LLVector4a& vert2, const LLVector4a& orig, const LLVector4a& dir, + F32& intersection_a, F32& intersection_b, F32& intersection_t); diff --git a/indra/newview/llhudicon.cpp b/indra/newview/llhudicon.cpp index 3c5a4de7f8..63040904df 100644 --- a/indra/newview/llhudicon.cpp +++ b/indra/newview/llhudicon.cpp @@ -286,7 +286,6 @@ BOOL LLHUDIcon::lineSegmentIntersect(const LLVector3& start, const LLVector3& en LLVector4a upper_right; upper_right.setAdd(lower_right, y_scalea); - F32 t = 0.f; LLVector4a enda; enda.load3(end.mV); LLVector4a starta; @@ -294,8 +293,10 @@ BOOL LLHUDIcon::lineSegmentIntersect(const LLVector3& start, const LLVector3& en LLVector4a dir; dir.setSub(enda, starta); - if (LLTriangleRayIntersect(upper_right, upper_left, lower_right, starta, dir, NULL, NULL, &t, FALSE) || - LLTriangleRayIntersect(upper_left, lower_left, lower_right, starta, dir, NULL, NULL, &t, FALSE)) + F32 a,b,t; + + if (LLTriangleRayIntersect(upper_right, upper_left, lower_right, starta, dir, a,b,t) || + LLTriangleRayIntersect(upper_left, lower_left, lower_right, starta, dir, a,b,t)) { if (intersection) { diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp index 9ed5d13831..7f9eddc837 100644 --- a/indra/newview/llhudtext.cpp +++ b/indra/newview/llhudtext.cpp @@ -207,10 +207,11 @@ BOOL LLHUDText::lineSegmentIntersect(const LLVector3& start, const LLVector3& en } LLVector3 dir = end-start; - F32 t = 0.f; + F32 a,b,t; - if (LLTriangleRayIntersect(v[0], v[1], v[2], start, dir, NULL, NULL, &t, FALSE) || - LLTriangleRayIntersect(v[2], v[3], v[0], start, dir, NULL, NULL, &t, FALSE) ) + + if (LLTriangleRayIntersect(v[0], v[1], v[2], start, dir, a, b, t, FALSE) || + LLTriangleRayIntersect(v[2], v[3], v[0], start, dir, a, b, t, FALSE) ) { if (t <= 1.f) { diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index a5804aa04e..98fbebbc5d 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -65,6 +65,7 @@ #include "llweb.h" #include "llwindow.h" #include "llfloatertools.h" // to enable hide if build tools are up +#include "llvector4a.h" // Functions pulled from pipeline.cpp glh::matrix4f glh_get_current_modelview(); diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 470c332b42..60e704d360 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -2769,6 +2769,19 @@ void renderLights(LLDrawable* drawablep) } } +class LLRenderOctree : public LLOctreeTraveler +{ +public: + void visit(const LLOctreeNode* branch) + { + const LLVector3d& c = branch->getCenter(); + const LLVector3d& s = branch->getSize(); + + LLVector3 pos((F32) c.mdV[0], (F32) c.mdV[1], (F32) c.mdV[2]); + LLVector3 size((F32) s.mdV[0], (F32) s.mdV[1], (F32) s.mdV[2]); + drawBoxOutline(pos, size); + } +}; void renderRaycast(LLDrawable* drawablep) { @@ -2787,6 +2800,23 @@ void renderRaycast(LLDrawable* drawablep) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); pushVerts(drawablep->getFace(gDebugRaycastFaceHit), LLVertexBuffer::MAP_VERTEX); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + + LLVOVolume* vobj = drawablep->getVOVolume(); + LLVolume* volume = vobj->getVolume(); + if (volume && volume->getNumVolumeFaces() > gDebugRaycastFaceHit) + { + const LLVolumeFace& face = volume->getVolumeFace(gDebugRaycastFaceHit); + if (!face.mOctree) + { + ((LLVolumeFace*) &face)->createOctree(); + } + + gGL.pushMatrix(); + glMultMatrixf((F32*) vobj->getRelativeXform().mMatrix); + LLRenderOctree render; + render.traverse(face.mOctree); + gGL.popMatrix(); + } } else if (drawablep->isAvatar()) { diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp index 91c9b762c5..fe1e36cbe8 100644 --- a/indra/newview/llvograss.cpp +++ b/indra/newview/llvograss.cpp @@ -647,23 +647,23 @@ BOOL LLVOGrass::lineSegmentIntersect(const LLVector3& start, const LLVector3& en U32 idx0 = 0,idx1 = 0,idx2 = 0; - if (LLTriangleRayIntersect(v[0], v[1], v[2], start, dir, &a, &b, &t, FALSE)) + if (LLTriangleRayIntersect(v[0], v[1], v[2], start, dir, a, b, t, FALSE)) { hit = TRUE; idx0 = 0; idx1 = 1; idx2 = 2; } - else if (LLTriangleRayIntersect(v[1], v[3], v[2], start, dir, &a, &b, &t, FALSE)) + else if (LLTriangleRayIntersect(v[1], v[3], v[2], start, dir, a, b, t, FALSE)) { hit = TRUE; idx0 = 1; idx1 = 3; idx2 = 2; } - else if (LLTriangleRayIntersect(v[2], v[1], v[0], start, dir, &a, &b, &t, FALSE)) + else if (LLTriangleRayIntersect(v[2], v[1], v[0], start, dir, a, b, t, FALSE)) { normal1 = -normal1; hit = TRUE; idx0 = 2; idx1 = 1; idx2 = 0; } - else if (LLTriangleRayIntersect(v[2], v[3], v[1], start, dir, &a, &b, &t, FALSE)) + else if (LLTriangleRayIntersect(v[2], v[3], v[1], start, dir, a, b, t, FALSE)) { normal1 = -normal1; hit = TRUE; -- cgit v1.3 From 9a869d630162292864e01fdd1707efc609fbd6b4 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Sat, 29 May 2010 19:55:13 -0500 Subject: Octree triven raycast works, time to profile. --- indra/llmath/CMakeLists.txt | 2 + indra/llmath/lltreenode.h | 3 + indra/llmath/llvolume.cpp | 202 ++--------------------------------- indra/llmath/llvolume.h | 2 + indra/newview/llspatialpartition.cpp | 28 +++-- indra/newview/llviewerwindow.cpp | 21 +++- indra/newview/llviewerwindow.h | 6 +- 7 files changed, 58 insertions(+), 206 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt index 367486eee7..dda07133d5 100644 --- a/indra/llmath/CMakeLists.txt +++ b/indra/llmath/CMakeLists.txt @@ -22,6 +22,7 @@ set(llmath_SOURCE_FILES llsphere.cpp llvolume.cpp llvolumemgr.cpp + llvolumeoctree.cpp llsdutil_math.cpp m3math.cpp m4math.cpp @@ -66,6 +67,7 @@ set(llmath_HEADER_FILES llmatrix4a.h llvolume.h llvolumemgr.h + llvolumeoctree.h llsdutil_math.h m3math.h m4math.h diff --git a/indra/llmath/lltreenode.h b/indra/llmath/lltreenode.h index ee9836241a..e6d2521b2a 100644 --- a/indra/llmath/lltreenode.h +++ b/indra/llmath/lltreenode.h @@ -34,6 +34,9 @@ #include "stdtypes.h" #include "xform.h" +#include "llpointer.h" +#include "llrefcount.h" + #include template class LLTreeNode; diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index d261811aa2..c4172de651 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -48,6 +48,7 @@ #include "lloctree.h" #include "lldarray.h" #include "llvolume.h" +#include "llvolumeoctree.h" #include "llstl.h" #include "llsdserialize.h" #include "llvector4a.h" @@ -133,50 +134,6 @@ BOOL LLLineSegmentBoxIntersect(const F32* start, const F32* end, const F32* cent return true; } -BOOL LLLineSegmentBoxIntersect(const LLVector4a& start, const LLVector4a& end, const LLVector4a& center, const LLVector4a& size) -{ - LLVector4a fAWdU; - LLVector4a dir; - LLVector4a diff; - - dir.setSub(end, start); - dir.mul(0.5f); - - diff.setAdd(end,start); - diff.mul(0.5f); - diff.sub(center); - fAWdU.setAbs(dir); - - LLVector4a rhs; - rhs.setAdd(size, fAWdU); - - LLVector4a lhs; - lhs.setAbs(diff); - - S32 grt = lhs.greaterThan4(rhs).getComparisonMask(); - - if (grt & 0x7) - { - return false; - } - - LLVector4a f; - f.setCross3(dir, diff); - f.setAbs(f); - - LLVector4a v0; v0.mQ = _mm_shuffle_ps(size.mQ, size.mQ, _MM_SHUFFLE(3,1,0,0)); - LLVector4a v1; v1.mQ = _mm_shuffle_ps(fAWdU.mQ, fAWdU.mQ, _MM_SHUFFLE(3,2,2,1)); - lhs.setMul(v0, v1); - - v0.mQ = _mm_shuffle_ps(size.mQ, size.mQ, _MM_SHUFFLE(3,2,2,1)); - v1.mQ = _mm_shuffle_ps(fAWdU.mQ, fAWdU.mQ, _MM_SHUFFLE(3,1,0,0)); - rhs.setMul(v0, v1); - rhs.add(lhs); - - grt = f.greaterThan4(rhs).getComparisonMask(); - - return (grt & 0x7) ? false : true; -} // intersect test between triangle vert0, vert1, vert2 and a ray from orig in direction dir. @@ -203,7 +160,7 @@ BOOL LLTriangleRayIntersect(const LLVector4a& vert0, const LLVector4a& vert1, co LLVector4a det; det.setAllDot3(edge1, pvec); - if (det.greaterEqual4(LLVector4a::getApproximatelyZero()).getComparisonMask()) + if (det.greaterEqual4(LLVector4a::getApproximatelyZero()).getComparisonMask() & 0x7) { /* calculate distance from vert0 to ray origin */ LLVector4a tvec; @@ -213,8 +170,8 @@ BOOL LLTriangleRayIntersect(const LLVector4a& vert0, const LLVector4a& vert1, co LLVector4a u; u.setAllDot3(tvec,pvec); - if (u.greaterEqual4(LLVector4a::getZero()).getComparisonMask() && - u.lessEqual4(det).getComparisonMask()) + if ((u.greaterEqual4(LLVector4a::getZero()).getComparisonMask() & 0x7) && + (u.lessEqual4(det).getComparisonMask() & 0x7)) { /* prepare to test V parameter */ LLVector4a qvec; @@ -230,10 +187,10 @@ BOOL LLTriangleRayIntersect(const LLVector4a& vert0, const LLVector4a& vert1, co LLVector4a sum_uv; sum_uv.setAdd(u, v); - S32 v_gequal = v.greaterEqual4(LLVector4a::getZero()).getComparisonMask(); - S32 sum_lequal = sum_uv.lessEqual4(det).getComparisonMask(); + S32 v_gequal = v.greaterEqual4(LLVector4a::getZero()).getComparisonMask() & 0x7; + S32 sum_lequal = sum_uv.lessEqual4(det).getComparisonMask() & 0x7; - if (v_gequal && sum_lequal) + if (v_gequal && sum_lequal) { /* calculate t, scale parameters, ray intersects triangle */ LLVector4a t; @@ -338,44 +295,6 @@ BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, cons } } - -class LLVolumeOctreeListener : public LLOctreeListener -{ -public: - - LLVolumeOctreeListener(LLOctreeNode* node) - { - node->addListener(this); - - mBounds = (LLVector4a*) _mm_malloc(sizeof(LLVector4a)*4, 16); - mExtents = mBounds+2; - } - - ~LLVolumeOctreeListener() - { - _mm_free(mBounds); - } - - //LISTENER FUNCTIONS - virtual void handleChildAddition(const LLOctreeNode* parent, - LLOctreeNode* child) - { - new LLVolumeOctreeListener(child); - } - - virtual void handleStateChange(const LLTreeNode* node) { } - virtual void handleChildRemoval(const LLOctreeNode* parent, - const LLOctreeNode* child) { } - virtual void handleInsertion(const LLTreeNode* node, LLVolumeFace::Triangle* tri) { } - virtual void handleRemoval(const LLTreeNode* node, LLVolumeFace::Triangle* tri) { } - virtual void handleDestruction(const LLTreeNode* node) { } - - -public: - LLVector4a* mBounds; // bounding box (center, size) of this node and all its children (tight fit to objects) - LLVector4a* mExtents; // extents (min, max) of this node and all its children -}; - class LLVolumeOctreeRebound : public LLOctreeTravelerDepthFirst { public: @@ -4436,113 +4355,6 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, } -class LLOctreeTriangleRayIntersect : public LLOctreeTraveler -{ -public: - const LLVolumeFace* mFace; - LLVector4a mStart; - LLVector4a mDir; - LLVector4a mEnd; - LLVector3* mIntersection; - LLVector2* mTexCoord; - LLVector3* mNormal; - LLVector3* mBinormal; - F32* mClosestT; - bool mHitFace; - - LLOctreeTriangleRayIntersect(const LLVector4a& start, const LLVector4a& dir, - const LLVolumeFace* face, F32* closest_t, - LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal) - : mFace(face), - mStart(start), - mDir(dir), - mIntersection(intersection), - mTexCoord(tex_coord), - mNormal(normal), - mBinormal(bi_normal), - mClosestT(closest_t), - mHitFace(false) - { - mEnd.setAdd(mStart, mDir); - } - - void traverse(const LLOctreeNode* node) - { - LLVolumeOctreeListener* vl = (LLVolumeOctreeListener*) node->getListener(0); - - /*const F32* start = mStart.getF32(); - const F32* end = mEnd.getF32(); - const F32* center = vl->mBounds[0].getF32(); - const F32* size = vl->mBounds[1].getF32();*/ - - if (LLLineSegmentBoxIntersect(mStart, mEnd, vl->mBounds[0], vl->mBounds[1])) - { - node->accept(this); - for (S32 i = 0; i < node->getChildCount(); ++i) - { - traverse(node->getChild(i)); - } - } - } - - void visit(const LLOctreeNode* node) - { - for (LLOctreeNode::const_element_iter iter = - node->getData().begin(); iter != node->getData().end(); ++iter) - { - const LLVolumeFace::Triangle* tri = *iter; - - F32 a, b, t; - - if (LLTriangleRayIntersect(*tri->mV[0], *tri->mV[1], *tri->mV[2], - mStart, mDir, a, b, t)) - { - if ((t >= 0.f) && // if hit is after start - (t <= 1.f) && // and before end - (t < *mClosestT)) // and this hit is closer - { - *mClosestT = t; - mHitFace = true; - - if (mIntersection != NULL) - { - LLVector4a intersect = mDir; - intersect.mul(*mClosestT); - intersect.add(mStart); - mIntersection->set(intersect.getF32()); - } - - - if (mTexCoord != NULL) - { - LLVector2* tc = (LLVector2*) mFace->mTexCoords; - *mTexCoord = ((1.f - a - b) * tc[tri->mIndex[0]] + - a * tc[tri->mIndex[1]] + - b * tc[tri->mIndex[2]]); - - } - - if (mNormal != NULL) - { - LLVector4* norm = (LLVector4*) mFace->mNormals; - - *mNormal = ((1.f - a - b) * LLVector3(norm[tri->mIndex[0]]) + - a * LLVector3(norm[tri->mIndex[1]]) + - b * LLVector3(norm[tri->mIndex[2]])); - } - - if (mBinormal != NULL) - { - LLVector4* binormal = (LLVector4*) mFace->mBinormals; - *mBinormal = ((1.f - a - b) * LLVector3(binormal[tri->mIndex[0]]) + - a * LLVector3(binormal[tri->mIndex[1]]) + - b * LLVector3(binormal[tri->mIndex[2]])); - } - } - } - } - } -}; S32 LLVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, S32 face, diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index a40a21b405..0ae8aa19ca 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -42,6 +42,7 @@ class LLProfile; class LLPath; template class LLOctreeNode; + class LLVector4a; class LLVolumeFace; class LLVolume; @@ -1095,6 +1096,7 @@ void calc_binormal_from_triangle( BOOL LLLineSegmentBoxIntersect(const F32* start, const F32* end, const F32* center, const F32* size); BOOL LLLineSegmentBoxIntersect(const LLVector3& start, const LLVector3& end, const LLVector3& center, const LLVector3& size); +BOOL LLLineSegmentBoxIntersect(const LLVector4a& start, const LLVector4a& end, const LLVector4a& center, const LLVector4a& size); BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, const LLVector3& vert2, const LLVector3& orig, const LLVector3& dir, F32& intersection_a, F32& intersection_b, F32& intersection_t, BOOL two_sided); diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 60e704d360..355173772b 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -38,6 +38,7 @@ #include "llviewerobjectlist.h" #include "llvovolume.h" #include "llvolume.h" +#include "llvolumeoctree.h" #include "llviewercamera.h" #include "llface.h" #include "llviewercontrol.h" @@ -2769,17 +2770,26 @@ void renderLights(LLDrawable* drawablep) } } -class LLRenderOctree : public LLOctreeTraveler +class LLRenderOctreeRaycast : public LLOctreeTriangleRayIntersect { public: + + LLRenderOctreeRaycast(const LLVector3& start, const LLVector3& end) + { + mStart.load3(start.mV); + mEnd.load3(end.mV); + mDir.setSub(mEnd, mStart); + } + void visit(const LLOctreeNode* branch) { - const LLVector3d& c = branch->getCenter(); - const LLVector3d& s = branch->getSize(); + LLVolumeOctreeListener* vl = (LLVolumeOctreeListener*) branch->getListener(0); - LLVector3 pos((F32) c.mdV[0], (F32) c.mdV[1], (F32) c.mdV[2]); - LLVector3 size((F32) s.mdV[0], (F32) s.mdV[1], (F32) s.mdV[2]); - drawBoxOutline(pos, size); + LLVector3 center, size; + center.set(vl->mBounds[0].getF32()); + size.set(vl->mBounds[1].getF32()); + + drawBoxOutline(center, size); } }; @@ -2813,7 +2823,11 @@ void renderRaycast(LLDrawable* drawablep) gGL.pushMatrix(); glMultMatrixf((F32*) vobj->getRelativeXform().mMatrix); - LLRenderOctree render; + LLVector3 start, end; + start = vobj->agentPositionToVolume(gDebugRaycastStart); + end = vobj->agentPositionToVolume(gDebugRaycastEnd); + + LLRenderOctreeRaycast render(start, end); render.traverse(face.mOctree); gGL.popMatrix(); } diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 2422995288..0564f02ce5 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -231,6 +231,8 @@ LLVector2 gDebugRaycastTexCoord; LLVector3 gDebugRaycastNormal; LLVector3 gDebugRaycastBinormal; S32 gDebugRaycastFaceHit; +LLVector3 gDebugRaycastStart; +LLVector3 gDebugRaycastEnd; // HUD display lines in lower right BOOL gDisplayWindInfo = FALSE; @@ -2529,7 +2531,9 @@ void LLViewerWindow::updateUI() &gDebugRaycastIntersection, &gDebugRaycastTexCoord, &gDebugRaycastNormal, - &gDebugRaycastBinormal); + &gDebugRaycastBinormal, + &gDebugRaycastStart, + &gDebugRaycastEnd); } updateMouseDelta(); @@ -3445,7 +3449,9 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de LLVector3 *intersection, LLVector2 *uv, LLVector3 *normal, - LLVector3 *binormal) + LLVector3 *binormal, + LLVector3* start, + LLVector3* end) { S32 x = mouse_x; S32 y = mouse_y; @@ -3477,7 +3483,16 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de LLVector3 mouse_world_start = mouse_point_global; LLVector3 mouse_world_end = mouse_point_global + mouse_direction_global * depth; - + if (start) + { + *start = mouse_world_start; + } + + if (end) + { + *end = mouse_world_end; + } + LLViewerObject* found = NULL; if (this_object) // check only this object diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index 410445d97f..156a1ff8ad 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -361,7 +361,9 @@ public: LLVector3 *intersection = NULL, LLVector2 *uv = NULL, LLVector3 *normal = NULL, - LLVector3 *binormal = NULL); + LLVector3 *binormal = NULL, + LLVector3* start = NULL, + LLVector3* end = NULL); // Returns a pointer to the last object hit @@ -507,6 +509,8 @@ extern LLVector2 gDebugRaycastTexCoord; extern LLVector3 gDebugRaycastNormal; extern LLVector3 gDebugRaycastBinormal; extern S32 gDebugRaycastFaceHit; +extern LLVector3 gDebugRaycastStart; +extern LLVector3 gDebugRaycastEnd; extern S32 CHAT_BAR_HEIGHT; -- cgit v1.3 From 26ba00b5554d20ee958693ced87b36fa7f6e3d99 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 3 Jun 2010 12:52:28 -0500 Subject: Vectorized octree and much of llspatialpartition and lldrawable. Octree driven raycast. --- indra/llmath/llcamera.cpp | 216 ++++++--------- indra/llmath/llcamera.h | 29 +- indra/llmath/lloctree.h | 239 ++++++++-------- indra/llmath/llvolume.cpp | 31 +-- indra/llmath/llvolume.h | 16 +- indra/llrender/llvertexbuffer.h | 11 + indra/llui/lllineeditor.cpp | 9 +- indra/newview/lldrawable.cpp | 163 ++++++----- indra/newview/lldrawable.h | 34 ++- indra/newview/llface.cpp | 164 +++++++---- indra/newview/llface.h | 15 +- indra/newview/llflexibleobject.cpp | 6 +- indra/newview/llflexibleobject.h | 2 +- indra/newview/llselectmgr.cpp | 16 +- indra/newview/llspatialpartition.cpp | 520 ++++++++++++++++++++++------------- indra/newview/llspatialpartition.h | 80 ++++-- indra/newview/llsurfacepatch.cpp | 6 +- indra/newview/llviewerdisplay.cpp | 7 +- indra/newview/llviewerobject.cpp | 40 ++- indra/newview/llviewerobject.h | 4 +- indra/newview/llviewerpartsim.cpp | 4 +- indra/newview/llvoavatar.cpp | 100 ++++--- indra/newview/llvoavatar.h | 10 +- indra/newview/llvopartgroup.cpp | 10 +- indra/newview/llvopartgroup.h | 2 +- indra/newview/llvosurfacepatch.cpp | 19 +- indra/newview/llvosurfacepatch.h | 2 +- indra/newview/llvotree.cpp | 17 +- indra/newview/llvotree.h | 2 +- indra/newview/llvovolume.cpp | 35 +-- indra/newview/llvovolume.h | 6 +- indra/newview/llvowater.cpp | 20 +- indra/newview/llvowater.h | 2 +- indra/newview/pipeline.cpp | 257 +++++++++++++++-- indra/newview/pipeline.h | 9 + 35 files changed, 1333 insertions(+), 770 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llcamera.cpp b/indra/llmath/llcamera.cpp index 487ed6451f..6b56e4870e 100644 --- a/indra/llmath/llcamera.cpp +++ b/indra/llmath/llcamera.cpp @@ -48,10 +48,10 @@ LLCamera::LLCamera() : mPlaneCount(6), mFrustumCornerDist(0.f) { + alignPlanes(); calculateFrustumPlanes(); } - LLCamera::LLCamera(F32 vertical_fov_rads, F32 aspect_ratio, S32 view_height_in_pixels, F32 near_plane, F32 far_plane) : LLCoordFrame(), mViewHeightInPixels(view_height_in_pixels), @@ -59,6 +59,7 @@ LLCamera::LLCamera(F32 vertical_fov_rads, F32 aspect_ratio, S32 view_height_in_p mPlaneCount(6), mFrustumCornerDist(0.f) { + alignPlanes(); mAspect = llclamp(aspect_ratio, MIN_ASPECT_RATIO, MAX_ASPECT_RATIO); mNearPlane = llclamp(near_plane, MIN_NEAR_PLANE, MAX_NEAR_PLANE); if(far_plane < 0) far_plane = DEFAULT_FAR_PLANE; @@ -67,6 +68,23 @@ LLCamera::LLCamera(F32 vertical_fov_rads, F32 aspect_ratio, S32 view_height_in_p setView(vertical_fov_rads); } +LLCamera::~LLCamera() +{ + +} + +const LLCamera& LLCamera::operator=(const LLCamera& rhs) +{ + memcpy(this, &rhs, sizeof(LLCamera)); + alignPlanes(); + LLVector4a::memcpyNonAliased16((F32*) mAgentPlanes, (F32*) rhs.mAgentPlanes, 4*7); + return *this; +} + +void LLCamera::alignPlanes() +{ + mAgentPlanes = (LLPlane*) LL_NEXT_ALIGNED_ADDRESS(mAgentPlaneBuffer); +} // ---------------- LLCamera::getFoo() member functions ---------------- @@ -91,8 +109,8 @@ F32 LLCamera::getMaxView() const void LLCamera::setUserClipPlane(LLPlane plane) { mPlaneCount = 7; - mAgentPlanes[6].p = plane; - mAgentPlanes[6].mask = calcPlaneMask(plane); + mAgentPlanes[6] = plane; + mPlaneMask[6] = calcPlaneMask(plane); } void LLCamera::disableUserClipPlane() @@ -164,129 +182,66 @@ size_t LLCamera::readFrustumFromBuffer(const char *buffer) // ---------------- test methods ---------------- -S32 LLCamera::AABBInFrustum(const LLVector3 ¢er, const LLVector3& radius) -{ - static const LLVector3 scaler[] = { - LLVector3(-1,-1,-1), - LLVector3( 1,-1,-1), - LLVector3(-1, 1,-1), - LLVector3( 1, 1,-1), - LLVector3(-1,-1, 1), - LLVector3( 1,-1, 1), - LLVector3(-1, 1, 1), - LLVector3( 1, 1, 1) +S32 LLCamera::AABBInFrustum(const LLVector4a ¢er, const LLVector4a& radius) +{ + static const LLVector4a scaler[] = { + LLVector4a(-1,-1,-1), + LLVector4a( 1,-1,-1), + LLVector4a(-1, 1,-1), + LLVector4a( 1, 1,-1), + LLVector4a(-1,-1, 1), + LLVector4a( 1,-1, 1), + LLVector4a(-1, 1, 1), + LLVector4a( 1, 1, 1) }; U8 mask = 0; S32 result = 2; - /*if (mFrustumCornerDist > 0.f && radius.magVecSquared() > mFrustumCornerDist * mFrustumCornerDist) - { //box is larger than frustum, check frustum quads against box planes - - static const LLVector3 dir[] = - { - LLVector3(1, 0, 0), - LLVector3(-1, 0, 0), - LLVector3(0, 1, 0), - LLVector3(0, -1, 0), - LLVector3(0, 0, 1), - LLVector3(0, 0, -1) - }; - - U32 quads[] = + for (U32 i = 0; i < mPlaneCount; i++) + { + mask = mPlaneMask[i]; + if (mask == 0xff) { - 0, 1, 2, 3, - 0, 1, 5, 4, - 2, 3, 7, 6, - 3, 0, 7, 4, - 1, 2, 6, 4, - 4, 5, 6, 7 - }; - - result = 0; - - BOOL total_inside = TRUE; - for (U32 i = 0; i < 6; i++) - { - LLVector3 p = center + radius.scaledVec(dir[i]); - F32 d = -p*dir[i]; - - for (U32 j = 0; j < 6; j++) - { //for each quad - F32 dist = mAgentFrustum[quads[j*4+0]]*dir[i] + d; - if (dist > 0) - { //at least one frustum point is outside the AABB - total_inside = FALSE; - for (U32 k = 1; k < 4; k++) - { //for each other point on quad - if ( mAgentFrustum[quads[j*4+k]]*dir[i]+d <= 0.f) - { //quad is straddling some plane of AABB - return 1; - } - } - } - else - { - for (U32 k = 1; k < 4; k++) - { - if (mAgentFrustum[quads[j*4+k]]*dir[i]+d > 0.f) - { - return 1; - } - } - } - } + continue; } - if (total_inside) + const LLPlane& p = mAgentPlanes[i]; + const LLVector4a& n = reinterpret_cast(p); + float d = p.mV[3]; + LLVector4a rscale; + rscale.setMul(radius, scaler[mask]); + + LLVector4a minp, maxp; + minp.setSub(center, rscale); + maxp.setAdd(center, rscale); + + if (n.dot3(minp) > -d) { - result = 1; + return 0; } - } - else*/ - { - for (U32 i = 0; i < mPlaneCount; i++) + + if (n.dot3(maxp) > -d) { - mask = mAgentPlanes[i].mask; - if (mask == 0xff) - { - continue; - } - LLPlane p = mAgentPlanes[i].p; - LLVector3 n = LLVector3(p); - float d = p.mV[3]; - LLVector3 rscale = radius.scaledVec(scaler[mask]); - - LLVector3 minp = center - rscale; - LLVector3 maxp = center + rscale; - - if (n * minp > -d) - { - return 0; - } - - if (n * maxp > -d) - { - result = 1; - } + result = 1; } } - return result; } -S32 LLCamera::AABBInFrustumNoFarClip(const LLVector3 ¢er, const LLVector3& radius) -{ - static const LLVector3 scaler[] = { - LLVector3(-1,-1,-1), - LLVector3( 1,-1,-1), - LLVector3(-1, 1,-1), - LLVector3( 1, 1,-1), - LLVector3(-1,-1, 1), - LLVector3( 1,-1, 1), - LLVector3(-1, 1, 1), - LLVector3( 1, 1, 1) + +S32 LLCamera::AABBInFrustumNoFarClip(const LLVector4a& center, const LLVector4a& radius) +{ + static const LLVector4a scaler[] = { + LLVector4a(-1,-1,-1), + LLVector4a( 1,-1,-1), + LLVector4a(-1, 1,-1), + LLVector4a( 1, 1,-1), + LLVector4a(-1,-1, 1), + LLVector4a( 1,-1, 1), + LLVector4a(-1, 1, 1), + LLVector4a( 1, 1, 1) }; U8 mask = 0; @@ -299,25 +254,28 @@ S32 LLCamera::AABBInFrustumNoFarClip(const LLVector3 ¢er, const LLVector3& r continue; } - mask = mAgentPlanes[i].mask; + mask = mPlaneMask[i]; if (mask == 0xff) { continue; } - LLPlane p = mAgentPlanes[i].p; - LLVector3 n = LLVector3(p); + + const LLPlane& p = mAgentPlanes[i]; + const LLVector4a& n = reinterpret_cast(p); float d = p.mV[3]; - LLVector3 rscale = radius.scaledVec(scaler[mask]); + LLVector4a rscale; + rscale.setMul(radius, scaler[mask]); - LLVector3 minp = center - rscale; - LLVector3 maxp = center + rscale; + LLVector4a minp, maxp; + minp.setSub(center, rscale); + maxp.setAdd(center, rscale); - if (n * minp > -d) + if (n.dot3(minp) > -d) { return 0; } - if (n * maxp > -d) + if (n.dot3(maxp) > -d) { result = 1; } @@ -447,12 +405,12 @@ int LLCamera::sphereInFrustum(const LLVector3 &sphere_center, const F32 radius) int res = 2; for (int i = 0; i < 6; i++) { - if (mAgentPlanes[i].mask == 0xff) + if (mPlaneMask[i] == 0xff) { continue; } - float d = mAgentPlanes[i].p.dist(sphere_center); + float d = mAgentPlanes[i].dist(sphere_center); if (d > radius) { @@ -644,12 +602,14 @@ void LLCamera::ignoreAgentFrustumPlane(S32 idx) return; } - mAgentPlanes[idx].mask = 0xff; - mAgentPlanes[idx].p.clearVec(); + mPlaneMask[idx] = 0xff; + mAgentPlanes[idx].clearVec(); } void LLCamera::calcAgentFrustumPlanes(LLVector3* frust) { + alignPlanes(); + for (int i = 0; i < 8; i++) { mAgentFrustum[i] = frust[i]; @@ -662,27 +622,27 @@ void LLCamera::calcAgentFrustumPlanes(LLVector3* frust) //order of planes is important, keep most likely to fail in the front of the list //near - frust[0], frust[1], frust[2] - mAgentPlanes[2].p = planeFromPoints(frust[0], frust[1], frust[2]); + mAgentPlanes[2] = planeFromPoints(frust[0], frust[1], frust[2]); //far - mAgentPlanes[5].p = planeFromPoints(frust[5], frust[4], frust[6]); + mAgentPlanes[5] = planeFromPoints(frust[5], frust[4], frust[6]); //left - mAgentPlanes[0].p = planeFromPoints(frust[4], frust[0], frust[7]); + mAgentPlanes[0] = planeFromPoints(frust[4], frust[0], frust[7]); //right - mAgentPlanes[1].p = planeFromPoints(frust[1], frust[5], frust[6]); + mAgentPlanes[1] = planeFromPoints(frust[1], frust[5], frust[6]); //top - mAgentPlanes[4].p = planeFromPoints(frust[3], frust[2], frust[6]); + mAgentPlanes[4] = planeFromPoints(frust[3], frust[2], frust[6]); //bottom - mAgentPlanes[3].p = planeFromPoints(frust[1], frust[0], frust[4]); + mAgentPlanes[3] = planeFromPoints(frust[1], frust[0], frust[4]); //cache plane octant facing mask for use in AABBInFrustum for (U32 i = 0; i < mPlaneCount; i++) { - mAgentPlanes[i].mask = calcPlaneMask(mAgentPlanes[i].p); + mPlaneMask[i] = calcPlaneMask(mAgentPlanes[i]); } } diff --git a/indra/llmath/llcamera.h b/indra/llmath/llcamera.h index d6c5f7bbb1..c40e819dcf 100644 --- a/indra/llmath/llcamera.h +++ b/indra/llmath/llcamera.h @@ -37,6 +37,7 @@ #include "llmath.h" #include "llcoordframe.h" #include "llplane.h" +#include "llvector4a.h" const F32 DEFAULT_FIELD_OF_VIEW = 60.f * DEG_TO_RAD; const F32 DEFAULT_ASPECT_RATIO = 640.f / 480.f; @@ -79,6 +80,14 @@ class LLCamera : public LLCoordFrame { public: + + LLCamera(const LLCamera& rhs) + { + *this = rhs; + } + + const LLCamera& operator=(const LLCamera& rhs); + enum { PLANE_LEFT = 0, PLANE_RIGHT = 1, @@ -129,13 +138,9 @@ private: LLPlane mWorldPlanes[PLANE_NUM]; LLPlane mHorizPlanes[HORIZ_PLANE_NUM]; - struct frustum_plane - { - frustum_plane() : mask(0) {} - LLPlane p; - U8 mask; - }; - frustum_plane mAgentPlanes[7]; //frustum planes in agent space a la gluUnproject (I'm a bastard, I know) - DaveP + LLPlane* mAgentPlanes; //frustum planes in agent space a la gluUnproject (I'm a bastard, I know) - DaveP + U8 mAgentPlaneBuffer[sizeof(LLPlane)*8]; + U8 mPlaneMask[7]; U32 mPlaneCount; //defaults to 6, if setUserClipPlane is called, uses user supplied clip plane in @@ -143,12 +148,14 @@ private: public: LLVector3 mAgentFrustum[8]; //8 corners of 6-plane frustum F32 mFrustumCornerDist; //distance to corner of frustum against far clip plane - LLPlane& getAgentPlane(U32 idx) { return mAgentPlanes[idx].p; } + LLPlane& getAgentPlane(U32 idx) { return mAgentPlanes[idx]; } public: LLCamera(); LLCamera(F32 vertical_fov_rads, F32 aspect_ratio, S32 view_height_in_pixels, F32 near_plane, F32 far_plane); - virtual ~LLCamera(){} // no-op virtual destructor + virtual ~LLCamera(); + + void alignPlanes(); void setUserClipPlane(LLPlane plane); void disableUserClipPlane(); @@ -199,8 +206,8 @@ public: S32 sphereInFrustum(const LLVector3 ¢er, const F32 radius) const; S32 pointInFrustum(const LLVector3 &point) const { return sphereInFrustum(point, 0.0f); } S32 sphereInFrustumFull(const LLVector3 ¢er, const F32 radius) const { return sphereInFrustum(center, radius); } - S32 AABBInFrustum(const LLVector3 ¢er, const LLVector3& radius); - S32 AABBInFrustumNoFarClip(const LLVector3 ¢er, const LLVector3& radius); + S32 AABBInFrustum(const LLVector4a& center, const LLVector4a& radius); + S32 AABBInFrustumNoFarClip(const LLVector4a& center, const LLVector4a& radius); //does a quick 'n dirty sphere-sphere check S32 sphereInFrustumQuick(const LLVector3 &sphere_center, const F32 radius); diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index 8bba12783f..ae2259dba0 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -35,6 +35,7 @@ #include "lltreenode.h" #include "v3math.h" +#include "llvector4a.h" #include #include @@ -44,7 +45,7 @@ #define OCT_ERRS LL_WARNS("OctreeErrors") #endif -#define LL_OCTREE_PARANOIA_CHECK 0 +#define LL_OCTREE_PARANOIA_CHECK 1 #if LL_DARWIN #define LL_OCTREE_MAX_CAPACITY 32 #else @@ -94,23 +95,22 @@ public: typedef LLOctreeNode oct_node; typedef LLOctreeListener oct_listener; - static const U8 OCTANT_POSITIVE_X = 0x01; - static const U8 OCTANT_POSITIVE_Y = 0x02; - static const U8 OCTANT_POSITIVE_Z = 0x04; - - LLOctreeNode( LLVector3d center, - LLVector3d size, + LLOctreeNode( const LLVector4a& center, + const LLVector4a& size, BaseType* parent, - U8 octant = 255) + S32 octant = -1) : mParent((oct_node*)parent), - mCenter(center), - mSize(size), mOctant(octant) { + mD = (LLVector4a*) _mm_malloc(sizeof(LLVector4a)*4, 16); + + mD[CENTER] = center; + mD[SIZE] = size; + updateMinMax(); - if ((mOctant == 255) && mParent) + if ((mOctant == -1) && mParent) { - mOctant = ((oct_node*) mParent)->getOctant(mCenter.mdV); + mOctant = ((oct_node*) mParent)->getOctant(mD[CENTER]); } clearChildren(); @@ -124,43 +124,30 @@ public: { delete getChild(i); } + + _mm_free(mD); } inline const BaseType* getParent() const { return mParent; } - inline void setParent(BaseType* parent) { mParent = (oct_node*) parent; } - inline const LLVector3d& getCenter() const { return mCenter; } - inline const LLVector3d& getSize() const { return mSize; } - inline void setCenter(LLVector3d center) { mCenter = center; } - inline void setSize(LLVector3d size) { mSize = size; } - inline oct_node* getNodeAt(T* data) { return getNodeAt(data->getPositionGroup(), data->getBinRadius()); } - inline U8 getOctant() const { return mOctant; } - inline void setOctant(U8 octant) { mOctant = octant; } + inline void setParent(BaseType* parent) { mParent = (oct_node*) parent; } + inline const LLVector4a& getCenter() const { return mD[CENTER]; } + inline const LLVector4a& getSize() const { return mD[SIZE]; } + inline void setCenter(const LLVector4a& center) { mD[CENTER] = center; } + inline void setSize(const LLVector4a& size) { mD[SIZE] = size; } + inline oct_node* getNodeAt(T* data) { return getNodeAt(data->getPositionGroup(), data->getBinRadius()); } + inline S32 getOctant() const { return mOctant; } + inline void setOctant(S32 octant) { mOctant = octant; } inline const oct_node* getOctParent() const { return (const oct_node*) getParent(); } inline oct_node* getOctParent() { return (oct_node*) getParent(); } - U8 getOctant(const F64 pos[]) const //get the octant pos is in + S32 getOctant(const LLVector4a& pos) const //get the octant pos is in { - U8 ret = 0; - - if (pos[0] > mCenter.mdV[0]) - { - ret |= OCTANT_POSITIVE_X; - } - if (pos[1] > mCenter.mdV[1]) - { - ret |= OCTANT_POSITIVE_Y; - } - if (pos[2] > mCenter.mdV[2]) - { - ret |= OCTANT_POSITIVE_Z; - } - - return ret; + return pos.greaterThan4(mD[CENTER]).getComparisonMask() & 0x7; } - inline bool isInside(const LLVector3d& pos, const F64& rad) const + inline bool isInside(const LLVector4a& pos, const F32& rad) const { - return rad <= mSize.mdV[0]*2.0 && isInside(pos); + return rad <= mD[SIZE][0]*2.f && isInside(pos); } inline bool isInside(T* data) const @@ -168,29 +155,27 @@ public: return isInside(data->getPositionGroup(), data->getBinRadius()); } - bool isInside(const LLVector3d& pos) const + bool isInside(const LLVector4a& pos) const { - const F64& x = pos.mdV[0]; - const F64& y = pos.mdV[1]; - const F64& z = pos.mdV[2]; - - if (x > mMax.mdV[0] || x <= mMin.mdV[0] || - y > mMax.mdV[1] || y <= mMin.mdV[1] || - z > mMax.mdV[2] || z <= mMin.mdV[2]) + S32 gt = pos.greaterThan4(mD[MAX]).getComparisonMask() & 0x7; + if (gt) { return false; } - + + S32 lt = pos.lessEqual4(mD[MIN]).getComparisonMask() & 0x7; + if (lt) + { + return false; + } + return true; } void updateMinMax() { - for (U32 i = 0; i < 3; i++) - { - mMax.mdV[i] = mCenter.mdV[i] + mSize.mdV[i]; - mMin.mdV[i] = mCenter.mdV[i] - mSize.mdV[i]; - } + mD[MAX].setAdd(mD[CENTER], mD[SIZE]); + mD[MIN].setSub(mD[CENTER], mD[SIZE]); } inline oct_listener* getOctListener(U32 index) @@ -203,34 +188,34 @@ public: return contains(xform->getBinRadius()); } - bool contains(F64 radius) + bool contains(F32 radius) { if (mParent == NULL) { //root node contains nothing return false; } - F64 size = mSize.mdV[0]; - F64 p_size = size * 2.0; + F32 size = mD[SIZE][0]; + F32 p_size = size * 2.f; - return (radius <= 0.001 && size <= 0.001) || + return (radius <= 0.001f && size <= 0.001f) || (radius <= p_size && radius > size); } - static void pushCenter(LLVector3d ¢er, const LLVector3d &size, const T* data) + static void pushCenter(LLVector4a ¢er, const LLVector4a &size, const T* data) { - const LLVector3d& pos = data->getPositionGroup(); - for (U32 i = 0; i < 3; i++) - { - if (pos.mdV[i] > center.mdV[i]) - { - center.mdV[i] += size.mdV[i]; - } - else - { - center.mdV[i] -= size.mdV[i]; - } - } + const LLVector4a& pos = data->getPositionGroup(); + + LLVector4a gt = pos.greaterThan4(center); + + LLVector4a up; + up.mQ = _mm_and_ps(size.mQ, gt.mQ); + + LLVector4a down; + down.mQ = _mm_andnot_ps(gt.mQ, size.mQ); + + center.add(up); + center.sub(down); } void accept(oct_traveler* visitor) { visitor->visit(this); } @@ -249,21 +234,21 @@ public: void accept(tree_traveler* visitor) const { visitor->visit(this); } void accept(oct_traveler* visitor) const { visitor->visit(this); } - oct_node* getNodeAt(const LLVector3d& pos, const F64& rad) + oct_node* getNodeAt(const LLVector4a& pos, const F32& rad) { LLOctreeNode* node = this; if (node->isInside(pos, rad)) { //do a quick search by octant - U8 octant = node->getOctant(pos.mdV); + S32 octant = node->getOctant(pos); BOOL keep_going = TRUE; //traverse the tree until we find a node that has no node //at the appropriate octant or is smaller than the object. //by definition, that node is the smallest node that contains // the data - while (keep_going && node->getSize().mdV[0] >= rad) + while (keep_going && node->getSize()[0] >= rad) { keep_going = FALSE; for (U32 i = 0; i < node->getChildCount() && !keep_going; i++) @@ -271,7 +256,7 @@ public: if (node->getChild(i)->getOctant() == octant) { node = node->getChild(i); - octant = node->getOctant(pos.mdV); + octant = node->getOctant(pos); keep_going = TRUE; } } @@ -289,7 +274,7 @@ public: { if (data == NULL) { - //OCT_ERRS << "!!! INVALID ELEMENT ADDED TO OCTREE BRANCH !!!" << llendl; + OCT_ERRS << "!!! INVALID ELEMENT ADDED TO OCTREE BRANCH !!!" << llendl; return false; } LLOctreeNode* parent = getOctParent(); @@ -299,7 +284,7 @@ public: { if (getElementCount() < LL_OCTREE_MAX_CAPACITY && (contains(data->getBinRadius()) || - (data->getBinRadius() > getSize().mdV[0] && + (data->getBinRadius() > getSize()[0] && parent && parent->getElementCount() >= LL_OCTREE_MAX_CAPACITY))) { //it belongs here #if LL_OCTREE_PARANOIA_CHECK @@ -330,16 +315,22 @@ public: } //it's here, but no kids are in the right place, make a new kid - LLVector3d center(getCenter()); - LLVector3d size(getSize()*0.5); + LLVector4a center = getCenter(); + LLVector4a size = getSize(); + size.mul(0.5f); //push center in direction of data LLOctreeNode::pushCenter(center, size, data); // handle case where floating point number gets too small - if( llabs(center.mdV[0] - getCenter().mdV[0]) < F_APPROXIMATELY_ZERO && - llabs(center.mdV[1] - getCenter().mdV[1]) < F_APPROXIMATELY_ZERO && - llabs(center.mdV[2] - getCenter().mdV[2]) < F_APPROXIMATELY_ZERO) + LLVector4a val; + val.setSub(center, getCenter()); + val.setAbs(val); + LLVector4a app_zero; + app_zero.mQ = F_APPROXIMATELY_ZERO_4A; + S32 lt = val.lessThan4(app_zero).getComparisonMask() & 0x7; + + if( lt == 0x7 ) { mData.insert(data); BaseType::insert(data); @@ -357,7 +348,7 @@ public: //make sure no existing node matches this position for (U32 i = 0; i < getChildCount(); i++) { - if (mChild[i]->getCenter() == center) + if (mChild[i]->getCenter().equal3(center)) { OCT_ERRS << "Octree detected duplicate child center and gave up." << llendl; return false; @@ -375,7 +366,7 @@ public: else { //it's not in here, give it to the root - //OCT_ERRS << "Octree insertion failed, starting over from root!" << llendl; + OCT_ERRS << "Octree insertion failed, starting over from root!" << llendl; oct_node* node = this; @@ -482,13 +473,19 @@ public: void addChild(oct_node* child, BOOL silent = FALSE) { #if LL_OCTREE_PARANOIA_CHECK + + if (child->getSize().equal3(getSize())) + { + OCT_ERRS << "Child size is same as parent size!" << llendl; + } + for (U32 i = 0; i < getChildCount(); i++) { - if(mChild[i]->getSize() != child->getSize()) + if(!mChild[i]->getSize().equal3(child->getSize())) { OCT_ERRS <<"Invalid octree child size." << llendl; } - if (mChild[i]->getCenter() == child->getCenter()) + if (mChild[i]->getCenter().equal3(child->getCenter())) { OCT_ERRS <<"Duplicate octree child position." << llendl; } @@ -513,7 +510,7 @@ public: } } - void removeChild(U8 index, BOOL destroy = FALSE) + void removeChild(S32 index, BOOL destroy = FALSE) { for (U32 i = 0; i < this->getListenerCount(); i++) { @@ -554,18 +551,26 @@ public: } } - //OCT_ERRS << "Octree failed to delete requested child." << llendl; + OCT_ERRS << "Octree failed to delete requested child." << llendl; } protected: + typedef enum + { + CENTER = 0, + SIZE = 1, + MAX = 2, + MIN = 3 + } eDName; + + LLVector4a* mD; + + oct_node* mParent; + S32 mOctant; + child_list mChild; element_list mData; - oct_node* mParent; - LLVector3d mCenter; - LLVector3d mSize; - LLVector3d mMax; - LLVector3d mMin; - U8 mOctant; + }; //just like a regular node, except it might expand on insert and compress on balance @@ -576,9 +581,9 @@ public: typedef LLOctreeNode BaseType; typedef LLOctreeNode oct_node; - LLOctreeRoot( LLVector3d center, - LLVector3d size, - BaseType* parent) + LLOctreeRoot(const LLVector4a& center, + const LLVector4a& size, + BaseType* parent) : BaseType(center, size, parent) { } @@ -619,28 +624,33 @@ public: { if (data == NULL) { - //OCT_ERRS << "!!! INVALID ELEMENT ADDED TO OCTREE ROOT !!!" << llendl; + OCT_ERRS << "!!! INVALID ELEMENT ADDED TO OCTREE ROOT !!!" << llendl; return false; } if (data->getBinRadius() > 4096.0) { - //OCT_ERRS << "!!! ELEMENT EXCEEDS MAXIMUM SIZE IN OCTREE ROOT !!!" << llendl; + OCT_ERRS << "!!! ELEMENT EXCEEDS MAXIMUM SIZE IN OCTREE ROOT !!!" << llendl; return false; } - const F64 MAX_MAG = 1024.0*1024.0; + LLVector4a MAX_MAG; + MAX_MAG.splat(1024.f*1024.f); + + const LLVector4a& v = data->getPositionGroup(); + + LLVector4a val; + val.setSub(v, mD[CENTER]); + val.setAbs(val); + S32 lt = val.lessThan4(MAX_MAG).getComparisonMask() & 0x7; - const LLVector3d& v = data->getPositionGroup(); - if (!(fabs(v.mdV[0]-this->mCenter.mdV[0]) < MAX_MAG && - fabs(v.mdV[1]-this->mCenter.mdV[1]) < MAX_MAG && - fabs(v.mdV[2]-this->mCenter.mdV[2]) < MAX_MAG)) + if (lt != 0x7) { - //OCT_ERRS << "!!! ELEMENT EXCEEDS RANGE OF SPATIAL PARTITION !!!" << llendl; + OCT_ERRS << "!!! ELEMENT EXCEEDS RANGE OF SPATIAL PARTITION !!!" << llendl; return false; } - if (this->getSize().mdV[0] > data->getBinRadius() && isInside(data->getPositionGroup())) + if (this->getSize()[0] > data->getBinRadius() && isInside(data->getPositionGroup())) { //we got it, just act like a branch oct_node* node = getNodeAt(data); @@ -656,31 +666,34 @@ public: else if (this->getChildCount() == 0) { //first object being added, just wrap it up - while (!(this->getSize().mdV[0] > data->getBinRadius() && isInside(data->getPositionGroup()))) + while (!(this->getSize()[0] > data->getBinRadius() && isInside(data->getPositionGroup()))) { - LLVector3d center, size; + LLVector4a center, size; center = this->getCenter(); size = this->getSize(); LLOctreeNode::pushCenter(center, size, data); this->setCenter(center); - this->setSize(size*2); + size.mul(2.f); + this->setSize(size); this->updateMinMax(); } LLOctreeNode::insert(data); } else { - while (!(this->getSize().mdV[0] > data->getBinRadius() && isInside(data->getPositionGroup()))) + while (!(this->getSize()[0] > data->getBinRadius() && isInside(data->getPositionGroup()))) { //the data is outside the root node, we need to grow - LLVector3d center(this->getCenter()); - LLVector3d size(this->getSize()); + LLVector4a center(this->getCenter()); + LLVector4a size(this->getSize()); //expand this node - LLVector3d newcenter(center); + LLVector4a newcenter(center); LLOctreeNode::pushCenter(newcenter, size, data); this->setCenter(newcenter); - this->setSize(size*2); + LLVector4a size2 = size; + size2.mul(2.f); + this->setSize(size2); this->updateMinMax(); //copy our children to a new branch diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index c4172de651..72833c019f 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -295,7 +295,7 @@ BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, cons } } -class LLVolumeOctreeRebound : public LLOctreeTravelerDepthFirst +class LLVolumeOctreeRebound : public LLOctreeTravelerDepthFirst { public: const LLVolumeFace* mFace; @@ -305,7 +305,7 @@ public: mFace = face; } - virtual void visit(const LLOctreeNode* branch) + virtual void visit(const LLOctreeNode* branch) { LLVolumeOctreeListener* node = (LLVolumeOctreeListener*) branch->getListener(0); @@ -314,12 +314,12 @@ public: if (branch->getElementCount() != 0) { - const LLVolumeFace::Triangle* tri = *(branch->getData().begin()); + const LLVolumeTriangle* tri = *(branch->getData().begin()); min = *(tri->mV[0]); max = *(tri->mV[0]); - for (LLOctreeNode::const_element_iter iter = + for (LLOctreeNode::const_element_iter iter = branch->getData().begin(); iter != branch->getData().end(); ++iter) { //stretch by triangles in node @@ -4394,7 +4394,7 @@ S32 LLVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& en LLVector4a box_size; box_size.setSub(face.mExtents[1], face.mExtents[0]); - if (LLLineSegmentBoxIntersect(start.getF32(), end.getF32(), box_center.getF32(), box_size.getF32())) + if (LLLineSegmentBoxIntersect(start, end, box_center, box_size)) { if (bi_normal != NULL) // if the caller wants binormals, we may need to generate them { @@ -5418,12 +5418,17 @@ void LLVolumeFace::optimize(F32 angle_cutoff) void LLVolumeFace::createOctree() { - mOctree = new LLOctreeRoot(LLVector3d(0,0,0), LLVector3d(1,1,1), NULL); + LLVector4a center; + LLVector4a size; + center.splat(0.f); + size.splat(1.f); + + mOctree = new LLOctreeRoot(center, size, NULL); new LLVolumeOctreeListener(mOctree); for (U32 i = 0; i < mNumIndices; i+= 3) { - Triangle* tri = new Triangle(); + LLPointer tri = new LLVolumeTriangle(); const LLVector4a& v0 = mPositions[mIndices[i]]; const LLVector4a& v1 = mPositions[mIndices[i+1]]; @@ -5449,8 +5454,7 @@ void LLVolumeFace::createOctree() center.setAdd(min, max); center.mul(0.5f); - - tri->mPositionGroup.setVec(center[0], center[1], center[2]); + *tri->mPositionGroup = center; LLVector4a size; size.setSub(max,min); @@ -5464,15 +5468,6 @@ void LLVolumeFace::createOctree() rebound.traverse(mOctree); } -const LLVector3d& LLVolumeFace::Triangle::getPositionGroup() const -{ - return mPositionGroup; -} - -const F64& LLVolumeFace::Triangle::getBinRadius() const -{ - return mRadius; -} void LLVolumeFace::swapData(LLVolumeFace& rhs) { diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 0ae8aa19ca..c49d1c650d 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -46,6 +46,7 @@ template class LLOctreeNode; class LLVector4a; class LLVolumeFace; class LLVolume; +class LLVolumeTriangle; #include "lldarray.h" #include "lluuid.h" @@ -918,20 +919,7 @@ public: // mWeights.size() should be empty or match mVertices.size() LLVector4a* mWeights; - class Triangle : public LLRefCount - { - public: - const LLVector4a* mV[3]; - U16 mIndex[3]; - - LLVector3d mPositionGroup; - F64 mRadius; - - virtual const LLVector3d& getPositionGroup() const; - virtual const F64& getBinRadius() const; - }; - - LLOctreeNode* mOctree; + LLOctreeNode* mOctree; private: BOOL createUnCutCubeCap(LLVolume* volume, BOOL partial_build = FALSE); diff --git a/indra/llrender/llvertexbuffer.h b/indra/llrender/llvertexbuffer.h index 47146a5ec4..715309b64a 100644 --- a/indra/llrender/llvertexbuffer.h +++ b/indra/llrender/llvertexbuffer.h @@ -79,6 +79,17 @@ protected: class LLVertexBuffer : public LLRefCount { public: + LLVertexBuffer(const LLVertexBuffer& rhs) + { + *this = rhs; + } + + const LLVertexBuffer& operator=(const LLVertexBuffer& rhs) + { + llerrs << "Illegal operation!" << llendl; + return *this; + } + static LLVBOPool sStreamVBOPool; static LLVBOPool sDynamicVBOPool; static LLVBOPool sStreamIBOPool; diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index 45f9de8e8d..c0cc294c02 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -377,7 +377,14 @@ void LLLineEditor::setText(const LLStringExplicit &new_text) setCursor(llmin((S32)mText.length(), getCursor())); // Set current history line to end of history. - mCurrentHistoryLine = mLineHistory.end() - 1; + if (mLineHistory.empty()) + { + mCurrentHistoryLine = mLineHistory.end(); + } + else + { + mCurrentHistoryLine = mLineHistory.end() - 1; + } mPrevText = mText; } diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index 03eee12707..04e433dcfd 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -41,6 +41,7 @@ #include "llcriticaldamp.h" #include "llface.h" #include "lllightconstants.h" +#include "llmatrix4a.h" #include "llsky.h" #include "llsurfacepatch.h" #include "llviewercamera.h" @@ -91,8 +92,12 @@ void LLDrawable::incrementVisible() sCurVisible++; sCurPixelAngle = (F32) gViewerWindow->getWindowHeightRaw()/LLViewerCamera::getInstance()->getView(); } + void LLDrawable::init() { + mExtents = (LLVector4a*) _mm_malloc(sizeof(LLVector4a)*3, 32); + mPositionGroup = mExtents + 2; + // mXform mParent = NULL; mRenderType = 0; @@ -121,6 +126,11 @@ void LLDrawable::initClass() void LLDrawable::destroy() { + if (gDebugGL) + { + gPipeline.checkReferences(this); + } + if (isDead()) { sNumZombieDrawables--; @@ -139,6 +149,9 @@ void LLDrawable::destroy() { llinfos << "- Zombie drawables: " << sNumZombieDrawables << llendl; }*/ + + _mm_free(mExtents); + mExtents = mPositionGroup = NULL; } void LLDrawable::markDead() @@ -714,12 +727,14 @@ void LLDrawable::updateDistance(LLCamera& camera, bool force_update) LLFace* facep = getFace(i); if (force_update || facep->getPoolType() == LLDrawPool::POOL_ALPHA) { - LLVector3 box = (facep->mExtents[1] - facep->mExtents[0]) * 0.25f; + LLVector4a box; + box.setSub(facep->mExtents[1], facep->mExtents[0]); + box.mul(0.25f); LLVector3 v = (facep->mCenterLocal-camera.getOrigin()); const LLVector3& at = camera.getAtAxis(); for (U32 j = 0; j < 3; j++) { - v.mV[j] -= box.mV[j] * at.mV[j]; + v.mV[j] -= box[j] * at.mV[j]; } facep->mDistance = v * camera.getAtAxis(); } @@ -728,7 +743,7 @@ void LLDrawable::updateDistance(LLCamera& camera, bool force_update) } else { - pos = LLVector3(getPositionGroup()); + pos = LLVector3(getPositionGroup().getF32()); } pos -= camera.getOrigin(); @@ -777,7 +792,7 @@ BOOL LLDrawable::updateGeometry(BOOL priority) return res; } -void LLDrawable::shiftPos(const LLVector3 &shift_vector) +void LLDrawable::shiftPos(const LLVector4a &shift_vector) { if (isDead()) { @@ -809,9 +824,9 @@ void LLDrawable::shiftPos(const LLVector3 &shift_vector) for (S32 i = 0; i < getNumFaces(); i++) { LLFace *facep = getFace(i); - facep->mCenterAgent += shift_vector; - facep->mExtents[0] += shift_vector; - facep->mExtents[1] += shift_vector; + facep->mCenterAgent += LLVector3(shift_vector.getF32()); + facep->mExtents[0].add(shift_vector); + facep->mExtents[1].add(shift_vector); if (!volume && facep->hasGeometry()) { @@ -820,9 +835,9 @@ void LLDrawable::shiftPos(const LLVector3 &shift_vector) } } - mExtents[0] += shift_vector; - mExtents[1] += shift_vector; - mPositionGroup += LLVector3d(shift_vector); + mExtents[0].add(shift_vector); + mExtents[1].add(shift_vector); + mPositionGroup->add(shift_vector); } else if (mSpatialBridge) { @@ -830,9 +845,9 @@ void LLDrawable::shiftPos(const LLVector3 &shift_vector) } else if (isAvatar()) { - mExtents[0] += shift_vector; - mExtents[1] += shift_vector; - mPositionGroup += LLVector3d(shift_vector); + mExtents[0].add(shift_vector); + mExtents[1].add(shift_vector); + mPositionGroup->add(shift_vector); } mVObjp->onShift(shift_vector); @@ -844,21 +859,26 @@ const LLVector3& LLDrawable::getBounds(LLVector3& min, LLVector3& max) const return mXform.getPositionW(); } -const LLVector3* LLDrawable::getSpatialExtents() const +const LLVector4a* LLDrawable::getSpatialExtents() const { return mExtents; } -void LLDrawable::setSpatialExtents(LLVector3 min, LLVector3 max) +void LLDrawable::setSpatialExtents(const LLVector3& min, const LLVector3& max) +{ + mExtents[0].load3(min.mV); + mExtents[1].load3(max.mV); +} + +void LLDrawable::setSpatialExtents(const LLVector4a& min, const LLVector4a& max) { - LLVector3 size = max - min; mExtents[0] = min; - mExtents[1] = max; + mExtents[1] = max; } -void LLDrawable::setPositionGroup(const LLVector3d& pos) +void LLDrawable::setPositionGroup(const LLVector4a& pos) { - mPositionGroup.setVec(pos); + *mPositionGroup = pos; } void LLDrawable::updateSpatialExtents() @@ -872,7 +892,7 @@ void LLDrawable::updateSpatialExtents() if (mSpatialBridge.notNull()) { - mPositionGroup.setVec(0,0,0); + mPositionGroup->splat(0.f); } } @@ -1083,59 +1103,72 @@ void LLSpatialBridge::updateSpatialExtents() root->rebound(); } - LLXformMatrix* mat = mDrawable->getXform(); - - LLVector3 offset = root->mBounds[0]; - LLVector3 size = root->mBounds[1]; + LLVector4a offset; + LLVector4a size = root->mBounds[1]; - LLVector3 center = LLVector3(0,0,0) * mat->getWorldMatrix(); - LLQuaternion rotation = LLQuaternion(mat->getWorldMatrix()); + //VECTORIZE THIS + LLMatrix4a mat; + mat.loadu(mDrawable->getXform()->getWorldMatrix()); + + LLVector4a t; + t.splat(0.f); + + LLVector4a center; + mat.affineTransform(t, center); - offset *= rotation; - center += offset; + mat.rotate(root->mBounds[0], offset); + center.add(offset); - LLVector3 v[4]; + LLVector4a v[4]; + //get 4 corners of bounding box - v[0] = (size * rotation); - v[1] = (LLVector3(-size.mV[0], -size.mV[1], size.mV[2]) * rotation); - v[2] = (LLVector3(size.mV[0], -size.mV[1], -size.mV[2]) * rotation); - v[3] = (LLVector3(-size.mV[0], size.mV[1], -size.mV[2]) * rotation); + mat.rotate(size,v[0]); - LLVector3& newMin = mExtents[0]; - LLVector3& newMax = mExtents[1]; + LLVector4a scale; + + scale.set(-1.f, -1.f, 1.f); + scale.mul(size); + mat.rotate(scale, v[1]); + + scale.set(1.f, -1.f, -1.f); + scale.mul(size); + mat.rotate(scale, v[2]); + + scale.set(-1.f, 1.f, -1.f); + scale.mul(size); + mat.rotate(scale, v[3]); + + + LLVector4a& newMin = mExtents[0]; + LLVector4a& newMax = mExtents[1]; newMin = newMax = center; for (U32 i = 0; i < 4; i++) { - for (U32 j = 0; j < 3; j++) - { - F32 delta = fabsf(v[i].mV[j]); - F32 min = center.mV[j] - delta; - F32 max = center.mV[j] + delta; - - if (min < newMin.mV[j]) - { - newMin.mV[j] = min; - } - - if (max > newMax.mV[j]) - { - newMax.mV[j] = max; - } - } - } + LLVector4a delta; + delta.setAbs(v[i]); + LLVector4a min; + min.setSub(center, delta); + LLVector4a max; + max.setAdd(center, delta); - LLVector3 diagonal = newMax - newMin; - mRadius = diagonal.magVec() * 0.5f; + newMin.setMin(min); + newMax.setMax(max); + } + + LLVector4a diagonal; + diagonal.setSub(newMax, newMin); + mRadius = diagonal.length3() * 0.5f; - mPositionGroup.setVec((newMin + newMax) * 0.5f); + mPositionGroup->setAdd(newMin,newMax); + mPositionGroup->mul(0.5f); updateBinRadius(); } void LLSpatialBridge::updateBinRadius() { - mBinRadius = llmin((F32) mOctree->getSize().mdV[0]*0.5f, 256.f); + mBinRadius = llmin( mOctree->getSize()[0]*0.5f, 256.f); } LLCamera LLSpatialBridge::transformCamera(LLCamera& camera) @@ -1276,8 +1309,12 @@ void LLSpatialBridge::setVisible(LLCamera& camera_in, std::vector* LLSpatialGroup* group = (LLSpatialGroup*) mOctree->getListener(0); group->rebound(); - LLVector3 center = (mExtents[0] + mExtents[1]) * 0.5f; - LLVector3 size = (mExtents[1]-mExtents[0]) * 0.5f; + LLVector4a center; + center.setAdd(mExtents[0], mExtents[1]); + center.mul(0.5f); + LLVector4a size; + size.setSub(mExtents[1], mExtents[0]); + size.mul(0.5f); if ((LLPipeline::sShadowRender && camera_in.AABBInFrustum(center, size)) || LLPipeline::sImpostorRender || @@ -1389,11 +1426,11 @@ BOOL LLSpatialBridge::updateMove() return TRUE; } -void LLSpatialBridge::shiftPos(const LLVector3& vec) +void LLSpatialBridge::shiftPos(const LLVector4a& vec) { - mExtents[0] += vec; - mExtents[1] += vec; - mPositionGroup += LLVector3d(vec); + mExtents[0].add(vec); + mExtents[1].add(vec); + mPositionGroup->add(vec); } void LLSpatialBridge::cleanupReferences() @@ -1511,7 +1548,7 @@ F32 LLHUDBridge::calcPixelArea(LLSpatialGroup* group, LLCamera& camera) } -void LLHUDBridge::shiftPos(const LLVector3& vec) +void LLHUDBridge::shiftPos(const LLVector4a& vec) { //don't shift hud bridges on region crossing } diff --git a/indra/newview/lldrawable.h b/indra/newview/lldrawable.h index c3c6cbe12f..811ff1801b 100644 --- a/indra/newview/lldrawable.h +++ b/indra/newview/lldrawable.h @@ -41,6 +41,7 @@ #include "v4math.h" #include "m4math.h" #include "v4coloru.h" +#include "llvector4a.h" #include "llquaternion.h" #include "xform.h" #include "llmemtype.h" @@ -66,6 +67,17 @@ const U32 SILHOUETTE_HIGHLIGHT = 0; class LLDrawable : public LLRefCount { public: + LLDrawable(const LLDrawable& rhs) + { + *this = rhs; + } + + const LLDrawable& operator=(const LLDrawable& rhs) + { + llerrs << "Illegal operation!" << llendl; + return *this; + } + static void initClass(); LLDrawable() { init(); } @@ -94,14 +106,14 @@ public: const LLVector3& getPosition() const { return mXform.getPosition(); } const LLVector3& getWorldPosition() const { return mXform.getPositionW(); } const LLVector3 getPositionAgent() const; - const LLVector3d& getPositionGroup() const { return mPositionGroup; } + const LLVector4a& getPositionGroup() const { return *mPositionGroup; } const LLVector3& getScale() const { return mCurrentScale; } void setScale(const LLVector3& scale) { mCurrentScale = scale; } const LLQuaternion& getWorldRotation() const { return mXform.getWorldRotation(); } const LLQuaternion& getRotation() const { return mXform.getRotation(); } F32 getIntensity() const { return llmin(mXform.getScale().mV[0], 4.f); } S32 getLOD() const { return mVObjp ? mVObjp->getLOD() : 1; } - F64 getBinRadius() const { return mBinRadius; } + F32 getBinRadius() const { return mBinRadius; } void getMinMax(LLVector3& min,LLVector3& max) const { mXform.getMinMax(min,max); } LLXformMatrix* getXform() { return &mXform; } @@ -155,7 +167,7 @@ public: void updateSpecialHoverCursor(BOOL enabled); - virtual void shiftPos(const LLVector3 &shift_vector); + virtual void shiftPos(const LLVector4a &shift_vector); S32 getGeneration() const { return mGeneration; } @@ -173,11 +185,12 @@ public: const LLVector3& getBounds(LLVector3& min, LLVector3& max) const; virtual void updateSpatialExtents(); virtual void updateBinRadius(); - const LLVector3* getSpatialExtents() const; - void setSpatialExtents(LLVector3 min, LLVector3 max); - void setPositionGroup(const LLVector3d& pos); - void setPositionGroup(const LLVector3& pos) { setPositionGroup(LLVector3d(pos)); } + const LLVector4a* getSpatialExtents() const; + void setSpatialExtents(const LLVector3& min, const LLVector3& max); + void setSpatialExtents(const LLVector4a& min, const LLVector4a& max); + void setPositionGroup(const LLVector4a& pos); + void setRenderType(S32 type) { mRenderType = type; } BOOL isRenderType(S32 type) { return mRenderType == type; } S32 getRenderType() { return mRenderType; } @@ -288,6 +301,9 @@ public: private: typedef std::vector face_list_t; + LLVector4a* mExtents; + LLVector4a* mPositionGroup; + U32 mState; S32 mRenderType; LLPointer mVObjp; @@ -297,9 +313,7 @@ private: mutable U32 mVisible; F32 mRadius; - LLVector3 mExtents[2]; - LLVector3d mPositionGroup; - F64 mBinRadius; + F32 mBinRadius; S32 mGeneration; LLVector3 mCurrentScale; diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 98a50ca4e7..b8407a6f5b 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -152,6 +152,8 @@ void cylindricalProjection(LLVector2 &tc, const LLVector4a& normal, const LLVect void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp) { + mExtents = (LLVector4a*) _mm_malloc(sizeof(LLVector4a)*2, 16); + mLastUpdateTime = gFrameTimeSeconds; mLastMoveTime = 0.f; mVSize = 0.f; @@ -206,6 +208,12 @@ static LLFastTimer::DeclareTimer FTM_FACE_DEREF("Deref"); void LLFace::destroy() { LLFastTimer t(FTM_DESTROY_FACE); + + if (gDebugGL) + { + gPipeline.checkReferences(this); + } + if(mTexture.notNull()) { LLFastTimer t(FTM_DESTROY_TEXTURE); @@ -260,6 +268,9 @@ void LLFace::destroy() mDrawablep = NULL; mVObjp = NULL; } + + _mm_free(mExtents); + mExtents = NULL; } @@ -725,13 +736,20 @@ static void xform(LLVector2 &tex_coord, F32 cosAng, F32 sinAng, F32 offS, F32 of BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f, - const LLMatrix4& mat_vert, const LLMatrix3& mat_normal, BOOL global_volume) + const LLMatrix4& mat_vert_in, const LLMatrix3& mat_normal_in, BOOL global_volume) { LLMemType mt1(LLMemType::MTYPE_DRAWABLE); //get bounding box if (mDrawablep->isState(LLDrawable::REBUILD_VOLUME | LLDrawable::REBUILD_POSITION)) { + //VECTORIZE THIS + LLMatrix4a mat_vert; + mat_vert.loadu(mat_vert_in); + + LLMatrix4a mat_normal; + mat_normal.loadu(mat_normal_in); + //if (mDrawablep->isState(LLDrawable::REBUILD_VOLUME)) //{ //vertex buffer no longer valid // mVertexBuffer = NULL; @@ -739,82 +757,96 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f, //} //VECTORIZE THIS - LLVector3 min,max; + LLVector4a min,max; if (f >= volume.getNumVolumeFaces()) { - min = LLVector3(-1,-1,-1); - max = LLVector3(1,1,1); - } - else - { - const LLVolumeFace &face = volume.getVolumeFace(f); - min.set(face.mExtents[0].getF32()); - max.set(face.mExtents[1].getF32()); + llwarns << "Generating bounding box for invalid face index!" << llendl; + f = 0; } + const LLVolumeFace &face = volume.getVolumeFace(f); + min = face.mExtents[0]; + max = face.mExtents[1]; + + //min, max are in volume space, convert to drawable render space - LLVector3 center = ((min + max) * 0.5f)*mat_vert; - LLVector3 size = ((max-min) * 0.5f); + LLVector4a center; + LLVector4a t; + t.setAdd(min, max); + t.mul(0.5f); + mat_vert.affineTransform(t, center); + LLVector4a size; + size.setSub(max, min); + size.mul(0.5f); + if (!global_volume) { - size.scaleVec(mDrawablep->getVObj()->getScale()); + //VECTORIZE THIS + LLVector4a scale; + scale.load3(mDrawablep->getVObj()->getScale().mV); + size.mul(scale); } - LLMatrix3 mat = mat_normal; - LLVector3 x = mat.getFwdRow(); - LLVector3 y = mat.getLeftRow(); - LLVector3 z = mat.getUpRow(); - x.normVec(); - y.normVec(); - z.normVec(); + mat_normal.mMatrix[0].normalize3fast(); + mat_normal.mMatrix[1].normalize3fast(); + mat_normal.mMatrix[2].normalize3fast(); + + LLVector4a v[4]; - mat.setRows(x,y,z); + //get 4 corners of bounding box + mat_normal.rotate(size,v[0]); - LLQuaternion rotation = LLQuaternion(mat); + //VECTORIZE THIS + LLVector4a scale; - LLVector3 v[4]; - //get 4 corners of bounding box - v[0] = (size * rotation); - v[1] = (LLVector3(-size.mV[0], -size.mV[1], size.mV[2]) * rotation); - v[2] = (LLVector3(size.mV[0], -size.mV[1], -size.mV[2]) * rotation); - v[3] = (LLVector3(-size.mV[0], size.mV[1], -size.mV[2]) * rotation); + scale.set(-1.f, -1.f, 1.f); + scale.mul(size); + mat_normal.rotate(scale, v[1]); + + scale.set(1.f, -1.f, -1.f); + scale.mul(size); + mat_normal.rotate(scale, v[2]); + + scale.set(-1.f, 1.f, -1.f); + scale.mul(size); + mat_normal.rotate(scale, v[3]); - LLVector3& newMin = mExtents[0]; - LLVector3& newMax = mExtents[1]; + LLVector4a& newMin = mExtents[0]; + LLVector4a& newMax = mExtents[1]; newMin = newMax = center; for (U32 i = 0; i < 4; i++) { - for (U32 j = 0; j < 3; j++) - { - F32 delta = fabsf(v[i].mV[j]); - F32 min = center.mV[j] - delta; - F32 max = center.mV[j] + delta; - - if (min < newMin.mV[j]) - { - newMin.mV[j] = min; - } - - if (max > newMax.mV[j]) - { - newMax.mV[j] = max; - } - } + LLVector4a delta; + delta.setAbs(v[i]); + LLVector4a min; + min.setSub(center, delta); + LLVector4a max; + max.setAdd(center, delta); + + newMin.setMin(min); + newMax.setMax(max); } if (!mDrawablep->isActive()) { - LLVector3 offset = mDrawablep->getRegion()->getOriginAgent(); - newMin += offset; - newMax += offset; + LLVector4a offset; + offset.load3(mDrawablep->getRegion()->getOriginAgent().mV); + newMin.add(offset); + newMax.add(offset); } - mCenterLocal = (newMin+newMax)*0.5f; - LLVector3 tmp = (newMin - newMax) ; - mBoundingSphereRadius = tmp.length() * 0.5f ; + t.setAdd(newMin, newMax); + t.mul(0.5f); + + //VECTORIZE THIS + mCenterLocal.set(t.getF32()); + + t.setSub(newMax,newMin); + t.mul(0.5f); + mBoundingSphereRadius = t.length3(); updateCenterAgent(); } @@ -1647,20 +1679,31 @@ F32 LLFace::getTextureVirtualSize() BOOL LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius) { + //VECTORIZE THIS //get area of circle around face - LLVector3 center = getPositionAgent(); - LLVector3 size = (mExtents[1] - mExtents[0]) * 0.5f; + LLVector4a center; + center.load3(getPositionAgent().mV); + LLVector4a size; + size.setSub(mExtents[1], mExtents[0]); + size.mul(0.5f); + LLViewerCamera* camera = LLViewerCamera::getInstance(); - F32 size_squared = size.lengthSquared() ; - LLVector3 lookAt = center - camera->getOrigin(); - F32 dist = lookAt.normVec() ; + F32 size_squared = size.dot3(size); + LLVector4a lookAt; + LLVector4a t; + t.load3(camera->getOrigin().mV); + lookAt.setSub(center, t); + F32 dist = lookAt.length3(); + lookAt.normalize3fast() ; //get area of circle around node F32 app_angle = atanf(fsqrtf(size_squared) / dist); radius = app_angle*LLDrawable::sCurPixelAngle; mPixelArea = radius*radius * 3.14159f; - cos_angle_to_view_dir = lookAt * camera->getXAxis() ; + LLVector4a x_axis; + x_axis.load3(camera->getXAxis().mV); + cos_angle_to_view_dir = lookAt.dot3(x_axis); //if has media, check if the face is out of the view frustum. if(hasMedia()) @@ -1676,7 +1719,10 @@ BOOL LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius) } else { - if(dist * dist * (lookAt - camera->getXAxis()).lengthSquared() < size_squared) + LLVector4a d; + d.setSub(lookAt, x_axis); + + if(dist * dist * d.dot3(d) < size_squared) { cos_angle_to_view_dir = 1.0f ; } diff --git a/indra/newview/llface.h b/indra/newview/llface.h index 48909d7895..0cd472a2fd 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -65,6 +65,17 @@ class LLFace { public: + LLFace(const LLFace& rhs) + { + *this = rhs; + } + + const LLFace& operator=(const LLFace& rhs) + { + llerrs << "Illegal operation!" << llendl; + return *this; + } + enum EMasks { LIGHT = 0x0001, @@ -221,7 +232,9 @@ public: LLVector3 mCenterLocal; LLVector3 mCenterAgent; - LLVector3 mExtents[2]; + + LLVector4a* mExtents; + LLVector2 mTexExtents[2]; F32 mDistance; LLPointer mVertexBuffer; diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index 561965d021..8be4e34748 100644 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -97,11 +97,13 @@ void LLVolumeImplFlexible::onParameterChanged(U16 param_type, LLNetworkData *dat } } -void LLVolumeImplFlexible::onShift(const LLVector3 &shift_vector) +void LLVolumeImplFlexible::onShift(const LLVector4a &shift_vector) { + //VECTORIZE THIS + LLVector3 shift(shift_vector.getF32()); for (int section = 0; section < (1<getRenderRotation(); LLVector3 first_grid_obj_pos = first_grid_object->getRenderPosition(); - LLVector3 min_extents(F32_MAX, F32_MAX, F32_MAX); - LLVector3 max_extents(-F32_MAX, -F32_MAX, -F32_MAX); + LLVector4a min_extents(F32_MAX); + LLVector4a max_extents(-F32_MAX); BOOL grid_changed = FALSE; for (LLObjectSelection::iterator iter = mGridObjects.begin(); iter != mGridObjects.end(); ++iter) @@ -1110,7 +1110,7 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 & LLDrawable* drawable = object->mDrawable; if (drawable) { - const LLVector3* ext = drawable->getSpatialExtents(); + const LLVector4a* ext = drawable->getSpatialExtents(); update_min_max(min_extents, max_extents, ext[0]); update_min_max(min_extents, max_extents, ext[1]); grid_changed = TRUE; @@ -1118,13 +1118,19 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 & } if (grid_changed) { - mGridOrigin = lerp(min_extents, max_extents, 0.5f); + LLVector4a center, size; + center.setAdd(min_extents, max_extents); + center.mul(0.5f); + size.setSub(max_extents, min_extents); + size.mul(0.5f); + + mGridOrigin.set(center.getF32()); LLDrawable* drawable = first_grid_object->mDrawable; if (drawable && drawable->isActive()) { mGridOrigin = mGridOrigin * first_grid_object->getRenderMatrix(); } - mGridScale = (max_extents - min_extents) * 0.5f; + mGridScale.set(size.getF32()); } } else // GRID_MODE_WORLD or just plain default diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 355173772b..3cf0138303 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -102,23 +102,6 @@ void sg_assert(BOOL expr) #endif } -#if LL_DEBUG -void validate_drawable(LLDrawable* drawablep) -{ - F64 rad = drawablep->getBinRadius(); - const LLVector3* ext = drawablep->getSpatialExtents(); - - if (rad < 0 || rad > 4096 || - (ext[1]-ext[0]).magVec() > 4096) - { - llwarns << "Invalid drawable found in octree." << llendl; - } -} -#else -#define validate_drawable(x) -#endif - - S32 AABBSphereIntersect(const LLVector3& min, const LLVector3& max, const LLVector3 &origin, const F32 &rad) { return AABBSphereIntersectR2(min, max, origin, rad*rad); @@ -158,6 +141,55 @@ S32 AABBSphereIntersectR2(const LLVector3& min, const LLVector3& max, const LLVe } +S32 AABBSphereIntersect(const LLVector4a& min, const LLVector4a& max, const LLVector3 &origin, const F32 &rad) +{ + return AABBSphereIntersectR2(min, max, origin, rad*rad); +} + +S32 AABBSphereIntersectR2(const LLVector4a& min, const LLVector4a& max, const LLVector3 &origin, const F32 &r) +{ + F32 d = 0.f; + F32 t; + + LLVector4a origina; + origina.load3(origin.mV); + + LLVector4a v; + v.setSub(min, origina); + + if (v.dot3(v) < r) + { + v.setSub(max, origina); + if (v.dot3(v) < r) + { + return 2; + } + } + + + for (U32 i = 0; i < 3; i++) + { + if (origin.mV[i] < min[i]) + { + t = min[i] - origin.mV[i]; + d += t*t; + } + else if (origin.mV[i] > max[i]) + { + t = origin.mV[i] - max[i]; + d += t*t; + } + + if (d > r) + { + return 0; + } + } + + return 1; +} + + typedef enum { b000 = 0x00, @@ -193,24 +225,13 @@ static U8 sOcclusionIndices[] = b000, b110, b100, b101, b001, b011, b010, b110, }; -U8* get_box_fan_indices(LLCamera* camera, const LLVector3& center) +U8* get_box_fan_indices(LLCamera* camera, const LLVector4a& center) { - LLVector3 d = center - camera->getOrigin(); - - U8 cypher = 0; - if (d.mV[0] > 0) - { - cypher |= b100; - } - if (d.mV[1] > 0) - { - cypher |= b010; - } - if (d.mV[2] > 0) - { - cypher |= b001; - } + LLVector4a origin; + origin.load3(camera->getOrigin().mV); + S32 cypher = center.greaterThan4(origin).getComparisonMask() & 0x7; + return sOcclusionIndices+cypher*8; } @@ -218,33 +239,49 @@ void LLSpatialGroup::buildOcclusion() { if (!mOcclusionVerts) { - mOcclusionVerts = new F32[8*3]; + mOcclusionVerts = (LLVector4a*) _mm_malloc(sizeof(LLVector4a)*8, 16); } - LLVector3 r = mBounds[1] + LLVector3(SG_OCCLUSION_FUDGE, SG_OCCLUSION_FUDGE, SG_OCCLUSION_FUDGE); + LLVector4a fudge; + fudge.splat(SG_OCCLUSION_FUDGE); - for (U32 k = 0; k < 3; k++) - { - r.mV[k] = llmin(mBounds[1].mV[k]+0.25f, r.mV[k]); - } + LLVector4a r; + r.setAdd(mBounds[1], fudge); - F32* v = mOcclusionVerts; - F32* c = mBounds[0].mV; - F32* s = r.mV; + LLVector4a r2; + r2.splat(0.25f); + r2.add(mBounds[1]); + + r.setMin(r2); + + LLVector4a* v = mOcclusionVerts; + const LLVector4a& c = mBounds[0]; + const LLVector4a& s = r; + static const LLVector4a octant[] = + { + LLVector4a(-1.f, -1.f, -1.f), + LLVector4a(-1.f, -1.f, 1.f), + LLVector4a(-1.f, 1.f, -1.f), + LLVector4a(-1.f, 1.f, 1.f), + + LLVector4a(1.f, -1.f, -1.f), + LLVector4a(1.f, -1.f, 1.f), + LLVector4a(1.f, 1.f, -1.f), + LLVector4a(1.f, 1.f, 1.f), + }; + //vertex positions are encoded so the 3 bits of their vertex index //correspond to their axis facing, with bit position 3,2,1 matching //axis facing x,y,z, bit set meaning positive facing, bit clear //meaning negative facing - v[0] = c[0]-s[0]; v[1] = c[1]-s[1]; v[2] = c[2]-s[2]; // 0 - 0000 - v[3] = c[0]-s[0]; v[4] = c[1]-s[1]; v[5] = c[2]+s[2]; // 1 - 0001 - v[6] = c[0]-s[0]; v[7] = c[1]+s[1]; v[8] = c[2]-s[2]; // 2 - 0010 - v[9] = c[0]-s[0]; v[10] = c[1]+s[1]; v[11] = c[2]+s[2]; // 3 - 0011 - - v[12] = c[0]+s[0]; v[13] = c[1]-s[1]; v[14] = c[2]-s[2]; // 4 - 0100 - v[15] = c[0]+s[0]; v[16] = c[1]-s[1]; v[17] = c[2]+s[2]; // 5 - 0101 - v[18] = c[0]+s[0]; v[19] = c[1]+s[1]; v[20] = c[2]-s[2]; // 6 - 0110 - v[21] = c[0]+s[0]; v[22] = c[1]+s[1]; v[23] = c[2]+s[2]; // 7 - 0111 + + for (S32 i = 0; i < 8; ++i) + { + v[i] = s; + v[i].mul(octant[i]); + v[i].add(c); + } clearState(LLSpatialGroup::OCCLUSION_DIRTY); } @@ -288,6 +325,11 @@ LLSpatialGroup::~LLSpatialGroup() llerrs << "Illegal deletion of LLSpatialGroup!" << llendl; }*/ + if (gDebugGL) + { + gPipeline.checkReferences(this); + } + if (isState(DEAD)) { sZombieGroups--; @@ -300,11 +342,13 @@ LLSpatialGroup::~LLSpatialGroup() sQueryPool.release(mOcclusionQuery[LLViewerCamera::sCurCameraID]); } - delete [] mOcclusionVerts; + _mm_free(mOcclusionVerts); LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); clearDrawMap(); clearAtlasList() ; + + _mm_free(mBounds); } BOOL LLSpatialGroup::hasAtlas(LLTextureAtlas* atlasp) @@ -456,8 +500,10 @@ void LLSpatialGroup::validate() sg_assert(!isState(DIRTY)); sg_assert(!isDead()); - LLVector3 myMin = mBounds[0] - mBounds[1]; - LLVector3 myMax = mBounds[0] + mBounds[1]; + LLVector4a myMin; + myMin.setSub(mBounds[0], mBounds[1]); + LLVector4a myMax; + myMax.setAdd(mBounds[0], mBounds[1]); validateDrawMap(); @@ -489,16 +535,18 @@ void LLSpatialGroup::validate() group->validate(); //ensure all children are enclosed in this node - LLVector3 center = group->mBounds[0]; - LLVector3 size = group->mBounds[1]; + LLVector4a center = group->mBounds[0]; + LLVector4a size = group->mBounds[1]; - LLVector3 min = center - size; - LLVector3 max = center + size; + LLVector4a min; + min.setSub(center, size); + LLVector4a max; + max.setAdd(center, size); for (U32 j = 0; j < 3; j++) { - sg_assert(min.mV[j] >= myMin.mV[j]-0.02f); - sg_assert(max.mV[j] <= myMax.mV[j]+0.02f); + sg_assert(min[j] >= myMin[j]-0.02f); + sg_assert(max[j] <= myMax[j]+0.02f); } } @@ -508,8 +556,8 @@ void LLSpatialGroup::validate() void LLSpatialGroup::checkStates() { #if LL_OCTREE_PARANOIA_CHECK - LLOctreeStateCheck checker; - checker.traverse(mOctreeNode); + //LLOctreeStateCheck checker; + //checker.traverse(mOctreeNode); #endif } @@ -534,19 +582,17 @@ BOOL LLSpatialGroup::updateInGroup(LLDrawable *drawablep, BOOL immediate) LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); drawablep->updateSpatialExtents(); - validate_drawable(drawablep); OctreeNode* parent = mOctreeNode->getOctParent(); if (mOctreeNode->isInside(drawablep->getPositionGroup()) && (mOctreeNode->contains(drawablep) || - (drawablep->getBinRadius() > mOctreeNode->getSize().mdV[0] && + (drawablep->getBinRadius() > mOctreeNode->getSize()[0] && parent && parent->getElementCount() >= LL_OCTREE_MAX_CAPACITY))) { unbound(); setState(OBJECT_DIRTY); //setState(GEOM_DIRTY); - validate_drawable(drawablep); return TRUE; } @@ -564,7 +610,6 @@ BOOL LLSpatialGroup::addObject(LLDrawable *drawablep, BOOL add_all, BOOL from_oc else { drawablep->setSpatialGroup(this); - validate_drawable(drawablep); setState(OBJECT_DIRTY | GEOM_DIRTY); setOcclusionState(LLSpatialGroup::DISCARD_QUERY, LLSpatialGroup::STATE_MODE_ALL_CAMERAS); gPipeline.markRebuild(this, TRUE); @@ -665,7 +710,7 @@ void LLSpatialPartition::rebuildMesh(LLSpatialGroup* group) } -BOOL LLSpatialGroup::boundObjects(BOOL empty, LLVector3& minOut, LLVector3& maxOut) +BOOL LLSpatialGroup::boundObjects(BOOL empty, LLVector4a& minOut, LLVector4a& maxOut) { const OctreeNode* node = mOctreeNode; @@ -678,8 +723,8 @@ BOOL LLSpatialGroup::boundObjects(BOOL empty, LLVector3& minOut, LLVector3& maxO return FALSE; } - LLVector3& newMin = mObjectExtents[0]; - LLVector3& newMax = mObjectExtents[1]; + LLVector4a& newMin = mObjectExtents[0]; + LLVector4a& newMax = mObjectExtents[1]; if (isState(OBJECT_DIRTY)) { //calculate new bounding box @@ -688,10 +733,10 @@ BOOL LLSpatialGroup::boundObjects(BOOL empty, LLVector3& minOut, LLVector3& maxO //initialize bounding box to first element OctreeNode::const_element_iter i = node->getData().begin(); LLDrawable* drawablep = *i; - const LLVector3* minMax = drawablep->getSpatialExtents(); + const LLVector4a* minMax = drawablep->getSpatialExtents(); - newMin.setVec(minMax[0]); - newMax.setVec(minMax[1]); + newMin = minMax[0]; + newMax = minMax[1]; for (++i; i != node->getData().end(); ++i) { @@ -715,8 +760,10 @@ BOOL LLSpatialGroup::boundObjects(BOOL empty, LLVector3& minOut, LLVector3& maxO }*/ } - mObjectBounds[0] = (newMin + newMax) * 0.5f; - mObjectBounds[1] = (newMax - newMin) * 0.5f; + mObjectBounds[0].setAdd(newMin, newMax); + mObjectBounds[0].mul(0.5f); + mObjectBounds[1].setSub(newMax, newMin); + mObjectBounds[1].mul(0.5f); } if (empty) @@ -726,17 +773,8 @@ BOOL LLSpatialGroup::boundObjects(BOOL empty, LLVector3& minOut, LLVector3& maxO } else { - for (U32 i = 0; i < 3; i++) - { - if (newMin.mV[i] < minOut.mV[i]) - { - minOut.mV[i] = newMin.mV[i]; - } - if (newMax.mV[i] > maxOut.mV[i]) - { - maxOut.mV[i] = newMax.mV[i]; - } - } + minOut.setMin(newMin); + maxOut.setMax(newMax); } return TRUE; @@ -827,18 +865,19 @@ BOOL LLSpatialGroup::removeObject(LLDrawable *drawablep, BOOL from_octree) return TRUE; } -void LLSpatialGroup::shift(const LLVector3 &offset) +void LLSpatialGroup::shift(const LLVector4a &offset) { LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); - LLVector3d offsetd(offset); - mOctreeNode->setCenter(mOctreeNode->getCenter()+offsetd); + LLVector4a t = mOctreeNode->getCenter(); + t.add(offset); + mOctreeNode->setCenter(t); mOctreeNode->updateMinMax(); - mBounds[0] += offset; - mExtents[0] += offset; - mExtents[1] += offset; - mObjectBounds[0] += offset; - mObjectExtents[0] += offset; - mObjectExtents[1] += offset; + mBounds[0].add(offset); + mExtents[0].add(offset); + mExtents[1].add(offset); + mObjectBounds[0].add(offset); + mObjectExtents[0].add(offset); + mObjectExtents[1].add(offset); //if (!mSpatialPartition->mRenderByGroup) { @@ -850,10 +889,7 @@ void LLSpatialGroup::shift(const LLVector3 &offset) { for (U32 i = 0; i < 8; i++) { - F32* v = mOcclusionVerts+i*3; - v[0] += offset.mV[0]; - v[1] += offset.mV[1]; - v[2] += offset.mV[2]; + mOcclusionVerts[i].add(offset); } } } @@ -1119,8 +1155,6 @@ LLSpatialGroup::LLSpatialGroup(OctreeNode* node, LLSpatialPartition* part) : mDepth(0.f), mLastUpdateDistance(-1.f), mLastUpdateTime(gFrameTimeSeconds), - mViewAngle(0.f), - mLastUpdateViewAngle(-1.f), mAtlasList(4), mCurUpdatingTime(0), mCurUpdatingSlotp(NULL), @@ -1129,13 +1163,25 @@ LLSpatialGroup::LLSpatialGroup(OctreeNode* node, LLSpatialPartition* part) : sNodeCount++; LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); + mBounds = (LLVector4a*) _mm_malloc(sizeof(LLVector4a) * V4_COUNT, 16); + mExtents = mBounds + EXTENTS; + mObjectBounds = mBounds + OBJECT_BOUNDS; + mObjectExtents = mBounds + OBJECT_EXTENTS; + mViewAngle = mBounds+VIEW_ANGLE; + mLastUpdateViewAngle = mBounds+LAST_VIEW_ANGLE; + + mViewAngle->splat(0.f); + mLastUpdateViewAngle->splat(-1.f); + mExtents[0] = mExtents[1] = mObjectBounds[0] = mObjectBounds[0] = mObjectBounds[1] = + mObjectExtents[0] = mObjectExtents[1] = *mViewAngle; + sg_assert(mOctreeNode->getListenerCount() == 0); mOctreeNode->addListener(this); setState(SG_INITIAL_STATE_MASK); gPipeline.markRebuild(this, TRUE); - mBounds[0] = LLVector3(node->getCenter()); - mBounds[1] = LLVector3(node->getSize()); + mBounds[0] = node->getCenter(); + mBounds[1] = node->getSize(); part->mLODSeed = (part->mLODSeed+1)%part->mLODPeriod; mLODHash = part->mLODSeed; @@ -1172,8 +1218,8 @@ void LLSpatialGroup::updateDistance(LLCamera &camera) #endif if (!getData().empty()) { - mRadius = mSpatialPartition->mRenderByGroup ? mObjectBounds[1].magVec() : - (F32) mOctreeNode->getSize().magVec(); + mRadius = mSpatialPartition->mRenderByGroup ? mObjectBounds[1].length3() : + (F32) mOctreeNode->getSize().length3(); mDistance = mSpatialPartition->calcDistance(this, camera); mPixelArea = mSpatialPartition->calcPixelArea(this, camera); } @@ -1181,27 +1227,34 @@ void LLSpatialGroup::updateDistance(LLCamera &camera) F32 LLSpatialPartition::calcDistance(LLSpatialGroup* group, LLCamera& camera) { - LLVector3 eye = group->mObjectBounds[0] - camera.getOrigin(); + LLVector4a eye; + LLVector4a origin; + origin.load3(camera.getOrigin().mV); + + eye.setSub(group->mObjectBounds[0], origin); F32 dist = 0.f; if (group->mDrawMap.find(LLRenderPass::PASS_ALPHA) != group->mDrawMap.end()) { - LLVector3 v = eye; - dist = eye.normVec(); + LLVector4a v = eye; + + dist = eye.length3(); + eye.normalize3fast(); if (!group->isState(LLSpatialGroup::ALPHA_DIRTY)) { if (!group->mSpatialPartition->isBridge()) { - LLVector3 view_angle = LLVector3(eye * LLVector3(1,0,0), - eye * LLVector3(0,1,0), - eye * LLVector3(0,0,1)); + LLVector4a view_angle = eye; - if ((view_angle-group->mLastUpdateViewAngle).magVec() > 0.64f) + LLVector4a diff; + diff.setSub(view_angle, *group->mLastUpdateViewAngle); + + if (diff.length3() > 0.64f) { - group->mViewAngle = view_angle; - group->mLastUpdateViewAngle = view_angle; + *group->mViewAngle = view_angle; + *group->mLastUpdateViewAngle = view_angle; //for occasional alpha sorting within the group //NOTE: If there is a trivial way to detect that alpha sorting here would not change the render order, //not setting this node to dirty would be a very good thing @@ -1215,17 +1268,20 @@ F32 LLSpatialPartition::calcDistance(LLSpatialGroup* group, LLCamera& camera) LLVector3 at = camera.getAtAxis(); - //front of bounding box - for (U32 i = 0; i < 3; i++) - { - v.mV[i] -= group->mObjectBounds[1].mV[i]*0.25f * at.mV[i]; - } + LLVector4a ata; + ata.load3(at.mV); - group->mDepth = v * at; + LLVector4a t = ata; + //front of bounding box + t.mul(0.25f); + t.mul(group->mObjectBounds[1]); + v.sub(t); + + group->mDepth = v.dot3(ata); } else { - dist = eye.magVec(); + dist = eye.length3(); } if (dist < 16.f) @@ -1378,7 +1434,7 @@ void LLSpatialGroup::destroyGL() } } - delete [] mOcclusionVerts; + _mm_free(mOcclusionVerts); mOcclusionVerts = NULL; for (LLSpatialGroup::element_iter i = getData().begin(); i != getData().end(); ++i) @@ -1421,8 +1477,8 @@ BOOL LLSpatialGroup::rebound() } else { - LLVector3& newMin = mExtents[0]; - LLVector3& newMax = mExtents[1]; + LLVector4a& newMin = mExtents[0]; + LLVector4a& newMax = mExtents[1]; LLSpatialGroup* group = (LLSpatialGroup*) mOctreeNode->getChild(0)->getListener(0); group->clearState(SKIP_FRUSTUM_CHECK); group->rebound(); @@ -1436,26 +1492,19 @@ BOOL LLSpatialGroup::rebound() group = (LLSpatialGroup*) mOctreeNode->getChild(i)->getListener(0); group->clearState(SKIP_FRUSTUM_CHECK); group->rebound(); - const LLVector3& max = group->mExtents[1]; - const LLVector3& min = group->mExtents[0]; + const LLVector4a& max = group->mExtents[1]; + const LLVector4a& min = group->mExtents[0]; - for (U32 j = 0; j < 3; j++) - { - if (max.mV[j] > newMax.mV[j]) - { - newMax.mV[j] = max.mV[j]; - } - if (min.mV[j] < newMin.mV[j]) - { - newMin.mV[j] = min.mV[j]; - } - } + newMax.setMax(max); + newMin.setMin(min); } boundObjects(FALSE, newMin, newMax); - mBounds[0] = (newMin + newMax)*0.5f; - mBounds[1] = (newMax - newMin)*0.5f; + mBounds[0].setAdd(newMin, newMax); + mBounds[0].mul(0.5f); + mBounds[1].setSub(newMax, newMin); + mBounds[1].mul(0.5f); } setState(OCCLUSION_DIRTY); @@ -1540,7 +1589,7 @@ void LLSpatialGroup::doOcclusion(LLCamera* camera) } glBeginQueryARB(GL_SAMPLES_PASSED_ARB, mOcclusionQuery[LLViewerCamera::sCurCameraID]); - glVertexPointer(3, GL_FLOAT, 0, mOcclusionVerts); + glVertexPointer(3, GL_FLOAT, 16, mOcclusionVerts); if (camera->getOrigin().isExactlyZero()) { //origin is invalid, draw entire box glDrawRangeElements(GL_TRIANGLE_FAN, 0, 7, 8, @@ -1581,8 +1630,11 @@ LLSpatialPartition::LLSpatialPartition(U32 data_mask, BOOL render_by_group, U32 LLGLNamePool::registerPool(&sQueryPool); - mOctree = new LLSpatialGroup::OctreeRoot(LLVector3d(0,0,0), - LLVector3d(1,1,1), + LLVector4a center, size; + center.splat(0.f); + size.splat(1.f); + + mOctree = new LLSpatialGroup::OctreeRoot(center,size, NULL); new LLSpatialGroup(mOctree, this); } @@ -1602,7 +1654,6 @@ LLSpatialGroup *LLSpatialPartition::put(LLDrawable *drawablep, BOOL was_visible) LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); drawablep->updateSpatialExtents(); - validate_drawable(drawablep); //keep drawable from being garbage collected LLPointer ptr = drawablep; @@ -1686,16 +1737,16 @@ void LLSpatialPartition::move(LLDrawable *drawablep, LLSpatialGroup *curp, BOOL class LLSpatialShift : public LLSpatialGroup::OctreeTraveler { public: - LLSpatialShift(LLVector3 offset) : mOffset(offset) { } + const LLVector4a& mOffset; + + LLSpatialShift(const LLVector4a& offset) : mOffset(offset) { } virtual void visit(const LLSpatialGroup::OctreeNode* branch) { ((LLSpatialGroup*) branch->getListener(0))->shift(mOffset); } - - LLVector3 mOffset; }; -void LLSpatialPartition::shift(const LLVector3 &offset) +void LLSpatialPartition::shift(const LLVector4a &offset) { //shift octree node bounding boxes by offset LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); LLSpatialShift shifter(offset); @@ -1857,7 +1908,7 @@ public: class LLOctreeCullVisExtents: public LLOctreeCullShadow { public: - LLOctreeCullVisExtents(LLCamera* camera, LLVector3& min, LLVector3& max) + LLOctreeCullVisExtents(LLCamera* camera, LLVector4a& min, LLVector4a& max) : LLOctreeCullShadow(camera), mMin(min), mMax(max), mEmpty(TRUE) { } virtual bool earlyFail(LLSpatialGroup* group) @@ -1924,8 +1975,8 @@ public: } BOOL mEmpty; - LLVector3& mMin; - LLVector3& mMax; + LLVector4a& mMin; + LLVector4a& mMax; }; class LLOctreeCullDetectVisible: public LLOctreeCullShadow @@ -2029,6 +2080,11 @@ void drawBox(const LLVector3& c, const LLVector3& r) gGL.end(); } +void drawBox(const LLVector4a& c, const LLVector4a& r) +{ + drawBox(reinterpret_cast(c), reinterpret_cast(r)); +} + void drawBoxOutline(const LLVector3& pos, const LLVector3& size) { LLVector3 v1 = size.scaledVec(LLVector3( 1, 1,1)); @@ -2075,6 +2131,11 @@ void drawBoxOutline(const LLVector3& pos, const LLVector3& size) gGL.end(); } +void drawBoxOutline(const LLVector4a& pos, const LLVector4a& size) +{ + drawBoxOutline(reinterpret_cast(pos), reinterpret_cast(size)); +} + class LLOctreeDirty : public LLOctreeTraveler { public: @@ -2118,14 +2179,21 @@ BOOL LLSpatialPartition::isOcclusionEnabled() BOOL LLSpatialPartition::getVisibleExtents(LLCamera& camera, LLVector3& visMin, LLVector3& visMax) { + LLVector4a visMina, visMaxa; + visMina.load3(visMin.mV); + visMaxa.load3(visMax.mV); + { LLFastTimer ftm(FTM_CULL_REBOUND); LLSpatialGroup* group = (LLSpatialGroup*) mOctree->getListener(0); group->rebound(); } - LLOctreeCullVisExtents vis(&camera, visMin, visMax); + LLOctreeCullVisExtents vis(&camera, visMina, visMaxa); vis.traverse(mOctree); + + visMin.set(visMina.getF32()); + visMax.set(visMina.getF32()); return vis.mEmpty; } @@ -2188,25 +2256,36 @@ BOOL earlyFail(LLCamera* camera, LLSpatialGroup* group) } const F32 vel = SG_OCCLUSION_FUDGE*2.f; - LLVector3 c = group->mBounds[0]; - LLVector3 r = group->mBounds[1] + LLVector3(vel,vel,vel); - + LLVector4a fudge; + fudge.splat(vel); + + const LLVector4a& c = group->mBounds[0]; + LLVector4a r; + r.setAdd(group->mBounds[1], fudge); + /*if (r.magVecSquared() > 1024.0*1024.0) { return TRUE; }*/ - LLVector3 e = camera->getOrigin(); + LLVector4a e; + e.load3(camera->getOrigin().mV); - LLVector3 min = c - r; - LLVector3 max = c + r; + LLVector4a min; + min.setSub(c,r); + LLVector4a max; + max.setAdd(c,r); - for (U32 j = 0; j < 3; j++) + S32 lt = e.lessThan4(min).getComparisonMask() & 0x7; + if (lt) { - if (e.mV[j] < min.mV[j] || e.mV[j] > max.mV[j]) - { - return FALSE; - } + return FALSE; + } + + S32 gt = e.greaterThan4(max).getComparisonMask() & 0x7; + if (gt) + { + return FALSE; } return TRUE; @@ -2411,7 +2490,13 @@ void renderOctree(LLSpatialGroup* group) } gGL.color4fv(col.mV); - drawBox(group->mObjectBounds[0], group->mObjectBounds[1]*1.01f+LLVector3(0.001f, 0.001f, 0.001f)); + LLVector4a fudge; + fudge.splat(0.001f); + LLVector4a size = group->mObjectBounds[1]; + size.mul(1.01f); + size.add(fudge); + + drawBox(group->mObjectBounds[0], fudge); gGL.setSceneBlendType(LLRender::BT_ALPHA); @@ -2442,8 +2527,12 @@ void renderOctree(LLSpatialGroup* group) for (LLSpatialGroup::drawmap_elem_t::iterator j = i->second.begin(); j != i->second.end(); ++j) { LLDrawInfo* draw_info = *j; - LLVector3 center = (draw_info->mExtents[1] + draw_info->mExtents[0])*0.5f; - LLVector3 size = (draw_info->mExtents[1] - draw_info->mExtents[0])*0.5f; + LLVector4a center; + center.setAdd(draw_info->mExtents[1], draw_info->mExtents[0]); + center.mul(0.5f); + LLVector4a size; + size.setSub(draw_info->mExtents[1], draw_info->mExtents[0]); + size.mul(0.5f); drawBoxOutline(center, size); } } @@ -2493,7 +2582,7 @@ void renderVisibility(LLSpatialGroup* group, LLCamera* camera) else if (camera && group->mOcclusionVerts) { LLVertexBuffer::unbind(); - glVertexPointer(3, GL_FLOAT, 0, group->mOcclusionVerts); + glVertexPointer(3, GL_FLOAT, 16, group->mOcclusionVerts); glColor4f(1.0f, 0.f, 0.f, 0.5f); glDrawRangeElements(GL_TRIANGLE_FAN, 0, 7, 8, GL_UNSIGNED_BYTE, get_box_fan_indices(camera, group->mBounds[0])); @@ -2572,8 +2661,8 @@ void renderBoundingBox(LLDrawable* drawable, BOOL set_color = TRUE) } } - const LLVector3* ext; - LLVector3 pos, size; + const LLVector4a* ext; + LLVector4a pos, size; //render face bounding boxes for (S32 i = 0; i < drawable->getNumFaces(); i++) @@ -2582,20 +2671,21 @@ void renderBoundingBox(LLDrawable* drawable, BOOL set_color = TRUE) ext = facep->mExtents; - if (ext[0].isExactlyZero() && ext[1].isExactlyZero()) - { - continue; - } - pos = (ext[0] + ext[1]) * 0.5f; - size = (ext[1] - ext[0]) * 0.5f; + pos.setAdd(ext[0], ext[1]); + pos.mul(0.5f); + size.setSub(ext[1], ext[0]); + size.mul(0.5f); + drawBoxOutline(pos,size); } //render drawable bounding box ext = drawable->getSpatialExtents(); - pos = (ext[0] + ext[1]) * 0.5f; - size = (ext[1] - ext[0]) * 0.5f; + pos.setAdd(ext[0], ext[1]); + pos.mul(0.5f); + size.setSub(ext[1], ext[0]); + size.mul(0.5f); LLViewerObject* vobj = drawable->getVObj(); if (vobj && vobj->onActiveList()) @@ -2651,8 +2741,13 @@ void renderTexturePriority(LLDrawable* drawable) // gGL.color4f(1,0,1,1); //} - LLVector3 center = (facep->mExtents[1]+facep->mExtents[0])*0.5f; - LLVector3 size = (facep->mExtents[1]-facep->mExtents[0])*0.5f + LLVector3(0.01f, 0.01f, 0.01f); + LLVector4a center; + center.setAdd(facep->mExtents[1],facep->mExtents[0]); + center.mul(0.5f); + LLVector4a size; + size.setSub(facep->mExtents[1],facep->mExtents[0]); + size.mul(0.5f); + size.add(LLVector4a(0.01f)); drawBox(center, size); /*S32 boost = imagep->getBoostLevel(); @@ -2676,7 +2771,6 @@ void renderPoints(LLDrawable* drawablep) { gGL.begin(LLRender::POINTS); gGL.color3f(1,1,1); - LLVector3 center(drawablep->getPositionGroup()); for (S32 i = 0; i < drawablep->getNumFaces(); i++) { gGL.vertex3fv(drawablep->getFace(i)->mCenterLocal.mV); @@ -2708,8 +2802,12 @@ void renderShadowFrusta(LLDrawInfo* params) LLGLEnable blend(GL_BLEND); gGL.setSceneBlendType(LLRender::BT_ADD); - LLVector3 center = (params->mExtents[1]+params->mExtents[0])*0.5f; - LLVector3 size = (params->mExtents[1]-params->mExtents[0])*0.5f; + LLVector4a center; + center.setAdd(params->mExtents[1], params->mExtents[0]); + center.mul(0.5f); + LLVector4a size; + size.setSub(params->mExtents[1],params->mExtents[0]); + size.mul(0.5f); if (gPipeline.mShadowCamera[4].AABBInFrustum(center, size)) { @@ -2753,10 +2851,14 @@ void renderLights(LLDrawable* drawablep) pushVerts(drawablep->getFace(i), LLVertexBuffer::MAP_VERTEX); } - const LLVector3* ext = drawablep->getSpatialExtents(); + const LLVector4a* ext = drawablep->getSpatialExtents(); - LLVector3 pos = (ext[0] + ext[1]) * 0.5f; - LLVector3 size = (ext[1] - ext[0]) * 0.5f; + LLVector4a pos; + pos.setAdd(ext[0], ext[1]); + pos.mul(0.5f); + LLVector4a size; + size.setSub(ext[1], ext[0]); + size.mul(0.5f); { LLGLDepthTest depth(GL_FALSE, GL_TRUE); @@ -2766,7 +2868,7 @@ void renderLights(LLDrawable* drawablep) gGL.color4f(1,1,0,1); F32 rad = drawablep->getVOVolume()->getLightRadius(); - drawBoxOutline(pos, LLVector3(rad,rad,rad)); + drawBoxOutline(pos, LLVector4a(rad)); } } @@ -2781,7 +2883,7 @@ public: mDir.setSub(mEnd, mStart); } - void visit(const LLOctreeNode* branch) + void visit(const LLOctreeNode* branch) { LLVolumeOctreeListener* vl = (LLVolumeOctreeListener*) branch->getListener(0); @@ -2859,10 +2961,14 @@ void renderRaycast(LLDrawable* drawablep) glPopMatrix(); // draw bounding box of prim - const LLVector3* ext = drawablep->getSpatialExtents(); + const LLVector4a* ext = drawablep->getSpatialExtents(); - LLVector3 pos = (ext[0] + ext[1]) * 0.5f; - LLVector3 size = (ext[1] - ext[0]) * 0.5f; + LLVector4a pos; + pos.setAdd(ext[0], ext[1]); + pos.mul(0.5f); + LLVector4a size; + size.setSub(ext[1], ext[0]); + size.mul(0.5f); LLGLDepthTest depth(GL_FALSE, GL_TRUE); gGL.color4f(0,0.5f,0.5f,1); @@ -2949,8 +3055,8 @@ public: return; } - LLVector3 nodeCenter = group->mBounds[0]; - LLVector3 octCenter = LLVector3(group->mOctreeNode->getCenter()); + LLVector4a nodeCenter = group->mBounds[0]; + LLVector4a octCenter = group->mOctreeNode->getCenter(); group->rebuildGeom(); group->rebuildMesh(); @@ -2979,8 +3085,14 @@ public: if (drawable->isState(LLDrawable::IN_REBUILD_Q2)) { gGL.color4f(0.6f, 0.6f, 0.1f, 1.f); - const LLVector3* ext = drawable->getSpatialExtents(); - drawBoxOutline((ext[0]+ext[1])*0.5f, (ext[1]-ext[0])*0.5f); + const LLVector4a* ext = drawable->getSpatialExtents(); + LLVector4a center; + center.setAdd(ext[0], ext[1]); + center.mul(0.5f); + LLVector4a size; + size.setSub(ext[1], ext[0]); + size.mul(0.5f); + drawBoxOutline(center, size); } } @@ -3211,7 +3323,11 @@ void LLSpatialPartition::renderDebug() void LLSpatialGroup::drawObjectBox(LLColor4 col) { gGL.color4fv(col.mV); - drawBox(mObjectBounds[0], mObjectBounds[1]*1.01f+LLVector3(0.001f, 0.001f, 0.001f)); + LLVector4a size; + size = mObjectBounds[0]; + size.mul(1.01f); + size.add(LLVector4a(0.001f)); + drawBox(mObjectBounds[0], size); } @@ -3271,8 +3387,8 @@ public: LLSpatialGroup* group = (LLSpatialGroup*) child->getListener(0); - LLVector3 size; - LLVector3 center; + LLVector4a size; + LLVector4a center; size = group->mBounds[1]; center = group->mBounds[0]; @@ -3289,7 +3405,11 @@ public: local_end = mEnd * local_matrix; } - if (LLLineSegmentBoxIntersect(local_start, local_end, center, size)) + LLVector4a start, end; + start.load3(local_start.mV); + end.load3(local_end.mV); + + if (LLLineSegmentBoxIntersect(start, end, center, size)) { check(child); } @@ -3380,6 +3500,7 @@ LLDrawInfo::LLDrawInfo(U16 start, U16 end, U32 count, U32 offset, mDrawMode(LLRender::TRIANGLES) { mVertexBuffer->validateRange(mStart, mEnd, mCount, mOffset); + mExtents = (LLVector4a*) _mm_malloc(sizeof(LLVector4a)*2, 16); mDebugColor = (rand() << 16) + rand(); } @@ -3395,6 +3516,13 @@ LLDrawInfo::~LLDrawInfo() { mFace->setDrawInfo(NULL); } + + if (gDebugGL) + { + gPipeline.checkReferences(this); + } + + _mm_free(mExtents); } void LLDrawInfo::validate() diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index 9b252d1035..119945113a 100644 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -45,7 +45,7 @@ #include "lldrawpool.h" #include "llface.h" #include "llviewercamera.h" - +#include "llvector4a.h" #include #define SG_STATE_INHERIT_MASK (OCCLUDED) @@ -57,12 +57,15 @@ class LLSpatialGroup; class LLTextureAtlas; class LLTextureAtlasSlot; +S32 AABBSphereIntersect(const LLVector4a& min, const LLVector4a& max, const LLVector3 &origin, const F32 &rad); +S32 AABBSphereIntersectR2(const LLVector4a& min, const LLVector4a& max, const LLVector3 &origin, const F32 &radius_squared); + S32 AABBSphereIntersect(const LLVector3& min, const LLVector3& max, const LLVector3 &origin, const F32 &rad); S32 AABBSphereIntersectR2(const LLVector3& min, const LLVector3& max, const LLVector3 &origin, const F32 &radius_squared); void pushVerts(LLFace* face, U32 mask); // get index buffer for binary encoded axis vertex buffer given a box at center being viewed by given camera -U8* get_box_fan_indices(LLCamera* camera, const LLVector3& center); +U8* get_box_fan_indices(LLCamera* camera, const LLVector4a& center); class LLDrawInfo : public LLRefCount { @@ -70,6 +73,18 @@ protected: ~LLDrawInfo(); public: + + LLDrawInfo(const LLDrawInfo& rhs) + { + *this = rhs; + } + + const LLDrawInfo& operator=(const LLDrawInfo& rhs) + { + llerrs << "Illegal operation!" << llendl; + return *this; + } + LLDrawInfo(U16 start, U16 end, U32 count, U32 offset, LLViewerTexture* image, LLVertexBuffer* buffer, BOOL fullbright = FALSE, U8 bump = 0, BOOL particle = FALSE, F32 part_size = 0); @@ -77,6 +92,8 @@ public: void validate(); + LLVector4a* mExtents; + LLPointer mVertexBuffer; LLPointer mTexture; LLColor4U mGlowColor; @@ -95,7 +112,6 @@ public: LLSpatialGroup* mGroup; LLFace* mFace; //associated face F32 mDistance; - LLVector3 mExtents[2]; U32 mDrawMode; struct CompareTexture @@ -158,11 +174,24 @@ public: }; }; +LL_ALIGN_PREFIX(64) class LLSpatialGroup : public LLOctreeListener { friend class LLSpatialPartition; friend class LLOctreeStateCheck; public: + + LLSpatialGroup(const LLSpatialGroup& rhs) + { + *this = rhs; + } + + const LLSpatialGroup& operator=(const LLSpatialGroup& rhs) + { + llerrs << "Illegal operation!" << llendl; + return *this; + } + static U32 sNodeCount; static BOOL sNoDelete; //deletion of spatial groups and draw info not allowed if TRUE @@ -273,8 +302,8 @@ public: BOOL isVisible() const; BOOL isRecentlyVisible() const; void setVisible(); - void shift(const LLVector3 &offset); - BOOL boundObjects(BOOL empty, LLVector3& newMin, LLVector3& newMax); + void shift(const LLVector4a &offset); + BOOL boundObjects(BOOL empty, LLVector4a& newMin, LLVector4a& newMax); void unbound(); BOOL rebound(); void buildOcclusion(); //rebuild mOcclusionVerts @@ -322,6 +351,27 @@ public: void addAtlas(LLTextureAtlas* atlasp, S8 recursive_level = 3) ; void removeAtlas(LLTextureAtlas* atlasp, BOOL remove_group = TRUE, S8 recursive_level = 3) ; void clearAtlasList() ; + +public: + + typedef enum + { + BOUNDS = 0, + EXTENTS = 2, + OBJECT_BOUNDS = 4, + OBJECT_EXTENTS = 6, + VIEW_ANGLE = 8, + LAST_VIEW_ANGLE = 9, + V4_COUNT = 10 + } eV4Index; + + LLVector4a* mBounds; // bounding box (center, size) of this node and all its children (tight fit to objects) + LLVector4a* mExtents; // extents (min, max) of this node and all its children + LLVector4a* mObjectExtents; // extents (min, max) of objects in this node + LLVector4a* mObjectBounds; // bounding box (center, size) of objects in this node + LLVector4a* mViewAngle; + LLVector4a* mLastUpdateViewAngle; + private: U32 mCurUpdatingTime ; //do not make the below two to use LLPointer @@ -349,14 +399,9 @@ public: F32 mBuilt; OctreeNode* mOctreeNode; LLSpatialPartition* mSpatialPartition; - LLVector3 mBounds[2]; // bounding box (center, size) of this node and all its children (tight fit to objects) - LLVector3 mExtents[2]; // extents (min, max) of this node and all its children - LLVector3 mObjectExtents[2]; // extents (min, max) of objects in this node - LLVector3 mObjectBounds[2]; // bounding box (center, size) of objects in this node - LLPointer mVertexBuffer; - F32* mOcclusionVerts; + LLVector4a* mOcclusionVerts; GLuint mOcclusionQuery[LLViewerCamera::NUM_CAMERAS]; U32 mBufferUsage; @@ -367,13 +412,10 @@ public: F32 mDepth; F32 mLastUpdateDistance; F32 mLastUpdateTime; - - LLVector3 mViewAngle; - LLVector3 mLastUpdateViewAngle; F32 mPixelArea; F32 mRadius; -}; +} LL_ALIGN_POSTFIX(64); class LLGeometryManager { @@ -409,7 +451,7 @@ public: // If the drawable moves, move it here. virtual void move(LLDrawable *drawablep, LLSpatialGroup *curp, BOOL immediate = FALSE); - virtual void shift(const LLVector3 &offset); + virtual void shift(const LLVector4a &offset); virtual F32 calcDistance(LLSpatialGroup* group, LLCamera& camera); virtual F32 calcPixelArea(LLSpatialGroup* group, LLCamera& camera); @@ -467,7 +509,7 @@ public: virtual void makeActive(); virtual void move(LLDrawable *drawablep, LLSpatialGroup *curp, BOOL immediate = FALSE); virtual BOOL updateMove(); - virtual void shiftPos(const LLVector3& vec); + virtual void shiftPos(const LLVector4a& vec); virtual void cleanupReferences(); virtual LLSpatialPartition* asPartition() { return this; } virtual LLSpatialBridge* asBridge() { return this; } @@ -658,7 +700,7 @@ class LLHUDBridge : public LLVolumeBridge { public: LLHUDBridge(LLDrawable* drawablep); - virtual void shiftPos(const LLVector3& vec); + virtual void shiftPos(const LLVector4a& vec); virtual F32 calcPixelArea(LLSpatialGroup* group, LLCamera& camera); }; @@ -675,7 +717,7 @@ class LLHUDPartition : public LLBridgePartition { public: LLHUDPartition(); - virtual void shift(const LLVector3 &offset); + virtual void shift(const LLVector4a &offset); }; extern const F32 SG_BOX_SIDE; diff --git a/indra/newview/llsurfacepatch.cpp b/indra/newview/llsurfacepatch.cpp index 48e4a6ccc7..06431d428f 100644 --- a/indra/newview/llsurfacepatch.cpp +++ b/indra/newview/llsurfacepatch.cpp @@ -860,8 +860,10 @@ void LLSurfacePatch::updateVisibility() F32 stride_per_distance = DEFAULT_DELTA_ANGLE / mSurfacep->getMetersPerGrid(); U32 grids_per_patch_edge = mSurfacep->getGridsPerPatchEdge(); - LLVector3 center = mCenterRegion + mSurfacep->getOriginAgent(); - LLVector3 radius = LLVector3(mRadius, mRadius, mRadius); + LLVector4a center; + center.load3( (mCenterRegion + mSurfacep->getOriginAgent()).mV); + LLVector4a radius; + radius.splat(mRadius); // sphere in frustum on global coordinates if (LLViewerCamera::getInstance()->AABBInFrustumNoFarClip(center, radius)) diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index 1490f8153c..d31b0f51fd 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -900,9 +900,11 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) render_ui(); } - gPipeline.rebuildGroups(); - + LLSpatialGroup::sNoDelete = FALSE; + gPipeline.clearReferences(); + + gPipeline.rebuildGroups(); } LLAppViewer::instance()->pingMainloopTimeout("Display:FrameStats"); @@ -1000,6 +1002,7 @@ void render_hud_attachments() gPipeline.renderGeom(hud_cam); LLSpatialGroup::sNoDelete = FALSE; + gPipeline.clearReferences(); render_hud_elements(); diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 3aecd0175d..0ed2d1da09 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2863,21 +2863,26 @@ void LLViewerObject::setScale(const LLVector3 &scale, BOOL damped) } } -void LLViewerObject::updateSpatialExtents(LLVector3& newMin, LLVector3 &newMax) -{ - LLVector3 center = getRenderPosition(); - LLVector3 size = getScale(); - newMin.setVec(center-size); - newMax.setVec(center+size); - mDrawable->setPositionGroup((newMin + newMax) * 0.5f); +void LLViewerObject::updateSpatialExtents(LLVector4a& newMin, LLVector4a &newMax) +{ + LLVector4a center; + center.load3(getRenderPosition().mV); + LLVector4a size; + size.load3(getScale().mV); + newMin.setSub(center, size); + newMax.setAdd(center, size); + + mDrawable->setPositionGroup(center); } F32 LLViewerObject::getBinRadius() { if (mDrawable.notNull()) { - const LLVector3* ext = mDrawable->getSpatialExtents(); - return (ext[1]-ext[0]).magVec(); + const LLVector4a* ext = mDrawable->getSpatialExtents(); + LLVector4a diff; + diff.setSub(ext[1], ext[0]); + return diff.length3(); } return getScale().magVec(); @@ -3469,12 +3474,21 @@ BOOL LLViewerObject::lineSegmentBoundingBox(const LLVector3& start, const LLVect return FALSE; } - const LLVector3* ext = mDrawable->getSpatialExtents(); + const LLVector4a* ext = mDrawable->getSpatialExtents(); + + //VECTORIZE THIS + LLVector4a center; + center.setAdd(ext[1], ext[0]); + center.mul(0.5f); + LLVector4a size; + size.setSub(ext[1], ext[0]); + size.mul(0.5f); - LLVector3 center = (ext[1]+ext[0])*0.5f; - LLVector3 size = (ext[1]-ext[0])*0.5f; + LLVector4a starta, enda; + starta.load3(start.mV); + enda.load3(end.mV); - return LLLineSegmentBoxIntersect(start, end, center, size); + return LLLineSegmentBoxIntersect(starta, enda, center, size); } U8 LLViewerObject::getMediaType() const diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 0fd0cbfa60..6ebd1cbe21 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -373,7 +373,7 @@ public: void markForUpdate(BOOL priority); void updateVolume(const LLVolumeParams& volume_params); - virtual void updateSpatialExtents(LLVector3& min, LLVector3& max); + virtual void updateSpatialExtents(LLVector4a& min, LLVector4a& max); virtual F32 getBinRadius(); LLBBox getBoundingBoxAgent() const; @@ -386,7 +386,7 @@ public: void clearDrawableState(U32 state, BOOL recursive = TRUE); // Called when the drawable shifts - virtual void onShift(const LLVector3 &shift_vector) { } + virtual void onShift(const LLVector4a &shift_vector) { } ////////////////////////////////////// // diff --git a/indra/newview/llviewerpartsim.cpp b/indra/newview/llviewerpartsim.cpp index 6b480ccf8e..41848e8b7a 100644 --- a/indra/newview/llviewerpartsim.cpp +++ b/indra/newview/llviewerpartsim.cpp @@ -161,8 +161,8 @@ LLViewerPartGroup::LLViewerPartGroup(const LLVector3 ¢er_agent, const F32 bo if (group != NULL) { - LLVector3 center(group->mOctreeNode->getCenter()); - LLVector3 size(group->mOctreeNode->getSize()); + LLVector3 center(group->mOctreeNode->getCenter().getF32()); + LLVector3 size(group->mOctreeNode->getSize().getF32()); size += LLVector3(0.01f, 0.01f, 0.01f); mMinObjPos = center - size; mMaxObjPos = center + size; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index ac109771dd..b097461822 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -1286,41 +1286,46 @@ void LLVOAvatar::updateDrawable(BOOL force_damped) clearChanged(SHIFTED); } -void LLVOAvatar::onShift(const LLVector3& shift_vector) +void LLVOAvatar::onShift(const LLVector4a& shift_vector) { - mLastAnimExtents[0] += shift_vector; - mLastAnimExtents[1] += shift_vector; + const LLVector3& shift = reinterpret_cast(shift_vector); + mLastAnimExtents[0] += shift; + mLastAnimExtents[1] += shift; mNeedsImpostorUpdate = TRUE; mNeedsAnimUpdate = TRUE; } -void LLVOAvatar::updateSpatialExtents(LLVector3& newMin, LLVector3 &newMax) +void LLVOAvatar::updateSpatialExtents(LLVector4a& newMin, LLVector4a &newMax) { if (isImpostor() && !needsImpostorUpdate()) { LLVector3 delta = getRenderPosition() - - ((LLVector3(mDrawable->getPositionGroup())-mImpostorOffset)); + ((LLVector3(mDrawable->getPositionGroup().getF32())-mImpostorOffset)); - newMin = mLastAnimExtents[0] + delta; - newMax = mLastAnimExtents[1] + delta; + newMin.load3( (mLastAnimExtents[0] + delta).mV); + newMax.load3( (mLastAnimExtents[1] + delta).mV); } else { getSpatialExtents(newMin,newMax); - mLastAnimExtents[0] = newMin; - mLastAnimExtents[1] = newMax; - LLVector3 pos_group = (newMin+newMax)*0.5f; - mImpostorOffset = pos_group-getRenderPosition(); + mLastAnimExtents[0].set(newMin.getF32()); + mLastAnimExtents[1].set(newMax.getF32()); + LLVector4a pos_group; + pos_group.setAdd(newMin,newMax); + pos_group.mul(0.5f); + mImpostorOffset = LLVector3(pos_group.getF32())-getRenderPosition(); mDrawable->setPositionGroup(pos_group); } } -void LLVOAvatar::getSpatialExtents(LLVector3& newMin, LLVector3& newMax) +void LLVOAvatar::getSpatialExtents(LLVector4a& newMin, LLVector4a& newMax) { - LLVector3 buffer(0.25f, 0.25f, 0.25f); - LLVector3 pos = getRenderPosition(); - newMin = pos - buffer; - newMax = pos + buffer; + LLVector4a buffer(0.25f); + LLVector4a pos; + pos.load3(getRenderPosition().mV); + newMin.setSub(pos, buffer); + newMax.setAdd(pos, buffer); + float max_attachment_span = DEFAULT_MAX_PRIM_SCALE * 5.0f; //stretch bounding box by joint positions @@ -1329,12 +1334,20 @@ void LLVOAvatar::getSpatialExtents(LLVector3& newMin, LLVector3& newMax) LLPolyMesh* mesh = i->second; for (S32 joint_num = 0; joint_num < mesh->mJointRenderData.count(); joint_num++) { - update_min_max(newMin, newMax, - mesh->mJointRenderData[joint_num]->mWorldMatrix->getTranslation()); + LLVector4a trans; + trans.load3( mesh->mJointRenderData[joint_num]->mWorldMatrix->getTranslation().mV); + update_min_max(newMin, newMax, trans); } } - mPixelArea = LLPipeline::calcPixelArea((newMin+newMax)*0.5f, (newMax-newMin)*0.5f, *LLViewerCamera::getInstance()); + LLVector4a center, size; + center.setAdd(newMin, newMax); + center.mul(0.5f); + + size.setSub(newMax,newMin); + size.mul(0.5f); + + mPixelArea = LLPipeline::calcPixelArea(center, size, *LLViewerCamera::getInstance()); //stretch bounding box by attachments for (attachment_map_t::iterator iter = mAttachmentPoints.begin(); @@ -1361,15 +1374,17 @@ void LLVOAvatar::getSpatialExtents(LLVector3& newMin, LLVector3& newMax) LLSpatialBridge* bridge = drawable->getSpatialBridge(); if (bridge) { - const LLVector3* ext = bridge->getSpatialExtents(); - LLVector3 distance = (ext[1] - ext[0]); + const LLVector4a* ext = bridge->getSpatialExtents(); + LLVector4a distance; + distance.setSub(ext[1], ext[0]); + LLVector4a max_span(max_attachment_span); + + S32 lt = distance.lessThan4(max_span).getComparisonMask() & 0x7; // Only add the prim to spatial extents calculations if it isn't a megaprim. // max_attachment_span calculated at the start of the function // (currently 5 times our max prim size) - if (distance.mV[0] < max_attachment_span - && distance.mV[1] < max_attachment_span - && distance.mV[2] < max_attachment_span) + if (lt == 0x7) { update_min_max(newMin,newMax,ext[0]); update_min_max(newMin,newMax,ext[1]); @@ -1381,8 +1396,9 @@ void LLVOAvatar::getSpatialExtents(LLVector3& newMin, LLVector3& newMax) } //pad bounding box - newMin -= buffer; - newMax += buffer; + + newMin.sub(buffer); + newMax.add(buffer); } //----------------------------------------------------------------------------- @@ -2371,7 +2387,7 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update) if (isImpostor() && !mNeedsImpostorUpdate) { - LLVector3 ext[2]; + LLVector4a ext[2]; F32 distance; LLVector3 angle; @@ -2400,12 +2416,22 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update) } else { + //VECTORIZE THIS getSpatialExtents(ext[0], ext[1]); - if ((ext[1]-mImpostorExtents[1]).length() > 0.05f || - (ext[0]-mImpostorExtents[0]).length() > 0.05f) + LLVector4a diff; + diff.setSub(ext[1], mImpostorExtents[1]); + if (diff.length3() > 0.05f) { mNeedsImpostorUpdate = TRUE; } + else + { + diff.setSub(ext[0], mImpostorExtents[0]); + if (diff.length3() > 0.05f) + { + mNeedsImpostorUpdate = TRUE; + } + } } } } @@ -5151,9 +5177,13 @@ void LLVOAvatar::setPixelAreaAndAngle(LLAgent &agent) return; } - const LLVector3* ext = mDrawable->getSpatialExtents(); - LLVector3 center = (ext[1] + ext[0]) * 0.5f; - LLVector3 size = (ext[1]-ext[0])*0.5f; + const LLVector4a* ext = mDrawable->getSpatialExtents(); + LLVector4a center; + center.setAdd(ext[1], ext[0]); + center.mul(0.5f); + LLVector4a size; + size.setSub(ext[1], ext[0]); + size.mul(0.5f); mImpostorPixelArea = LLPipeline::calcPixelArea(center, size, *LLViewerCamera::getInstance()); @@ -5165,7 +5195,7 @@ void LLVOAvatar::setPixelAreaAndAngle(LLAgent &agent) } else { - F32 radius = size.length(); + F32 radius = size.length3(); mAppAngle = (F32) atan2( radius, range) * RAD_TO_DEG; } @@ -7546,9 +7576,9 @@ void LLVOAvatar::cacheImpostorValues() getImpostorValues(mImpostorExtents, mImpostorAngle, mImpostorDistance); } -void LLVOAvatar::getImpostorValues(LLVector3* extents, LLVector3& angle, F32& distance) const +void LLVOAvatar::getImpostorValues(LLVector4a* extents, LLVector3& angle, F32& distance) const { - const LLVector3* ext = mDrawable->getSpatialExtents(); + const LLVector4a* ext = mDrawable->getSpatialExtents(); extents[0] = ext[0]; extents[1] = ext[1]; diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index a851b7a150..71c3ed1cc2 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -127,7 +127,7 @@ public: virtual BOOL isActive() const; // Whether this object needs to do an idleUpdate. virtual void updateTextures(); virtual S32 setTETexture(const U8 te, const LLUUID& uuid); // If setting a baked texture, need to request it from a non-local sim. - virtual void onShift(const LLVector3& shift_vector); + virtual void onShift(const LLVector4a& shift_vector); virtual U32 getPartitionType() const; virtual const LLVector3 getRenderPosition() const; virtual void updateDrawable(BOOL force_damped); @@ -135,8 +135,8 @@ public: virtual BOOL updateGeometry(LLDrawable *drawable); virtual void setPixelAreaAndAngle(LLAgent &agent); virtual void updateRegion(LLViewerRegion *regionp); - virtual void updateSpatialExtents(LLVector3& newMin, LLVector3 &newMax); - virtual void getSpatialExtents(LLVector3& newMin, LLVector3& newMax); + virtual void updateSpatialExtents(LLVector4a& newMin, LLVector4a &newMax); + virtual void getSpatialExtents(LLVector4a& newMin, LLVector4a& newMax); virtual BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end, S32 face = -1, // which face to check, -1 = ALL_SIDES BOOL pick_transparent = FALSE, @@ -391,7 +391,7 @@ public: BOOL needsImpostorUpdate() const; const LLVector3& getImpostorOffset() const; const LLVector2& getImpostorDim() const; - void getImpostorValues(LLVector3* extents, LLVector3& angle, F32& distance) const; + void getImpostorValues(LLVector4a* extents, LLVector3& angle, F32& distance) const; void cacheImpostorValues(); void setImpostorDim(const LLVector2& dim); static void resetImpostors(); @@ -402,7 +402,7 @@ private: LLVector3 mImpostorOffset; LLVector2 mImpostorDim; BOOL mNeedsAnimUpdate; - LLVector3 mImpostorExtents[2]; + LL_ALIGN_16(LLVector4a mImpostorExtents[2]); LLVector3 mImpostorAngle; F32 mImpostorDistance; F32 mImpostorPixelArea; diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp index 3ba4ecad0c..b5fd8182c6 100644 --- a/indra/newview/llvopartgroup.cpp +++ b/indra/newview/llvopartgroup.cpp @@ -79,12 +79,14 @@ F32 LLVOPartGroup::getBinRadius() return mScale.mV[0]*2.f; } -void LLVOPartGroup::updateSpatialExtents(LLVector3& newMin, LLVector3& newMax) +void LLVOPartGroup::updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax) { const LLVector3& pos_agent = getPositionAgent(); - newMin = pos_agent - mScale; - newMax = pos_agent + mScale; - mDrawable->setPositionGroup(pos_agent); + newMin.load3( (pos_agent - mScale).mV); + newMax.load3( (pos_agent + mScale).mV); + LLVector4a pos; + pos.load3(pos_agent.mV); + mDrawable->setPositionGroup(pos); } BOOL LLVOPartGroup::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) diff --git a/indra/newview/llvopartgroup.h b/indra/newview/llvopartgroup.h index 18583b4be9..771ae1c1eb 100644 --- a/indra/newview/llvopartgroup.h +++ b/indra/newview/llvopartgroup.h @@ -57,7 +57,7 @@ public: BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time); virtual F32 getBinRadius(); - virtual void updateSpatialExtents(LLVector3& newMin, LLVector3& newMax); + virtual void updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax); virtual U32 getPartitionType() const; /*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp index eef62ddf1a..02e7e7e60f 100644 --- a/indra/newview/llvosurfacepatch.cpp +++ b/indra/newview/llvosurfacepatch.cpp @@ -995,7 +995,13 @@ BOOL LLVOSurfacePatch::lineSegmentIntersect(const LLVector3& start, const LLVect //step one meter at a time until intersection point found - const LLVector3* ext = mDrawable->getSpatialExtents(); + //VECTORIZE THIS + const LLVector4a* exta = mDrawable->getSpatialExtents(); + + LLVector3 ext[2]; + ext[0].set(exta[0].getF32()); + ext[1].set(exta[1].getF32()); + F32 rad = (delta*tdelta).magVecSquared(); F32 t = 0.f; @@ -1057,13 +1063,16 @@ BOOL LLVOSurfacePatch::lineSegmentIntersect(const LLVector3& start, const LLVect return FALSE; } -void LLVOSurfacePatch::updateSpatialExtents(LLVector3& newMin, LLVector3 &newMax) +void LLVOSurfacePatch::updateSpatialExtents(LLVector4a& newMin, LLVector4a &newMax) { LLVector3 posAgent = getPositionAgent(); LLVector3 scale = getScale(); - newMin = posAgent-scale*0.5f; // Changing to 2.f makes the culling a -little- better, but still wrong - newMax = posAgent+scale*0.5f; - mDrawable->setPositionGroup((newMin+newMax)*0.5f); + newMin.load3( (posAgent-scale*0.5f).mV); // Changing to 2.f makes the culling a -little- better, but still wrong + newMax.load3( (posAgent+scale*0.5f).mV); + LLVector4a pos; + pos.setAdd(newMin,newMax); + pos.mul(0.5f); + mDrawable->setPositionGroup(pos); } U32 LLVOSurfacePatch::getPartitionType() const diff --git a/indra/newview/llvosurfacepatch.h b/indra/newview/llvosurfacepatch.h index 10a5888526..15442e1947 100644 --- a/indra/newview/llvosurfacepatch.h +++ b/indra/newview/llvosurfacepatch.h @@ -78,7 +78,7 @@ public: /*virtual*/ void updateTextures(); /*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area - /*virtual*/ void updateSpatialExtents(LLVector3& newMin, LLVector3& newMax); + /*virtual*/ void updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax); /*virtual*/ BOOL isActive() const; // Whether this object needs to do an idleUpdate. void setPatch(LLSurfacePatch *patchp); diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index b89c0cd638..d564643161 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -1238,7 +1238,7 @@ void LLVOTree::updateRadius() mDrawable->setRadius(32.0f); } -void LLVOTree::updateSpatialExtents(LLVector3& newMin, LLVector3& newMax) +void LLVOTree::updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax) { F32 radius = getScale().length()*0.05f; LLVector3 center = getRenderPosition(); @@ -1248,9 +1248,11 @@ void LLVOTree::updateSpatialExtents(LLVector3& newMin, LLVector3& newMax) center += LLVector3(0, 0, size.mV[2]) * getRotation(); - newMin.set(center-size); - newMax.set(center+size); - mDrawable->setPositionGroup(center); + newMin.load3((center-size).mV); + newMax.load3((center+size).mV); + LLVector4a pos; + pos.load3(center.mV); + mDrawable->setPositionGroup(pos); } BOOL LLVOTree::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, S32 face, BOOL pick_transparent, S32 *face_hitp, @@ -1263,8 +1265,13 @@ BOOL LLVOTree::lineSegmentIntersect(const LLVector3& start, const LLVector3& end return FALSE; } - const LLVector3* ext = mDrawable->getSpatialExtents(); + const LLVector4a* exta = mDrawable->getSpatialExtents(); + //VECTORIZE THIS + LLVector3 ext[2]; + ext[0].set(exta[0].getF32()); + ext[1].set(exta[1].getF32()); + LLVector3 center = (ext[1]+ext[0])*0.5f; LLVector3 size = (ext[1]-ext[0]); diff --git a/indra/newview/llvotree.h b/indra/newview/llvotree.h index feac9e0675..2ce1b03d26 100644 --- a/indra/newview/llvotree.h +++ b/indra/newview/llvotree.h @@ -73,7 +73,7 @@ public: /*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline); /*virtual*/ BOOL updateGeometry(LLDrawable *drawable); - /*virtual*/ void updateSpatialExtents(LLVector3 &min, LLVector3 &max); + /*virtual*/ void updateSpatialExtents(LLVector4a &min, LLVector4a &max); virtual U32 getPartitionType() const; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index a9f3abeef8..db9e0b88e1 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -701,7 +701,7 @@ void LLVOVolume::updateTextureVirtualSize() const LLTextureEntry *te = face->getTextureEntry(); LLViewerTexture *imagep = face->getTexture(); if (!imagep || !te || - face->mExtents[0] == face->mExtents[1]) + face->mExtents[0].equal3(face->mExtents[1])) { continue; } @@ -1332,7 +1332,7 @@ BOOL LLVOVolume::genBBoxes(BOOL force_global) { BOOL res = TRUE; - LLVector3 min,max; + LLVector4a min,max; BOOL rebuild = mDrawable->isState(LLDrawable::REBUILD_VOLUME | LLDrawable::REBUILD_POSITION); @@ -1356,17 +1356,8 @@ BOOL LLVOVolume::genBBoxes(BOOL force_global) } else { - for (U32 i = 0; i < 3; i++) - { - if (face->mExtents[0].mV[i] < min.mV[i]) - { - min.mV[i] = face->mExtents[0].mV[i]; - } - if (face->mExtents[1].mV[i] > max.mV[i]) - { - max.mV[i] = face->mExtents[1].mV[i]; - } - } + min.setMin(face->mExtents[0]); + max.setMax(face->mExtents[1]); } } } @@ -1374,7 +1365,9 @@ BOOL LLVOVolume::genBBoxes(BOOL force_global) if (rebuild) { mDrawable->setSpatialExtents(min,max); - mDrawable->setPositionGroup((min+max)*0.5f); + min.add(max); + min.mul(0.5f); + mDrawable->setPositionGroup(min); } updateRadius(); @@ -3007,7 +3000,7 @@ void LLVOVolume::setSelected(BOOL sel) } } -void LLVOVolume::updateSpatialExtents(LLVector3& newMin, LLVector3& newMax) +void LLVOVolume::updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax) { } @@ -3039,7 +3032,7 @@ F32 LLVOVolume::getBinRadius() } } - const LLVector3* ext = mDrawable->getSpatialExtents(); + const LLVector4a* ext = mDrawable->getSpatialExtents(); BOOL shrink_wrap = mDrawable->isAnimating(); BOOL alpha_wrap = FALSE; @@ -3071,7 +3064,10 @@ F32 LLVOVolume::getBinRadius() } else if (shrink_wrap) { - radius = (ext[1]-ext[0]).length()*0.5f; + LLVector4a rad; + rad.setSub(ext[1], ext[0]); + + radius = rad.length3()*0.5f; } else if (mDrawable->isStatic()) { @@ -3107,7 +3103,7 @@ const LLVector3 LLVOVolume::getPivotPositionAgent() const return LLViewerObject::getPivotPositionAgent(); } -void LLVOVolume::onShift(const LLVector3 &shift_vector) +void LLVOVolume::onShift(const LLVector4a &shift_vector) { if (mVolumeImpl) { @@ -3610,7 +3606,6 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) } } } - } continue; @@ -4217,7 +4212,7 @@ LLHUDPartition::LLHUDPartition() mLODPeriod = 1; } -void LLHUDPartition::shift(const LLVector3 &offset) +void LLHUDPartition::shift(const LLVector4a &offset) { //HUD objects don't shift with region crossing. That would be silly. } diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index 2776988a12..d5606034d0 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -66,7 +66,7 @@ public: virtual void onSetVolume(const LLVolumeParams &volume_params, const S32 detail) = 0; virtual void onSetScale(const LLVector3 &scale, BOOL damped) = 0; virtual void onParameterChanged(U16 param_type, LLNetworkData *data, BOOL in_use, bool local_origin) = 0; - virtual void onShift(const LLVector3 &shift_vector) = 0; + virtual void onShift(const LLVector4a &shift_vector) = 0; virtual bool isVolumeUnique() const = 0; // Do we need a unique LLVolume instance? virtual bool isVolumeGlobal() const = 0; // Are we in global space? virtual bool isActive() const = 0; // Is this object currently active? @@ -145,7 +145,7 @@ public: void markForUpdate(BOOL priority) { LLViewerObject::markForUpdate(priority); mVolumeChanged = TRUE; } - /*virtual*/ void onShift(const LLVector3 &shift_vector); // Called when the drawable shifts + /*virtual*/ void onShift(const LLVector4a &shift_vector); // Called when the drawable shifts /*virtual*/ void parameterChanged(U16 param_type, bool local_origin); /*virtual*/ void parameterChanged(U16 param_type, LLNetworkData* data, BOOL in_use, bool local_origin); @@ -201,7 +201,7 @@ public: void regenFaces(); BOOL genBBoxes(BOOL force_global); void preRebuild(); - virtual void updateSpatialExtents(LLVector3& min, LLVector3& max); + virtual void updateSpatialExtents(LLVector4a& min, LLVector4a& max); virtual F32 getBinRadius(); virtual U32 getPartitionType() const; diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp index a8c4625f6e..7c1b22d432 100644 --- a/indra/newview/llvowater.cpp +++ b/indra/newview/llvowater.cpp @@ -258,15 +258,21 @@ void LLVOWater::setIsEdgePatch(const BOOL edge_patch) mIsEdgePatch = edge_patch; } -void LLVOWater::updateSpatialExtents(LLVector3 &newMin, LLVector3& newMax) +void LLVOWater::updateSpatialExtents(LLVector4a &newMin, LLVector4a& newMax) { - LLVector3 pos = getPositionAgent(); - LLVector3 scale = getScale(); - - newMin = pos - scale * 0.5f; - newMax = pos + scale * 0.5f; + LLVector4a pos; + pos.load3(getPositionAgent().mV); + LLVector4a scale; + scale.load3(getScale().mV); + scale.mul(0.5f); + + newMin.setSub(pos, scale); + newMax.setAdd(pos, scale); + + pos.setAdd(newMin,newMax); + pos.mul(0.5f); - mDrawable->setPositionGroup((newMin + newMax) * 0.5f); + mDrawable->setPositionGroup(pos); } U32 LLVOWater::getPartitionType() const diff --git a/indra/newview/llvowater.h b/indra/newview/llvowater.h index 3cc031e589..a868afe58b 100644 --- a/indra/newview/llvowater.h +++ b/indra/newview/llvowater.h @@ -66,7 +66,7 @@ public: /*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time); /*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline); /*virtual*/ BOOL updateGeometry(LLDrawable *drawable); - /*virtual*/ void updateSpatialExtents(LLVector3& newMin, LLVector3& newMax); + /*virtual*/ void updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax); /*virtual*/ void updateTextures(); /*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 91c3805d3b..01027e5be6 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -1508,11 +1508,214 @@ F32 LLPipeline::calcPixelArea(LLVector3 center, LLVector3 size, LLCamera &camera return radius*radius * F_PI; } +//static +F32 LLPipeline::calcPixelArea(const LLVector4a& center, const LLVector4a& size, LLCamera &camera) +{ + LLVector4a origin; + origin.load3(camera.getOrigin().mV); + + LLVector4a lookAt; + lookAt.setSub(center, origin); + F32 dist = lookAt.length3(); + + //ramp down distance for nearby objects + //shrink dist by dist/16. + if (dist < 16.f) + { + dist /= 16.f; + dist *= dist; + dist *= 16.f; + } + + //get area of circle around node + F32 app_angle = atanf(size.length3()/dist); + F32 radius = app_angle*LLDrawable::sCurPixelAngle; + return radius*radius * F_PI; +} + void LLPipeline::grabReferences(LLCullResult& result) { sCull = &result; } +void LLPipeline::clearReferences() +{ + sCull = NULL; +} + +void check_references(LLSpatialGroup* group, LLDrawable* drawable) +{ + for (LLSpatialGroup::element_iter i = group->getData().begin(); i != group->getData().end(); ++i) + { + if (drawable == *i) + { + llerrs << "LLDrawable deleted while actively reference by LLPipeline." << llendl; + } + } +} + +void check_references(LLDrawable* drawable, LLFace* face) +{ + for (S32 i = 0; i < drawable->getNumFaces(); ++i) + { + if (drawable->getFace(i) == face) + { + llerrs << "LLFace deleted while actively referenced by LLPipeline." << llendl; + } + } +} + +void check_references(LLSpatialGroup* group, LLFace* face) +{ + for (LLSpatialGroup::element_iter i = group->getData().begin(); i != group->getData().end(); ++i) + { + LLDrawable* drawable = *i; + check_references(drawable, face); + } +} + +void LLPipeline::checkReferences(LLFace* face) +{ +#if 0 + if (sCull) + { + for (LLCullResult::sg_list_t::iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter) + { + LLSpatialGroup* group = *iter; + check_references(group, face); + } + + for (LLCullResult::sg_list_t::iterator iter = sCull->beginAlphaGroups(); iter != sCull->endAlphaGroups(); ++iter) + { + LLSpatialGroup* group = *iter; + check_references(group, face); + } + + for (LLCullResult::sg_list_t::iterator iter = sCull->beginDrawableGroups(); iter != sCull->endDrawableGroups(); ++iter) + { + LLSpatialGroup* group = *iter; + check_references(group, face); + } + + for (LLCullResult::drawable_list_t::iterator iter = sCull->beginVisibleList(); iter != sCull->endVisibleList(); ++iter) + { + LLDrawable* drawable = *iter; + check_references(drawable, face); + } + } +#endif +} + +void LLPipeline::checkReferences(LLDrawable* drawable) +{ +#if 0 + if (sCull) + { + for (LLCullResult::sg_list_t::iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter) + { + LLSpatialGroup* group = *iter; + check_references(group, drawable); + } + + for (LLCullResult::sg_list_t::iterator iter = sCull->beginAlphaGroups(); iter != sCull->endAlphaGroups(); ++iter) + { + LLSpatialGroup* group = *iter; + check_references(group, drawable); + } + + for (LLCullResult::sg_list_t::iterator iter = sCull->beginDrawableGroups(); iter != sCull->endDrawableGroups(); ++iter) + { + LLSpatialGroup* group = *iter; + check_references(group, drawable); + } + + for (LLCullResult::drawable_list_t::iterator iter = sCull->beginVisibleList(); iter != sCull->endVisibleList(); ++iter) + { + if (drawable == *iter) + { + llerrs << "LLDrawable deleted while actively referenced by LLPipeline." << llendl; + } + } + } +#endif +} + +void check_references(LLSpatialGroup* group, LLDrawInfo* draw_info) +{ + for (LLSpatialGroup::draw_map_t::iterator i = group->mDrawMap.begin(); i != group->mDrawMap.end(); ++i) + { + LLSpatialGroup::drawmap_elem_t& draw_vec = i->second; + for (LLSpatialGroup::drawmap_elem_t::iterator j = draw_vec.begin(); j != draw_vec.end(); ++j) + { + LLDrawInfo* params = *j; + if (params == draw_info) + { + llerrs << "LLDrawInfo deleted while actively referenced by LLPipeline." << llendl; + } + } + } +} + + +void LLPipeline::checkReferences(LLDrawInfo* draw_info) +{ +#if 0 + if (sCull) + { + for (LLCullResult::sg_list_t::iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter) + { + LLSpatialGroup* group = *iter; + check_references(group, draw_info); + } + + for (LLCullResult::sg_list_t::iterator iter = sCull->beginAlphaGroups(); iter != sCull->endAlphaGroups(); ++iter) + { + LLSpatialGroup* group = *iter; + check_references(group, draw_info); + } + + for (LLCullResult::sg_list_t::iterator iter = sCull->beginDrawableGroups(); iter != sCull->endDrawableGroups(); ++iter) + { + LLSpatialGroup* group = *iter; + check_references(group, draw_info); + } + } +#endif +} + +void LLPipeline::checkReferences(LLSpatialGroup* group) +{ +#if 0 + if (sCull) + { + for (LLCullResult::sg_list_t::iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter) + { + if (group == *iter) + { + llerrs << "LLSpatialGroup deleted while actively referenced by LLPipeline." << llendl; + } + } + + for (LLCullResult::sg_list_t::iterator iter = sCull->beginAlphaGroups(); iter != sCull->endAlphaGroups(); ++iter) + { + if (group == *iter) + { + llerrs << "LLSpatialGroup deleted while actively referenced by LLPipeline." << llendl; + } + } + + for (LLCullResult::sg_list_t::iterator iter = sCull->beginDrawableGroups(); iter != sCull->endDrawableGroups(); ++iter) + { + if (group == *iter) + { + llerrs << "LLSpatialGroup deleted while actively referenced by LLPipeline." << llendl; + } + } + } +#endif +} + + BOOL LLPipeline::visibleObjectsInFrustum(LLCamera& camera) { for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); @@ -1714,7 +1917,7 @@ void LLPipeline::markNotCulled(LLSpatialGroup* group, LLCamera& camera) } if (sMinRenderSize > 0.f && - llmax(llmax(group->mBounds[1].mV[0], group->mBounds[1].mV[1]), group->mBounds[1].mV[2]) < sMinRenderSize) + llmax(llmax(group->mBounds[1][0], group->mBounds[1][1]), group->mBounds[1][2]) < sMinRenderSize) { return; } @@ -2100,6 +2303,9 @@ void LLPipeline::shiftObjects(const LLVector3 &offset) glClear(GL_DEPTH_BUFFER_BIT); gDepthDirty = TRUE; + LLVector4a offseta; + offseta.load3(offset.mV); + for (LLDrawable::drawable_vector_t::iterator iter = mShiftList.begin(); iter != mShiftList.end(); iter++) { @@ -2108,7 +2314,7 @@ void LLPipeline::shiftObjects(const LLVector3 &offset) { continue; } - drawablep->shiftPos(offset); + drawablep->shiftPos(offseta); drawablep->clearState(LLDrawable::ON_SHIFT_LIST); } mShiftList.resize(0); @@ -2122,7 +2328,7 @@ void LLPipeline::shiftObjects(const LLVector3 &offset) LLSpatialPartition* part = region->getSpatialPartition(i); if (part) { - part->shift(offset); + part->shift(offseta); } } } @@ -2659,8 +2865,10 @@ void LLPipeline::postSort(LLCamera& camera) { if (sMinRenderSize > 0.f) { - LLVector3 bounds = (*k)->mExtents[1]-(*k)->mExtents[0]; - if (llmax(llmax(bounds.mV[0], bounds.mV[1]), bounds.mV[2]) > sMinRenderSize) + LLVector4a bounds; + bounds.setSub((*k)->mExtents[1],(*k)->mExtents[0]); + + if (llmax(llmax(bounds[0], bounds[1]), bounds[2]) > sMinRenderSize) { sCull->pushDrawInfo(j->first, *k); } @@ -6770,8 +6978,9 @@ void LLPipeline::renderDeferredLighting() } - LLVector3 center = drawablep->getPositionAgent(); - F32* c = center.mV; + LLVector4a center; + center.load3(drawablep->getPositionAgent().mV); + const F32* c = center.getF32(); F32 s = volume->getLightRadius()*1.5f; LLColor3 col = volume->getLightColor(); @@ -6787,7 +6996,9 @@ void LLPipeline::renderDeferredLighting() continue; } - if (camera->AABBInFrustumNoFarClip(center, LLVector3(s,s,s)) == 0) + LLVector4a sa; + sa.splat(s); + if (camera->AABBInFrustumNoFarClip(center, sa) == 0) { continue; } @@ -6865,8 +7076,9 @@ void LLPipeline::renderDeferredLighting() LLVOVolume* volume = drawablep->getVOVolume(); - LLVector3 center = drawablep->getPositionAgent(); - F32* c = center.mV; + LLVector4a center; + center.load3(drawablep->getPositionAgent().mV); + const F32* c = center.getF32(); F32 s = volume->getLightRadius()*1.5f; sVisibleLightCount++; @@ -8952,7 +9164,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar) stateSort(*LLViewerCamera::getInstance(), result); - const LLVector3* ext = avatar->mDrawable->getSpatialExtents(); + const LLVector4a* ext = avatar->mDrawable->getSpatialExtents(); LLVector3 pos(avatar->getRenderPosition()+avatar->getImpostorOffset()); LLCamera camera = *viewer_camera; @@ -8961,18 +9173,23 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar) LLVector2 tdim; - LLVector3 half_height = (ext[1]-ext[0])*0.5f; - LLVector3 left = camera.getLeftAxis(); - left *= left; - left.normalize(); + LLVector4a half_height; + half_height.setSub(ext[1], ext[0]); + half_height.mul(0.5f); + + LLVector4a left; + left.load3(camera.getLeftAxis().mV); + left.mul(left); + left.normalize3fast(); - LLVector3 up = camera.getUpAxis(); - up *= up; - up.normalize(); + LLVector4a up; + up.load3(camera.getUpAxis().mV); + up.mul(up); + up.normalize3fast(); - tdim.mV[0] = fabsf(half_height * left); - tdim.mV[1] = fabsf(half_height * up); + tdim.mV[0] = fabsf(half_height.dot3(left)); + tdim.mV[1] = fabsf(half_height.dot3(up)); glMatrixMode(GL_PROJECTION); glPushMatrix(); diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index c9384f5ba2..52f943cd1d 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -217,6 +217,7 @@ public: //calculate pixel area of given box from vantage point of given camera static F32 calcPixelArea(LLVector3 center, LLVector3 size, LLCamera& camera); + static F32 calcPixelArea(const LLVector4a& center, const LLVector4a& size, LLCamera &camera); void stateSort(LLCamera& camera, LLCullResult& result); void stateSort(LLSpatialGroup* group, LLCamera& camera); @@ -229,6 +230,14 @@ public: void renderGroups(LLRenderPass* pass, U32 type, U32 mask, BOOL texture); void grabReferences(LLCullResult& result); + void clearReferences(); + + //check references will assert that there are no references in sCullResult to the provided data + void checkReferences(LLFace* face); + void checkReferences(LLDrawable* drawable); + void checkReferences(LLDrawInfo* draw_info); + void checkReferences(LLSpatialGroup* group); + void renderGeom(LLCamera& camera, BOOL forceVBOUpdate = FALSE); void renderGeomDeferred(LLCamera& camera); -- cgit v1.3 From 7db6a5a64d8eacb63b45dc7cc48bdd681f3e19af Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Fri, 4 Jun 2010 00:10:05 -0500 Subject: Disable octree paranoia checks. --- indra/llmath/lloctree.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/llmath') diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index ae2259dba0..f61ce6ce05 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -45,7 +45,7 @@ #define OCT_ERRS LL_WARNS("OctreeErrors") #endif -#define LL_OCTREE_PARANOIA_CHECK 1 +#define LL_OCTREE_PARANOIA_CHECK 0 #if LL_DARWIN #define LL_OCTREE_MAX_CAPACITY 32 #else -- cgit v1.3 From 087b7499082c7f0ae867990a102bc8f90a83471d Mon Sep 17 00:00:00 2001 From: Tofu Linden Date: Fri, 4 Jun 2010 08:46:00 +0100 Subject: fix scoping issues for gcc --- indra/llmath/lloctree.h | 2 +- indra/llmath/llvolume.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index f61ce6ce05..df77971204 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -640,7 +640,7 @@ public: const LLVector4a& v = data->getPositionGroup(); LLVector4a val; - val.setSub(v, mD[CENTER]); + val.setSub(v, BaseType::mD[BaseType::CENTER]); val.setAbs(val); S32 lt = val.lessThan4(MAX_MAG).getComparisonMask() & 0x7; diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 72833c019f..ef1ab57036 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -4406,7 +4406,7 @@ S32 LLVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& en face.createOctree(); } - LLVector4a* p = (LLVector4a*) face.mPositions; + //LLVector4a* p = (LLVector4a*) face.mPositions; LLOctreeTriangleRayIntersect intersect(start, dir, &face, &closest_t, intersection, tex_coord, normal, bi_normal); intersect.traverse(face.mOctree); -- cgit v1.3 From dc2f50642bf6c785263d91ca53ec337f3898b990 Mon Sep 17 00:00:00 2001 From: Tofu Linden Date: Fri, 4 Jun 2010 08:54:03 +0100 Subject: lots of _mm_malloc and _mm_free -> ll_aligned_malloc_16 and ll_aligned_free_16 more to come. --- indra/llcommon/llmemory.h | 2 +- indra/llmath/lloctree.h | 4 +-- indra/llmath/llvolume.cpp | 86 +++++++++++++++++++++++------------------------ 3 files changed, 46 insertions(+), 46 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llcommon/llmemory.h b/indra/llcommon/llmemory.h index 117268cfe7..93dd7a7fe3 100644 --- a/indra/llcommon/llmemory.h +++ b/indra/llcommon/llmemory.h @@ -34,7 +34,7 @@ #include -inline void* ll_aligned_malloc_16(size_t size) // returned hunk MUST be freed with ll_aligned_free(). +inline void* ll_aligned_malloc_16(size_t size) // returned hunk MUST be freed with ll_aligned_free_16(). { #if defined(LL_WINDOWS) return _mm_malloc(size, 16); diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index df77971204..59828ae565 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -102,7 +102,7 @@ public: : mParent((oct_node*)parent), mOctant(octant) { - mD = (LLVector4a*) _mm_malloc(sizeof(LLVector4a)*4, 16); + mD = (LLVector4a*) ll_aligned_malloc_16(sizeof(LLVector4a)*4); mD[CENTER] = center; mD[SIZE] = size; @@ -125,7 +125,7 @@ public: delete getChild(i); } - _mm_free(mD); + ll_aligned_free_16(mD); } inline const BaseType* getParent() const { return mParent; } diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index ef1ab57036..a8684759f3 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1987,7 +1987,7 @@ BOOL LLVolume::generate() void LLVolumeFace::VertexData::init() { - mData = (LLVector4a*) _mm_malloc(32, 16); + mData = (LLVector4a*) ll_aligned_malloc_16(32); } LLVolumeFace::VertexData::VertexData() @@ -2004,7 +2004,7 @@ LLVolumeFace::VertexData::VertexData(const VertexData& rhs) LLVolumeFace::VertexData::~VertexData() { - _mm_free(mData); + ll_aligned_free_16(mData); } LLVector4a& LLVolumeFace::VertexData::getPosition() @@ -5196,7 +5196,7 @@ LLVolumeFace::LLVolumeFace() : mWeights(NULL), mOctree(NULL) { - mExtents = (LLVector4a*) _mm_malloc(48, 16); + mExtents = (LLVector4a*) ll_aligned_malloc_16(48); mCenter = mExtents+2; } @@ -5217,7 +5217,7 @@ LLVolumeFace::LLVolumeFace(const LLVolumeFace& src) mWeights(NULL), mOctree(NULL) { - mExtents = (LLVector4a*) _mm_malloc(48, 16); + mExtents = (LLVector4a*) ll_aligned_malloc_16(48); mCenter = mExtents+2; *this = src; } @@ -5264,7 +5264,7 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) } else { - _mm_free(mBinormals); + ll_aligned_free_16(mBinormals); mBinormals = NULL; } @@ -5275,7 +5275,7 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) } else { - _mm_free(mWeights); + ll_aligned_free_16(mWeights); mWeights = NULL; } } @@ -5295,7 +5295,7 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) LLVolumeFace::~LLVolumeFace() { - _mm_free(mExtents); + ll_aligned_free_16(mExtents); mExtents = NULL; freeData(); @@ -5303,17 +5303,17 @@ LLVolumeFace::~LLVolumeFace() void LLVolumeFace::freeData() { - _mm_free(mPositions); + ll_aligned_free_16(mPositions); mPositions = NULL; - _mm_free(mNormals); + ll_aligned_free_16(mNormals); mNormals = NULL; - _mm_free(mTexCoords); + ll_aligned_free_16(mTexCoords); mTexCoords = NULL; - _mm_free(mIndices); + ll_aligned_free_16(mIndices); mIndices = NULL; - _mm_free(mBinormals); + ll_aligned_free_16(mBinormals); mBinormals = NULL; - _mm_free(mWeights); + ll_aligned_free_16(mWeights); mWeights = NULL; delete mOctree; @@ -6082,21 +6082,21 @@ void LLVolumeFace::createBinormals() void LLVolumeFace::resizeVertices(S32 num_verts) { - _mm_free(mPositions); - _mm_free(mNormals); - _mm_free(mBinormals); - _mm_free(mTexCoords); + ll_aligned_free_16(mPositions); + ll_aligned_free_16(mNormals); + ll_aligned_free_16(mBinormals); + ll_aligned_free_16(mTexCoords); mBinormals = NULL; if (num_verts) { - mPositions = (LLVector4a*) _mm_malloc(num_verts*16, 16); - mNormals = (LLVector4a*) _mm_malloc(num_verts*16, 16); + mPositions = (LLVector4a*) ll_aligned_malloc_16(num_verts*16); + mNormals = (LLVector4a*) ll_aligned_malloc_16(num_verts*16); //pad texture coordinate block end to allow for QWORD reads S32 size = ((num_verts*8) + 0xF) & ~0xF; - mTexCoords = (LLVector2*) _mm_malloc(size, 16); + mTexCoords = (LLVector2*) ll_aligned_malloc_16(size); } else { @@ -6119,20 +6119,20 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con S32 new_size = new_verts*16; //positions - LLVector4a* dst = (LLVector4a*) _mm_malloc(new_size, 16); + LLVector4a* dst = (LLVector4a*) ll_aligned_malloc_16(new_size); if (mPositions) { LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mPositions, new_size/4); - _mm_free(mPositions); + ll_aligned_free_16(mPositions); } mPositions = dst; //normals - dst = (LLVector4a*) _mm_malloc(new_size, 16); + dst = (LLVector4a*) ll_aligned_malloc_16(new_size); if (mNormals) { LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mNormals, new_size/4); - _mm_free(mNormals); + ll_aligned_free_16(mNormals); } mNormals = dst; @@ -6140,16 +6140,16 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con new_size = ((new_verts*8)+0xF) & ~0xF; { - LLVector2* dst = (LLVector2*) _mm_malloc(new_size, 16); + LLVector2* dst = (LLVector2*) ll_aligned_malloc_16(new_size); if (mTexCoords) { LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mTexCoords, new_size/4); - _mm_free(mTexCoords); + ll_aligned_free_16(mTexCoords); } } //just clear binormals - _mm_free(mBinormals); + ll_aligned_free_16(mBinormals); mBinormals = NULL; mPositions[mNumVertices] = pos; @@ -6161,26 +6161,26 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con void LLVolumeFace::allocateBinormals(S32 num_verts) { - _mm_free(mBinormals); - mBinormals = (LLVector4a*) _mm_malloc(num_verts*16, 16); + ll_aligned_free_16(mBinormals); + mBinormals = (LLVector4a*) ll_aligned_malloc_16(num_verts*16); } void LLVolumeFace::allocateWeights(S32 num_verts) { - _mm_free(mWeights); - mWeights = (LLVector4a*) _mm_malloc(num_verts*16, 16); + ll_aligned_free_16(mWeights); + mWeights = (LLVector4a*) ll_aligned_malloc_16(num_verts*16); } void LLVolumeFace::resizeIndices(S32 num_indices) { - _mm_free(mIndices); + ll_aligned_free_16(mIndices); if (num_indices) { //pad index block end to allow for QWORD reads S32 size = ((num_indices*2) + 0xF) & ~0xF; - mIndices = (U16*) _mm_malloc(size,16); + mIndices = (U16*) ll_aligned_malloc_16(size); } else { @@ -6198,9 +6198,9 @@ void LLVolumeFace::pushIndex(const U16& idx) S32 old_size = (mNumIndices+0xF) & ~0xF; if (new_size != old_size) { - U16* dst = (U16*) _mm_malloc(new_size, 16); + U16* dst = (U16*) ll_aligned_malloc_16(new_size); LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mIndices, new_size/4); - _mm_free(mIndices); + ll_aligned_free_16(mIndices); mIndices = dst; } @@ -6237,17 +6237,17 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat } - LLVector4a* new_pos = (LLVector4a*) _mm_malloc(new_count*16, 16); - LLVector4a* new_norm = (LLVector4a*) _mm_malloc(new_count*16, 16); - LLVector2* new_tc = (LLVector2*) _mm_malloc((new_count*8+0xF) & ~0xF, 16); + LLVector4a* new_pos = (LLVector4a*) ll_aligned_malloc_16(new_count*16); + LLVector4a* new_norm = (LLVector4a*) ll_aligned_malloc_16(new_count*16); + LLVector2* new_tc = (LLVector2*) ll_aligned_malloc_16((new_count*8+0xF) & ~0xF); LLVector4a::memcpyNonAliased16((F32*) new_pos, (F32*) mPositions, new_count*4); LLVector4a::memcpyNonAliased16((F32*) new_norm, (F32*) mNormals, new_count*4); LLVector4a::memcpyNonAliased16((F32*) new_tc, (F32*) mTexCoords, new_count*2); - _mm_free(mPositions); - _mm_free(mNormals); - _mm_free(mTexCoords); + ll_aligned_free_16(mPositions); + ll_aligned_free_16(mNormals); + ll_aligned_free_16(mTexCoords); mPositions = new_pos; mNormals = new_norm; @@ -6287,9 +6287,9 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat new_count = mNumIndices + face.mNumIndices; - U16* new_indices = (U16*) _mm_malloc((new_count*2+0xF) & ~0xF, 16); + U16* new_indices = (U16*) ll_aligned_malloc_16((new_count*2+0xF) & ~0xF); LLVector4a::memcpyNonAliased16((F32*) new_indices, (F32*) mIndices, new_count/2); - _mm_free(mIndices); + ll_aligned_free_16(mIndices); mIndices = new_indices; mNumIndices = new_count; -- cgit v1.3 From 6ca40c7afbd794b161904b63b88a95273ae80c9c Mon Sep 17 00:00:00 2001 From: Tofu Linden Date: Fri, 4 Jun 2010 09:10:00 +0100 Subject: more needed #includes --- indra/llmath/llvolume.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index a8684759f3..ce7e20e9b4 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -31,6 +31,7 @@ */ #include "linden_common.h" +#include "llmemory.h" #include "llmath.h" #include -- cgit v1.3 From a8f0e47fd5deee1e45b4126ee43955a7bc68bb5d Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Fri, 4 Jun 2010 12:07:55 -0500 Subject: Normal debug display and fix for bad bump mapping and planar texture coordinates. --- indra/llmath/llvolume.cpp | 2 + indra/newview/app_settings/settings.xml | 13 ++++- indra/newview/llspatialpartition.cpp | 57 +++++++++++++++++++++- indra/newview/llviewermenu.cpp | 4 ++ indra/newview/pipeline.h | 1 + indra/newview/skins/default/xui/en/menu_viewer.xml | 10 ++++ 6 files changed, 85 insertions(+), 2 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 72833c019f..8cb9475994 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -6076,6 +6076,8 @@ void LLVolumeFace::createBinormals() for (U32 i = 0; i < mNumVertices; i++) { binorm[i].normalize3fast(); + //bump map/planar projection code requires normals to be normalized + mNormals[i].normalize3fast(); } } } diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 9b7cc04120..a95100d9ba 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -6280,7 +6280,18 @@ Value 0 - RenderDebugPipeline + RenderDebugNormalScale + + Comment + Scale of normals in debug display. + Persist + 1 + Type + F32 + Value + 0.03 + + RenderDebugPipeline Comment Enable strict pipeline debugging. diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 05e7bbb6cd..77d36b1c2e 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -2704,7 +2704,56 @@ void renderBoundingBox(LLDrawable* drawable, BOOL set_color = TRUE) { drawBoxOutline(pos,size); } - +} + +void renderNormals(LLDrawable* drawablep) +{ + LLVertexBuffer::unbind(); + + LLVOVolume* vol = drawablep->getVOVolume(); + if (vol) + { + LLVolume* volume = vol->getVolume(); + gGL.pushMatrix(); + glMultMatrixf((F32*) vol->getRelativeXform().mMatrix); + + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + + LLVector4a scale(gSavedSettings.getF32("RenderDebugNormalScale")); + + for (S32 i = 0; i < volume->getNumVolumeFaces(); ++i) + { + const LLVolumeFace& face = volume->getVolumeFace(i); + + gGL.begin(LLRender::LINES); + + for (S32 j = 0; j < face.mNumVertices; ++j) + { + LLVector4a n,p; + + n.setMul(face.mNormals[j], scale); + p.setAdd(face.mPositions[j], n); + + gGL.color4f(1,1,1,1); + gGL.vertex3fv(face.mPositions[j].getF32()); + gGL.vertex3fv(p.getF32()); + + if (face.mBinormals) + { + n.setMul(face.mBinormals[j], scale); + p.setAdd(face.mPositions[j], n); + + gGL.color4f(0,1,1,1); + gGL.vertex3fv(face.mPositions[j].getF32()); + gGL.vertex3fv(p.getF32()); + } + } + + gGL.end(); + } + + gGL.popMatrix(); + } } void renderTexturePriority(LLDrawable* drawable) @@ -3081,6 +3130,11 @@ public: { renderBoundingBox(drawable); } + + if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_NORMALS)) + { + renderNormals(drawable); + } if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_BUILD_QUEUE)) { @@ -3280,6 +3334,7 @@ void LLSpatialPartition::renderDebug() LLPipeline::RENDER_DEBUG_LIGHTS | LLPipeline::RENDER_DEBUG_BATCH_SIZE | LLPipeline::RENDER_DEBUG_BBOXES | + LLPipeline::RENDER_DEBUG_NORMALS | LLPipeline::RENDER_DEBUG_POINTS | LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY | LLPipeline::RENDER_DEBUG_TEXTURE_ANIM | diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index b63ef921ac..eb2ee94af3 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -857,6 +857,10 @@ U32 info_display_from_string(std::string info_display) { return LLPipeline::RENDER_DEBUG_BBOXES; } + else if ("normals" == info_display) + { + return LLPipeline::RENDER_DEBUG_NORMALS; + } else if ("points" == info_display) { return LLPipeline::RENDER_DEBUG_POINTS; diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 52f943cd1d..4e8760947c 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -440,6 +440,7 @@ public: RENDER_DEBUG_AVATAR_VOLUME = 0x0100000, RENDER_DEBUG_BUILD_QUEUE = 0x0200000, RENDER_DEBUG_AGENT_TARGET = 0x0400000, + RENDER_DEBUG_NORMALS = 0x0800000, }; public: diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index bdc171ea52..9cc1a481f5 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -1925,6 +1925,16 @@ function="Advanced.ToggleInfoDisplay" parameter="bboxes" /> + + + + -- cgit v1.3 From f9b13d8f8510b1f7f02fcf92685471461b79858e Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 10 Jun 2010 00:45:48 -0500 Subject: Add "LL_MESH_ENABLED" preprocessor flag for toggling mesh code. Couple of merge fixes. --- indra/llcommon/llassettype.cpp | 3 +- indra/llcommon/llassettype.h | 3 +- indra/llinventory/llinventorytype.cpp | 5 ++- indra/llinventory/llinventorytype.h | 2 + indra/llmath/llvolume.cpp | 13 +++--- indra/llmath/llvolume.h | 7 ++++ indra/llrender/llvertexbuffer.cpp | 4 +- indra/llvfs/llvfs.cpp | 2 + indra/newview/app_settings/settings.xml | 4 +- indra/newview/llappviewer.cpp | 4 ++ indra/newview/llassetuploadresponders.cpp | 5 +++ indra/newview/llassetuploadresponders.h | 3 +- indra/newview/lldrawpoolavatar.cpp | 48 +++++++++++++++++++++- indra/newview/lldrawpoolavatar.h | 40 ++++++++++-------- indra/newview/llface.cpp | 2 + indra/newview/llinventorybridge.cpp | 10 ++++- indra/newview/llinventorybridge.h | 4 +- indra/newview/llpanelgroupnotices.cpp | 2 + indra/newview/llpanelobjectinventory.cpp | 6 +++ indra/newview/llselectmgr.cpp | 2 + indra/newview/lltexturectrl.cpp | 12 +++++- indra/newview/lltooldraganddrop.cpp | 10 +++++ indra/newview/lltooldraganddrop.h | 4 ++ indra/newview/llviewerassettype.cpp | 2 + indra/newview/llviewerfloaterreg.cpp | 4 ++ indra/newview/llviewermenufile.cpp | 9 +++- indra/newview/llviewermenufile.h | 2 + indra/newview/llviewertexteditor.cpp | 2 + indra/newview/llviewerwindow.cpp | 4 ++ indra/newview/llvovolume.cpp | 15 ++++++- indra/newview/pipeline.cpp | 4 ++ indra/newview/pipeline.h | 13 +++--- .../default/xui/en/panel_preferences_graphics1.xml | 10 ++--- 33 files changed, 209 insertions(+), 51 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llcommon/llassettype.cpp b/indra/llcommon/llassettype.cpp index e19f8b0454..476a23ec64 100644 --- a/indra/llcommon/llassettype.cpp +++ b/indra/llcommon/llassettype.cpp @@ -99,8 +99,9 @@ LLAssetDictionary::LLAssetDictionary() addEntry(LLAssetType::AT_LINK, new AssetEntry("LINK", "link", "sym link", false, false, true)); addEntry(LLAssetType::AT_LINK_FOLDER, new AssetEntry("FOLDER_LINK", "link_f", "sym folder link", false, false, true)); - +#if LL_MESH_ENABLED addEntry(LLAssetType::AT_MESH, new AssetEntry("MESH", "mesh", "mesh", false, false, false)); +#endif addEntry(LLAssetType::AT_NONE, new AssetEntry("NONE", "-1", NULL, FALSE, FALSE, FALSE)); diff --git a/indra/llcommon/llassettype.h b/indra/llcommon/llassettype.h index 90cd03c433..ebc43134cb 100644 --- a/indra/llcommon/llassettype.h +++ b/indra/llcommon/llassettype.h @@ -114,9 +114,10 @@ public: AT_LINK_FOLDER = 25, // Inventory folder link - +#if LL_MESH_ENABLED AT_MESH = 49, // Mesh data in our proprietary SLM format +#endif AT_COUNT = 50, diff --git a/indra/llinventory/llinventorytype.cpp b/indra/llinventory/llinventorytype.cpp index 2d4ee604b0..82cd22a832 100644 --- a/indra/llinventory/llinventorytype.cpp +++ b/indra/llinventory/llinventorytype.cpp @@ -89,7 +89,9 @@ LLInventoryDictionary::LLInventoryDictionary() addEntry(LLInventoryType::IT_WEARABLE, new InventoryEntry("wearable", "wearable", 2, LLAssetType::AT_CLOTHING, LLAssetType::AT_BODYPART)); addEntry(LLInventoryType::IT_ANIMATION, new InventoryEntry("animation", "animation", 1, LLAssetType::AT_ANIMATION)); addEntry(LLInventoryType::IT_GESTURE, new InventoryEntry("gesture", "gesture", 1, LLAssetType::AT_GESTURE)); +#if LL_MESH_ENABLED addEntry(LLInventoryType::IT_MESH, new InventoryEntry("mesh", "mesh", 1, LLAssetType::AT_MESH)); +#endif } @@ -150,8 +152,9 @@ DEFAULT_ASSET_FOR_INV_TYPE[LLAssetType::AT_COUNT] = LLInventoryType::IT_NONE, // AT_NONE LLInventoryType::IT_NONE, // AT_NONE LLInventoryType::IT_NONE, // AT_NONE - +#if LL_MESH_ENABLED LLInventoryType::IT_MESH // AT_MESH +#endif }; // static diff --git a/indra/llinventory/llinventorytype.h b/indra/llinventory/llinventorytype.h index 37829f5eae..d2fc67ef64 100644 --- a/indra/llinventory/llinventorytype.h +++ b/indra/llinventory/llinventorytype.h @@ -68,7 +68,9 @@ public: IT_ANIMATION = 19, IT_GESTURE = 20, +#if LL_MESH_ENABLED IT_MESH = 22, +#endif IT_COUNT = 23, IT_NONE = -1 diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 09ab47b890..05868e3517 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2546,10 +2546,12 @@ S32 LLVolume::getNumFaces() const { U8 sculpt_type = (mParams.getSculptType() & LL_SCULPT_TYPE_MASK); +#if LL_MESH_ENABLED if (sculpt_type == LL_SCULPT_TYPE_MESH) { return LL_SCULPT_MESH_MAX_FACES; } +#endif return (S32)mProfilep->mFaces.size(); } @@ -2922,11 +2924,6 @@ void LLVolume::sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, LLMemType m1(LLMemType::MTYPE_VOLUME); U8 sculpt_type = mParams.getSculptType(); - if (sculpt_type & LL_SCULPT_TYPE_MASK == LL_SCULPT_TYPE_MESH) - { - llerrs << "WTF?" << llendl; - } - BOOL data_is_empty = FALSE; if (sculpt_width == 0 || sculpt_height == 0 || sculpt_components < 3 || sculpt_data == NULL) @@ -4135,10 +4132,12 @@ void LLVolume::generateSilhouetteVertices(std::vector &vertices, normals.clear(); segments.clear(); +#if LL_MESH_ENABLED if ((mParams.getSculptType() & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH) { return; } +#endif S32 cur_index = 0; //for each face @@ -6335,10 +6334,14 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) resizeVertices(num_vertices); resizeIndices(num_indices); +#if LL_MESH_ENABLED if ((volume->getParams().getSculptType() & LL_SCULPT_TYPE_MASK) != LL_SCULPT_TYPE_MESH) { mEdge.resize(num_indices); } +#else + mEdge.resize(num_indices); +#endif } LLVector4a* pos = (LLVector4a*) mPositions; diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index c49d1c650d..0782944079 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -41,6 +41,8 @@ class LLVolumeParams; class LLProfile; class LLPath; +#define LL_MESH_ENABLED 0 + template class LLOctreeNode; class LLVector4a; @@ -190,10 +192,15 @@ const U8 LL_SCULPT_TYPE_SPHERE = 1; const U8 LL_SCULPT_TYPE_TORUS = 2; const U8 LL_SCULPT_TYPE_PLANE = 3; const U8 LL_SCULPT_TYPE_CYLINDER = 4; +#if LL_MESH_ENABLED const U8 LL_SCULPT_TYPE_MESH = 5; const U8 LL_SCULPT_TYPE_MASK = LL_SCULPT_TYPE_SPHERE | LL_SCULPT_TYPE_TORUS | LL_SCULPT_TYPE_PLANE | LL_SCULPT_TYPE_CYLINDER | LL_SCULPT_TYPE_MESH; +#else +const U8 LL_SCULPT_TYPE_MASK = LL_SCULPT_TYPE_SPHERE | LL_SCULPT_TYPE_TORUS | LL_SCULPT_TYPE_PLANE | + LL_SCULPT_TYPE_CYLINDER; +#endif const U8 LL_SCULPT_FLAG_INVERT = 64; const U8 LL_SCULPT_FLAG_MIRROR = 128; diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 48c20b09a8..514ca25aa0 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -1318,7 +1318,7 @@ void LLVertexBuffer::setBuffer(U32 data_mask) { if (mGLBuffer) { - if (useVBOs() && sVBOActive) + if (sVBOActive) { glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); sBindCount++; @@ -1330,7 +1330,7 @@ void LLVertexBuffer::setBuffer(U32 data_mask) setup = TRUE; // ... or a client memory pointer changed } } - if (useVBOs() && mGLIndices && sIBOActive) + if (mGLIndices && sIBOActive) { /*if (sMapped) { diff --git a/indra/llvfs/llvfs.cpp b/indra/llvfs/llvfs.cpp index ddb76fb2ba..2b01288fd7 100644 --- a/indra/llvfs/llvfs.cpp +++ b/indra/llvfs/llvfs.cpp @@ -2041,9 +2041,11 @@ std::string get_extension(LLAssetType::EType type) case LLAssetType::AT_ANIMATION: extension = ".lla"; break; +#if LL_MESH_ENABLED case LLAssetType::AT_MESH: extension = ".slm"; break; +#endif default: // Just use the asset server filename extension in most cases extension += "."; diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 79b58bcd7c..df9393c316 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -4908,7 +4908,7 @@ Type Boolean Value - 1 + 0 MigrateCacheDirectory @@ -6818,7 +6818,7 @@ Type F32 Value - 0.0 + -0.001 RenderSpotShadowOffset diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 512b1dde7f..6978cdf672 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1302,8 +1302,10 @@ bool LLAppViewer::cleanup() llinfos << "Cleaning Up" << llendflush; +#if LL_MESH_ENABLED // shut down mesh streamer gMeshRepo.shutdown(); +#endif // Must clean up texture references before viewer window is destroyed. LLHUDManager::getInstance()->updateEffects(); @@ -1728,8 +1730,10 @@ bool LLAppViewer::initThreads() mFastTimerLogThread->start(); } +#if LL_MESH_ENABLED // Mesh streaming and caching gMeshRepo.init(); +#endif LLFilePickerThread::initClass(); diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp index c48dcdb061..afb76735ec 100644 --- a/indra/newview/llassetuploadresponders.cpp +++ b/indra/newview/llassetuploadresponders.cpp @@ -305,6 +305,7 @@ void LLAssetUploadResponder::uploadComplete(const LLSD& content) { } +#if LL_MESH_ENABLED LLNewAgentInventoryResponder::LLNewAgentInventoryResponder( const LLSD& post_data, const LLUUID& vfile_id, @@ -426,6 +427,7 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content) LLImportColladaAssetCache::getInstance()->assetUploaded(mVFileID, content["new_asset"], TRUE); } +#endif LLSendTexLayerResponder::LLSendTexLayerResponder(const LLSD& post_data, const LLUUID& vfile_id, @@ -675,6 +677,7 @@ void LLUpdateTaskInventoryResponder::uploadComplete(const LLSD& content) } +#if LL_MESH_ENABLED ///////////////////////////////////////////////////// // LLNewAgentInventoryVariablePriceResponder::Impl // ///////////////////////////////////////////////////// @@ -1142,3 +1145,5 @@ void LLNewAgentInventoryVariablePriceResponder::showConfirmationDialog( boost::intrusive_ptr(this))); } } +#endif + diff --git a/indra/newview/llassetuploadresponders.h b/indra/newview/llassetuploadresponders.h index af3b3daf46..9abaccfde0 100644 --- a/indra/newview/llassetuploadresponders.h +++ b/indra/newview/llassetuploadresponders.h @@ -61,7 +61,7 @@ protected: std::string mFileName; }; - +#if LL_MESH_ENABLED // TODO*: Remove this once deprecated class LLNewAgentInventoryResponder : public LLAssetUploadResponder { @@ -116,6 +116,7 @@ private: class Impl; Impl* mImpl; }; +#endif struct LLBakedUploadData; class LLSendTexLayerResponder : public LLAssetUploadResponder diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 9268cb1d47..63ca17d62d 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -103,6 +103,7 @@ S32 normal_channel = -1; S32 specular_channel = -1; S32 cube_channel = -1; +#if LL_MESH_ENABLED static const U32 rigged_data_mask[] = { LLDrawPoolAvatar::RIGGED_SIMPLE_MASK, LLDrawPoolAvatar::RIGGED_FULLBRIGHT_MASK, @@ -114,6 +115,7 @@ static const U32 rigged_data_mask[] = { LLDrawPoolAvatar::RIGGED_DEFERRED_BUMP_MASK, LLDrawPoolAvatar::RIGGED_DEFERRED_SIMPLE_MASK, }; +#endif static LLFastTimer::DeclareTimer FTM_SHADOW_AVATAR("Avatar Shadow"); @@ -194,12 +196,14 @@ void LLDrawPoolAvatar::beginDeferredPass(S32 pass) case 2: beginDeferredSkinned(); break; +#if LL_MESH_ENABLED case 3: beginDeferredRiggedSimple(); break; case 4: beginDeferredRiggedBump(); break; +#endif } } @@ -226,12 +230,14 @@ void LLDrawPoolAvatar::endDeferredPass(S32 pass) case 2: endDeferredSkinned(); break; +#if LL_MESH_ENABLED case 3: endDeferredRiggedSimple(); break; case 4: endDeferredRiggedBump(); break; +#endif } } @@ -242,7 +248,11 @@ void LLDrawPoolAvatar::renderDeferred(S32 pass) S32 LLDrawPoolAvatar::getNumPostDeferredPasses() { +#if LL_MESH_ENABLED return 6; +#else + return 1; +#endif } void LLDrawPoolAvatar::beginPostDeferredPass(S32 pass) @@ -252,6 +262,7 @@ void LLDrawPoolAvatar::beginPostDeferredPass(S32 pass) case 0: beginPostDeferredAlpha(); break; +#if LL_MESH_ENABLED case 1: beginRiggedFullbright(); break; @@ -267,6 +278,7 @@ void LLDrawPoolAvatar::beginPostDeferredPass(S32 pass) case 5: beginRiggedGlow(); break; +#endif } } @@ -284,6 +296,7 @@ void LLDrawPoolAvatar::beginPostDeferredAlpha() enable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]); } +#if LL_MESH_ENABLED void LLDrawPoolAvatar::beginDeferredRiggedAlpha() { sVertexProgram = &gDeferredSkinnedAlphaProgram; @@ -301,6 +314,7 @@ void LLDrawPoolAvatar::endDeferredRiggedAlpha() LLVertexBuffer::sWeight4Loc = -1; sVertexProgram = NULL; } +#endif void LLDrawPoolAvatar::endPostDeferredPass(S32 pass) { @@ -309,6 +323,7 @@ void LLDrawPoolAvatar::endPostDeferredPass(S32 pass) case 0: endPostDeferredAlpha(); break; +#if LL_MESH_ENABLED case 1: endRiggedFullbright(); break; @@ -324,6 +339,7 @@ void LLDrawPoolAvatar::endPostDeferredPass(S32 pass) case 5: endRiggedGlow(); break; +#endif } } @@ -357,7 +373,11 @@ void LLDrawPoolAvatar::renderPostDeferred(S32 pass) S32 LLDrawPoolAvatar::getNumShadowPasses() { +#if LL_MESH_ENABLED return 2; +#else + return 1; +#endif } void LLDrawPoolAvatar::beginShadowPass(S32 pass) @@ -448,6 +468,7 @@ void LLDrawPoolAvatar::renderShadow(S32 pass) avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE); } +#if LL_MESH_ENABLED else { renderRigged(avatarp, RIGGED_SIMPLE); @@ -457,10 +478,12 @@ void LLDrawPoolAvatar::renderShadow(S32 pass) renderRigged(avatarp, RIGGED_SHINY); renderRigged(avatarp, RIGGED_FULLBRIGHT_ALPHA); } +#endif } S32 LLDrawPoolAvatar::getNumPasses() { +#if LL_MESH_ENABLED if (LLPipeline::sImpostorRender) { return 8; @@ -473,8 +496,19 @@ S32 LLDrawPoolAvatar::getNumPasses() { return 3; } +#else + if (LLPipeline::sImpostorRender) + { + return 1; + } + else + { + return 3; + } +#endif } + S32 LLDrawPoolAvatar::getNumDeferredPasses() { if (LLPipeline::sImpostorRender) @@ -522,6 +556,7 @@ void LLDrawPoolAvatar::beginRenderPass(S32 pass) case 2: beginSkinned(); break; +#if LL_MESH_ENABLED case 3: beginRiggedSimple(); break; @@ -543,6 +578,7 @@ void LLDrawPoolAvatar::beginRenderPass(S32 pass) case 9: beginRiggedGlow(); break; +#endif } } @@ -566,6 +602,7 @@ void LLDrawPoolAvatar::endRenderPass(S32 pass) case 2: endSkinned(); break; +#if LL_MESH_ENABLED case 3: endRiggedSimple(); break; @@ -587,6 +624,7 @@ void LLDrawPoolAvatar::endRenderPass(S32 pass) case 9: endRiggedGlow(); break; +#endif } } @@ -772,6 +810,7 @@ void LLDrawPoolAvatar::endSkinned() gGL.getTexUnit(0)->activate(); } +#if LL_MESH_ENABLED void LLDrawPoolAvatar::beginRiggedSimple() { sVertexProgram = &gSkinnedObjectSimpleProgram; @@ -924,6 +963,7 @@ void LLDrawPoolAvatar::endDeferredRiggedBump() sDiffuseChannel = 0; sVertexProgram = NULL; } +#endif void LLDrawPoolAvatar::beginDeferredSkinned() { @@ -1069,6 +1109,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) return; } +#if LL_MESH_ENABLED if (pass == 3) { if (is_deferred_render) @@ -1150,7 +1191,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) gGL.setSceneBlendType(LLRender::BT_ALPHA); return; } - +#endif if (sShaderLevel > 0) { @@ -1188,6 +1229,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) } } +#if LL_MESH_ENABLED void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLFace* face, const LLMeshSkinInfo* skin, LLVolume* volume, const LLVolumeFace& vol_face) { U32 data_mask = 0; @@ -1377,7 +1419,7 @@ void LLDrawPoolAvatar::renderRiggedGlow(LLVOAvatar* avatar) { renderRigged(avatar, RIGGED_GLOW, true); } - +#endif @@ -1479,6 +1521,7 @@ LLColor3 LLDrawPoolAvatar::getDebugColor() const return LLColor3(0.f, 1.f, 0.f); } +#if LL_MESH_ENABLED void LLDrawPoolAvatar::addRiggedFace(LLFace* facep, U32 type) { if (facep->mRiggedIndex.empty()) @@ -1533,6 +1576,7 @@ void LLDrawPoolAvatar::removeRiggedFace(LLFace* facep) } } } +#endif LLVertexBufferAvatar::LLVertexBufferAvatar() : LLVertexBuffer(sDataMask, diff --git a/indra/newview/lldrawpoolavatar.h b/indra/newview/lldrawpoolavatar.h index 4a5b009412..46ffc42f04 100644 --- a/indra/newview/lldrawpoolavatar.h +++ b/indra/newview/lldrawpoolavatar.h @@ -96,6 +96,23 @@ public: void beginRigid(); void beginImpostor(); void beginSkinned(); + + void endRigid(); + void endImpostor(); + void endSkinned(); + + void beginDeferredImpostor(); + void beginDeferredRigid(); + void beginDeferredSkinned(); + + void endDeferredImpostor(); + void endDeferredRigid(); + void endDeferredSkinned(); + + void beginPostDeferredAlpha(); + void endPostDeferredAlpha(); + +#if LL_MESH_ENABLED void beginRiggedSimple(); void beginRiggedFullbright(); void beginRiggedFullbrightShiny(); @@ -103,12 +120,8 @@ public: void beginRiggedAlpha(); void beginRiggedFullbrightAlpha(); void beginRiggedGlow(); - void beginPostDeferredAlpha(); void beginDeferredRiggedAlpha(); - void endRigid(); - void endImpostor(); - void endSkinned(); void endRiggedSimple(); void endRiggedFullbright(); void endRiggedFullbrightShiny(); @@ -116,18 +129,11 @@ public: void endRiggedAlpha(); void endRiggedFullbrightAlpha(); void endRiggedGlow(); - void endPostDeferredAlpha(); void endDeferredRiggedAlpha(); - void beginDeferredImpostor(); - void beginDeferredRigid(); - void beginDeferredSkinned(); void beginDeferredRiggedSimple(); void beginDeferredRiggedBump(); - void endDeferredImpostor(); - void endDeferredRigid(); - void endDeferredSkinned(); void endDeferredRiggedSimple(); void endDeferredRiggedBump(); @@ -147,11 +153,6 @@ public: void renderDeferredRiggedSimple(LLVOAvatar* avatar); void renderDeferredRiggedBump(LLVOAvatar* avatar); - /*virtual*/ LLViewerTexture *getDebugTexture(); - /*virtual*/ LLColor3 getDebugColor() const; // For AGP debug display - - void renderAvatars(LLVOAvatar *single_avatar, S32 pass = -1); // renders only one avatar if single_avatar is not null. - typedef enum { RIGGED_SIMPLE = 0, @@ -202,6 +203,13 @@ public: void removeRiggedFace(LLFace* facep); std::vector mRiggedFace[NUM_RIGGED_PASSES]; +#endif + + /*virtual*/ LLViewerTexture *getDebugTexture(); + /*virtual*/ LLColor3 getDebugColor() const; // For AGP debug display + + void renderAvatars(LLVOAvatar *single_avatar, S32 pass = -1); // renders only one avatar if single_avatar is not null. + static BOOL sSkipOpaque; static BOOL sSkipTransparent; diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index e4f9e28c77..c48106863e 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -224,11 +224,13 @@ void LLFace::destroy() { LLFastTimer t(FTM_DESTROY_DRAWPOOL); +#if LL_MESH_ENABLED if (this->isState(LLFace::RIGGED) && mDrawPoolp->getType() == LLDrawPool::POOL_AVATAR) { ((LLDrawPoolAvatar*) mDrawPoolp)->removeRiggedFace(this); } else +#endif { mDrawPoolp->removeFace(this); } diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 78789eb9ce..3999a8ee88 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -917,6 +917,7 @@ LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type, // Only should happen for broken links. new_listener = new LLLinkItemBridge(inventory, root, uuid); break; +#if LL_MESH_ENABLED case LLAssetType::AT_MESH: if(!(inv_type == LLInventoryType::IT_MESH)) { @@ -924,6 +925,7 @@ LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type, } new_listener = new LLMeshBridge(inventory, root, uuid); break; +#endif default: llinfos << "Unhandled asset type (llassetstorage.h): " @@ -2765,7 +2767,9 @@ BOOL LLFolderBridge::dragOrDrop(MASK mask, BOOL drop, case DAD_ANIMATION: case DAD_GESTURE: case DAD_LINK: +#if LL_MESH_ENABLED case DAD_MESH: +#endif accept = dragItemIntoFolder((LLInventoryItem*)cargo_data, drop); break; @@ -3635,7 +3639,9 @@ BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop, case DAD_BODYPART: case DAD_ANIMATION: case DAD_GESTURE: - case DAD_MESH: +#if LL_MESH_ENABLED + case DAD_MESH: +#endif { LLInventoryItem* inv_item = (LLInventoryItem*)cargo_data; const LLPermissions& perm = inv_item->getPermissions(); @@ -4843,6 +4849,7 @@ void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags) hide_context_entries(menu, items, disabled_items); } +#if LL_MESH_ENABLED // +=================================================+ // | LLMeshBridge | // +=================================================+ @@ -4899,6 +4906,7 @@ void LLMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags) hide_context_entries(menu, items, disabled_items); } +#endif // +=================================================+ // | LLLinkBridge | diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index d637fc6e36..8de7d63173 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -527,7 +527,7 @@ protected: }; - +#if LL_MESH_ENABLED class LLMeshBridge : public LLItemBridge { friend class LLInvFVBridge; @@ -543,7 +543,7 @@ protected: const LLUUID& uuid) : LLItemBridge(inventory, root, uuid) {} }; - +#endif diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp index 7d82a10ca2..d8cfd4fc5d 100644 --- a/indra/newview/llpanelgroupnotices.cpp +++ b/indra/newview/llpanelgroupnotices.cpp @@ -159,7 +159,9 @@ BOOL LLGroupDropTarget::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, case DAD_ANIMATION: case DAD_GESTURE: case DAD_CALLINGCARD: +#if LL_MESH_ENABLED case DAD_MESH: +#endif { LLViewerInventoryItem* inv_item = (LLViewerInventoryItem*)cargo_data; if(gInventory.getItem(inv_item->getUUID()) diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index 898cabb03d..58df2746f3 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -819,7 +819,9 @@ BOOL LLTaskCategoryBridge::dragOrDrop(MASK mask, BOOL drop, case DAD_ANIMATION: case DAD_GESTURE: case DAD_CALLINGCARD: +#if LL_MESH_ENABLED case DAD_MESH: +#endif accept = LLToolDragAndDrop::isInventoryDropAcceptable(object, (LLViewerInventoryItem*)cargo_data); if(accept && drop) { @@ -1240,6 +1242,7 @@ LLUIImagePtr LLTaskWearableBridge::getIcon() const return LLInventoryIcon::getIcon(mAssetType, mInventoryType, FALSE, mFlags, FALSE ); } +#if LL_MESH_ENABLED ///---------------------------------------------------------------------------- /// Class LLTaskMeshBridge ///---------------------------------------------------------------------------- @@ -1351,6 +1354,7 @@ void LLTaskMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags) hide_context_entries(menu, items, disabled_items); } +#endif ///---------------------------------------------------------------------------- /// LLTaskInvFVBridge impl @@ -1431,11 +1435,13 @@ LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory* object->getUUID(), object->getName()); break; +#if LL_MESH_ENABLED case LLAssetType::AT_MESH: new_bridge = new LLTaskMeshBridge(panel, object->getUUID(), object->getName()); break; +#endif default: llinfos << "Unhandled inventory type (llassetstorage.h): " << (S32)type << llendl; diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index ceef03d2f8..0ce7ffb077 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -6165,6 +6165,7 @@ S32 LLObjectSelection::getObjectCount(BOOL mesh_adjust) cleanupNodes(); S32 count = mList.size(); +#if LL_MESH_ENABLED if (mesh_adjust) { for (list_t::iterator iter = mList.begin(); iter != mList.end(); ++iter) @@ -6185,6 +6186,7 @@ S32 LLObjectSelection::getObjectCount(BOOL mesh_adjust) } } +#endif return count; } diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index 7b57f09e59..6088c31559 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -292,7 +292,11 @@ BOOL LLFloaterTexturePicker::handleDragAndDrop( { BOOL handled = FALSE; - if ((cargo_type == DAD_TEXTURE) || (cargo_type == DAD_MESH)) + bool is_mesh = false; +#if LL_MESH_ENABLED + is_mesh = cargo_type == DAD_MESH; +#endif + if ((cargo_type == DAD_TEXTURE) || is_mesh) { LLInventoryItem *item = (LLInventoryItem *)cargo_data; @@ -1177,8 +1181,12 @@ BOOL LLTextureCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, // returns true, then the cast was valid, and we can perform // the third test without problems. LLInventoryItem* item = (LLInventoryItem*)cargo_data; + bool is_mesh = false; +#if LL_MESH_ENABLED + is_mesh = cargo_type == DAD_MESH; +#endif if (getEnabled() && - ((cargo_type == DAD_TEXTURE) || (cargo_type == DAD_MESH)) && + ((cargo_type == DAD_TEXTURE) || is_mesh) && allowDrop(item)) { if (drop) diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 15924d67cf..d679ccd3d8 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -331,7 +331,9 @@ LLToolDragAndDrop::LLDragAndDropDictionary::LLDragAndDropDictionary() addEntry(DAD_ANIMATION, new DragAndDropEntry(&LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dGiveInventory, &LLToolDragAndDrop::dad3dUpdateInventory, &LLToolDragAndDrop::dad3dNULL)); addEntry(DAD_GESTURE, new DragAndDropEntry(&LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dActivateGesture, &LLToolDragAndDrop::dad3dGiveInventory, &LLToolDragAndDrop::dad3dUpdateInventory, &LLToolDragAndDrop::dad3dNULL)); addEntry(DAD_LINK, new DragAndDropEntry(&LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dNULL)); +#if LL_MESH_ENABLED addEntry(DAD_MESH, new DragAndDropEntry(&LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dGiveInventory, &LLToolDragAndDrop::dad3dMeshObject, &LLToolDragAndDrop::dad3dNULL)); +#endif // TODO: animation on self could play it? edit it? // TODO: gesture on self could play it? edit it? }; @@ -1035,6 +1037,7 @@ void LLToolDragAndDrop::dropTextureAllFaces(LLViewerObject* hit_obj, hit_obj->sendTEUpdate(); } +#if LL_MESH_EANBLED void LLToolDragAndDrop::dropMesh(LLViewerObject* hit_obj, LLInventoryItem* item, LLToolDragAndDrop::ESource source, @@ -1059,6 +1062,7 @@ void LLToolDragAndDrop::dropMesh(LLViewerObject* hit_obj, dialog_refresh_all(); } +#endif /* void LLToolDragAndDrop::dropTextureOneFaceAvatar(LLVOAvatar* avatar, S32 hit_face, LLInventoryItem* item) @@ -1501,7 +1505,9 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_ case DAD_ANIMATION: case DAD_GESTURE: case DAD_CALLINGCARD: +#if LL_MESH_ENABLED case DAD_MESH: +#endif { LLViewerInventoryItem* inv_item = (LLViewerInventoryItem*)cargo_data; if(gInventory.getItem(inv_item->getUUID()) @@ -1858,10 +1864,12 @@ EAcceptance LLToolDragAndDrop::dad3dApplyToObject( dropTextureOneFace(obj, face, item, mSource, mSourceID); } } +#if LL_MESH_ENABLED else if (cargo_type == DAD_MESH) { dropMesh(obj, item, mSource, mSourceID); } +#endif else { llwarns << "unsupported asset type" << llendl; @@ -1886,11 +1894,13 @@ EAcceptance LLToolDragAndDrop::dad3dTextureObject( return dad3dApplyToObject(obj, face, mask, drop, DAD_TEXTURE); } +#if LL_MESH_ENABLED EAcceptance LLToolDragAndDrop::dad3dMeshObject( LLViewerObject* obj, S32 face, MASK mask, BOOL drop) { return dad3dApplyToObject(obj, face, mask, drop, DAD_MESH); } +#endif diff --git a/indra/newview/lltooldraganddrop.h b/indra/newview/lltooldraganddrop.h index 596cc2ee88..ceeaa8c820 100644 --- a/indra/newview/lltooldraganddrop.h +++ b/indra/newview/lltooldraganddrop.h @@ -154,8 +154,10 @@ protected: MASK mask, BOOL drop); EAcceptance dad3dTextureObject(LLViewerObject* obj, S32 face, MASK mask, BOOL drop); +#if LL_MESH_ENABLED EAcceptance dad3dMeshObject(LLViewerObject* obj, S32 face, MASK mask, BOOL drop); +#endif // EAcceptance dad3dTextureSelf(LLViewerObject* obj, S32 face, // MASK mask, BOOL drop); EAcceptance dad3dWearItem(LLViewerObject* obj, S32 face, @@ -242,10 +244,12 @@ public: LLInventoryItem* item, ESource source, const LLUUID& src_id); +#if LL_MESH_ENABLED static void dropMesh(LLViewerObject* hit_obj, LLInventoryItem* item, ESource source, const LLUUID& src_id); +#endif //static void dropTextureOneFaceAvatar(LLVOAvatar* avatar,S32 hit_face, // LLInventoryItem* item) diff --git a/indra/newview/llviewerassettype.cpp b/indra/newview/llviewerassettype.cpp index 4c088a72b7..370767002a 100644 --- a/indra/newview/llviewerassettype.cpp +++ b/indra/newview/llviewerassettype.cpp @@ -85,7 +85,9 @@ LLViewerAssetDictionary::LLViewerAssetDictionary() addEntry(LLViewerAssetType::AT_LINK, new ViewerAssetEntry(DAD_LINK)); addEntry(LLViewerAssetType::AT_LINK_FOLDER, new ViewerAssetEntry(DAD_LINK)); +#if LL_MESH_ENABLED addEntry(LLViewerAssetType::AT_MESH, new ViewerAssetEntry(DAD_MESH)); +#endif addEntry(LLViewerAssetType::AT_NONE, new ViewerAssetEntry(DAD_NONE)); }; diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 525610f983..c953fb23e3 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -177,7 +177,9 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("hud", "floater_hud.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("impanel", "floater_im_session.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); +#if LL_MESH_ENABLED LLFloaterReg::add("import_collada", "floater_import_collada.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); +#endif LLFloaterReg::add("im_container", "floater_im_container.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("im_well_window", "floater_sys_well.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("incoming_call", "floater_incoming_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); @@ -258,7 +260,9 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("upload_anim", "floater_animation_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build, "upload"); LLFloaterReg::add("upload_image", "floater_image_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build, "upload"); LLFloaterReg::add("upload_sound", "floater_sound_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build, "upload"); +#if LL_MESH_ENABLED LLFloaterReg::add("upload_model", "floater_model_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build, "upload"); +#endif LLFloaterReg::add("voice_controls", "floater_voice_controls.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("voice_effect", "floater_voice_effect.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index dd65ca2d25..af4549f7e1 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -350,6 +350,7 @@ class LLFileUploadImage : public view_listener_t } }; +#if LL_MESH_ENABLED class LLFileUploadScene : public view_listener_t { bool handleEvent(const LLSD& userdata) @@ -376,6 +377,7 @@ class LLFileUploadModel : public view_listener_t return TRUE; } }; +#endif class LLFileUploadSound : public view_listener_t { @@ -1144,6 +1146,7 @@ void upload_new_resource( lldebugs << "Folder: " << gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type) << llendl; lldebugs << "Asset Type: " << LLAssetType::lookup(asset_type) << llendl; +#if LL_MESH_ENABLED std::string url = gAgent.getRegion()->getCapability( "NewFileAgentInventory"); @@ -1171,8 +1174,8 @@ void upload_new_resource( asset_type)); } else +#endif { - llinfos << "NewAgentInventory capability not found, new agent inventory via asset system." << llendl; // check for adequate funds // TODO: do this check on the sim if (LLAssetType::AT_SOUND == asset_type || @@ -1217,6 +1220,7 @@ void upload_new_resource( } } +#if LL_MESH_ENABLED BOOL upload_new_variable_price_resource( const LLTransactionID &tid, LLAssetType::EType asset_type, @@ -1288,6 +1292,7 @@ BOOL upload_new_variable_price_resource( return FALSE; } } +#endif LLAssetID generate_asset_id_for_new_upload(const LLTransactionID& tid) { @@ -1358,8 +1363,10 @@ void init_menu_file() view_listener_t::addCommit(new LLFileUploadImage(), "File.UploadImage"); view_listener_t::addCommit(new LLFileUploadSound(), "File.UploadSound"); view_listener_t::addCommit(new LLFileUploadAnim(), "File.UploadAnim"); +#if LL_MESH_ENABLED view_listener_t::addCommit(new LLFileUploadModel(), "File.UploadModel"); view_listener_t::addCommit(new LLFileUploadScene(), "File.UploadScene"); +#endif view_listener_t::addCommit(new LLFileUploadBulk(), "File.UploadBulk"); view_listener_t::addCommit(new LLFileCloseWindow(), "File.CloseWindow"); view_listener_t::addCommit(new LLFileCloseAllWindows(), "File.CloseAllWindows"); diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h index 08444551a9..bb7cfce862 100644 --- a/indra/newview/llviewermenufile.h +++ b/indra/newview/llviewermenufile.h @@ -74,6 +74,7 @@ void upload_new_resource( S32 expected_upload_cost, void *userdata); +#if LL_MESH_ENABLED // TODO* : Move all uploads to use this new function // since at some point, that upload path will be deprecated and no longer // used @@ -91,6 +92,7 @@ BOOL upload_new_variable_price_resource( U32 everyone_perms, const std::string& display_name, const LLSD& asset_resources); +#endif LLAssetID generate_asset_id_for_new_upload(const LLTransactionID& tid); void increase_new_upload_stats(LLAssetType::EType asset_type); diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index d35be8e1bf..697e8afa65 100644 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -535,7 +535,9 @@ LLUIImagePtr LLEmbeddedItems::getItemImage(llwchar ext_char) const case LLAssetType::AT_BODYPART: img_name = "Inv_Skin"; break; case LLAssetType::AT_ANIMATION: img_name = "Inv_Animation"; break; case LLAssetType::AT_GESTURE: img_name = "Inv_Gesture"; break; +#if LL_MESH_ENABLED case LLAssetType::AT_MESH: img_name = "Inv_Mesh"; break; +#endif default: llassert(0); } diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index fc4b590bf4..9f559331b0 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -591,8 +591,10 @@ public: if (gSavedSettings.getBOOL("DebugShowUploadCost")) { +#if LL_MESH_ENABLED addText(xpos, ypos, llformat(" Meshes: L$%d", gPipeline.mDebugMeshUploadCost)); ypos += y_inc/2; +#endif addText(xpos, ypos, llformat(" Sculpties: L$%d", gPipeline.mDebugSculptUploadCost)); ypos += y_inc/2; addText(xpos, ypos, llformat(" Textures: L$%d", gPipeline.mDebugTextureUploadCost)); @@ -602,6 +604,7 @@ public: ypos += y_inc; } +#if LL_MESH_ENABLED //temporary hack to give feedback on mesh upload progress if (!gMeshRepo.mUploads.empty()) { @@ -631,6 +634,7 @@ public: ypos += y_inc; } +#endif } void draw() diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index db9e0b88e1..d66aa567a8 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -926,6 +926,7 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool BOOL is404 = FALSE; +#if LL_MESH_ENABLED if (isSculpted()) { // if it's a mesh @@ -945,6 +946,7 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool } } } +#endif // Check if we need to change implementations bool is_flexible = (volume_params.getPathParams().getCurveType() == LL_PCODE_PATH_FLEXIBLE); @@ -989,10 +991,11 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool updateSculptTexture(); + if (isSculpted()) { updateSculptTexture(); - +#if LL_MESH_ENABLED // if it's a mesh if ((volume_params.getSculptType() & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH) { @@ -1008,6 +1011,7 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool } } else // otherwise is sculptie +#endif { if (mSculptTexture.notNull()) { @@ -2659,12 +2663,13 @@ BOOL LLVOVolume::isMesh() const { LLSculptParams *sculpt_params = (LLSculptParams *)getParameterEntry(LLNetworkData::PARAMS_SCULPT); U8 sculpt_type = sculpt_params->getSculptType(); - +#if LL_MESH_ENABLED if ((sculpt_type & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH) // mesh is a mesh { return TRUE; } +#endif } return FALSE; @@ -3010,6 +3015,7 @@ F32 LLVOVolume::getBinRadius() F32 scale = 1.f; +#if LL_MESH_ENABLED if (isSculpted()) { LLSculptParams *sculpt_params = (LLSculptParams *)getParameterEntry(LLNetworkData::PARAMS_SCULPT); @@ -3031,6 +3037,7 @@ F32 LLVOVolume::getBinRadius() scale = 1.f/llmax(vert_count/1024.f, 1.f); } } +#endif const LLVector4a* ext = mDrawable->getSpatialExtents(); @@ -3513,9 +3520,11 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) drawablep->clearState(LLDrawable::HAS_ALPHA); +#if LL_MESH_ENABLED bool rigged = vobj->isAttachment() && vobj->isMesh() && gMeshRepo.getSkinInfo(vobj->getVolume()->getParams().getSculptID()); +#endif bool bake_sunlight = LLPipeline::sBakeSunlight && drawablep->isStatic(); @@ -3526,6 +3535,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) drawablep->updateFaceSize(i); LLFace* facep = drawablep->getFace(i); +#if LL_MESH_ENABLED if (rigged) { if (!facep->isState(LLFace::RIGGED)) @@ -3622,6 +3632,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) facep->clearState(LLFace::RIGGED); } } +#endif if (cur_total > max_total || facep->getIndicesCount() <= 0 || facep->getGeomCount() <= 0) { diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 583b3df0e5..c5c7277211 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -2025,7 +2025,9 @@ void LLPipeline::rebuildPriorityGroups() assertInitialized(); +#if LL_MESH_ENABLED gMeshRepo.notifyLoadedMeshes(); +#endif // Iterate through all drawables on the priority build queue, for (LLSpatialGroup::sg_list_t::iterator iter = mGroupQ1.begin(); @@ -3859,6 +3861,7 @@ void LLPipeline::renderDebug() gPipeline.mDebugTextureUploadCost = textures.size() * 10; gPipeline.mDebugSculptUploadCost = sculpts.size()*10; +#if LL_MESH_ENABLED U32 mesh_cost = 0; for (std::set::iterator iter = meshes.begin(); iter != meshes.end(); ++iter) @@ -3867,6 +3870,7 @@ void LLPipeline::renderDebug() } gPipeline.mDebugMeshUploadCost = mesh_cost; +#endif } for (LLCullResult::bridge_list_t::const_iterator i = sCull->beginVisibleBridge(); i != sCull->endVisibleBridge(); ++i) diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 4e8760947c..95f951b393 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -45,6 +45,7 @@ #include "llgl.h" #include "lldrawable.h" #include "llrendertarget.h" +#include "llmodel.h" //for LL_MESH_ENaBLED #include @@ -61,7 +62,10 @@ class LLCullResult; class LLVOAvatar; class LLGLSLShader; class LLCurlRequest; + +#if LL_MESH_ENABLED class LLMeshResponder; +#endif typedef enum e_avatar_skinning_method { @@ -465,7 +469,9 @@ public: S32 mDebugTextureUploadCost; S32 mDebugSculptUploadCost; +#if LL_MESH_ENABLED S32 mDebugMeshUploadCost; +#endif S32 mLightingChanges; S32 mGeometryChanges; @@ -712,13 +718,6 @@ public: protected: std::vector mSelectedFaces; - - typedef std::map > mesh_load_map; - mesh_load_map mLoadingMeshes[4]; - - typedef std::list mesh_response_list; - mesh_response_list mMeshResponseList; - LLPointer mFaceSelectImagep; U32 mLightMask; diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml index 8b431e9c54..b54bad98d0 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml @@ -160,7 +160,7 @@ layout="topleft" left="5" name="CustomGraphics Panel" - top="101" + top="76" width="485"> Low @@ -625,7 +625,7 @@ follows="left|top" height="12" layout="topleft" - left_delta="-260" + left="200" name="AvatarRenderingText" top_pad="8" width="128"> @@ -673,7 +673,7 @@ left="358" left_pad="-30" name="TerrainDetailText" - top="488" + top="226" width="155"> Terrain detail: -- cgit v1.3 From 9440f84dca48e3e2f6022dbf5f916d6439c7a826 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 10 Jun 2010 14:58:02 -0500 Subject: Potential fix for busted binormals on cubes. --- indra/llmath/llvolume.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 05868e3517..ba5d5e7ca1 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -5566,6 +5566,8 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build) corners[0].getPosition(), corners[0].mTexCoord, corners[1].getPosition(), corners[1].mTexCoord, corners[2].getPosition(), corners[2].mTexCoord); + + binormal.normalize3fast(); S32 size = (grid_size+1)*(grid_size+1); resizeVertices(size); -- cgit v1.3 From d2d49e3d84956ec4efb9f1a7a308d530c7fc4737 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 10 Jun 2010 15:02:41 -0500 Subject: Fix for memcpyNonAliased16 issues. --- indra/llmath/llvolume.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 09ab47b890..cafa1e5c44 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -5255,7 +5255,7 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) LLVector4a::memcpyNonAliased16((F32*) mPositions, (F32*) src.mPositions, vert_size); LLVector4a::memcpyNonAliased16((F32*) mNormals, (F32*) src.mNormals, vert_size); - LLVector4a::memcpyNonAliased16((F32*) mTexCoords, (F32*) src.mTexCoords, vert_size); + LLVector4a::memcpyNonAliased16((F32*) mTexCoords, (F32*) src.mTexCoords, tc_size); if (src.mBinormals) -- cgit v1.3 From 3ea0018dc6f94c029d7dbf13bdd5b0bc0558c8d8 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 10 Jun 2010 15:07:30 -0500 Subject: Enable meshes. --- indra/llmath/llvolume.h | 2 +- indra/newview/app_settings/settings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 0782944079..98db7f31c0 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -41,7 +41,7 @@ class LLVolumeParams; class LLProfile; class LLPath; -#define LL_MESH_ENABLED 0 +#define LL_MESH_ENABLED 1 template class LLOctreeNode; diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index df9393c316..1d5d1584d3 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -4908,7 +4908,7 @@ Type Boolean Value - 0 + 1 MigrateCacheDirectory -- cgit v1.3 From 2ff888d2bc7424e70a836adb8ec4cf27df75ab7b Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 10 Jun 2010 21:47:49 -0500 Subject: Unused variable. --- indra/llmath/llvolume.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index ba5d5e7ca1..ac3ed5d63e 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2544,9 +2544,9 @@ void LLVolume::copyVolumeFaces(LLVolume* volume) S32 LLVolume::getNumFaces() const { +#if LL_MESH_ENABLED U8 sculpt_type = (mParams.getSculptType() & LL_SCULPT_TYPE_MASK); -#if LL_MESH_ENABLED if (sculpt_type == LL_SCULPT_TYPE_MESH) { return LL_SCULPT_MESH_MAX_FACES; -- cgit v1.3 From 6e37ec08f678451a526f34218cb070d117cdf60a Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Mon, 14 Jun 2010 23:13:10 -0500 Subject: Builds with LLConvexDecompInter as a static lib. --- indra/cmake/CMakeLists.txt | 2 ++ indra/llcommon/llassettype.h | 2 -- indra/llinventory/llinventorytype.h | 3 --- indra/llmath/llvolume.cpp | 8 ++++---- indra/llmath/llvolume.h | 4 ++-- indra/newview/CMakeLists.txt | 3 +++ indra/newview/llassetuploadresponders.h | 1 + indra/newview/lldrawpoolavatar.h | 1 + indra/newview/llinventorybridge.h | 1 + indra/newview/lltooldraganddrop.cpp | 2 +- indra/newview/lltooldraganddrop.h | 1 + indra/newview/llvovolume.cpp | 2 +- indra/newview/skins/default/xui/en/floater_about.xml | 4 +++- 13 files changed, 20 insertions(+), 14 deletions(-) (limited to 'indra/llmath') diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt index 4fc25dcc24..8612c46376 100644 --- a/indra/cmake/CMakeLists.txt +++ b/indra/cmake/CMakeLists.txt @@ -34,6 +34,7 @@ set(cmake_SOURCE_FILES FindXmlRpcEpi.cmake FMOD.cmake FreeType.cmake + GLOD.cmake GStreamer010Plugin.cmake GooglePerfTools.cmake JPEG.cmake @@ -41,6 +42,7 @@ set(cmake_SOURCE_FILES LLAudio.cmake LLCharacter.cmake LLCommon.cmake + LLConvexDecompInter.cmake LLCrashLogger.cmake LLDatabase.cmake LLImage.cmake diff --git a/indra/llcommon/llassettype.h b/indra/llcommon/llassettype.h index ebc43134cb..27d35e95ff 100644 --- a/indra/llcommon/llassettype.h +++ b/indra/llcommon/llassettype.h @@ -114,10 +114,8 @@ public: AT_LINK_FOLDER = 25, // Inventory folder link -#if LL_MESH_ENABLED AT_MESH = 49, // Mesh data in our proprietary SLM format -#endif AT_COUNT = 50, diff --git a/indra/llinventory/llinventorytype.h b/indra/llinventory/llinventorytype.h index d2fc67ef64..17ed3df951 100644 --- a/indra/llinventory/llinventorytype.h +++ b/indra/llinventory/llinventorytype.h @@ -67,10 +67,7 @@ public: IT_WEARABLE = 18, IT_ANIMATION = 19, IT_GESTURE = 20, - -#if LL_MESH_ENABLED IT_MESH = 22, -#endif IT_COUNT = 23, IT_NONE = -1 diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 10cef533b0..53f484fb79 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -5355,9 +5355,9 @@ bool LLVolumeFace::VertexMapData::operator==(const LLVolumeFace::VertexData& rhs getNormal().equal3(rhs.getNormal()); } -bool LLVolumeFace::VertexMapData::ComparePosition::operator()(const LLVector4a& a, const LLVector4a& b) const +bool LLVolumeFace::VertexMapData::ComparePosition::operator()(const LLVector3& a, const LLVector3& b) const { - return a.less3(b); + return a < b; } void LLVolumeFace::optimize(F32 angle_cutoff) @@ -5375,7 +5375,7 @@ void LLVolumeFace::optimize(F32 angle_cutoff) getVertexData(index, cv); BOOL found = FALSE; - VertexMapData::PointMap::iterator point_iter = point_map.find(cv.getPosition()); + VertexMapData::PointMap::iterator point_iter = point_map.find(LLVector3(cv.getPosition().getF32())); if (point_iter != point_map.end()) { //duplicate point might exist for (U32 j = 0; j < point_iter->second.size(); ++j) @@ -5407,7 +5407,7 @@ void LLVolumeFace::optimize(F32 angle_cutoff) } else { - point_map[d.getPosition()].push_back(d); + point_map[LLVector3(d.getPosition().getF32())].push_back(d); } } } diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 98db7f31c0..4aef3be973 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -873,10 +873,10 @@ public: struct ComparePosition { - bool operator()(const LLVector4a& a, const LLVector4a& b) const; + bool operator()(const LLVector3& a, const LLVector3& b) const; }; - typedef std::map, VertexMapData::ComparePosition > PointMap; + typedef std::map, VertexMapData::ComparePosition > PointMap; }; void optimize(F32 angle_cutoff = 2.f); diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index d2ae81180b..9de1d4aca5 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -16,6 +16,7 @@ include(FindOpenGL) include(LLAudio) include(LLCharacter) include(LLCommon) +include(LLConvexDecompInter) include(LLImage) include(LLImageJ2COJ) include(LLInventory) @@ -49,6 +50,7 @@ include_directories( ${LLAUDIO_INCLUDE_DIRS} ${LLCHARACTER_INCLUDE_DIRS} ${LLCOMMON_INCLUDE_DIRS} + ${LLCONVEXDECOMPINTER_INCLUDE_DIRS} ${LLIMAGE_INCLUDE_DIRS} ${LLINVENTORY_INCLUDE_DIRS} ${LLMATH_INCLUDE_DIRS} @@ -1683,6 +1685,7 @@ target_link_libraries(${VIEWER_BINARY_NAME} ${CRYPTO_LIBRARIES} ${LLLOGIN_LIBRARIES} ${GOOGLE_PERFTOOLS_LIBRARIES} + ${LLCONVEXDECOMPINTER_LIBRARIES} ) build_version(viewer) diff --git a/indra/newview/llassetuploadresponders.h b/indra/newview/llassetuploadresponders.h index 9abaccfde0..5890fbbc08 100644 --- a/indra/newview/llassetuploadresponders.h +++ b/indra/newview/llassetuploadresponders.h @@ -34,6 +34,7 @@ #define LL_LLASSETUPLOADRESPONDER_H #include "llhttpclient.h" +#include "llvolume.h" //for LL_MESH_ENABLED // Abstract class for supporting asset upload // via capabilities diff --git a/indra/newview/lldrawpoolavatar.h b/indra/newview/lldrawpoolavatar.h index 46ffc42f04..b01394534b 100644 --- a/indra/newview/lldrawpoolavatar.h +++ b/indra/newview/lldrawpoolavatar.h @@ -34,6 +34,7 @@ #define LL_LLDRAWPOOLAVATAR_H #include "lldrawpool.h" +#include "llvolume.h" // for LL_MESH_ENABLED class LLVOAvatar; class LLGLSLShader; diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 8de7d63173..0e3b5bc3c9 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -40,6 +40,7 @@ #include "llinventoryobserver.h" #include "llviewercontrol.h" #include "llwearable.h" +#include "llvolume.h" //for LL_MESH_ENABLED class LLInventoryPanel; class LLInventoryModel; diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index d679ccd3d8..c4ecba1aa2 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -1037,7 +1037,7 @@ void LLToolDragAndDrop::dropTextureAllFaces(LLViewerObject* hit_obj, hit_obj->sendTEUpdate(); } -#if LL_MESH_EANBLED +#if LL_MESH_ENABLED void LLToolDragAndDrop::dropMesh(LLViewerObject* hit_obj, LLInventoryItem* item, LLToolDragAndDrop::ESource source, diff --git a/indra/newview/lltooldraganddrop.h b/indra/newview/lltooldraganddrop.h index ceeaa8c820..09da4c2955 100644 --- a/indra/newview/lltooldraganddrop.h +++ b/indra/newview/lltooldraganddrop.h @@ -43,6 +43,7 @@ #include "llpermissions.h" #include "llwindow.h" #include "llviewerinventory.h" +#include "llvolume.h" //for LL_MESH_ENABLED class LLToolDragAndDrop; class LLViewerRegion; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index d66aa567a8..8f51edc1de 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1594,7 +1594,7 @@ void LLVOVolume::updateFaceSize(S32 idx) LLFace* facep = mDrawable->getFace(idx); if (idx >= getVolume()->getNumVolumeFaces()) { - facep->setSize(0,0); + facep->setSize(0,0, true); } else { diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml index 294a68255d..860cff6664 100644 --- a/indra/newview/skins/default/xui/en/floater_about.xml +++ b/indra/newview/skins/default/xui/en/floater_about.xml @@ -160,10 +160,12 @@ xmlrpc-epi Copyright (C) 2000 Epinions, Inc. zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. google-perftools Copyright (c) 2005, Google Inc. +Second Life Viewer uses Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (and its Licensors). All Rights Reserved. See www.havok.com for details. + All rights reserved. See licenses.txt for details. Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) - + -- cgit v1.3 From 66e353812f4732c77206322d271b2346dd74feec Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Tue, 15 Jun 2010 19:16:39 -0500 Subject: Get meshes working post-SSE pass. --- indra/llmath/llvolume.cpp | 89 +++++++++++++++++++++++++++-------------------- indra/llmath/llvolume.h | 2 ++ 2 files changed, 54 insertions(+), 37 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 62e488452a..a4022c842d 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1988,19 +1988,33 @@ BOOL LLVolume::generate() void LLVolumeFace::VertexData::init() { - mData = (LLVector4a*) ll_aligned_malloc_16(32); + if (!mData) + { + mData = (LLVector4a*) ll_aligned_malloc_16(32); + } } LLVolumeFace::VertexData::VertexData() { + mData = NULL; init(); } LLVolumeFace::VertexData::VertexData(const VertexData& rhs) { - init(); - LLVector4a::memcpyNonAliased16((F32*) mData, (F32*) rhs.mData, 8); - mTexCoord = rhs.mTexCoord; + mData = NULL; + *this = rhs; +} + +const LLVolumeFace::VertexData& LLVolumeFace::VertexData::operator=(const LLVolumeFace::VertexData& rhs) +{ + if (this != &rhs) + { + init(); + LLVector4a::memcpyNonAliased16((F32*) mData, (F32*) rhs.mData, 8); + mTexCoord = rhs.mTexCoord; + } + return *this; } LLVolumeFace::VertexData::~VertexData() @@ -2041,34 +2055,29 @@ void LLVolumeFace::VertexData::setNormal(const LLVector4a& norm) bool LLVolumeFace::VertexData::operator<(const LLVolumeFace::VertexData& rhs)const { - const U8* l = (const U8*) this; - const U8* r = (const U8*) &rhs; + if (mData[POSITION].notEqual3(rhs.getPosition())) + { + return mData[POSITION].less3(rhs.getPosition()); + } - for (U32 i = 0; i < sizeof(VertexData); ++i) + if (mData[NORMAL].notEqual3(rhs.getNormal())) { - if (l[i] != r[i]) - { - return r[i] < l[i]; - } + return mData[NORMAL].less3(rhs.getNormal()); } - + + if (mTexCoord != rhs.mTexCoord) + { + return mTexCoord < rhs.mTexCoord; + } + return false; } bool LLVolumeFace::VertexData::operator==(const LLVolumeFace::VertexData& rhs)const { - const U8* l = (const U8*) this; - const U8* r = (const U8*) &rhs; - - for (U32 i = 0; i < sizeof(VertexData); ++i) - { - if (l[i] != r[i]) - { - return false; - } - } - - return true; + return mData[POSITION].equal3(rhs.getPosition()) && + mData[NORMAL].equal3(rhs.getNormal()) && + mTexCoord == rhs.mTexCoord; } bool LLVolumeFace::VertexData::compareNormal(const LLVolumeFace::VertexData& rhs, F32 angle_cutoff) const @@ -6244,10 +6253,13 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat LLVector4a* new_pos = (LLVector4a*) ll_aligned_malloc_16(new_count*16); LLVector4a* new_norm = (LLVector4a*) ll_aligned_malloc_16(new_count*16); LLVector2* new_tc = (LLVector2*) ll_aligned_malloc_16((new_count*8+0xF) & ~0xF); - - LLVector4a::memcpyNonAliased16((F32*) new_pos, (F32*) mPositions, new_count*4); - LLVector4a::memcpyNonAliased16((F32*) new_norm, (F32*) mNormals, new_count*4); - LLVector4a::memcpyNonAliased16((F32*) new_tc, (F32*) mTexCoords, new_count*2); + + if (mNumVertices > 0) + { + LLVector4a::memcpyNonAliased16((F32*) new_pos, (F32*) mPositions, mNumVertices*4); + LLVector4a::memcpyNonAliased16((F32*) new_norm, (F32*) mNormals, mNumVertices*4); + LLVector4a::memcpyNonAliased16((F32*) new_tc, (F32*) mTexCoords, mNumVertices*2); + } ll_aligned_free_16(mPositions); ll_aligned_free_16(mNormals); @@ -6259,13 +6271,13 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat mNumVertices = new_count; - LLVector4a* dst_pos = (LLVector4a*) mPositions+offset; - LLVector2* dst_tc = (LLVector2*) mTexCoords+offset; - LLVector4a* dst_norm = (LLVector4a*) mNormals+offset; + LLVector4a* dst_pos = mPositions+offset; + LLVector2* dst_tc = mTexCoords+offset; + LLVector4a* dst_norm = mNormals+offset; - LLVector4a* src_pos = (LLVector4a*) face.mPositions; - LLVector2* src_tc = (LLVector2*) face.mTexCoords; - LLVector4a* src_norm = (LLVector4a*) face.mNormals; + const LLVector4a* src_pos = face.mPositions; + const LLVector2* src_tc = face.mTexCoords; + const LLVector4a* src_norm = face.mNormals; LLMatrix4a mat, norm_mat; mat.loadu(mat_in); @@ -6292,13 +6304,16 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat new_count = mNumIndices + face.mNumIndices; U16* new_indices = (U16*) ll_aligned_malloc_16((new_count*2+0xF) & ~0xF); - LLVector4a::memcpyNonAliased16((F32*) new_indices, (F32*) mIndices, new_count/2); + if (mNumIndices > 0) + { + LLVector4a::memcpyNonAliased16((F32*) new_indices, (F32*) mIndices, llmax(mNumIndices/2, 1)); + } + ll_aligned_free_16(mIndices); mIndices = new_indices; + U16* dst_idx = mIndices+mNumIndices; mNumIndices = new_count; - U16* dst_idx = mIndices+offset; - for (U32 i = 0; i < face.mNumIndices; ++i) { dst_idx[i] = face.mIndices[i]+offset; diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 4aef3be973..af28337f57 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -817,6 +817,8 @@ public: public: VertexData(); VertexData(const VertexData& rhs); + const VertexData& operator=(const VertexData& rhs); + ~VertexData(); LLVector4a& getPosition(); LLVector4a& getNormal(); -- cgit v1.3 From 6f2bd694d9a21174648b4e4f76d6d078aa88265f Mon Sep 17 00:00:00 2001 From: Matthew Breindel Date: Sat, 26 Jun 2010 12:35:05 -0700 Subject: Fixed mac build (given LL_MESH_ENABLED set to 0). --- indra/llcommon/llmemory.h | 20 ++++++++++++++++++-- indra/llmath/llvolume.h | 2 +- indra/newview/llspatialpartition.cpp | 4 +++- install.xml | 4 ++-- 4 files changed, 24 insertions(+), 6 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llcommon/llmemory.h b/indra/llcommon/llmemory.h index 1c8c91f57e..35935efa88 100644 --- a/indra/llcommon/llmemory.h +++ b/indra/llcommon/llmemory.h @@ -34,6 +34,22 @@ #include +// A not necessarily efficient, but general, aligned malloc http://stackoverflow.com/questions/196329/osx-lacks-memalign +inline void* ll_aligned_malloc( size_t size, int align ) +{ + void* mem = malloc( size + (align - 1) + sizeof(void*) ); + char* aligned = ((char*)mem) + sizeof(void*); + aligned += align - ((uintptr_t)aligned & (align - 1)); + + ((void**)aligned)[-1] = mem; + return aligned; +} + +inline void ll_aligned_free( void* ptr ) +{ + free( ((void**)ptr)[-1] ); +} + inline void* ll_aligned_malloc_16(size_t size) // returned hunk MUST be freed with ll_aligned_free_16(). { #if defined(LL_WINDOWS) @@ -65,7 +81,7 @@ inline void* ll_aligned_malloc_32(size_t size) // returned hunk MUST be freed wi #if defined(LL_WINDOWS) return _mm_malloc(size, 32); #elif defined(LL_DARWIN) -# error implement me. + return ll_aligned_malloc( size, 32 ); #else void *rtn; if (LL_LIKELY(0 == posix_memalign(&rtn, 32, size))) @@ -80,7 +96,7 @@ inline void ll_aligned_free_32(void *p) #if defined(LL_WINDOWS) _mm_free(p); #elif defined(LL_DARWIN) -# error implement me. + ll_aligned_free( p ); #else free(p); // posix_memalign() is compatible with heap deallocator #endif diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index af28337f57..9cce94e6cf 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -41,7 +41,7 @@ class LLVolumeParams; class LLProfile; class LLPath; -#define LL_MESH_ENABLED 1 +#define LL_MESH_ENABLED 0 template class LLOctreeNode; diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index dc193dc600..9951cf0193 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -2791,6 +2791,7 @@ void renderPhysicsShape(LLDrawable* drawable) U32 data_mask = LLVertexBuffer::MAP_VERTEX; +#if LL_MESH_ENABLED if (volume->isMesh()) { LLUUID mesh_id = volume->getVolume()->getParams().getSculptID(); @@ -2827,7 +2828,8 @@ void renderPhysicsShape(LLDrawable* drawable) return; } } - +#endif //LL_MESH_ENABLED + //push faces glColor3fv(color.mV); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); diff --git a/install.xml b/install.xml index d84ab14d53..40ec65b2b0 100644 --- a/install.xml +++ b/install.xml @@ -1065,9 +1065,9 @@ anguage Infrstructure (CLI) international standard darwin md5sum - 01853c92592c9b969d2cdbc339738b98 + b9fe5149a23cbc55a341867c2f6abb8e url - scp:install-packages.lindenlab.com:/local/www/install-packages/doc/llconvexdecomposition-0.1-darwin-20100624.tar.bz2 + scp:install-packages.lindenlab.com:/local/www/install-packages/doc/llconvexdecomposition-0.1-darwin-20100626.tar.bz2 -- cgit v1.3 From 46768c3c6c263ec27a80c854734ce0b61d29686f Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Mon, 12 Jul 2010 07:39:23 -0500 Subject: Merge? --- indra/llmath/llvolume.cpp | 186 ++++++++++++++++++++++--------------- indra/llrender/llvertexbuffer.cpp | 2 +- indra/newview/lldrawpoolavatar.cpp | 4 +- indra/newview/llface.cpp | 2 +- 4 files changed, 116 insertions(+), 78 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index a4022c842d..38944d3855 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -5245,6 +5245,10 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) mNumS = src.mNumS; mNumT = src.mNumT; + mExtents[0] = src.mExtents[0]; + mExtents[1] = src.mExtents[1]; + *mCenter = *src.mCenter; + mNumVertices = 0; mNumIndices = 0; @@ -5297,7 +5301,6 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) LLVector4a::memcpyNonAliased16((F32*) mIndices, (F32*) src.mIndices, idx_size); } - //delete return *this; } @@ -5535,88 +5538,100 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build) S32 offset = 0; if (mTypeMask & TOP_MASK) + { offset = (max_t-1) * max_s; + } else + { offset = mBeginS; - - VertexData corners[4]; - VertexData baseVert; - for(int t = 0; t < 4; t++){ - corners[t].getPosition().load3( mesh[offset + (grid_size*t)].mPos.mV); - corners[t].mTexCoord.mV[0] = profile[grid_size*t].mV[0]+0.5f; - corners[t].mTexCoord.mV[1] = 0.5f - profile[grid_size*t].mV[1]; } { - LLVector4a lhs; - lhs.setSub(corners[1].getPosition(), corners[0].getPosition()); - LLVector4a rhs; - rhs.setSub(corners[2].getPosition(), corners[1].getPosition()); - baseVert.getNormal().setCross3(lhs, rhs); - baseVert.getNormal().normalize3fast(); - } + VertexData corners[4]; + VertexData baseVert; + for(S32 t = 0; t < 4; t++) + { + corners[t].getPosition().load3( mesh[offset + (grid_size*t)].mPos.mV); + corners[t].mTexCoord.mV[0] = profile[grid_size*t].mV[0]+0.5f; + corners[t].mTexCoord.mV[1] = 0.5f - profile[grid_size*t].mV[1]; + } - if(!(mTypeMask & TOP_MASK)){ - baseVert.getNormal().mul(-1.0f); - }else{ - //Swap the UVs on the U(X) axis for top face - LLVector2 swap; - swap = corners[0].mTexCoord; - corners[0].mTexCoord=corners[3].mTexCoord; - corners[3].mTexCoord=swap; - swap = corners[1].mTexCoord; - corners[1].mTexCoord=corners[2].mTexCoord; - corners[2].mTexCoord=swap; - } + { + LLVector4a lhs; + lhs.setSub(corners[1].getPosition(), corners[0].getPosition()); + LLVector4a rhs; + rhs.setSub(corners[2].getPosition(), corners[1].getPosition()); + baseVert.getNormal().setCross3(lhs, rhs); + baseVert.getNormal().normalize3fast(); + } - LLVector4a binormal; - - calc_binormal_from_triangle( binormal, - corners[0].getPosition(), corners[0].mTexCoord, - corners[1].getPosition(), corners[1].mTexCoord, - corners[2].getPosition(), corners[2].mTexCoord); - - binormal.normalize3fast(); + if(!(mTypeMask & TOP_MASK)) + { + baseVert.getNormal().mul(-1.0f); + } + else + { + //Swap the UVs on the U(X) axis for top face + LLVector2 swap; + swap = corners[0].mTexCoord; + corners[0].mTexCoord=corners[3].mTexCoord; + corners[3].mTexCoord=swap; + swap = corners[1].mTexCoord; + corners[1].mTexCoord=corners[2].mTexCoord; + corners[2].mTexCoord=swap; + } - S32 size = (grid_size+1)*(grid_size+1); - resizeVertices(size); - allocateBinormals(size); + LLVector4a binormal; + + calc_binormal_from_triangle( binormal, + corners[0].getPosition(), corners[0].mTexCoord, + corners[1].getPosition(), corners[1].mTexCoord, + corners[2].getPosition(), corners[2].mTexCoord); + + binormal.normalize3fast(); - LLVector4a* pos = (LLVector4a*) mPositions; - LLVector4a* norm = (LLVector4a*) mNormals; - LLVector4a* binorm = (LLVector4a*) mBinormals; - LLVector2* tc = (LLVector2*) mTexCoords; + S32 size = (grid_size+1)*(grid_size+1); + resizeVertices(size); + allocateBinormals(size); - for(int gx = 0;gxsetAdd(min, max); - mCenter->mul(0.5f); + mCenter->setAdd(min, max); + mCenter->mul(0.5f); + } if (!partial_build) { @@ -6249,73 +6264,96 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat llerrs << "Cannot append face -- 16-bit overflow will occur." << llendl; } - + if (face.mNumVertices == 0) + { + llerrs << "Cannot append empty face." << llendl; + } + + //allocate new buffer space LLVector4a* new_pos = (LLVector4a*) ll_aligned_malloc_16(new_count*16); LLVector4a* new_norm = (LLVector4a*) ll_aligned_malloc_16(new_count*16); LLVector2* new_tc = (LLVector2*) ll_aligned_malloc_16((new_count*8+0xF) & ~0xF); + if (mNumVertices > 0) - { + { //copy old buffers LLVector4a::memcpyNonAliased16((F32*) new_pos, (F32*) mPositions, mNumVertices*4); LLVector4a::memcpyNonAliased16((F32*) new_norm, (F32*) mNormals, mNumVertices*4); LLVector4a::memcpyNonAliased16((F32*) new_tc, (F32*) mTexCoords, mNumVertices*2); } + //free old buffer space ll_aligned_free_16(mPositions); ll_aligned_free_16(mNormals); ll_aligned_free_16(mTexCoords); + //point to new buffers mPositions = new_pos; mNormals = new_norm; mTexCoords = new_tc; mNumVertices = new_count; + //get destination address of appended face LLVector4a* dst_pos = mPositions+offset; LLVector2* dst_tc = mTexCoords+offset; LLVector4a* dst_norm = mNormals+offset; + //get source addresses of appended face const LLVector4a* src_pos = face.mPositions; const LLVector2* src_tc = face.mTexCoords; const LLVector4a* src_norm = face.mNormals; + //load aligned matrices LLMatrix4a mat, norm_mat; mat.loadu(mat_in); norm_mat.loadu(norm_mat_in); for (U32 i = 0; i < face.mNumVertices; ++i) { + //transform appended face position and store mat.affineTransform(src_pos[i], dst_pos[i]); + + //transform appended face normal and store norm_mat.rotate(src_norm[i], dst_norm[i]); dst_norm[i].normalize3fast(); + //copy appended face texture coordinate dst_tc[i] = src_tc[i]; if (offset == 0 && i == 0) - { + { //initialize bounding box mExtents[0] = mExtents[1] = dst_pos[i]; } else { + //stretch bounding box update_min_max(mExtents[0], mExtents[1], dst_pos[i]); } } new_count = mNumIndices + face.mNumIndices; + + //allocate new index buffer U16* new_indices = (U16*) ll_aligned_malloc_16((new_count*2+0xF) & ~0xF); if (mNumIndices > 0) - { - LLVector4a::memcpyNonAliased16((F32*) new_indices, (F32*) mIndices, llmax(mNumIndices/2, 1)); + { //copy old index buffer + LLVector4a::memcpyNonAliased16((F32*) new_indices, (F32*) mIndices, llmax(mNumIndices/2, 4)); } + //free old index buffer ll_aligned_free_16(mIndices); + + //point to new index buffer mIndices = new_indices; + + //get destination address into new index buffer U16* dst_idx = mIndices+mNumIndices; mNumIndices = new_count; for (U32 i = 0; i < face.mNumIndices; ++i) - { + { //copy indices, offsetting by old vertex count dst_idx[i] = face.mIndices[i]+offset; } } diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 514ca25aa0..1d02ca4f4c 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -267,7 +267,7 @@ void LLVertexBuffer::validateRange(U32 start, U32 end, U32 count, U32 indices_of if (start >= (U32) mRequestedNumVerts || end >= (U32) mRequestedNumVerts) { - llerrs << "Bad vertex buffer draw range: [" << start << ", " << end << "]" << llendl; + llerrs << "Bad vertex buffer draw range: [" << start << ", " << end << "] vs " << mRequestedNumVerts << llendl; } llassert(mRequestedNumIndices >= 0); diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 63ca17d62d..c7e77fd6ba 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -1249,10 +1249,10 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLFace* face, const LLMeshSk { face->setGeomIndex(0); face->setIndicesIndex(0); - face->setSize(vol_face.mNumVertices, vol_face.mNumIndices); + face->setSize(vol_face.mNumVertices, vol_face.mNumIndices, true); face->mVertexBuffer = new LLVertexBuffer(data_mask, 0); - face->mVertexBuffer->allocateBuffer(vol_face.mNumVertices, vol_face.mNumIndices, true); + face->mVertexBuffer->allocateBuffer(face->getGeomCount(), face->getIndicesCount(), true); U16 offset = 0; diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index c48106863e..8533f9710c 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -1583,7 +1583,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, if (rebuild_weights && vf.mWeights) { - LLVector4a::memcpyNonAliased16((F32*) weights, (F32*) vf.mWeights, num_vertices/4); + LLVector4a::memcpyNonAliased16((F32*) weights, (F32*) vf.mWeights, num_vertices*4); } if (rebuild_color) -- cgit v1.3 From 2dd3a6be720ed6ce7c17415fc8d81869cf46f3a0 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Tue, 13 Jul 2010 12:02:14 -0500 Subject: Fix for mesh upload, consolidate generating bad indices, and normal generation. --- indra/llcommon/llassettype.cpp | 3 --- indra/llinventory/llinventorytype.cpp | 5 ----- indra/llmath/llvolume.cpp | 36 ++++++++++++++++++++++++++--------- indra/llmath/llvolume.h | 2 +- 4 files changed, 28 insertions(+), 18 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llcommon/llassettype.cpp b/indra/llcommon/llassettype.cpp index 476a23ec64..bdd115364e 100644 --- a/indra/llcommon/llassettype.cpp +++ b/indra/llcommon/llassettype.cpp @@ -99,10 +99,7 @@ LLAssetDictionary::LLAssetDictionary() addEntry(LLAssetType::AT_LINK, new AssetEntry("LINK", "link", "sym link", false, false, true)); addEntry(LLAssetType::AT_LINK_FOLDER, new AssetEntry("FOLDER_LINK", "link_f", "sym folder link", false, false, true)); -#if LL_MESH_ENABLED addEntry(LLAssetType::AT_MESH, new AssetEntry("MESH", "mesh", "mesh", false, false, false)); -#endif - addEntry(LLAssetType::AT_NONE, new AssetEntry("NONE", "-1", NULL, FALSE, FALSE, FALSE)); }; diff --git a/indra/llinventory/llinventorytype.cpp b/indra/llinventory/llinventorytype.cpp index 82cd22a832..5c5500b6f4 100644 --- a/indra/llinventory/llinventorytype.cpp +++ b/indra/llinventory/llinventorytype.cpp @@ -89,10 +89,7 @@ LLInventoryDictionary::LLInventoryDictionary() addEntry(LLInventoryType::IT_WEARABLE, new InventoryEntry("wearable", "wearable", 2, LLAssetType::AT_CLOTHING, LLAssetType::AT_BODYPART)); addEntry(LLInventoryType::IT_ANIMATION, new InventoryEntry("animation", "animation", 1, LLAssetType::AT_ANIMATION)); addEntry(LLInventoryType::IT_GESTURE, new InventoryEntry("gesture", "gesture", 1, LLAssetType::AT_GESTURE)); -#if LL_MESH_ENABLED addEntry(LLInventoryType::IT_MESH, new InventoryEntry("mesh", "mesh", 1, LLAssetType::AT_MESH)); -#endif - } @@ -152,9 +149,7 @@ DEFAULT_ASSET_FOR_INV_TYPE[LLAssetType::AT_COUNT] = LLInventoryType::IT_NONE, // AT_NONE LLInventoryType::IT_NONE, // AT_NONE LLInventoryType::IT_NONE, // AT_NONE -#if LL_MESH_ENABLED LLInventoryType::IT_MESH // AT_MESH -#endif }; // static diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 38944d3855..51bcfb38d4 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -5369,7 +5369,17 @@ bool LLVolumeFace::VertexMapData::operator==(const LLVolumeFace::VertexData& rhs bool LLVolumeFace::VertexMapData::ComparePosition::operator()(const LLVector3& a, const LLVector3& b) const { - return a < b; + if (a.mV[0] != b.mV[0]) + { + return a.mV[0] < b.mV[0]; + } + + if (a.mV[1] != b.mV[1]) + { + return a.mV[1] < b.mV[1]; + } + + return a.mV[2] < b.mV[2]; } void LLVolumeFace::optimize(F32 angle_cutoff) @@ -6145,12 +6155,13 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con { S32 new_verts = mNumVertices+1; S32 new_size = new_verts*16; - + S32 old_size = mNumVertices*16; + //positions LLVector4a* dst = (LLVector4a*) ll_aligned_malloc_16(new_size); if (mPositions) { - LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mPositions, new_size/4); + LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mPositions, old_size/4); ll_aligned_free_16(mPositions); } mPositions = dst; @@ -6159,22 +6170,25 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con dst = (LLVector4a*) ll_aligned_malloc_16(new_size); if (mNormals) { - LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mNormals, new_size/4); + LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mNormals, old_size/4); ll_aligned_free_16(mNormals); } mNormals = dst; //tex coords new_size = ((new_verts*8)+0xF) & ~0xF; + old_size = ((mNumVertices*8)+0xF) & ~0xF; + dst = (LLVector4a*) ll_aligned_malloc_16(new_size); { LLVector2* dst = (LLVector2*) ll_aligned_malloc_16(new_size); if (mTexCoords) { - LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mTexCoords, new_size/4); + LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mTexCoords, old_size/4); ll_aligned_free_16(mTexCoords); } } + mTexCoords = (LLVector2*) dst; //just clear binormals ll_aligned_free_16(mBinormals); @@ -6223,12 +6237,15 @@ void LLVolumeFace::pushIndex(const U16& idx) S32 new_count = mNumIndices + 1; S32 new_size = ((new_count*2)+0xF) & ~0xF; - S32 old_size = (mNumIndices+0xF) & ~0xF; + S32 old_size = ((mNumIndices*2)+0xF) & ~0xF; if (new_size != old_size) { U16* dst = (U16*) ll_aligned_malloc_16(new_size); - LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mIndices, new_size/4); - ll_aligned_free_16(mIndices); + if (mIndices) + { + LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mIndices, old_size/4); + ll_aligned_free_16(mIndices); + } mIndices = dst; } @@ -6339,7 +6356,8 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat U16* new_indices = (U16*) ll_aligned_malloc_16((new_count*2+0xF) & ~0xF); if (mNumIndices > 0) { //copy old index buffer - LLVector4a::memcpyNonAliased16((F32*) new_indices, (F32*) mIndices, llmax(mNumIndices/2, 4)); + S32 old_size = (mNumIndices*2+0xF) & ~0xF; + LLVector4a::memcpyNonAliased16((F32*) new_indices, (F32*) mIndices, old_size/4); } //free old index buffer diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 9cce94e6cf..af28337f57 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -41,7 +41,7 @@ class LLVolumeParams; class LLProfile; class LLPath; -#define LL_MESH_ENABLED 0 +#define LL_MESH_ENABLED 1 template class LLOctreeNode; -- cgit v1.3 From 93ea3d2850067c23ff07f0ffb362b73247840e9a Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 15 Jul 2010 14:17:51 -0500 Subject: Merge cleanup. --- indra/llmath/llvolume.cpp | 22 +--------------------- indra/newview/llappviewer.cpp | 2 -- indra/newview/llfloatersnapshot.cpp | 4 ++-- indra/newview/llpanelobject.cpp | 2 ++ indra/newview/llvovolume.cpp | 5 ----- 5 files changed, 5 insertions(+), 30 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 25db58491e..0976487cbd 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -93,8 +93,6 @@ const F32 SKEW_MAX = 0.95f; const F32 SCULPT_MIN_AREA = 0.002f; const S32 SCULPT_MIN_AREA_DETAIL = 1; -#define GEN_TRI_STRIP 0 - BOOL check_same_clock_dir( const LLVector3& pt1, const LLVector3& pt2, const LLVector3& pt3, const LLVector3& norm) { LLVector3 test = (pt2-pt1)%(pt3-pt2); @@ -5663,8 +5661,6 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build) { *out++ = ((gy*(grid_size+1))+gx+idxs[i]); } -#if GEN_TRI_STRIP -#endif } else { @@ -5672,14 +5668,9 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build) { *out++ = ((gy*(grid_size+1))+gx+idxs[i]); } -#if GEN_TRI_STRIP -#endif } - } - -#if GEN_TRI_STRIP + } } -#endif } return TRUE; @@ -6539,13 +6530,9 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) if (!partial_build) { -#if GEN_TRI_STRIP -#endif // Now we generate the indices. for (t = 0; t < (mNumT-1); t++) { -#if GEN_TRI_STRIP -#endif for (s = 0; s < (mNumS-1); s++) { mIndices[cur_index++] = s + mNumS*t; //bottom left @@ -6555,8 +6542,6 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) mIndices[cur_index++] = s+1 + mNumS*t; //bottom right mIndices[cur_index++] = s+1 + mNumS*(t+1); //top right -#if GEN_TRI_STRIP -#endif mEdge[cur_edge++] = (mNumS-1)*2*t+s*2+1; //bottom left/top right neighbor face if (t < mNumT-2) { //top right/top left neighbor face mEdge[cur_edge++] = (mNumS-1)*2*(t+1)+s*2+1; @@ -6597,11 +6582,7 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) } mEdge[cur_edge++] = (mNumS-1)*2*t+s*2; //top right/bottom left neighbor face } -#if GEN_TRI_STRIP -#endif -#if GEN_TRI_STRIP } -#endif } //generate normals @@ -6684,7 +6665,6 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) } } } - else // logic for sculpt volumes { BOOL average_poles = FALSE; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 0ef403720b..8ffdd30d04 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3515,8 +3515,6 @@ static LLFastTimer::DeclareTimer FTM_REGION_UPDATE("Update Region"); static LLFastTimer::DeclareTimer FTM_WORLD_UPDATE("Update World"); static LLFastTimer::DeclareTimer FTM_NETWORK("Network"); static LLFastTimer::DeclareTimer FTM_AGENT_NETWORK("Agent Network"); -static LLFastTimer::DeclareTimer FTM_AGENT_AUTOPILOT("Autopilot"); -static LLFastTimer::DeclareTimer FTM_AGENT_UPDATE("Update"); static LLFastTimer::DeclareTimer FTM_VLMANAGER("VL Manager"); /////////////////////////////////////////////////////// diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 187a5e2040..43ea6143b1 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -999,7 +999,7 @@ void LLSnapshotLivePreview::saveTexture() void *userdata = NULL; upload_new_resource(tid, // tid LLAssetType::AT_TEXTURE, - snapname, + "Snapshot : " + pos_string, "Taken by " + who_took_it + " at " + pos_string, 0, LLFolderType::FT_SNAPSHOT_CATEGORY, @@ -1007,7 +1007,7 @@ void LLSnapshotLivePreview::saveTexture() PERM_ALL, // Note: Snapshots to inventory is a special case of content upload PERM_NONE, // that ignores the user's premissions preferences and continues to PERM_NONE, // always use these fairly permissive hard-coded initial perms. - MG - snapname, + "Snapshot : " + pos_string, callback, expected_upload_cost, userdata); gViewerWindow->playSnapshotAnimAndSound(); } diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index 63490d4fa2..1de0496737 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -1289,6 +1289,8 @@ void LLPanelObject::sendPhysicsParam() body.append(LLSelectMgr::getInstance()->getSelection()->getFirstObject()->getID()); LLHTTPClient::post( url, body, new CostResponder(body[0].asInteger()) ); +} + void LLPanelObject::sendCastShadows() { BOOL value = mCheckCastShadows->get(); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 4faef57074..36391a3602 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -96,13 +96,8 @@ LLPointer LLVOVolume::sObjectMediaNavigateClient = static LLFastTimer::DeclareTimer FTM_GEN_TRIANGLES("Generate Triangles"); static LLFastTimer::DeclareTimer FTM_GEN_VOLUME("Generate Volumes"); -static LLFastTimer::DeclareTimer FTM_BUILD_MESH("Mesh"); -static LLFastTimer::DeclareTimer FTM_MESH_VFS("VFS"); -static LLFastTimer::DeclareTimer FTM_MESH_STREAM("Stream"); -static LLFastTimer::DeclareTimer FTM_MESH_FACES("Faces"); static LLFastTimer::DeclareTimer FTM_VOLUME_TEXTURES("Volume Textures"); - // Implementation class of LLMediaDataClientObject. See llmediadataclient.h class LLMediaDataClientObjectImpl : public LLMediaDataClientObject { -- cgit v1.3 From 129e31373eaef9cbd74451bfeb4ad62b64d17250 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Fri, 6 Aug 2010 11:57:03 -0500 Subject: Better < operator for LLVolumeFace::VertexData --- indra/llmath/llvolume.cpp | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 0976487cbd..bba0a6d089 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2055,22 +2055,48 @@ void LLVolumeFace::VertexData::setNormal(const LLVector4a& norm) bool LLVolumeFace::VertexData::operator<(const LLVolumeFace::VertexData& rhs)const { - if (mData[POSITION].notEqual3(rhs.getPosition())) + const F32* lp = this->getPosition().getF32(); + const F32* rp = rhs.getPosition().getF32(); + + if (lp[0] != rp[0]) + { + return lp[0] < rp[0]; + } + + if (rp[1] != lp[1]) + { + return lp[1] < rp[1]; + } + + if (rp[2] != lp[2]) + { + return lp[2] < rp[2]; + } + + lp = getNormal().getF32(); + rp = rhs.getNormal().getF32(); + + if (lp[0] != rp[0]) + { + return lp[0] < rp[0]; + } + + if (rp[1] != lp[1]) { - return mData[POSITION].less3(rhs.getPosition()); + return lp[1] < rp[1]; } - if (mData[NORMAL].notEqual3(rhs.getNormal())) + if (rp[2] != lp[2]) { - return mData[NORMAL].less3(rhs.getNormal()); + return lp[2] < rp[2]; } - if (mTexCoord != rhs.mTexCoord) + if (mTexCoord.mV[0] != rhs.mTexCoord.mV[0]) { - return mTexCoord < rhs.mTexCoord; + return mTexCoord.mV[0] < rhs.mTexCoord.mV[0]; } - return false; + return mTexCoord.mV[1] < rhs.mTexCoord.mV[1]; } bool LLVolumeFace::VertexData::operator==(const LLVolumeFace::VertexData& rhs)const -- cgit v1.3 From 2fea1d5d33ec1b41a3cfa4307a1bfa58d8014f88 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 19 Aug 2010 12:25:15 -0500 Subject: Integrate SIMD API from oreh/server-trunk-oreh --- indra/cmake/00-Common.cmake | 1 + indra/llcharacter/llkeyframemotion.cpp | 2 +- indra/llmath/CMakeLists.txt | 246 ++-- indra/llmath/llcamera.cpp | 2 +- indra/llmath/llmath.h | 1034 +++++++------- indra/llmath/lloctree.h | 19 +- indra/llmath/llquantize.h | 310 +++-- indra/llmath/llquaternion.cpp | 1921 +++++++++++++------------- indra/llmath/llquaternion.h | 1184 ++++++++-------- indra/llmath/llvolume.cpp | 123 +- indra/llmath/tests/v2math_test.cpp | 6 +- indra/llmath/tests/v3color_test.cpp | 6 +- indra/llmath/tests/v3dmath_test.cpp | 2 +- indra/llmath/tests/v3math_test.cpp | 4 +- indra/llmath/tests/v4color_test.cpp | 4 +- indra/llmath/tests/v4coloru_test.cpp | 2 +- indra/llmath/tests/v4math_test.cpp | 4 +- indra/llmath/v2math.cpp | 2 +- indra/llmath/v2math.h | 8 +- indra/llmath/v3color.h | 10 +- indra/llmath/v3dmath.h | 10 +- indra/llmath/v3math.h | 10 +- indra/llmath/v4color.h | 8 +- indra/llmath/v4coloru.h | 4 +- indra/llmath/v4math.h | 8 +- indra/llmessage/llsdmessagebuilder.cpp | 1 + indra/llmessage/lltemplatemessagebuilder.cpp | 1 + indra/llmessage/lltemplatemessagereader.cpp | 1 + indra/llrender/llrender.cpp | 4 +- indra/newview/llagent.cpp | 2 +- indra/newview/lldrawable.cpp | 10 +- indra/newview/lldrawpoolavatar.cpp | 190 ++- indra/newview/lldrawpoolavatar.h | 3 +- indra/newview/llface.cpp | 29 +- indra/newview/llface.h | 3 +- indra/newview/llflexibleobject.cpp | 2 +- indra/newview/llhudicon.cpp | 2 +- indra/newview/llpanelnearbymedia.cpp | 2 +- indra/newview/llpanelprimmediacontrols.cpp | 4 +- indra/newview/llselectmgr.cpp | 6 +- indra/newview/llspatialpartition.cpp | 44 +- indra/newview/llviewercamera.cpp | 2 +- indra/newview/llviewerjointmesh.cpp | 10 +- indra/newview/llviewerjoystick.cpp | 2 +- indra/newview/llviewermedia.cpp | 2 +- indra/newview/llviewerobject.cpp | 2 +- indra/newview/llviewerpartsim.cpp | 4 +- indra/newview/llviewertexture.cpp | 2 +- indra/newview/llvoavatar.cpp | 22 +- indra/newview/llvoavatar.h | 3 + indra/newview/llvograss.cpp | 2 +- indra/newview/llvosurfacepatch.cpp | 4 +- indra/newview/llvotextbubble.cpp | 4 +- indra/newview/llvotree.cpp | 6 +- indra/newview/llvovolume.cpp | 16 +- indra/newview/llworld.cpp | 4 +- indra/newview/pipeline.cpp | 14 +- 57 files changed, 2731 insertions(+), 2602 deletions(-) (limited to 'indra/llmath') diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index 2c7bb77758..f10a61e1e7 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -68,6 +68,7 @@ if (WINDOWS) add_definitions( /Zc:wchar_t- + /arch:SSE2 ) endif (MSVC80 OR MSVC90) diff --git a/indra/llcharacter/llkeyframemotion.cpp b/indra/llcharacter/llkeyframemotion.cpp index 7bc9e97eb1..bce272082e 100644 --- a/indra/llcharacter/llkeyframemotion.cpp +++ b/indra/llcharacter/llkeyframemotion.cpp @@ -1151,7 +1151,7 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8 constraint->mPositions[joint_num] = new_pos; } constraint->mFixupDistanceRMS *= 1.f / (constraint->mTotalLength * (F32)(shared_data->mChainLength - 1)); - constraint->mFixupDistanceRMS = fsqrtf(constraint->mFixupDistanceRMS); + constraint->mFixupDistanceRMS = (F32) sqrt(constraint->mFixupDistanceRMS); //reset old joint rots for (joint_num = 0; joint_num <= shared_data->mChainLength; joint_num++) diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt index dda07133d5..8d85765eb8 100644 --- a/indra/llmath/CMakeLists.txt +++ b/indra/llmath/CMakeLists.txt @@ -1,118 +1,128 @@ -# -*- cmake -*- - -project(llmath) - -include(00-Common) -include(LLCommon) - -include_directories( - ${LLCOMMON_INCLUDE_DIRS} - ) - -set(llmath_SOURCE_FILES - llbbox.cpp - llbboxlocal.cpp - llcamera.cpp - llcoordframe.cpp - llline.cpp - llmodularmath.cpp - llperlin.cpp - llquaternion.cpp - llrect.cpp - llsphere.cpp - llvolume.cpp - llvolumemgr.cpp - llvolumeoctree.cpp - llsdutil_math.cpp - m3math.cpp - m4math.cpp - raytrace.cpp - v2math.cpp - v3color.cpp - v3dmath.cpp - v3math.cpp - v4color.cpp - v4coloru.cpp - v4math.cpp - xform.cpp - ) - -set(llmath_HEADER_FILES - CMakeLists.txt - - camera.h - coordframe.h - llbbox.h - llbboxlocal.h - llcamera.h - llcoord.h - llcoordframe.h - llinterp.h - llline.h - llmath.h - llmodularmath.h - lloctree.h - llperlin.h - llplane.h - llquantize.h - llquaternion.h - llrect.h - llsphere.h - lltreenode.h - llv4math.h - llv4matrix3.h - llv4matrix4.h - llv4vector3.h - llvector4a.h - llmatrix4a.h - llvolume.h - llvolumemgr.h - llvolumeoctree.h - llsdutil_math.h - m3math.h - m4math.h - raytrace.h - v2math.h - v3color.h - v3dmath.h - v3math.h - v4color.h - v4coloru.h - v4math.h - xform.h - ) - -set_source_files_properties(${llmath_HEADER_FILES} - PROPERTIES HEADER_FILE_ONLY TRUE) - -list(APPEND llmath_SOURCE_FILES ${llmath_HEADER_FILES}) - -add_library (llmath ${llmath_SOURCE_FILES}) - -# Add tests -if (LL_TESTS) - include(LLAddBuildTest) - # UNIT TESTS - SET(llmath_TEST_SOURCE_FILES - llbboxlocal.cpp - llmodularmath.cpp - llrect.cpp - v2math.cpp - v3color.cpp - v4color.cpp - v4coloru.cpp - ) - LL_ADD_PROJECT_UNIT_TESTS(llmath "${llmath_TEST_SOURCE_FILES}") - - # INTEGRATION TESTS - set(test_libs llmath llcommon ${LLCOMMON_LIBRARIES} ${WINDOWS_LIBRARIES}) - # TODO: Some of these need refactoring to be proper Unit tests rather than Integration tests. - LL_ADD_INTEGRATION_TEST(llbbox llbbox.cpp "${test_libs}") - LL_ADD_INTEGRATION_TEST(llquaternion llquaternion.cpp "${test_libs}") - LL_ADD_INTEGRATION_TEST(mathmisc "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(m3math "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(v3dmath v3dmath.cpp "${test_libs}") - LL_ADD_INTEGRATION_TEST(v3math v3math.cpp "${test_libs}") - LL_ADD_INTEGRATION_TEST(v4math v4math.cpp "${test_libs}") - LL_ADD_INTEGRATION_TEST(xform xform.cpp "${test_libs}") -endif (LL_TESTS) +# -*- cmake -*- + +project(llmath) + +include(00-Common) +include(LLCommon) + +include_directories( + ${LLCOMMON_INCLUDE_DIRS} + ) + +set(llmath_SOURCE_FILES + llbbox.cpp + llbboxlocal.cpp + llcamera.cpp + llcoordframe.cpp + llline.cpp + llmatrix3a.cpp + llmodularmath.cpp + llperlin.cpp + llquaternion.cpp + llrect.cpp + llsphere.cpp + llvector4a.cpp + llvolume.cpp + llvolumemgr.cpp + llvolumeoctree.cpp + llsdutil_math.cpp + m3math.cpp + m4math.cpp + raytrace.cpp + v2math.cpp + v3color.cpp + v3dmath.cpp + v3math.cpp + v4color.cpp + v4coloru.cpp + v4math.cpp + xform.cpp + ) + +set(llmath_HEADER_FILES + CMakeLists.txt + + camera.h + coordframe.h + llbbox.h + llbboxlocal.h + llcamera.h + llcoord.h + llcoordframe.h + llinterp.h + llline.h + llmath.h + llmatrix3a.h + llmatrix3a.inl + llmodularmath.h + lloctree.h + llperlin.h + llplane.h + llquantize.h + llquaternion.h + llquaternion2.h + llquaternion2.inl + llrect.h + llsimdmath.h + llsimdtypes.h + llsimdtypes.inl + llsphere.h + lltreenode.h + llvector4a.h + llvector4a.inl + llvector4logical.h + llv4math.h + llv4matrix3.h + llv4matrix4.h + llv4vector3.h + llvolume.h + llvolumemgr.h + llvolumeoctree.h + llsdutil_math.h + m3math.h + m4math.h + raytrace.h + v2math.h + v3color.h + v3dmath.h + v3math.h + v4color.h + v4coloru.h + v4math.h + xform.h + ) + +set_source_files_properties(${llmath_HEADER_FILES} + PROPERTIES HEADER_FILE_ONLY TRUE) + +list(APPEND llmath_SOURCE_FILES ${llmath_HEADER_FILES}) + +add_library (llmath ${llmath_SOURCE_FILES}) + +# Add tests +if (LL_TESTS) + include(LLAddBuildTest) + # UNIT TESTS + SET(llmath_TEST_SOURCE_FILES + llbboxlocal.cpp + llmodularmath.cpp + llrect.cpp + v2math.cpp + v3color.cpp + v4color.cpp + v4coloru.cpp + ) + LL_ADD_PROJECT_UNIT_TESTS(llmath "${llmath_TEST_SOURCE_FILES}") + + # INTEGRATION TESTS + set(test_libs llmath llcommon ${LLCOMMON_LIBRARIES} ${WINDOWS_LIBRARIES}) + # TODO: Some of these need refactoring to be proper Unit tests rather than Integration tests. + LL_ADD_INTEGRATION_TEST(llbbox llbbox.cpp "${test_libs}") + LL_ADD_INTEGRATION_TEST(llquaternion llquaternion.cpp "${test_libs}") + LL_ADD_INTEGRATION_TEST(mathmisc "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(m3math "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(v3dmath v3dmath.cpp "${test_libs}") + LL_ADD_INTEGRATION_TEST(v3math v3math.cpp "${test_libs}") + LL_ADD_INTEGRATION_TEST(v4math v4math.cpp "${test_libs}") + LL_ADD_INTEGRATION_TEST(xform xform.cpp "${test_libs}") +endif (LL_TESTS) diff --git a/indra/llmath/llcamera.cpp b/indra/llmath/llcamera.cpp index 6b56e4870e..beb5c48624 100644 --- a/indra/llmath/llcamera.cpp +++ b/indra/llmath/llcamera.cpp @@ -77,7 +77,7 @@ const LLCamera& LLCamera::operator=(const LLCamera& rhs) { memcpy(this, &rhs, sizeof(LLCamera)); alignPlanes(); - LLVector4a::memcpyNonAliased16((F32*) mAgentPlanes, (F32*) rhs.mAgentPlanes, 4*7); + LLVector4a::memcpyNonAliased16((F32*) mAgentPlanes, (F32*) rhs.mAgentPlanes, 4*7*sizeof(F32)); return *this; } diff --git a/indra/llmath/llmath.h b/indra/llmath/llmath.h index c3c15e1374..742bbc4751 100644 --- a/indra/llmath/llmath.h +++ b/indra/llmath/llmath.h @@ -1,525 +1,509 @@ -/** - * @file llmath.h - * @brief Useful math constants and macros. - * - * $LicenseInfo:firstyear=2000&license=viewergpl$ - * - * Copyright (c) 2000-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#ifndef LLMATH_H -#define LLMATH_H - -#include -#include -#include -#include "lldefs.h" -//#include "llstl.h" // *TODO: Remove when LLString is gone -//#include "llstring.h" // *TODO: Remove when LLString is gone -// lltut.h uses is_approx_equal_fraction(). This was moved to its own header -// file in llcommon so we can use lltut.h for llcommon tests without making -// llcommon depend on llmath. -#include "is_approx_equal_fraction.h" - -// work around for Windows & older gcc non-standard function names. -#if LL_WINDOWS -#include -#define llisnan(val) _isnan(val) -#define llfinite(val) _finite(val) -#elif (LL_LINUX && __GNUC__ <= 2) -#define llisnan(val) isnan(val) -#define llfinite(val) isfinite(val) -#elif LL_SOLARIS -#define llisnan(val) isnan(val) -#define llfinite(val) (val <= std::numeric_limits::max()) -#else -#define llisnan(val) std::isnan(val) -#define llfinite(val) std::isfinite(val) -#endif - -// Single Precision Floating Point Routines -#ifndef sqrtf -#define sqrtf(x) ((F32)sqrt((F64)(x))) -#endif -#ifndef fsqrtf -#define fsqrtf(x) sqrtf(x) -#endif - -#ifndef cosf -#define cosf(x) ((F32)cos((F64)(x))) -#endif -#ifndef sinf -#define sinf(x) ((F32)sin((F64)(x))) -#endif -#ifndef tanf -#define tanf(x) ((F32)tan((F64)(x))) -#endif -#ifndef acosf -#define acosf(x) ((F32)acos((F64)(x))) -#endif - -#ifndef powf -#define powf(x,y) ((F32)pow((F64)(x),(F64)(y))) -#endif -#ifndef expf -#define expf(x) ((F32)exp((F64)(x))) -#endif - -const F32 GRAVITY = -9.8f; - -// mathematical constants -const F32 F_PI = 3.1415926535897932384626433832795f; -const F32 F_TWO_PI = 6.283185307179586476925286766559f; -const F32 F_PI_BY_TWO = 1.5707963267948966192313216916398f; -const F32 F_SQRT_TWO_PI = 2.506628274631000502415765284811f; -const F32 F_E = 2.71828182845904523536f; -const F32 F_SQRT2 = 1.4142135623730950488016887242097f; -const F32 F_SQRT3 = 1.73205080756888288657986402541f; -const F32 OO_SQRT2 = 0.7071067811865475244008443621049f; -const F32 DEG_TO_RAD = 0.017453292519943295769236907684886f; -const F32 RAD_TO_DEG = 57.295779513082320876798154814105f; -const F32 F_APPROXIMATELY_ZERO = 0.00001f; -const F32 F_LN2 = 0.69314718056f; -const F32 OO_LN2 = 1.4426950408889634073599246810019f; - -const F32 F_ALMOST_ZERO = 0.0001f; -const F32 F_ALMOST_ONE = 1.0f - F_ALMOST_ZERO; - -// BUG: Eliminate in favor of F_APPROXIMATELY_ZERO above? -const F32 FP_MAG_THRESHOLD = 0.0000001f; - -// TODO: Replace with logic like is_approx_equal -inline BOOL is_approx_zero( F32 f ) { return (-F_APPROXIMATELY_ZERO < f) && (f < F_APPROXIMATELY_ZERO); } - -// These functions work by interpreting sign+exp+mantissa as an unsigned -// integer. -// For example: -// x = 1 00000010 00000000000000000000000 -// y = 1 00000001 11111111111111111111111 -// -// interpreted as ints = -// x = 10000001000000000000000000000000 -// y = 10000000111111111111111111111111 -// which is clearly a different of 1 in the least significant bit -// Values with the same exponent can be trivially shown to work. -// -// WARNING: Denormals of opposite sign do not work -// x = 1 00000000 00000000000000000000001 -// y = 0 00000000 00000000000000000000001 -// Although these values differ by 2 in the LSB, the sign bit makes -// the int comparison fail. -// -// WARNING: NaNs can compare equal -// There is no special treatment of exceptional values like NaNs -// -// WARNING: Infinity is comparable with F32_MAX and negative -// infinity is comparable with F32_MIN - -inline BOOL is_approx_equal(F32 x, F32 y) -{ - const S32 COMPARE_MANTISSA_UP_TO_BIT = 0x02; - return (std::abs((S32) ((U32&)x - (U32&)y) ) < COMPARE_MANTISSA_UP_TO_BIT); -} - -inline BOOL is_approx_equal(F64 x, F64 y) -{ - const S64 COMPARE_MANTISSA_UP_TO_BIT = 0x02; - return (std::abs((S32) ((U64&)x - (U64&)y) ) < COMPARE_MANTISSA_UP_TO_BIT); -} - -inline S32 llabs(const S32 a) -{ - return S32(std::labs(a)); -} - -inline F32 llabs(const F32 a) -{ - return F32(std::fabs(a)); -} - -inline F64 llabs(const F64 a) -{ - return F64(std::fabs(a)); -} - -inline S32 lltrunc( F32 f ) -{ -#if LL_WINDOWS && !defined( __INTEL_COMPILER ) - // Avoids changing the floating point control word. - // Add or subtract 0.5 - epsilon and then round - const static U32 zpfp[] = { 0xBEFFFFFF, 0x3EFFFFFF }; - S32 result; - __asm { - fld f - mov eax, f - shr eax, 29 - and eax, 4 - fadd dword ptr [zpfp + eax] - fistp result - } - return result; -#else - return (S32)f; -#endif -} - -inline S32 lltrunc( F64 f ) -{ - return (S32)f; -} - -inline S32 llfloor( F32 f ) -{ -#if LL_WINDOWS && !defined( __INTEL_COMPILER ) - // Avoids changing the floating point control word. - // Accurate (unlike Stereopsis version) for all values between S32_MIN and S32_MAX and slightly faster than Stereopsis version. - // Add -(0.5 - epsilon) and then round - const U32 zpfp = 0xBEFFFFFF; - S32 result; - __asm { - fld f - fadd dword ptr [zpfp] - fistp result - } - return result; -#else - return (S32)floorf(f); -#endif -} - - -inline S32 llceil( F32 f ) -{ - // This could probably be optimized, but this works. - return (S32)ceil(f); -} - - -#ifndef BOGUS_ROUND -// Use this round. Does an arithmetic round (0.5 always rounds up) -inline S32 llround(const F32 val) -{ - return llfloor(val + 0.5f); -} - -#else // BOGUS_ROUND -// Old llround implementation - does banker's round (toward nearest even in the case of a 0.5. -// Not using this because we don't have a consistent implementation on both platforms, use -// llfloor(val + 0.5f), which is consistent on all platforms. -inline S32 llround(const F32 val) -{ - #if LL_WINDOWS - // Note: assumes that the floating point control word is set to rounding mode (the default) - S32 ret_val; - _asm fld val - _asm fistp ret_val; - return ret_val; - #elif LL_LINUX - // Note: assumes that the floating point control word is set - // to rounding mode (the default) - S32 ret_val; - __asm__ __volatile__( "flds %1 \n\t" - "fistpl %0 \n\t" - : "=m" (ret_val) - : "m" (val) ); - return ret_val; - #else - return llfloor(val + 0.5f); - #endif -} - -// A fast arithmentic round on intel, from Laurent de Soras http://ldesoras.free.fr -inline int round_int(double x) -{ - const float round_to_nearest = 0.5f; - int i; - __asm - { - fld x - fadd st, st (0) - fadd round_to_nearest - fistp i - sar i, 1 - } - return (i); -} -#endif // BOGUS_ROUND - -inline F32 llround( F32 val, F32 nearest ) -{ - return F32(floor(val * (1.0f / nearest) + 0.5f)) * nearest; -} - -inline F64 llround( F64 val, F64 nearest ) -{ - return F64(floor(val * (1.0 / nearest) + 0.5)) * nearest; -} - -// these provide minimum peak error -// -// avg error = -0.013049 -// peak error = -31.4 dB -// RMS error = -28.1 dB - -const F32 FAST_MAG_ALPHA = 0.960433870103f; -const F32 FAST_MAG_BETA = 0.397824734759f; - -// these provide minimum RMS error -// -// avg error = 0.000003 -// peak error = -32.6 dB -// RMS error = -25.7 dB -// -//const F32 FAST_MAG_ALPHA = 0.948059448969f; -//const F32 FAST_MAG_BETA = 0.392699081699f; - -inline F32 fastMagnitude(F32 a, F32 b) -{ - a = (a > 0) ? a : -a; - b = (b > 0) ? b : -b; - return(FAST_MAG_ALPHA * llmax(a,b) + FAST_MAG_BETA * llmin(a,b)); -} - - - -//////////////////// -// -// Fast F32/S32 conversions -// -// Culled from www.stereopsis.com/FPU.html - -const F64 LL_DOUBLE_TO_FIX_MAGIC = 68719476736.0*1.5; //2^36 * 1.5, (52-_shiftamt=36) uses limited precisicion to floor -const S32 LL_SHIFT_AMOUNT = 16; //16.16 fixed point representation, - -// Endian dependent code -#ifdef LL_LITTLE_ENDIAN - #define LL_EXP_INDEX 1 - #define LL_MAN_INDEX 0 -#else - #define LL_EXP_INDEX 0 - #define LL_MAN_INDEX 1 -#endif - -/* Deprecated: use llround(), lltrunc(), or llfloor() instead -// ================================================================================================ -// Real2Int -// ================================================================================================ -inline S32 F64toS32(F64 val) -{ - val = val + LL_DOUBLE_TO_FIX_MAGIC; - return ((S32*)&val)[LL_MAN_INDEX] >> LL_SHIFT_AMOUNT; -} - -// ================================================================================================ -// Real2Int -// ================================================================================================ -inline S32 F32toS32(F32 val) -{ - return F64toS32 ((F64)val); -} -*/ - -//////////////////////////////////////////////// -// -// Fast exp and log -// - -// Implementation of fast exp() approximation (from a paper by Nicol N. Schraudolph -// http://www.inf.ethz.ch/~schraudo/pubs/exp.pdf -static union -{ - double d; - struct - { -#ifdef LL_LITTLE_ENDIAN - S32 j, i; -#else - S32 i, j; -#endif - } n; -} LLECO; // not sure what the name means - -#define LL_EXP_A (1048576 * OO_LN2) // use 1512775 for integer -#define LL_EXP_C (60801) // this value of C good for -4 < y < 4 - -#define LL_FAST_EXP(y) (LLECO.n.i = llround(F32(LL_EXP_A*(y))) + (1072693248 - LL_EXP_C), LLECO.d) - - - -inline F32 llfastpow(const F32 x, const F32 y) -{ - return (F32)(LL_FAST_EXP(y * log(x))); -} - - -inline F32 snap_to_sig_figs(F32 foo, S32 sig_figs) -{ - // compute the power of ten - F32 bar = 1.f; - for (S32 i = 0; i < sig_figs; i++) - { - bar *= 10.f; - } - - foo = (F32)llround(foo * bar); - - // shift back - foo /= bar; - return foo; -} - -inline F32 lerp(F32 a, F32 b, F32 u) -{ - return a + ((b - a) * u); -} - -inline F32 lerp2d(F32 x00, F32 x01, F32 x10, F32 x11, F32 u, F32 v) -{ - F32 a = x00 + (x01-x00)*u; - F32 b = x10 + (x11-x10)*u; - F32 r = a + (b-a)*v; - return r; -} - -inline F32 ramp(F32 x, F32 a, F32 b) -{ - return (a == b) ? 0.0f : ((a - x) / (a - b)); -} - -inline F32 rescale(F32 x, F32 x1, F32 x2, F32 y1, F32 y2) -{ - return lerp(y1, y2, ramp(x, x1, x2)); -} - -inline F32 clamp_rescale(F32 x, F32 x1, F32 x2, F32 y1, F32 y2) -{ - if (y1 < y2) - { - return llclamp(rescale(x,x1,x2,y1,y2),y1,y2); - } - else - { - return llclamp(rescale(x,x1,x2,y1,y2),y2,y1); - } -} - - -inline F32 cubic_step( F32 x, F32 x0, F32 x1, F32 s0, F32 s1 ) -{ - if (x <= x0) - return s0; - - if (x >= x1) - return s1; - - F32 f = (x - x0) / (x1 - x0); - - return s0 + (s1 - s0) * (f * f) * (3.0f - 2.0f * f); -} - -inline F32 cubic_step( F32 x ) -{ - x = llclampf(x); - - return (x * x) * (3.0f - 2.0f * x); -} - -inline F32 quadratic_step( F32 x, F32 x0, F32 x1, F32 s0, F32 s1 ) -{ - if (x <= x0) - return s0; - - if (x >= x1) - return s1; - - F32 f = (x - x0) / (x1 - x0); - F32 f_squared = f * f; - - return (s0 * (1.f - f_squared)) + ((s1 - s0) * f_squared); -} - -inline F32 llsimple_angle(F32 angle) -{ - while(angle <= -F_PI) - angle += F_TWO_PI; - while(angle > F_PI) - angle -= F_TWO_PI; - return angle; -} - -//SDK - Renamed this to get_lower_power_two, since this is what this actually does. -inline U32 get_lower_power_two(U32 val, U32 max_power_two) -{ - if(!max_power_two) - { - max_power_two = 1 << 31 ; - } - if(max_power_two & (max_power_two - 1)) - { - return 0 ; - } - - for(; val < max_power_two ; max_power_two >>= 1) ; - - return max_power_two ; -} - -// calculate next highest power of two, limited by max_power_two -// This is taken from a brilliant little code snipped on http://acius2.blogspot.com/2007/11/calculating-next-power-of-2.html -// Basically we convert the binary to a solid string of 1's with the same -// number of digits, then add one. We subtract 1 initially to handle -// the case where the number passed in is actually a power of two. -// WARNING: this only works with 32 bit ints. -inline U32 get_next_power_two(U32 val, U32 max_power_two) -{ - if(!max_power_two) - { - max_power_two = 1 << 31 ; - } - - if(val >= max_power_two) - { - return max_power_two; - } - - val--; - val = (val >> 1) | val; - val = (val >> 2) | val; - val = (val >> 4) | val; - val = (val >> 8) | val; - val = (val >> 16) | val; - val++; - - return val; -} - -//get the gaussian value given the linear distance from axis x and guassian value o -inline F32 llgaussian(F32 x, F32 o) -{ - return 1.f/(F_SQRT_TWO_PI*o)*powf(F_E, -(x*x)/(2*o*o)); -} - -#endif +/** + * @file llmath.h + * @brief Useful math constants and macros. + * + * $LicenseInfo:firstyear=2000&license=viewergpl$ + * + * Copyright (c) 2000-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LLMATH_H +#define LLMATH_H + +#include +#include +#include "lldefs.h" +//#include "llstl.h" // *TODO: Remove when LLString is gone +//#include "llstring.h" // *TODO: Remove when LLString is gone +// lltut.h uses is_approx_equal_fraction(). This was moved to its own header +// file in llcommon so we can use lltut.h for llcommon tests without making +// llcommon depend on llmath. +#include "is_approx_equal_fraction.h" + +// work around for Windows & older gcc non-standard function names. +#if LL_WINDOWS +#include +#define llisnan(val) _isnan(val) +#define llfinite(val) _finite(val) +#elif (LL_LINUX && __GNUC__ <= 2) +#define llisnan(val) isnan(val) +#define llfinite(val) isfinite(val) +#elif LL_SOLARIS +#define llisnan(val) isnan(val) +#define llfinite(val) (val <= std::numeric_limits::max()) +#else +#define llisnan(val) std::isnan(val) +#define llfinite(val) std::isfinite(val) +#endif + +// Single Precision Floating Point Routines +// (There used to be more defined here, but they appeared to be redundant and +// were breaking some other includes. Removed by Falcon, reviewed by Andrew, 11/25/09) +/*#ifndef tanf +#define tanf(x) ((F32)tan((F64)(x))) +#endif*/ + +const F32 GRAVITY = -9.8f; + +// mathematical constants +const F32 F_PI = 3.1415926535897932384626433832795f; +const F32 F_TWO_PI = 6.283185307179586476925286766559f; +const F32 F_PI_BY_TWO = 1.5707963267948966192313216916398f; +const F32 F_SQRT_TWO_PI = 2.506628274631000502415765284811f; +const F32 F_E = 2.71828182845904523536f; +const F32 F_SQRT2 = 1.4142135623730950488016887242097f; +const F32 F_SQRT3 = 1.73205080756888288657986402541f; +const F32 OO_SQRT2 = 0.7071067811865475244008443621049f; +const F32 DEG_TO_RAD = 0.017453292519943295769236907684886f; +const F32 RAD_TO_DEG = 57.295779513082320876798154814105f; +const F32 F_APPROXIMATELY_ZERO = 0.00001f; +const F32 F_LN2 = 0.69314718056f; +const F32 OO_LN2 = 1.4426950408889634073599246810019f; + +const F32 F_ALMOST_ZERO = 0.0001f; +const F32 F_ALMOST_ONE = 1.0f - F_ALMOST_ZERO; + +// BUG: Eliminate in favor of F_APPROXIMATELY_ZERO above? +const F32 FP_MAG_THRESHOLD = 0.0000001f; + +// TODO: Replace with logic like is_approx_equal +inline BOOL is_approx_zero( F32 f ) { return (-F_APPROXIMATELY_ZERO < f) && (f < F_APPROXIMATELY_ZERO); } + +// These functions work by interpreting sign+exp+mantissa as an unsigned +// integer. +// For example: +// x = 1 00000010 00000000000000000000000 +// y = 1 00000001 11111111111111111111111 +// +// interpreted as ints = +// x = 10000001000000000000000000000000 +// y = 10000000111111111111111111111111 +// which is clearly a different of 1 in the least significant bit +// Values with the same exponent can be trivially shown to work. +// +// WARNING: Denormals of opposite sign do not work +// x = 1 00000000 00000000000000000000001 +// y = 0 00000000 00000000000000000000001 +// Although these values differ by 2 in the LSB, the sign bit makes +// the int comparison fail. +// +// WARNING: NaNs can compare equal +// There is no special treatment of exceptional values like NaNs +// +// WARNING: Infinity is comparable with F32_MAX and negative +// infinity is comparable with F32_MIN + +inline BOOL is_approx_equal(F32 x, F32 y) +{ + const S32 COMPARE_MANTISSA_UP_TO_BIT = 0x02; + return (std::abs((S32) ((U32&)x - (U32&)y) ) < COMPARE_MANTISSA_UP_TO_BIT); +} + +inline BOOL is_approx_equal(F64 x, F64 y) +{ + const S64 COMPARE_MANTISSA_UP_TO_BIT = 0x02; + return (std::abs((S32) ((U64&)x - (U64&)y) ) < COMPARE_MANTISSA_UP_TO_BIT); +} + +inline S32 llabs(const S32 a) +{ + return S32(std::labs(a)); +} + +inline F32 llabs(const F32 a) +{ + return F32(std::fabs(a)); +} + +inline F64 llabs(const F64 a) +{ + return F64(std::fabs(a)); +} + +inline S32 lltrunc( F32 f ) +{ +#if LL_WINDOWS && !defined( __INTEL_COMPILER ) + // Avoids changing the floating point control word. + // Add or subtract 0.5 - epsilon and then round + const static U32 zpfp[] = { 0xBEFFFFFF, 0x3EFFFFFF }; + S32 result; + __asm { + fld f + mov eax, f + shr eax, 29 + and eax, 4 + fadd dword ptr [zpfp + eax] + fistp result + } + return result; +#else + return (S32)f; +#endif +} + +inline S32 lltrunc( F64 f ) +{ + return (S32)f; +} + +inline S32 llfloor( F32 f ) +{ +#if LL_WINDOWS && !defined( __INTEL_COMPILER ) + // Avoids changing the floating point control word. + // Accurate (unlike Stereopsis version) for all values between S32_MIN and S32_MAX and slightly faster than Stereopsis version. + // Add -(0.5 - epsilon) and then round + const U32 zpfp = 0xBEFFFFFF; + S32 result; + __asm { + fld f + fadd dword ptr [zpfp] + fistp result + } + return result; +#else + return (S32)floor(f); +#endif +} + + +inline S32 llceil( F32 f ) +{ + // This could probably be optimized, but this works. + return (S32)ceil(f); +} + + +#ifndef BOGUS_ROUND +// Use this round. Does an arithmetic round (0.5 always rounds up) +inline S32 llround(const F32 val) +{ + return llfloor(val + 0.5f); +} + +#else // BOGUS_ROUND +// Old llround implementation - does banker's round (toward nearest even in the case of a 0.5. +// Not using this because we don't have a consistent implementation on both platforms, use +// llfloor(val + 0.5f), which is consistent on all platforms. +inline S32 llround(const F32 val) +{ + #if LL_WINDOWS + // Note: assumes that the floating point control word is set to rounding mode (the default) + S32 ret_val; + _asm fld val + _asm fistp ret_val; + return ret_val; + #elif LL_LINUX + // Note: assumes that the floating point control word is set + // to rounding mode (the default) + S32 ret_val; + __asm__ __volatile__( "flds %1 \n\t" + "fistpl %0 \n\t" + : "=m" (ret_val) + : "m" (val) ); + return ret_val; + #else + return llfloor(val + 0.5f); + #endif +} + +// A fast arithmentic round on intel, from Laurent de Soras http://ldesoras.free.fr +inline int round_int(double x) +{ + const float round_to_nearest = 0.5f; + int i; + __asm + { + fld x + fadd st, st (0) + fadd round_to_nearest + fistp i + sar i, 1 + } + return (i); +} +#endif // BOGUS_ROUND + +inline F32 llround( F32 val, F32 nearest ) +{ + return F32(floor(val * (1.0f / nearest) + 0.5f)) * nearest; +} + +inline F64 llround( F64 val, F64 nearest ) +{ + return F64(floor(val * (1.0 / nearest) + 0.5)) * nearest; +} + +// these provide minimum peak error +// +// avg error = -0.013049 +// peak error = -31.4 dB +// RMS error = -28.1 dB + +const F32 FAST_MAG_ALPHA = 0.960433870103f; +const F32 FAST_MAG_BETA = 0.397824734759f; + +// these provide minimum RMS error +// +// avg error = 0.000003 +// peak error = -32.6 dB +// RMS error = -25.7 dB +// +//const F32 FAST_MAG_ALPHA = 0.948059448969f; +//const F32 FAST_MAG_BETA = 0.392699081699f; + +inline F32 fastMagnitude(F32 a, F32 b) +{ + a = (a > 0) ? a : -a; + b = (b > 0) ? b : -b; + return(FAST_MAG_ALPHA * llmax(a,b) + FAST_MAG_BETA * llmin(a,b)); +} + + + +//////////////////// +// +// Fast F32/S32 conversions +// +// Culled from www.stereopsis.com/FPU.html + +const F64 LL_DOUBLE_TO_FIX_MAGIC = 68719476736.0*1.5; //2^36 * 1.5, (52-_shiftamt=36) uses limited precisicion to floor +const S32 LL_SHIFT_AMOUNT = 16; //16.16 fixed point representation, + +// Endian dependent code +#ifdef LL_LITTLE_ENDIAN + #define LL_EXP_INDEX 1 + #define LL_MAN_INDEX 0 +#else + #define LL_EXP_INDEX 0 + #define LL_MAN_INDEX 1 +#endif + +/* Deprecated: use llround(), lltrunc(), or llfloor() instead +// ================================================================================================ +// Real2Int +// ================================================================================================ +inline S32 F64toS32(F64 val) +{ + val = val + LL_DOUBLE_TO_FIX_MAGIC; + return ((S32*)&val)[LL_MAN_INDEX] >> LL_SHIFT_AMOUNT; +} + +// ================================================================================================ +// Real2Int +// ================================================================================================ +inline S32 F32toS32(F32 val) +{ + return F64toS32 ((F64)val); +} +*/ + +//////////////////////////////////////////////// +// +// Fast exp and log +// + +// Implementation of fast exp() approximation (from a paper by Nicol N. Schraudolph +// http://www.inf.ethz.ch/~schraudo/pubs/exp.pdf +static union +{ + double d; + struct + { +#ifdef LL_LITTLE_ENDIAN + S32 j, i; +#else + S32 i, j; +#endif + } n; +} LLECO; // not sure what the name means + +#define LL_EXP_A (1048576 * OO_LN2) // use 1512775 for integer +#define LL_EXP_C (60801) // this value of C good for -4 < y < 4 + +#define LL_FAST_EXP(y) (LLECO.n.i = llround(F32(LL_EXP_A*(y))) + (1072693248 - LL_EXP_C), LLECO.d) + + + +inline F32 llfastpow(const F32 x, const F32 y) +{ + return (F32)(LL_FAST_EXP(y * log(x))); +} + + +inline F32 snap_to_sig_figs(F32 foo, S32 sig_figs) +{ + // compute the power of ten + F32 bar = 1.f; + for (S32 i = 0; i < sig_figs; i++) + { + bar *= 10.f; + } + + //F32 new_foo = (F32)llround(foo * bar); + // the llround() implementation sucks. Don't us it. + + F32 sign = (foo > 0.f) ? 1.f : -1.f; + F32 new_foo = F32( S64(foo * bar + sign * 0.5f)); + new_foo /= bar; + + return new_foo; +} + +inline F32 lerp(F32 a, F32 b, F32 u) +{ + return a + ((b - a) * u); +} + +inline F32 lerp2d(F32 x00, F32 x01, F32 x10, F32 x11, F32 u, F32 v) +{ + F32 a = x00 + (x01-x00)*u; + F32 b = x10 + (x11-x10)*u; + F32 r = a + (b-a)*v; + return r; +} + +inline F32 ramp(F32 x, F32 a, F32 b) +{ + return (a == b) ? 0.0f : ((a - x) / (a - b)); +} + +inline F32 rescale(F32 x, F32 x1, F32 x2, F32 y1, F32 y2) +{ + return lerp(y1, y2, ramp(x, x1, x2)); +} + +inline F32 clamp_rescale(F32 x, F32 x1, F32 x2, F32 y1, F32 y2) +{ + if (y1 < y2) + { + return llclamp(rescale(x,x1,x2,y1,y2),y1,y2); + } + else + { + return llclamp(rescale(x,x1,x2,y1,y2),y2,y1); + } +} + + +inline F32 cubic_step( F32 x, F32 x0, F32 x1, F32 s0, F32 s1 ) +{ + if (x <= x0) + return s0; + + if (x >= x1) + return s1; + + F32 f = (x - x0) / (x1 - x0); + + return s0 + (s1 - s0) * (f * f) * (3.0f - 2.0f * f); +} + +inline F32 cubic_step( F32 x ) +{ + x = llclampf(x); + + return (x * x) * (3.0f - 2.0f * x); +} + +inline F32 quadratic_step( F32 x, F32 x0, F32 x1, F32 s0, F32 s1 ) +{ + if (x <= x0) + return s0; + + if (x >= x1) + return s1; + + F32 f = (x - x0) / (x1 - x0); + F32 f_squared = f * f; + + return (s0 * (1.f - f_squared)) + ((s1 - s0) * f_squared); +} + +inline F32 llsimple_angle(F32 angle) +{ + while(angle <= -F_PI) + angle += F_TWO_PI; + while(angle > F_PI) + angle -= F_TWO_PI; + return angle; +} + +//SDK - Renamed this to get_lower_power_two, since this is what this actually does. +inline U32 get_lower_power_two(U32 val, U32 max_power_two) +{ + if(!max_power_two) + { + max_power_two = 1 << 31 ; + } + if(max_power_two & (max_power_two - 1)) + { + return 0 ; + } + + for(; val < max_power_two ; max_power_two >>= 1) ; + + return max_power_two ; +} + +// calculate next highest power of two, limited by max_power_two +// This is taken from a brilliant little code snipped on http://acius2.blogspot.com/2007/11/calculating-next-power-of-2.html +// Basically we convert the binary to a solid string of 1's with the same +// number of digits, then add one. We subtract 1 initially to handle +// the case where the number passed in is actually a power of two. +// WARNING: this only works with 32 bit ints. +inline U32 get_next_power_two(U32 val, U32 max_power_two) +{ + if(!max_power_two) + { + max_power_two = 1 << 31 ; + } + + if(val >= max_power_two) + { + return max_power_two; + } + + val--; + val = (val >> 1) | val; + val = (val >> 2) | val; + val = (val >> 4) | val; + val = (val >> 8) | val; + val = (val >> 16) | val; + val++; + + return val; +} + +//get the gaussian value given the linear distance from axis x and guassian value o +inline F32 llgaussian(F32 x, F32 o) +{ + return 1.f/(F_SQRT_TWO_PI*o)*powf(F_E, -(x*x)/(2*o*o)); +} + +// Include simd math header +#include "llsimdmath.h" + +#endif diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index 59828ae565..432e9fbcd8 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -142,7 +142,7 @@ public: S32 getOctant(const LLVector4a& pos) const //get the octant pos is in { - return pos.greaterThan4(mD[CENTER]).getComparisonMask() & 0x7; + return pos.greaterThan(mD[CENTER]).getGatheredBits() & 0x7; } inline bool isInside(const LLVector4a& pos, const F32& rad) const @@ -157,13 +157,13 @@ public: bool isInside(const LLVector4a& pos) const { - S32 gt = pos.greaterThan4(mD[MAX]).getComparisonMask() & 0x7; + S32 gt = pos.greaterThan(mD[MAX]).getGatheredBits() & 0x7; if (gt) { return false; } - S32 lt = pos.lessEqual4(mD[MIN]).getComparisonMask() & 0x7; + S32 lt = pos.lessEqual(mD[MIN]).getGatheredBits() & 0x7; if (lt) { return false; @@ -206,13 +206,13 @@ public: { const LLVector4a& pos = data->getPositionGroup(); - LLVector4a gt = pos.greaterThan4(center); + LLVector4a gt = pos.greaterThan(center); LLVector4a up; - up.mQ = _mm_and_ps(size.mQ, gt.mQ); + up = _mm_and_ps(size, gt); LLVector4a down; - down.mQ = _mm_andnot_ps(gt.mQ, size.mQ); + down = _mm_andnot_ps(gt, size); center.add(up); center.sub(down); @@ -326,9 +326,8 @@ public: LLVector4a val; val.setSub(center, getCenter()); val.setAbs(val); - LLVector4a app_zero; - app_zero.mQ = F_APPROXIMATELY_ZERO_4A; - S32 lt = val.lessThan4(app_zero).getComparisonMask() & 0x7; + + S32 lt = val.lessThan(LLVector4a::getEpsilon()).getGatheredBits() & 0x7; if( lt == 0x7 ) { @@ -642,7 +641,7 @@ public: LLVector4a val; val.setSub(v, BaseType::mD[BaseType::CENTER]); val.setAbs(val); - S32 lt = val.lessThan4(MAX_MAG).getComparisonMask() & 0x7; + S32 lt = val.lessThan(MAX_MAG).getGatheredBits() & 0x7; if (lt != 0x7) { diff --git a/indra/llmath/llquantize.h b/indra/llmath/llquantize.h index 2192427f07..000d8a060f 100644 --- a/indra/llmath/llquantize.h +++ b/indra/llmath/llquantize.h @@ -1,152 +1,158 @@ -/** - * @file llquantize.h - * @brief useful routines for quantizing floats to various length ints - * and back out again - * - * $LicenseInfo:firstyear=2001&license=viewergpl$ - * - * Copyright (c) 2001-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#ifndef LL_LLQUANTIZE_H -#define LL_LLQUANTIZE_H - -const U16 U16MAX = 65535; -const F32 OOU16MAX = 1.f/(F32)(U16MAX); - -const U8 U8MAX = 255; -const F32 OOU8MAX = 1.f/(F32)(U8MAX); - -const U8 FIRSTVALIDCHAR = 54; -const U8 MAXSTRINGVAL = U8MAX - FIRSTVALIDCHAR; //we don't allow newline or null - - -inline U16 F32_to_U16_ROUND(F32 val, F32 lower, F32 upper) -{ - val = llclamp(val, lower, upper); - // make sure that the value is positive and normalized to <0, 1> - val -= lower; - val /= (upper - lower); - - // round the value. Sreturn the U16 - return (U16)(llround(val*U16MAX)); -} - - -inline U16 F32_to_U16(F32 val, F32 lower, F32 upper) -{ - val = llclamp(val, lower, upper); - // make sure that the value is positive and normalized to <0, 1> - val -= lower; - val /= (upper - lower); - - // return the U16 - return (U16)(llfloor(val*U16MAX)); -} - -inline F32 U16_to_F32(U16 ival, F32 lower, F32 upper) -{ - F32 val = ival*OOU16MAX; - F32 delta = (upper - lower); - val *= delta; - val += lower; - - F32 max_error = delta*OOU16MAX; - - // make sure that zero's come through as zero - if (fabsf(val) < max_error) - val = 0.f; - - return val; -} - - -inline U8 F32_to_U8_ROUND(F32 val, F32 lower, F32 upper) -{ - val = llclamp(val, lower, upper); - // make sure that the value is positive and normalized to <0, 1> - val -= lower; - val /= (upper - lower); - - // return the rounded U8 - return (U8)(llround(val*U8MAX)); -} - - -inline U8 F32_to_U8(F32 val, F32 lower, F32 upper) -{ - val = llclamp(val, lower, upper); - // make sure that the value is positive and normalized to <0, 1> - val -= lower; - val /= (upper - lower); - - // return the U8 - return (U8)(llfloor(val*U8MAX)); -} - -inline F32 U8_to_F32(U8 ival, F32 lower, F32 upper) -{ - F32 val = ival*OOU8MAX; - F32 delta = (upper - lower); - val *= delta; - val += lower; - - F32 max_error = delta*OOU8MAX; - - // make sure that zero's come through as zero - if (fabsf(val) < max_error) - val = 0.f; - - return val; -} - -inline U8 F32_TO_STRING(F32 val, F32 lower, F32 upper) -{ - val = llclamp(val, lower, upper); //[lower, upper] - // make sure that the value is positive and normalized to <0, 1> - val -= lower; //[0, upper-lower] - val /= (upper - lower); //[0,1] - val = val * MAXSTRINGVAL; //[0, MAXSTRINGVAL] - val = floor(val + 0.5f); //[0, MAXSTRINGVAL] - - U8 stringVal = (U8)(val) + FIRSTVALIDCHAR; //[FIRSTVALIDCHAR, MAXSTRINGVAL + FIRSTVALIDCHAR] - return stringVal; -} - -inline F32 STRING_TO_F32(U8 ival, F32 lower, F32 upper) -{ - // remove empty space left for NULL, newline, etc. - ival -= FIRSTVALIDCHAR; //[0, MAXSTRINGVAL] - - F32 val = (F32)ival * (1.f / (F32)MAXSTRINGVAL); //[0, 1] - F32 delta = (upper - lower); - val *= delta; //[0, upper - lower] - val += lower; //[lower, upper] - - return val; -} - -#endif +/** + * @file llquantize.h + * @brief useful routines for quantizing floats to various length ints + * and back out again + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLQUANTIZE_H +#define LL_LLQUANTIZE_H + +const U16 U16MAX = 65535; +LL_ALIGN_16( const F32 F_U16MAX_4A[4] ) = { 65535.f, 65535.f, 65535.f, 65535.f }; + +const F32 OOU16MAX = 1.f/(F32)(U16MAX); +LL_ALIGN_16( const F32 F_OOU16MAX_4A[4] ) = { OOU16MAX, OOU16MAX, OOU16MAX, OOU16MAX }; + +const U8 U8MAX = 255; +LL_ALIGN_16( const F32 F_U8MAX_4A[4] ) = { 255.f, 255.f, 255.f, 255.f }; + +const F32 OOU8MAX = 1.f/(F32)(U8MAX); +LL_ALIGN_16( const F32 F_OOU8MAX_4A[4] ) = { OOU8MAX, OOU8MAX, OOU8MAX, OOU8MAX }; + +const U8 FIRSTVALIDCHAR = 54; +const U8 MAXSTRINGVAL = U8MAX - FIRSTVALIDCHAR; //we don't allow newline or null + + +inline U16 F32_to_U16_ROUND(F32 val, F32 lower, F32 upper) +{ + val = llclamp(val, lower, upper); + // make sure that the value is positive and normalized to <0, 1> + val -= lower; + val /= (upper - lower); + + // round the value. Sreturn the U16 + return (U16)(llround(val*U16MAX)); +} + + +inline U16 F32_to_U16(F32 val, F32 lower, F32 upper) +{ + val = llclamp(val, lower, upper); + // make sure that the value is positive and normalized to <0, 1> + val -= lower; + val /= (upper - lower); + + // return the U16 + return (U16)(llfloor(val*U16MAX)); +} + +inline F32 U16_to_F32(U16 ival, F32 lower, F32 upper) +{ + F32 val = ival*OOU16MAX; + F32 delta = (upper - lower); + val *= delta; + val += lower; + + F32 max_error = delta*OOU16MAX; + + // make sure that zero's come through as zero + if (fabsf(val) < max_error) + val = 0.f; + + return val; +} + + +inline U8 F32_to_U8_ROUND(F32 val, F32 lower, F32 upper) +{ + val = llclamp(val, lower, upper); + // make sure that the value is positive and normalized to <0, 1> + val -= lower; + val /= (upper - lower); + + // return the rounded U8 + return (U8)(llround(val*U8MAX)); +} + + +inline U8 F32_to_U8(F32 val, F32 lower, F32 upper) +{ + val = llclamp(val, lower, upper); + // make sure that the value is positive and normalized to <0, 1> + val -= lower; + val /= (upper - lower); + + // return the U8 + return (U8)(llfloor(val*U8MAX)); +} + +inline F32 U8_to_F32(U8 ival, F32 lower, F32 upper) +{ + F32 val = ival*OOU8MAX; + F32 delta = (upper - lower); + val *= delta; + val += lower; + + F32 max_error = delta*OOU8MAX; + + // make sure that zero's come through as zero + if (fabsf(val) < max_error) + val = 0.f; + + return val; +} + +inline U8 F32_TO_STRING(F32 val, F32 lower, F32 upper) +{ + val = llclamp(val, lower, upper); //[lower, upper] + // make sure that the value is positive and normalized to <0, 1> + val -= lower; //[0, upper-lower] + val /= (upper - lower); //[0,1] + val = val * MAXSTRINGVAL; //[0, MAXSTRINGVAL] + val = floor(val + 0.5f); //[0, MAXSTRINGVAL] + + U8 stringVal = (U8)(val) + FIRSTVALIDCHAR; //[FIRSTVALIDCHAR, MAXSTRINGVAL + FIRSTVALIDCHAR] + return stringVal; +} + +inline F32 STRING_TO_F32(U8 ival, F32 lower, F32 upper) +{ + // remove empty space left for NULL, newline, etc. + ival -= FIRSTVALIDCHAR; //[0, MAXSTRINGVAL] + + F32 val = (F32)ival * (1.f / (F32)MAXSTRINGVAL); //[0, 1] + F32 delta = (upper - lower); + val *= delta; //[0, upper - lower] + val += lower; //[lower, upper] + + return val; +} + +#endif diff --git a/indra/llmath/llquaternion.cpp b/indra/llmath/llquaternion.cpp index fdcc19d657..efdc10e2c6 100644 --- a/indra/llmath/llquaternion.cpp +++ b/indra/llmath/llquaternion.cpp @@ -1,960 +1,961 @@ -/** - * @file llquaternion.cpp - * @brief LLQuaternion class implementation. - * - * $LicenseInfo:firstyear=2000&license=viewergpl$ - * - * Copyright (c) 2000-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#include "linden_common.h" - -#include "llquaternion.h" - -#include "llmath.h" // for F_PI -//#include "vmath.h" -#include "v3math.h" -#include "v3dmath.h" -#include "v4math.h" -#include "m4math.h" -#include "m3math.h" -#include "llquantize.h" - -// WARNING: Don't use this for global const definitions! using this -// at the top of a *.cpp file might not give you what you think. -const LLQuaternion LLQuaternion::DEFAULT; - -// Constructors - -LLQuaternion::LLQuaternion(const LLMatrix4 &mat) -{ - *this = mat.quaternion(); - normalize(); -} - -LLQuaternion::LLQuaternion(const LLMatrix3 &mat) -{ - *this = mat.quaternion(); - normalize(); -} - -LLQuaternion::LLQuaternion(F32 angle, const LLVector4 &vec) -{ - LLVector3 v(vec.mV[VX], vec.mV[VY], vec.mV[VZ]); - v.normalize(); - - F32 c, s; - c = cosf(angle*0.5f); - s = sinf(angle*0.5f); - - mQ[VX] = v.mV[VX] * s; - mQ[VY] = v.mV[VY] * s; - mQ[VZ] = v.mV[VZ] * s; - mQ[VW] = c; - normalize(); -} - -LLQuaternion::LLQuaternion(F32 angle, const LLVector3 &vec) -{ - LLVector3 v(vec); - v.normalize(); - - F32 c, s; - c = cosf(angle*0.5f); - s = sinf(angle*0.5f); - - mQ[VX] = v.mV[VX] * s; - mQ[VY] = v.mV[VY] * s; - mQ[VZ] = v.mV[VZ] * s; - mQ[VW] = c; - normalize(); -} - -LLQuaternion::LLQuaternion(const LLVector3 &x_axis, - const LLVector3 &y_axis, - const LLVector3 &z_axis) -{ - LLMatrix3 mat; - mat.setRows(x_axis, y_axis, z_axis); - *this = mat.quaternion(); - normalize(); -} - -// Quatizations -void LLQuaternion::quantize16(F32 lower, F32 upper) -{ - F32 x = mQ[VX]; - F32 y = mQ[VY]; - F32 z = mQ[VZ]; - F32 s = mQ[VS]; - - x = U16_to_F32(F32_to_U16_ROUND(x, lower, upper), lower, upper); - y = U16_to_F32(F32_to_U16_ROUND(y, lower, upper), lower, upper); - z = U16_to_F32(F32_to_U16_ROUND(z, lower, upper), lower, upper); - s = U16_to_F32(F32_to_U16_ROUND(s, lower, upper), lower, upper); - - mQ[VX] = x; - mQ[VY] = y; - mQ[VZ] = z; - mQ[VS] = s; - - normalize(); -} - -void LLQuaternion::quantize8(F32 lower, F32 upper) -{ - mQ[VX] = U8_to_F32(F32_to_U8_ROUND(mQ[VX], lower, upper), lower, upper); - mQ[VY] = U8_to_F32(F32_to_U8_ROUND(mQ[VY], lower, upper), lower, upper); - mQ[VZ] = U8_to_F32(F32_to_U8_ROUND(mQ[VZ], lower, upper), lower, upper); - mQ[VS] = U8_to_F32(F32_to_U8_ROUND(mQ[VS], lower, upper), lower, upper); - - normalize(); -} - -// LLVector3 Magnitude and Normalization Functions - - -// Set LLQuaternion routines - -const LLQuaternion& LLQuaternion::setAngleAxis(F32 angle, F32 x, F32 y, F32 z) -{ - LLVector3 vec(x, y, z); - vec.normalize(); - - angle *= 0.5f; - F32 c, s; - c = cosf(angle); - s = sinf(angle); - - mQ[VX] = vec.mV[VX]*s; - mQ[VY] = vec.mV[VY]*s; - mQ[VZ] = vec.mV[VZ]*s; - mQ[VW] = c; - - normalize(); - return (*this); -} - -const LLQuaternion& LLQuaternion::setAngleAxis(F32 angle, const LLVector3 &vec) -{ - LLVector3 v(vec); - v.normalize(); - - angle *= 0.5f; - F32 c, s; - c = cosf(angle); - s = sinf(angle); - - mQ[VX] = v.mV[VX]*s; - mQ[VY] = v.mV[VY]*s; - mQ[VZ] = v.mV[VZ]*s; - mQ[VW] = c; - - normalize(); - return (*this); -} - -const LLQuaternion& LLQuaternion::setAngleAxis(F32 angle, const LLVector4 &vec) -{ - LLVector3 v(vec.mV[VX], vec.mV[VY], vec.mV[VZ]); - v.normalize(); - - F32 c, s; - c = cosf(angle*0.5f); - s = sinf(angle*0.5f); - - mQ[VX] = v.mV[VX]*s; - mQ[VY] = v.mV[VY]*s; - mQ[VZ] = v.mV[VZ]*s; - mQ[VW] = c; - - normalize(); - return (*this); -} - -const LLQuaternion& LLQuaternion::setEulerAngles(F32 roll, F32 pitch, F32 yaw) -{ - LLMatrix3 rot_mat(roll, pitch, yaw); - rot_mat.orthogonalize(); - *this = rot_mat.quaternion(); - - normalize(); - return (*this); -} - -// deprecated -const LLQuaternion& LLQuaternion::set(const LLMatrix3 &mat) -{ - *this = mat.quaternion(); - normalize(); - return (*this); -} - -// deprecated -const LLQuaternion& LLQuaternion::set(const LLMatrix4 &mat) -{ - *this = mat.quaternion(); - normalize(); - return (*this); -} - -// deprecated -const LLQuaternion& LLQuaternion::setQuat(F32 angle, F32 x, F32 y, F32 z) -{ - LLVector3 vec(x, y, z); - vec.normalize(); - - angle *= 0.5f; - F32 c, s; - c = cosf(angle); - s = sinf(angle); - - mQ[VX] = vec.mV[VX]*s; - mQ[VY] = vec.mV[VY]*s; - mQ[VZ] = vec.mV[VZ]*s; - mQ[VW] = c; - - normalize(); - return (*this); -} - -// deprecated -const LLQuaternion& LLQuaternion::setQuat(F32 angle, const LLVector3 &vec) -{ - LLVector3 v(vec); - v.normalize(); - - angle *= 0.5f; - F32 c, s; - c = cosf(angle); - s = sinf(angle); - - mQ[VX] = v.mV[VX]*s; - mQ[VY] = v.mV[VY]*s; - mQ[VZ] = v.mV[VZ]*s; - mQ[VW] = c; - - normalize(); - return (*this); -} - -const LLQuaternion& LLQuaternion::setQuat(F32 angle, const LLVector4 &vec) -{ - LLVector3 v(vec.mV[VX], vec.mV[VY], vec.mV[VZ]); - v.normalize(); - - F32 c, s; - c = cosf(angle*0.5f); - s = sinf(angle*0.5f); - - mQ[VX] = v.mV[VX]*s; - mQ[VY] = v.mV[VY]*s; - mQ[VZ] = v.mV[VZ]*s; - mQ[VW] = c; - - normalize(); - return (*this); -} - -const LLQuaternion& LLQuaternion::setQuat(F32 roll, F32 pitch, F32 yaw) -{ - LLMatrix3 rot_mat(roll, pitch, yaw); - rot_mat.orthogonalize(); - *this = rot_mat.quaternion(); - - normalize(); - return (*this); -} - -const LLQuaternion& LLQuaternion::setQuat(const LLMatrix3 &mat) -{ - *this = mat.quaternion(); - normalize(); - return (*this); -} - -const LLQuaternion& LLQuaternion::setQuat(const LLMatrix4 &mat) -{ - *this = mat.quaternion(); - normalize(); - return (*this); -//#if 1 -// // NOTE: LLQuaternion's are actually inverted with respect to -// // the matrices, so this code also assumes inverted quaternions -// // (-x, -y, -z, w). The result is that roll,pitch,yaw are applied -// // in reverse order (yaw,pitch,roll). -// F64 cosX = cos(roll); -// F64 cosY = cos(pitch); -// F64 cosZ = cos(yaw); -// -// F64 sinX = sin(roll); -// F64 sinY = sin(pitch); -// F64 sinZ = sin(yaw); -// -// mQ[VW] = (F32)sqrt(cosY*cosZ - sinX*sinY*sinZ + cosX*cosZ + cosX*cosY + 1.0)*.5; -// if (fabs(mQ[VW]) < F_APPROXIMATELY_ZERO) -// { -// // null rotation, any axis will do -// mQ[VX] = 0.0f; -// mQ[VY] = 1.0f; -// mQ[VZ] = 0.0f; -// } -// else -// { -// F32 inv_s = 1.0f / (4.0f * mQ[VW]); -// mQ[VX] = (F32)-(-sinX*cosY - cosX*sinY*sinZ - sinX*cosZ) * inv_s; -// mQ[VY] = (F32)-(-cosX*sinY*cosZ + sinX*sinZ - sinY) * inv_s; -// mQ[VZ] = (F32)-(-cosY*sinZ - sinX*sinY*cosZ - cosX*sinZ) * inv_s; -// } -// -//#else // This only works on a certain subset of roll/pitch/yaw -// -// F64 cosX = cosf(roll/2.0); -// F64 cosY = cosf(pitch/2.0); -// F64 cosZ = cosf(yaw/2.0); -// -// F64 sinX = sinf(roll/2.0); -// F64 sinY = sinf(pitch/2.0); -// F64 sinZ = sinf(yaw/2.0); -// -// mQ[VW] = (F32)(cosX*cosY*cosZ + sinX*sinY*sinZ); -// mQ[VX] = (F32)(sinX*cosY*cosZ - cosX*sinY*sinZ); -// mQ[VY] = (F32)(cosX*sinY*cosZ + sinX*cosY*sinZ); -// mQ[VZ] = (F32)(cosX*cosY*sinZ - sinX*sinY*cosZ); -//#endif -// -// normalize(); -// return (*this); -} - -// SJB: This code is correct for a logicly stored (non-transposed) matrix; -// Our matrices are stored transposed, OpenGL style, so this generates the -// INVERSE matrix, or the CORRECT matrix form an INVERSE quaternion. -// Because we use similar logic in LLMatrix3::quaternion(), -// we are internally consistant so everything works OK :) -LLMatrix3 LLQuaternion::getMatrix3(void) const -{ - LLMatrix3 mat; - F32 xx, xy, xz, xw, yy, yz, yw, zz, zw; - - xx = mQ[VX] * mQ[VX]; - xy = mQ[VX] * mQ[VY]; - xz = mQ[VX] * mQ[VZ]; - xw = mQ[VX] * mQ[VW]; - - yy = mQ[VY] * mQ[VY]; - yz = mQ[VY] * mQ[VZ]; - yw = mQ[VY] * mQ[VW]; - - zz = mQ[VZ] * mQ[VZ]; - zw = mQ[VZ] * mQ[VW]; - - mat.mMatrix[0][0] = 1.f - 2.f * ( yy + zz ); - mat.mMatrix[0][1] = 2.f * ( xy + zw ); - mat.mMatrix[0][2] = 2.f * ( xz - yw ); - - mat.mMatrix[1][0] = 2.f * ( xy - zw ); - mat.mMatrix[1][1] = 1.f - 2.f * ( xx + zz ); - mat.mMatrix[1][2] = 2.f * ( yz + xw ); - - mat.mMatrix[2][0] = 2.f * ( xz + yw ); - mat.mMatrix[2][1] = 2.f * ( yz - xw ); - mat.mMatrix[2][2] = 1.f - 2.f * ( xx + yy ); - - return mat; -} - -LLMatrix4 LLQuaternion::getMatrix4(void) const -{ - LLMatrix4 mat; - F32 xx, xy, xz, xw, yy, yz, yw, zz, zw; - - xx = mQ[VX] * mQ[VX]; - xy = mQ[VX] * mQ[VY]; - xz = mQ[VX] * mQ[VZ]; - xw = mQ[VX] * mQ[VW]; - - yy = mQ[VY] * mQ[VY]; - yz = mQ[VY] * mQ[VZ]; - yw = mQ[VY] * mQ[VW]; - - zz = mQ[VZ] * mQ[VZ]; - zw = mQ[VZ] * mQ[VW]; - - mat.mMatrix[0][0] = 1.f - 2.f * ( yy + zz ); - mat.mMatrix[0][1] = 2.f * ( xy + zw ); - mat.mMatrix[0][2] = 2.f * ( xz - yw ); - - mat.mMatrix[1][0] = 2.f * ( xy - zw ); - mat.mMatrix[1][1] = 1.f - 2.f * ( xx + zz ); - mat.mMatrix[1][2] = 2.f * ( yz + xw ); - - mat.mMatrix[2][0] = 2.f * ( xz + yw ); - mat.mMatrix[2][1] = 2.f * ( yz - xw ); - mat.mMatrix[2][2] = 1.f - 2.f * ( xx + yy ); - - // TODO -- should we set the translation portion to zero? - - return mat; -} - - - - -// Other useful methods - - -// calculate the shortest rotation from a to b -void LLQuaternion::shortestArc(const LLVector3 &a, const LLVector3 &b) -{ - // Make a local copy of both vectors. - LLVector3 vec_a = a; - LLVector3 vec_b = b; - - // Make sure neither vector is zero length. Also normalize - // the vectors while we are at it. - F32 vec_a_mag = vec_a.normalize(); - F32 vec_b_mag = vec_b.normalize(); - if (vec_a_mag < F_APPROXIMATELY_ZERO || - vec_b_mag < F_APPROXIMATELY_ZERO) - { - // Can't calculate a rotation from this. - // Just return ZERO_ROTATION instead. - loadIdentity(); - return; - } - - // Create an axis to rotate around, and the cos of the angle to rotate. - LLVector3 axis = vec_a % vec_b; - F32 cos_theta = vec_a * vec_b; - - // Check the angle between the vectors to see if they are parallel or anti-parallel. - if (cos_theta > 1.0 - F_APPROXIMATELY_ZERO) - { - // a and b are parallel. No rotation is necessary. - loadIdentity(); - } - else if (cos_theta < -1.0 + F_APPROXIMATELY_ZERO) - { - // a and b are anti-parallel. - // Rotate 180 degrees around some orthogonal axis. - // Find the projection of the x-axis onto a, and try - // using the vector between the projection and the x-axis - // as the orthogonal axis. - LLVector3 proj = vec_a.mV[VX] / (vec_a * vec_a) * vec_a; - LLVector3 ortho_axis(1.f, 0.f, 0.f); - ortho_axis -= proj; - - // Turn this into an orthonormal axis. - F32 ortho_length = ortho_axis.normalize(); - // If the axis' length is 0, then our guess at an orthogonal axis - // was wrong (a is parallel to the x-axis). - if (ortho_length < F_APPROXIMATELY_ZERO) - { - // Use the z-axis instead. - ortho_axis.setVec(0.f, 0.f, 1.f); - } - - // Construct a quaternion from this orthonormal axis. - mQ[VX] = ortho_axis.mV[VX]; - mQ[VY] = ortho_axis.mV[VY]; - mQ[VZ] = ortho_axis.mV[VZ]; - mQ[VW] = 0.f; - } - else - { - // a and b are NOT parallel or anti-parallel. - // Return the rotation between these vectors. - F32 theta = (F32)acos(cos_theta); - - setAngleAxis(theta, axis); - } -} - -// constrains rotation to a cone angle specified in radians -const LLQuaternion &LLQuaternion::constrain(F32 radians) -{ - const F32 cos_angle_lim = cosf( radians/2 ); // mQ[VW] limit - const F32 sin_angle_lim = sinf( radians/2 ); // rotation axis length limit - - if (mQ[VW] < 0.f) - { - mQ[VX] *= -1.f; - mQ[VY] *= -1.f; - mQ[VZ] *= -1.f; - mQ[VW] *= -1.f; - } - - // if rotation angle is greater than limit (cos is less than limit) - if( mQ[VW] < cos_angle_lim ) - { - mQ[VW] = cos_angle_lim; - F32 axis_len = sqrtf( mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] ); // sin(theta/2) - F32 axis_mult_fact = sin_angle_lim / axis_len; - mQ[VX] *= axis_mult_fact; - mQ[VY] *= axis_mult_fact; - mQ[VZ] *= axis_mult_fact; - } - - return *this; -} - -// Operators - -std::ostream& operator<<(std::ostream &s, const LLQuaternion &a) -{ - s << "{ " - << a.mQ[VX] << ", " << a.mQ[VY] << ", " << a.mQ[VZ] << ", " << a.mQ[VW] - << " }"; - return s; -} - - -// Does NOT renormalize the result -LLQuaternion operator*(const LLQuaternion &a, const LLQuaternion &b) -{ -// LLQuaternion::mMultCount++; - - LLQuaternion q( - b.mQ[3] * a.mQ[0] + b.mQ[0] * a.mQ[3] + b.mQ[1] * a.mQ[2] - b.mQ[2] * a.mQ[1], - b.mQ[3] * a.mQ[1] + b.mQ[1] * a.mQ[3] + b.mQ[2] * a.mQ[0] - b.mQ[0] * a.mQ[2], - b.mQ[3] * a.mQ[2] + b.mQ[2] * a.mQ[3] + b.mQ[0] * a.mQ[1] - b.mQ[1] * a.mQ[0], - b.mQ[3] * a.mQ[3] - b.mQ[0] * a.mQ[0] - b.mQ[1] * a.mQ[1] - b.mQ[2] * a.mQ[2] - ); - return q; -} - -/* -LLMatrix4 operator*(const LLMatrix4 &m, const LLQuaternion &q) -{ - LLMatrix4 qmat(q); - return (m*qmat); -} -*/ - - - -LLVector4 operator*(const LLVector4 &a, const LLQuaternion &rot) -{ - F32 rw = - rot.mQ[VX] * a.mV[VX] - rot.mQ[VY] * a.mV[VY] - rot.mQ[VZ] * a.mV[VZ]; - F32 rx = rot.mQ[VW] * a.mV[VX] + rot.mQ[VY] * a.mV[VZ] - rot.mQ[VZ] * a.mV[VY]; - F32 ry = rot.mQ[VW] * a.mV[VY] + rot.mQ[VZ] * a.mV[VX] - rot.mQ[VX] * a.mV[VZ]; - F32 rz = rot.mQ[VW] * a.mV[VZ] + rot.mQ[VX] * a.mV[VY] - rot.mQ[VY] * a.mV[VX]; - - F32 nx = - rw * rot.mQ[VX] + rx * rot.mQ[VW] - ry * rot.mQ[VZ] + rz * rot.mQ[VY]; - F32 ny = - rw * rot.mQ[VY] + ry * rot.mQ[VW] - rz * rot.mQ[VX] + rx * rot.mQ[VZ]; - F32 nz = - rw * rot.mQ[VZ] + rz * rot.mQ[VW] - rx * rot.mQ[VY] + ry * rot.mQ[VX]; - - return LLVector4(nx, ny, nz, a.mV[VW]); -} - -LLVector3 operator*(const LLVector3 &a, const LLQuaternion &rot) -{ - F32 rw = - rot.mQ[VX] * a.mV[VX] - rot.mQ[VY] * a.mV[VY] - rot.mQ[VZ] * a.mV[VZ]; - F32 rx = rot.mQ[VW] * a.mV[VX] + rot.mQ[VY] * a.mV[VZ] - rot.mQ[VZ] * a.mV[VY]; - F32 ry = rot.mQ[VW] * a.mV[VY] + rot.mQ[VZ] * a.mV[VX] - rot.mQ[VX] * a.mV[VZ]; - F32 rz = rot.mQ[VW] * a.mV[VZ] + rot.mQ[VX] * a.mV[VY] - rot.mQ[VY] * a.mV[VX]; - - F32 nx = - rw * rot.mQ[VX] + rx * rot.mQ[VW] - ry * rot.mQ[VZ] + rz * rot.mQ[VY]; - F32 ny = - rw * rot.mQ[VY] + ry * rot.mQ[VW] - rz * rot.mQ[VX] + rx * rot.mQ[VZ]; - F32 nz = - rw * rot.mQ[VZ] + rz * rot.mQ[VW] - rx * rot.mQ[VY] + ry * rot.mQ[VX]; - - return LLVector3(nx, ny, nz); -} - -LLVector3d operator*(const LLVector3d &a, const LLQuaternion &rot) -{ - F64 rw = - rot.mQ[VX] * a.mdV[VX] - rot.mQ[VY] * a.mdV[VY] - rot.mQ[VZ] * a.mdV[VZ]; - F64 rx = rot.mQ[VW] * a.mdV[VX] + rot.mQ[VY] * a.mdV[VZ] - rot.mQ[VZ] * a.mdV[VY]; - F64 ry = rot.mQ[VW] * a.mdV[VY] + rot.mQ[VZ] * a.mdV[VX] - rot.mQ[VX] * a.mdV[VZ]; - F64 rz = rot.mQ[VW] * a.mdV[VZ] + rot.mQ[VX] * a.mdV[VY] - rot.mQ[VY] * a.mdV[VX]; - - F64 nx = - rw * rot.mQ[VX] + rx * rot.mQ[VW] - ry * rot.mQ[VZ] + rz * rot.mQ[VY]; - F64 ny = - rw * rot.mQ[VY] + ry * rot.mQ[VW] - rz * rot.mQ[VX] + rx * rot.mQ[VZ]; - F64 nz = - rw * rot.mQ[VZ] + rz * rot.mQ[VW] - rx * rot.mQ[VY] + ry * rot.mQ[VX]; - - return LLVector3d(nx, ny, nz); -} - -F32 dot(const LLQuaternion &a, const LLQuaternion &b) -{ - return a.mQ[VX] * b.mQ[VX] + - a.mQ[VY] * b.mQ[VY] + - a.mQ[VZ] * b.mQ[VZ] + - a.mQ[VW] * b.mQ[VW]; -} - -// DEMO HACK: This lerp is probably inocrrect now due intermediate normalization -// it should look more like the lerp below -#if 0 -// linear interpolation -LLQuaternion lerp(F32 t, const LLQuaternion &p, const LLQuaternion &q) -{ - LLQuaternion r; - r = t * (q - p) + p; - r.normalize(); - return r; -} -#endif - -// lerp from identity to q -LLQuaternion lerp(F32 t, const LLQuaternion &q) -{ - LLQuaternion r; - r.mQ[VX] = t * q.mQ[VX]; - r.mQ[VY] = t * q.mQ[VY]; - r.mQ[VZ] = t * q.mQ[VZ]; - r.mQ[VW] = t * (q.mQ[VZ] - 1.f) + 1.f; - r.normalize(); - return r; -} - -LLQuaternion lerp(F32 t, const LLQuaternion &p, const LLQuaternion &q) -{ - LLQuaternion r; - F32 inv_t; - - inv_t = 1.f - t; - - r.mQ[VX] = t * q.mQ[VX] + (inv_t * p.mQ[VX]); - r.mQ[VY] = t * q.mQ[VY] + (inv_t * p.mQ[VY]); - r.mQ[VZ] = t * q.mQ[VZ] + (inv_t * p.mQ[VZ]); - r.mQ[VW] = t * q.mQ[VW] + (inv_t * p.mQ[VW]); - r.normalize(); - return r; -} - - -// spherical linear interpolation -LLQuaternion slerp( F32 u, const LLQuaternion &a, const LLQuaternion &b ) -{ - // cosine theta = dot product of a and b - F32 cos_t = a.mQ[0]*b.mQ[0] + a.mQ[1]*b.mQ[1] + a.mQ[2]*b.mQ[2] + a.mQ[3]*b.mQ[3]; - - // if b is on opposite hemisphere from a, use -a instead - int bflip; - if (cos_t < 0.0f) - { - cos_t = -cos_t; - bflip = TRUE; - } - else - bflip = FALSE; - - // if B is (within precision limits) the same as A, - // just linear interpolate between A and B. - F32 alpha; // interpolant - F32 beta; // 1 - interpolant - if (1.0f - cos_t < 0.00001f) - { - beta = 1.0f - u; - alpha = u; - } - else - { - F32 theta = acosf(cos_t); - F32 sin_t = sinf(theta); - beta = sinf(theta - u*theta) / sin_t; - alpha = sinf(u*theta) / sin_t; - } - - if (bflip) - beta = -beta; - - // interpolate - LLQuaternion ret; - ret.mQ[0] = beta*a.mQ[0] + alpha*b.mQ[0]; - ret.mQ[1] = beta*a.mQ[1] + alpha*b.mQ[1]; - ret.mQ[2] = beta*a.mQ[2] + alpha*b.mQ[2]; - ret.mQ[3] = beta*a.mQ[3] + alpha*b.mQ[3]; - - return ret; -} - -// lerp whenever possible -LLQuaternion nlerp(F32 t, const LLQuaternion &a, const LLQuaternion &b) -{ - if (dot(a, b) < 0.f) - { - return slerp(t, a, b); - } - else - { - return lerp(t, a, b); - } -} - -LLQuaternion nlerp(F32 t, const LLQuaternion &q) -{ - if (q.mQ[VW] < 0.f) - { - return slerp(t, q); - } - else - { - return lerp(t, q); - } -} - -// slerp from identity quaternion to another quaternion -LLQuaternion slerp(F32 t, const LLQuaternion &q) -{ - F32 c = q.mQ[VW]; - if (1.0f == t || 1.0f == c) - { - // the trivial cases - return q; - } - - LLQuaternion r; - F32 s, angle, stq, stp; - - s = (F32) sqrt(1.f - c*c); - - if (c < 0.0f) - { - // when c < 0.0 then theta > PI/2 - // since quat and -quat are the same rotation we invert one of - // p or q to reduce unecessary spins - // A equivalent way to do it is to convert acos(c) as if it had - // been negative, and to negate stp - angle = (F32) acos(-c); - stp = -(F32) sin(angle * (1.f - t)); - stq = (F32) sin(angle * t); - } - else - { - angle = (F32) acos(c); - stp = (F32) sin(angle * (1.f - t)); - stq = (F32) sin(angle * t); - } - - r.mQ[VX] = (q.mQ[VX] * stq) / s; - r.mQ[VY] = (q.mQ[VY] * stq) / s; - r.mQ[VZ] = (q.mQ[VZ] * stq) / s; - r.mQ[VW] = (stp + q.mQ[VW] * stq) / s; - - return r; -} - -LLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order) -{ - LLQuaternion xQ( xRot*DEG_TO_RAD, LLVector3(1.0f, 0.0f, 0.0f) ); - LLQuaternion yQ( yRot*DEG_TO_RAD, LLVector3(0.0f, 1.0f, 0.0f) ); - LLQuaternion zQ( zRot*DEG_TO_RAD, LLVector3(0.0f, 0.0f, 1.0f) ); - LLQuaternion ret; - switch( order ) - { - case LLQuaternion::XYZ: - ret = xQ * yQ * zQ; - break; - case LLQuaternion::YZX: - ret = yQ * zQ * xQ; - break; - case LLQuaternion::ZXY: - ret = zQ * xQ * yQ; - break; - case LLQuaternion::XZY: - ret = xQ * zQ * yQ; - break; - case LLQuaternion::YXZ: - ret = yQ * xQ * zQ; - break; - case LLQuaternion::ZYX: - ret = zQ * yQ * xQ; - break; - } - return ret; -} - -const char *OrderToString( const LLQuaternion::Order order ) -{ - const char *p = NULL; - switch( order ) - { - default: - case LLQuaternion::XYZ: - p = "XYZ"; - break; - case LLQuaternion::YZX: - p = "YZX"; - break; - case LLQuaternion::ZXY: - p = "ZXY"; - break; - case LLQuaternion::XZY: - p = "XZY"; - break; - case LLQuaternion::YXZ: - p = "YXZ"; - break; - case LLQuaternion::ZYX: - p = "ZYX"; - break; - } - return p; -} - -LLQuaternion::Order StringToOrder( const char *str ) -{ - if (strncmp(str, "XYZ", 3)==0 || strncmp(str, "xyz", 3)==0) - return LLQuaternion::XYZ; - - if (strncmp(str, "YZX", 3)==0 || strncmp(str, "yzx", 3)==0) - return LLQuaternion::YZX; - - if (strncmp(str, "ZXY", 3)==0 || strncmp(str, "zxy", 3)==0) - return LLQuaternion::ZXY; - - if (strncmp(str, "XZY", 3)==0 || strncmp(str, "xzy", 3)==0) - return LLQuaternion::XZY; - - if (strncmp(str, "YXZ", 3)==0 || strncmp(str, "yxz", 3)==0) - return LLQuaternion::YXZ; - - if (strncmp(str, "ZYX", 3)==0 || strncmp(str, "zyx", 3)==0) - return LLQuaternion::ZYX; - - return LLQuaternion::XYZ; -} - -void LLQuaternion::getAngleAxis(F32* angle, LLVector3 &vec) const -{ - F32 cos_a = mQ[VW]; - if (cos_a > 1.0f) cos_a = 1.0f; - if (cos_a < -1.0f) cos_a = -1.0f; - - F32 sin_a = (F32) sqrt( 1.0f - cos_a * cos_a ); - - if ( fabs( sin_a ) < 0.0005f ) - sin_a = 1.0f; - else - sin_a = 1.f/sin_a; - - F32 temp_angle = 2.0f * (F32) acos( cos_a ); - if (temp_angle > F_PI) - { - // The (angle,axis) pair should never have angles outside [PI, -PI] - // since we want the _shortest_ (angle,axis) solution. - // Since acos is defined for [0, PI], and we multiply by 2.0, we - // can push the angle outside the acceptible range. - // When this happens we set the angle to the other portion of a - // full 2PI rotation, and negate the axis, which reverses the - // direction of the rotation (by the right-hand rule). - *angle = 2.f * F_PI - temp_angle; - vec.mV[VX] = - mQ[VX] * sin_a; - vec.mV[VY] = - mQ[VY] * sin_a; - vec.mV[VZ] = - mQ[VZ] * sin_a; - } - else - { - *angle = temp_angle; - vec.mV[VX] = mQ[VX] * sin_a; - vec.mV[VY] = mQ[VY] * sin_a; - vec.mV[VZ] = mQ[VZ] * sin_a; - } -} - - -// quaternion does not need to be normalized -void LLQuaternion::getEulerAngles(F32 *roll, F32 *pitch, F32 *yaw) const -{ - LLMatrix3 rot_mat(*this); - rot_mat.orthogonalize(); - rot_mat.getEulerAngles(roll, pitch, yaw); - -// // NOTE: LLQuaternion's are actually inverted with respect to -// // the matrices, so this code also assumes inverted quaternions -// // (-x, -y, -z, w). The result is that roll,pitch,yaw are applied -// // in reverse order (yaw,pitch,roll). -// F32 x = -mQ[VX], y = -mQ[VY], z = -mQ[VZ], w = mQ[VW]; -// F64 m20 = 2.0*(x*z-y*w); -// if (1.0f - fabsf(m20) < F_APPROXIMATELY_ZERO) -// { -// *roll = 0.0f; -// *pitch = (F32)asin(m20); -// *yaw = (F32)atan2(2.0*(x*y-z*w), 1.0 - 2.0*(x*x+z*z)); -// } -// else -// { -// *roll = (F32)atan2(-2.0*(y*z+x*w), 1.0-2.0*(x*x+y*y)); -// *pitch = (F32)asin(m20); -// *yaw = (F32)atan2(-2.0*(x*y+z*w), 1.0-2.0*(y*y+z*z)); -// } -} - -// Saves space by using the fact that our quaternions are normalized -LLVector3 LLQuaternion::packToVector3() const -{ - if( mQ[VW] >= 0 ) - { - return LLVector3( mQ[VX], mQ[VY], mQ[VZ] ); - } - else - { - return LLVector3( -mQ[VX], -mQ[VY], -mQ[VZ] ); - } -} - -// Saves space by using the fact that our quaternions are normalized -void LLQuaternion::unpackFromVector3( const LLVector3& vec ) -{ - mQ[VX] = vec.mV[VX]; - mQ[VY] = vec.mV[VY]; - mQ[VZ] = vec.mV[VZ]; - F32 t = 1.f - vec.magVecSquared(); - if( t > 0 ) - { - mQ[VW] = sqrt( t ); - } - else - { - // Need this to avoid trying to find the square root of a negative number due - // to floating point error. - mQ[VW] = 0; - } -} - -BOOL LLQuaternion::parseQuat(const std::string& buf, LLQuaternion* value) -{ - if( buf.empty() || value == NULL) - { - return FALSE; - } - - LLQuaternion quat; - S32 count = sscanf( buf.c_str(), "%f %f %f %f", quat.mQ + 0, quat.mQ + 1, quat.mQ + 2, quat.mQ + 3 ); - if( 4 == count ) - { - value->set( quat ); - return TRUE; - } - - return FALSE; -} - - -// End +/** + * @file llquaternion.cpp + * @brief LLQuaternion class implementation. + * + * $LicenseInfo:firstyear=2000&license=viewergpl$ + * + * Copyright (c) 2000-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "linden_common.h" + +#include "llmath.h" // for F_PI + +#include "llquaternion.h" + +//#include "vmath.h" +#include "v3math.h" +#include "v3dmath.h" +#include "v4math.h" +#include "m4math.h" +#include "m3math.h" +#include "llquantize.h" + +// WARNING: Don't use this for global const definitions! using this +// at the top of a *.cpp file might not give you what you think. +const LLQuaternion LLQuaternion::DEFAULT; + +// Constructors + +LLQuaternion::LLQuaternion(const LLMatrix4 &mat) +{ + *this = mat.quaternion(); + normalize(); +} + +LLQuaternion::LLQuaternion(const LLMatrix3 &mat) +{ + *this = mat.quaternion(); + normalize(); +} + +LLQuaternion::LLQuaternion(F32 angle, const LLVector4 &vec) +{ + LLVector3 v(vec.mV[VX], vec.mV[VY], vec.mV[VZ]); + v.normalize(); + + F32 c, s; + c = cosf(angle*0.5f); + s = sinf(angle*0.5f); + + mQ[VX] = v.mV[VX] * s; + mQ[VY] = v.mV[VY] * s; + mQ[VZ] = v.mV[VZ] * s; + mQ[VW] = c; + normalize(); +} + +LLQuaternion::LLQuaternion(F32 angle, const LLVector3 &vec) +{ + LLVector3 v(vec); + v.normalize(); + + F32 c, s; + c = cosf(angle*0.5f); + s = sinf(angle*0.5f); + + mQ[VX] = v.mV[VX] * s; + mQ[VY] = v.mV[VY] * s; + mQ[VZ] = v.mV[VZ] * s; + mQ[VW] = c; + normalize(); +} + +LLQuaternion::LLQuaternion(const LLVector3 &x_axis, + const LLVector3 &y_axis, + const LLVector3 &z_axis) +{ + LLMatrix3 mat; + mat.setRows(x_axis, y_axis, z_axis); + *this = mat.quaternion(); + normalize(); +} + +// Quatizations +void LLQuaternion::quantize16(F32 lower, F32 upper) +{ + F32 x = mQ[VX]; + F32 y = mQ[VY]; + F32 z = mQ[VZ]; + F32 s = mQ[VS]; + + x = U16_to_F32(F32_to_U16_ROUND(x, lower, upper), lower, upper); + y = U16_to_F32(F32_to_U16_ROUND(y, lower, upper), lower, upper); + z = U16_to_F32(F32_to_U16_ROUND(z, lower, upper), lower, upper); + s = U16_to_F32(F32_to_U16_ROUND(s, lower, upper), lower, upper); + + mQ[VX] = x; + mQ[VY] = y; + mQ[VZ] = z; + mQ[VS] = s; + + normalize(); +} + +void LLQuaternion::quantize8(F32 lower, F32 upper) +{ + mQ[VX] = U8_to_F32(F32_to_U8_ROUND(mQ[VX], lower, upper), lower, upper); + mQ[VY] = U8_to_F32(F32_to_U8_ROUND(mQ[VY], lower, upper), lower, upper); + mQ[VZ] = U8_to_F32(F32_to_U8_ROUND(mQ[VZ], lower, upper), lower, upper); + mQ[VS] = U8_to_F32(F32_to_U8_ROUND(mQ[VS], lower, upper), lower, upper); + + normalize(); +} + +// LLVector3 Magnitude and Normalization Functions + + +// Set LLQuaternion routines + +const LLQuaternion& LLQuaternion::setAngleAxis(F32 angle, F32 x, F32 y, F32 z) +{ + LLVector3 vec(x, y, z); + vec.normalize(); + + angle *= 0.5f; + F32 c, s; + c = cosf(angle); + s = sinf(angle); + + mQ[VX] = vec.mV[VX]*s; + mQ[VY] = vec.mV[VY]*s; + mQ[VZ] = vec.mV[VZ]*s; + mQ[VW] = c; + + normalize(); + return (*this); +} + +const LLQuaternion& LLQuaternion::setAngleAxis(F32 angle, const LLVector3 &vec) +{ + LLVector3 v(vec); + v.normalize(); + + angle *= 0.5f; + F32 c, s; + c = cosf(angle); + s = sinf(angle); + + mQ[VX] = v.mV[VX]*s; + mQ[VY] = v.mV[VY]*s; + mQ[VZ] = v.mV[VZ]*s; + mQ[VW] = c; + + normalize(); + return (*this); +} + +const LLQuaternion& LLQuaternion::setAngleAxis(F32 angle, const LLVector4 &vec) +{ + LLVector3 v(vec.mV[VX], vec.mV[VY], vec.mV[VZ]); + v.normalize(); + + F32 c, s; + c = cosf(angle*0.5f); + s = sinf(angle*0.5f); + + mQ[VX] = v.mV[VX]*s; + mQ[VY] = v.mV[VY]*s; + mQ[VZ] = v.mV[VZ]*s; + mQ[VW] = c; + + normalize(); + return (*this); +} + +const LLQuaternion& LLQuaternion::setEulerAngles(F32 roll, F32 pitch, F32 yaw) +{ + LLMatrix3 rot_mat(roll, pitch, yaw); + rot_mat.orthogonalize(); + *this = rot_mat.quaternion(); + + normalize(); + return (*this); +} + +// deprecated +const LLQuaternion& LLQuaternion::set(const LLMatrix3 &mat) +{ + *this = mat.quaternion(); + normalize(); + return (*this); +} + +// deprecated +const LLQuaternion& LLQuaternion::set(const LLMatrix4 &mat) +{ + *this = mat.quaternion(); + normalize(); + return (*this); +} + +// deprecated +const LLQuaternion& LLQuaternion::setQuat(F32 angle, F32 x, F32 y, F32 z) +{ + LLVector3 vec(x, y, z); + vec.normalize(); + + angle *= 0.5f; + F32 c, s; + c = cosf(angle); + s = sinf(angle); + + mQ[VX] = vec.mV[VX]*s; + mQ[VY] = vec.mV[VY]*s; + mQ[VZ] = vec.mV[VZ]*s; + mQ[VW] = c; + + normalize(); + return (*this); +} + +// deprecated +const LLQuaternion& LLQuaternion::setQuat(F32 angle, const LLVector3 &vec) +{ + LLVector3 v(vec); + v.normalize(); + + angle *= 0.5f; + F32 c, s; + c = cosf(angle); + s = sinf(angle); + + mQ[VX] = v.mV[VX]*s; + mQ[VY] = v.mV[VY]*s; + mQ[VZ] = v.mV[VZ]*s; + mQ[VW] = c; + + normalize(); + return (*this); +} + +const LLQuaternion& LLQuaternion::setQuat(F32 angle, const LLVector4 &vec) +{ + LLVector3 v(vec.mV[VX], vec.mV[VY], vec.mV[VZ]); + v.normalize(); + + F32 c, s; + c = cosf(angle*0.5f); + s = sinf(angle*0.5f); + + mQ[VX] = v.mV[VX]*s; + mQ[VY] = v.mV[VY]*s; + mQ[VZ] = v.mV[VZ]*s; + mQ[VW] = c; + + normalize(); + return (*this); +} + +const LLQuaternion& LLQuaternion::setQuat(F32 roll, F32 pitch, F32 yaw) +{ + LLMatrix3 rot_mat(roll, pitch, yaw); + rot_mat.orthogonalize(); + *this = rot_mat.quaternion(); + + normalize(); + return (*this); +} + +const LLQuaternion& LLQuaternion::setQuat(const LLMatrix3 &mat) +{ + *this = mat.quaternion(); + normalize(); + return (*this); +} + +const LLQuaternion& LLQuaternion::setQuat(const LLMatrix4 &mat) +{ + *this = mat.quaternion(); + normalize(); + return (*this); +//#if 1 +// // NOTE: LLQuaternion's are actually inverted with respect to +// // the matrices, so this code also assumes inverted quaternions +// // (-x, -y, -z, w). The result is that roll,pitch,yaw are applied +// // in reverse order (yaw,pitch,roll). +// F64 cosX = cos(roll); +// F64 cosY = cos(pitch); +// F64 cosZ = cos(yaw); +// +// F64 sinX = sin(roll); +// F64 sinY = sin(pitch); +// F64 sinZ = sin(yaw); +// +// mQ[VW] = (F32)sqrt(cosY*cosZ - sinX*sinY*sinZ + cosX*cosZ + cosX*cosY + 1.0)*.5; +// if (fabs(mQ[VW]) < F_APPROXIMATELY_ZERO) +// { +// // null rotation, any axis will do +// mQ[VX] = 0.0f; +// mQ[VY] = 1.0f; +// mQ[VZ] = 0.0f; +// } +// else +// { +// F32 inv_s = 1.0f / (4.0f * mQ[VW]); +// mQ[VX] = (F32)-(-sinX*cosY - cosX*sinY*sinZ - sinX*cosZ) * inv_s; +// mQ[VY] = (F32)-(-cosX*sinY*cosZ + sinX*sinZ - sinY) * inv_s; +// mQ[VZ] = (F32)-(-cosY*sinZ - sinX*sinY*cosZ - cosX*sinZ) * inv_s; +// } +// +//#else // This only works on a certain subset of roll/pitch/yaw +// +// F64 cosX = cosf(roll/2.0); +// F64 cosY = cosf(pitch/2.0); +// F64 cosZ = cosf(yaw/2.0); +// +// F64 sinX = sinf(roll/2.0); +// F64 sinY = sinf(pitch/2.0); +// F64 sinZ = sinf(yaw/2.0); +// +// mQ[VW] = (F32)(cosX*cosY*cosZ + sinX*sinY*sinZ); +// mQ[VX] = (F32)(sinX*cosY*cosZ - cosX*sinY*sinZ); +// mQ[VY] = (F32)(cosX*sinY*cosZ + sinX*cosY*sinZ); +// mQ[VZ] = (F32)(cosX*cosY*sinZ - sinX*sinY*cosZ); +//#endif +// +// normalize(); +// return (*this); +} + +// SJB: This code is correct for a logicly stored (non-transposed) matrix; +// Our matrices are stored transposed, OpenGL style, so this generates the +// INVERSE matrix, or the CORRECT matrix form an INVERSE quaternion. +// Because we use similar logic in LLMatrix3::quaternion(), +// we are internally consistant so everything works OK :) +LLMatrix3 LLQuaternion::getMatrix3(void) const +{ + LLMatrix3 mat; + F32 xx, xy, xz, xw, yy, yz, yw, zz, zw; + + xx = mQ[VX] * mQ[VX]; + xy = mQ[VX] * mQ[VY]; + xz = mQ[VX] * mQ[VZ]; + xw = mQ[VX] * mQ[VW]; + + yy = mQ[VY] * mQ[VY]; + yz = mQ[VY] * mQ[VZ]; + yw = mQ[VY] * mQ[VW]; + + zz = mQ[VZ] * mQ[VZ]; + zw = mQ[VZ] * mQ[VW]; + + mat.mMatrix[0][0] = 1.f - 2.f * ( yy + zz ); + mat.mMatrix[0][1] = 2.f * ( xy + zw ); + mat.mMatrix[0][2] = 2.f * ( xz - yw ); + + mat.mMatrix[1][0] = 2.f * ( xy - zw ); + mat.mMatrix[1][1] = 1.f - 2.f * ( xx + zz ); + mat.mMatrix[1][2] = 2.f * ( yz + xw ); + + mat.mMatrix[2][0] = 2.f * ( xz + yw ); + mat.mMatrix[2][1] = 2.f * ( yz - xw ); + mat.mMatrix[2][2] = 1.f - 2.f * ( xx + yy ); + + return mat; +} + +LLMatrix4 LLQuaternion::getMatrix4(void) const +{ + LLMatrix4 mat; + F32 xx, xy, xz, xw, yy, yz, yw, zz, zw; + + xx = mQ[VX] * mQ[VX]; + xy = mQ[VX] * mQ[VY]; + xz = mQ[VX] * mQ[VZ]; + xw = mQ[VX] * mQ[VW]; + + yy = mQ[VY] * mQ[VY]; + yz = mQ[VY] * mQ[VZ]; + yw = mQ[VY] * mQ[VW]; + + zz = mQ[VZ] * mQ[VZ]; + zw = mQ[VZ] * mQ[VW]; + + mat.mMatrix[0][0] = 1.f - 2.f * ( yy + zz ); + mat.mMatrix[0][1] = 2.f * ( xy + zw ); + mat.mMatrix[0][2] = 2.f * ( xz - yw ); + + mat.mMatrix[1][0] = 2.f * ( xy - zw ); + mat.mMatrix[1][1] = 1.f - 2.f * ( xx + zz ); + mat.mMatrix[1][2] = 2.f * ( yz + xw ); + + mat.mMatrix[2][0] = 2.f * ( xz + yw ); + mat.mMatrix[2][1] = 2.f * ( yz - xw ); + mat.mMatrix[2][2] = 1.f - 2.f * ( xx + yy ); + + // TODO -- should we set the translation portion to zero? + + return mat; +} + + + + +// Other useful methods + + +// calculate the shortest rotation from a to b +void LLQuaternion::shortestArc(const LLVector3 &a, const LLVector3 &b) +{ + // Make a local copy of both vectors. + LLVector3 vec_a = a; + LLVector3 vec_b = b; + + // Make sure neither vector is zero length. Also normalize + // the vectors while we are at it. + F32 vec_a_mag = vec_a.normalize(); + F32 vec_b_mag = vec_b.normalize(); + if (vec_a_mag < F_APPROXIMATELY_ZERO || + vec_b_mag < F_APPROXIMATELY_ZERO) + { + // Can't calculate a rotation from this. + // Just return ZERO_ROTATION instead. + loadIdentity(); + return; + } + + // Create an axis to rotate around, and the cos of the angle to rotate. + LLVector3 axis = vec_a % vec_b; + F32 cos_theta = vec_a * vec_b; + + // Check the angle between the vectors to see if they are parallel or anti-parallel. + if (cos_theta > 1.0 - F_APPROXIMATELY_ZERO) + { + // a and b are parallel. No rotation is necessary. + loadIdentity(); + } + else if (cos_theta < -1.0 + F_APPROXIMATELY_ZERO) + { + // a and b are anti-parallel. + // Rotate 180 degrees around some orthogonal axis. + // Find the projection of the x-axis onto a, and try + // using the vector between the projection and the x-axis + // as the orthogonal axis. + LLVector3 proj = vec_a.mV[VX] / (vec_a * vec_a) * vec_a; + LLVector3 ortho_axis(1.f, 0.f, 0.f); + ortho_axis -= proj; + + // Turn this into an orthonormal axis. + F32 ortho_length = ortho_axis.normalize(); + // If the axis' length is 0, then our guess at an orthogonal axis + // was wrong (a is parallel to the x-axis). + if (ortho_length < F_APPROXIMATELY_ZERO) + { + // Use the z-axis instead. + ortho_axis.setVec(0.f, 0.f, 1.f); + } + + // Construct a quaternion from this orthonormal axis. + mQ[VX] = ortho_axis.mV[VX]; + mQ[VY] = ortho_axis.mV[VY]; + mQ[VZ] = ortho_axis.mV[VZ]; + mQ[VW] = 0.f; + } + else + { + // a and b are NOT parallel or anti-parallel. + // Return the rotation between these vectors. + F32 theta = (F32)acos(cos_theta); + + setAngleAxis(theta, axis); + } +} + +// constrains rotation to a cone angle specified in radians +const LLQuaternion &LLQuaternion::constrain(F32 radians) +{ + const F32 cos_angle_lim = cosf( radians/2 ); // mQ[VW] limit + const F32 sin_angle_lim = sinf( radians/2 ); // rotation axis length limit + + if (mQ[VW] < 0.f) + { + mQ[VX] *= -1.f; + mQ[VY] *= -1.f; + mQ[VZ] *= -1.f; + mQ[VW] *= -1.f; + } + + // if rotation angle is greater than limit (cos is less than limit) + if( mQ[VW] < cos_angle_lim ) + { + mQ[VW] = cos_angle_lim; + F32 axis_len = sqrtf( mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] ); // sin(theta/2) + F32 axis_mult_fact = sin_angle_lim / axis_len; + mQ[VX] *= axis_mult_fact; + mQ[VY] *= axis_mult_fact; + mQ[VZ] *= axis_mult_fact; + } + + return *this; +} + +// Operators + +std::ostream& operator<<(std::ostream &s, const LLQuaternion &a) +{ + s << "{ " + << a.mQ[VX] << ", " << a.mQ[VY] << ", " << a.mQ[VZ] << ", " << a.mQ[VW] + << " }"; + return s; +} + + +// Does NOT renormalize the result +LLQuaternion operator*(const LLQuaternion &a, const LLQuaternion &b) +{ +// LLQuaternion::mMultCount++; + + LLQuaternion q( + b.mQ[3] * a.mQ[0] + b.mQ[0] * a.mQ[3] + b.mQ[1] * a.mQ[2] - b.mQ[2] * a.mQ[1], + b.mQ[3] * a.mQ[1] + b.mQ[1] * a.mQ[3] + b.mQ[2] * a.mQ[0] - b.mQ[0] * a.mQ[2], + b.mQ[3] * a.mQ[2] + b.mQ[2] * a.mQ[3] + b.mQ[0] * a.mQ[1] - b.mQ[1] * a.mQ[0], + b.mQ[3] * a.mQ[3] - b.mQ[0] * a.mQ[0] - b.mQ[1] * a.mQ[1] - b.mQ[2] * a.mQ[2] + ); + return q; +} + +/* +LLMatrix4 operator*(const LLMatrix4 &m, const LLQuaternion &q) +{ + LLMatrix4 qmat(q); + return (m*qmat); +} +*/ + + + +LLVector4 operator*(const LLVector4 &a, const LLQuaternion &rot) +{ + F32 rw = - rot.mQ[VX] * a.mV[VX] - rot.mQ[VY] * a.mV[VY] - rot.mQ[VZ] * a.mV[VZ]; + F32 rx = rot.mQ[VW] * a.mV[VX] + rot.mQ[VY] * a.mV[VZ] - rot.mQ[VZ] * a.mV[VY]; + F32 ry = rot.mQ[VW] * a.mV[VY] + rot.mQ[VZ] * a.mV[VX] - rot.mQ[VX] * a.mV[VZ]; + F32 rz = rot.mQ[VW] * a.mV[VZ] + rot.mQ[VX] * a.mV[VY] - rot.mQ[VY] * a.mV[VX]; + + F32 nx = - rw * rot.mQ[VX] + rx * rot.mQ[VW] - ry * rot.mQ[VZ] + rz * rot.mQ[VY]; + F32 ny = - rw * rot.mQ[VY] + ry * rot.mQ[VW] - rz * rot.mQ[VX] + rx * rot.mQ[VZ]; + F32 nz = - rw * rot.mQ[VZ] + rz * rot.mQ[VW] - rx * rot.mQ[VY] + ry * rot.mQ[VX]; + + return LLVector4(nx, ny, nz, a.mV[VW]); +} + +LLVector3 operator*(const LLVector3 &a, const LLQuaternion &rot) +{ + F32 rw = - rot.mQ[VX] * a.mV[VX] - rot.mQ[VY] * a.mV[VY] - rot.mQ[VZ] * a.mV[VZ]; + F32 rx = rot.mQ[VW] * a.mV[VX] + rot.mQ[VY] * a.mV[VZ] - rot.mQ[VZ] * a.mV[VY]; + F32 ry = rot.mQ[VW] * a.mV[VY] + rot.mQ[VZ] * a.mV[VX] - rot.mQ[VX] * a.mV[VZ]; + F32 rz = rot.mQ[VW] * a.mV[VZ] + rot.mQ[VX] * a.mV[VY] - rot.mQ[VY] * a.mV[VX]; + + F32 nx = - rw * rot.mQ[VX] + rx * rot.mQ[VW] - ry * rot.mQ[VZ] + rz * rot.mQ[VY]; + F32 ny = - rw * rot.mQ[VY] + ry * rot.mQ[VW] - rz * rot.mQ[VX] + rx * rot.mQ[VZ]; + F32 nz = - rw * rot.mQ[VZ] + rz * rot.mQ[VW] - rx * rot.mQ[VY] + ry * rot.mQ[VX]; + + return LLVector3(nx, ny, nz); +} + +LLVector3d operator*(const LLVector3d &a, const LLQuaternion &rot) +{ + F64 rw = - rot.mQ[VX] * a.mdV[VX] - rot.mQ[VY] * a.mdV[VY] - rot.mQ[VZ] * a.mdV[VZ]; + F64 rx = rot.mQ[VW] * a.mdV[VX] + rot.mQ[VY] * a.mdV[VZ] - rot.mQ[VZ] * a.mdV[VY]; + F64 ry = rot.mQ[VW] * a.mdV[VY] + rot.mQ[VZ] * a.mdV[VX] - rot.mQ[VX] * a.mdV[VZ]; + F64 rz = rot.mQ[VW] * a.mdV[VZ] + rot.mQ[VX] * a.mdV[VY] - rot.mQ[VY] * a.mdV[VX]; + + F64 nx = - rw * rot.mQ[VX] + rx * rot.mQ[VW] - ry * rot.mQ[VZ] + rz * rot.mQ[VY]; + F64 ny = - rw * rot.mQ[VY] + ry * rot.mQ[VW] - rz * rot.mQ[VX] + rx * rot.mQ[VZ]; + F64 nz = - rw * rot.mQ[VZ] + rz * rot.mQ[VW] - rx * rot.mQ[VY] + ry * rot.mQ[VX]; + + return LLVector3d(nx, ny, nz); +} + +F32 dot(const LLQuaternion &a, const LLQuaternion &b) +{ + return a.mQ[VX] * b.mQ[VX] + + a.mQ[VY] * b.mQ[VY] + + a.mQ[VZ] * b.mQ[VZ] + + a.mQ[VW] * b.mQ[VW]; +} + +// DEMO HACK: This lerp is probably inocrrect now due intermediate normalization +// it should look more like the lerp below +#if 0 +// linear interpolation +LLQuaternion lerp(F32 t, const LLQuaternion &p, const LLQuaternion &q) +{ + LLQuaternion r; + r = t * (q - p) + p; + r.normalize(); + return r; +} +#endif + +// lerp from identity to q +LLQuaternion lerp(F32 t, const LLQuaternion &q) +{ + LLQuaternion r; + r.mQ[VX] = t * q.mQ[VX]; + r.mQ[VY] = t * q.mQ[VY]; + r.mQ[VZ] = t * q.mQ[VZ]; + r.mQ[VW] = t * (q.mQ[VZ] - 1.f) + 1.f; + r.normalize(); + return r; +} + +LLQuaternion lerp(F32 t, const LLQuaternion &p, const LLQuaternion &q) +{ + LLQuaternion r; + F32 inv_t; + + inv_t = 1.f - t; + + r.mQ[VX] = t * q.mQ[VX] + (inv_t * p.mQ[VX]); + r.mQ[VY] = t * q.mQ[VY] + (inv_t * p.mQ[VY]); + r.mQ[VZ] = t * q.mQ[VZ] + (inv_t * p.mQ[VZ]); + r.mQ[VW] = t * q.mQ[VW] + (inv_t * p.mQ[VW]); + r.normalize(); + return r; +} + + +// spherical linear interpolation +LLQuaternion slerp( F32 u, const LLQuaternion &a, const LLQuaternion &b ) +{ + // cosine theta = dot product of a and b + F32 cos_t = a.mQ[0]*b.mQ[0] + a.mQ[1]*b.mQ[1] + a.mQ[2]*b.mQ[2] + a.mQ[3]*b.mQ[3]; + + // if b is on opposite hemisphere from a, use -a instead + int bflip; + if (cos_t < 0.0f) + { + cos_t = -cos_t; + bflip = TRUE; + } + else + bflip = FALSE; + + // if B is (within precision limits) the same as A, + // just linear interpolate between A and B. + F32 alpha; // interpolant + F32 beta; // 1 - interpolant + if (1.0f - cos_t < 0.00001f) + { + beta = 1.0f - u; + alpha = u; + } + else + { + F32 theta = acosf(cos_t); + F32 sin_t = sinf(theta); + beta = sinf(theta - u*theta) / sin_t; + alpha = sinf(u*theta) / sin_t; + } + + if (bflip) + beta = -beta; + + // interpolate + LLQuaternion ret; + ret.mQ[0] = beta*a.mQ[0] + alpha*b.mQ[0]; + ret.mQ[1] = beta*a.mQ[1] + alpha*b.mQ[1]; + ret.mQ[2] = beta*a.mQ[2] + alpha*b.mQ[2]; + ret.mQ[3] = beta*a.mQ[3] + alpha*b.mQ[3]; + + return ret; +} + +// lerp whenever possible +LLQuaternion nlerp(F32 t, const LLQuaternion &a, const LLQuaternion &b) +{ + if (dot(a, b) < 0.f) + { + return slerp(t, a, b); + } + else + { + return lerp(t, a, b); + } +} + +LLQuaternion nlerp(F32 t, const LLQuaternion &q) +{ + if (q.mQ[VW] < 0.f) + { + return slerp(t, q); + } + else + { + return lerp(t, q); + } +} + +// slerp from identity quaternion to another quaternion +LLQuaternion slerp(F32 t, const LLQuaternion &q) +{ + F32 c = q.mQ[VW]; + if (1.0f == t || 1.0f == c) + { + // the trivial cases + return q; + } + + LLQuaternion r; + F32 s, angle, stq, stp; + + s = (F32) sqrt(1.f - c*c); + + if (c < 0.0f) + { + // when c < 0.0 then theta > PI/2 + // since quat and -quat are the same rotation we invert one of + // p or q to reduce unecessary spins + // A equivalent way to do it is to convert acos(c) as if it had + // been negative, and to negate stp + angle = (F32) acos(-c); + stp = -(F32) sin(angle * (1.f - t)); + stq = (F32) sin(angle * t); + } + else + { + angle = (F32) acos(c); + stp = (F32) sin(angle * (1.f - t)); + stq = (F32) sin(angle * t); + } + + r.mQ[VX] = (q.mQ[VX] * stq) / s; + r.mQ[VY] = (q.mQ[VY] * stq) / s; + r.mQ[VZ] = (q.mQ[VZ] * stq) / s; + r.mQ[VW] = (stp + q.mQ[VW] * stq) / s; + + return r; +} + +LLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order) +{ + LLQuaternion xQ( xRot*DEG_TO_RAD, LLVector3(1.0f, 0.0f, 0.0f) ); + LLQuaternion yQ( yRot*DEG_TO_RAD, LLVector3(0.0f, 1.0f, 0.0f) ); + LLQuaternion zQ( zRot*DEG_TO_RAD, LLVector3(0.0f, 0.0f, 1.0f) ); + LLQuaternion ret; + switch( order ) + { + case LLQuaternion::XYZ: + ret = xQ * yQ * zQ; + break; + case LLQuaternion::YZX: + ret = yQ * zQ * xQ; + break; + case LLQuaternion::ZXY: + ret = zQ * xQ * yQ; + break; + case LLQuaternion::XZY: + ret = xQ * zQ * yQ; + break; + case LLQuaternion::YXZ: + ret = yQ * xQ * zQ; + break; + case LLQuaternion::ZYX: + ret = zQ * yQ * xQ; + break; + } + return ret; +} + +const char *OrderToString( const LLQuaternion::Order order ) +{ + const char *p = NULL; + switch( order ) + { + default: + case LLQuaternion::XYZ: + p = "XYZ"; + break; + case LLQuaternion::YZX: + p = "YZX"; + break; + case LLQuaternion::ZXY: + p = "ZXY"; + break; + case LLQuaternion::XZY: + p = "XZY"; + break; + case LLQuaternion::YXZ: + p = "YXZ"; + break; + case LLQuaternion::ZYX: + p = "ZYX"; + break; + } + return p; +} + +LLQuaternion::Order StringToOrder( const char *str ) +{ + if (strncmp(str, "XYZ", 3)==0 || strncmp(str, "xyz", 3)==0) + return LLQuaternion::XYZ; + + if (strncmp(str, "YZX", 3)==0 || strncmp(str, "yzx", 3)==0) + return LLQuaternion::YZX; + + if (strncmp(str, "ZXY", 3)==0 || strncmp(str, "zxy", 3)==0) + return LLQuaternion::ZXY; + + if (strncmp(str, "XZY", 3)==0 || strncmp(str, "xzy", 3)==0) + return LLQuaternion::XZY; + + if (strncmp(str, "YXZ", 3)==0 || strncmp(str, "yxz", 3)==0) + return LLQuaternion::YXZ; + + if (strncmp(str, "ZYX", 3)==0 || strncmp(str, "zyx", 3)==0) + return LLQuaternion::ZYX; + + return LLQuaternion::XYZ; +} + +void LLQuaternion::getAngleAxis(F32* angle, LLVector3 &vec) const +{ + F32 cos_a = mQ[VW]; + if (cos_a > 1.0f) cos_a = 1.0f; + if (cos_a < -1.0f) cos_a = -1.0f; + + F32 sin_a = (F32) sqrt( 1.0f - cos_a * cos_a ); + + if ( fabs( sin_a ) < 0.0005f ) + sin_a = 1.0f; + else + sin_a = 1.f/sin_a; + + F32 temp_angle = 2.0f * (F32) acos( cos_a ); + if (temp_angle > F_PI) + { + // The (angle,axis) pair should never have angles outside [PI, -PI] + // since we want the _shortest_ (angle,axis) solution. + // Since acos is defined for [0, PI], and we multiply by 2.0, we + // can push the angle outside the acceptible range. + // When this happens we set the angle to the other portion of a + // full 2PI rotation, and negate the axis, which reverses the + // direction of the rotation (by the right-hand rule). + *angle = 2.f * F_PI - temp_angle; + vec.mV[VX] = - mQ[VX] * sin_a; + vec.mV[VY] = - mQ[VY] * sin_a; + vec.mV[VZ] = - mQ[VZ] * sin_a; + } + else + { + *angle = temp_angle; + vec.mV[VX] = mQ[VX] * sin_a; + vec.mV[VY] = mQ[VY] * sin_a; + vec.mV[VZ] = mQ[VZ] * sin_a; + } +} + + +// quaternion does not need to be normalized +void LLQuaternion::getEulerAngles(F32 *roll, F32 *pitch, F32 *yaw) const +{ + LLMatrix3 rot_mat(*this); + rot_mat.orthogonalize(); + rot_mat.getEulerAngles(roll, pitch, yaw); + +// // NOTE: LLQuaternion's are actually inverted with respect to +// // the matrices, so this code also assumes inverted quaternions +// // (-x, -y, -z, w). The result is that roll,pitch,yaw are applied +// // in reverse order (yaw,pitch,roll). +// F32 x = -mQ[VX], y = -mQ[VY], z = -mQ[VZ], w = mQ[VW]; +// F64 m20 = 2.0*(x*z-y*w); +// if (1.0f - fabsf(m20) < F_APPROXIMATELY_ZERO) +// { +// *roll = 0.0f; +// *pitch = (F32)asin(m20); +// *yaw = (F32)atan2(2.0*(x*y-z*w), 1.0 - 2.0*(x*x+z*z)); +// } +// else +// { +// *roll = (F32)atan2(-2.0*(y*z+x*w), 1.0-2.0*(x*x+y*y)); +// *pitch = (F32)asin(m20); +// *yaw = (F32)atan2(-2.0*(x*y+z*w), 1.0-2.0*(y*y+z*z)); +// } +} + +// Saves space by using the fact that our quaternions are normalized +LLVector3 LLQuaternion::packToVector3() const +{ + if( mQ[VW] >= 0 ) + { + return LLVector3( mQ[VX], mQ[VY], mQ[VZ] ); + } + else + { + return LLVector3( -mQ[VX], -mQ[VY], -mQ[VZ] ); + } +} + +// Saves space by using the fact that our quaternions are normalized +void LLQuaternion::unpackFromVector3( const LLVector3& vec ) +{ + mQ[VX] = vec.mV[VX]; + mQ[VY] = vec.mV[VY]; + mQ[VZ] = vec.mV[VZ]; + F32 t = 1.f - vec.magVecSquared(); + if( t > 0 ) + { + mQ[VW] = sqrt( t ); + } + else + { + // Need this to avoid trying to find the square root of a negative number due + // to floating point error. + mQ[VW] = 0; + } +} + +BOOL LLQuaternion::parseQuat(const std::string& buf, LLQuaternion* value) +{ + if( buf.empty() || value == NULL) + { + return FALSE; + } + + LLQuaternion quat; + S32 count = sscanf( buf.c_str(), "%f %f %f %f", quat.mQ + 0, quat.mQ + 1, quat.mQ + 2, quat.mQ + 3 ); + if( 4 == count ) + { + value->set( quat ); + return TRUE; + } + + return FALSE; +} + + +// End diff --git a/indra/llmath/llquaternion.h b/indra/llmath/llquaternion.h index 0769f29f23..bbd4326483 100644 --- a/indra/llmath/llquaternion.h +++ b/indra/llmath/llquaternion.h @@ -1,590 +1,594 @@ -/** - * @file llquaternion.h - * @brief LLQuaternion class header file. - * - * $LicenseInfo:firstyear=2000&license=viewergpl$ - * - * Copyright (c) 2000-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#ifndef LLQUATERNION_H -#define LLQUATERNION_H - -#include "llmath.h" - -class LLVector4; -class LLVector3; -class LLVector3d; -class LLMatrix4; -class LLMatrix3; - -// NOTA BENE: Quaternion code is written assuming Unit Quaternions!!!! -// Moreover, it is written assuming that all vectors and matricies -// passed as arguments are normalized and unitary respectively. -// VERY VERY VERY VERY BAD THINGS will happen if these assumptions fail. - -static const U32 LENGTHOFQUAT = 4; - -class LLQuaternion -{ -public: - F32 mQ[LENGTHOFQUAT]; - - static const LLQuaternion DEFAULT; - - LLQuaternion(); // Initializes Quaternion to (0,0,0,1) - explicit LLQuaternion(const LLMatrix4 &mat); // Initializes Quaternion from Matrix4 - explicit LLQuaternion(const LLMatrix3 &mat); // Initializes Quaternion from Matrix3 - LLQuaternion(F32 x, F32 y, F32 z, F32 w); // Initializes Quaternion to normalize(x, y, z, w) - LLQuaternion(F32 angle, const LLVector4 &vec); // Initializes Quaternion to axis_angle2quat(angle, vec) - LLQuaternion(F32 angle, const LLVector3 &vec); // Initializes Quaternion to axis_angle2quat(angle, vec) - LLQuaternion(const F32 *q); // Initializes Quaternion to normalize(x, y, z, w) - LLQuaternion(const LLVector3 &x_axis, - const LLVector3 &y_axis, - const LLVector3 &z_axis); // Initializes Quaternion from Matrix3 = [x_axis ; y_axis ; z_axis] - - BOOL isIdentity() const; - BOOL isNotIdentity() const; - BOOL isFinite() const; // checks to see if all values of LLQuaternion are finite - void quantize16(F32 lower, F32 upper); // changes the vector to reflect quatization - void quantize8(F32 lower, F32 upper); // changes the vector to reflect quatization - void loadIdentity(); // Loads the quaternion that represents the identity rotation - - const LLQuaternion& set(F32 x, F32 y, F32 z, F32 w); // Sets Quaternion to normalize(x, y, z, w) - const LLQuaternion& set(const LLQuaternion &quat); // Copies Quaternion - const LLQuaternion& set(const F32 *q); // Sets Quaternion to normalize(quat[VX], quat[VY], quat[VZ], quat[VW]) - const LLQuaternion& set(const LLMatrix3 &mat); // Sets Quaternion to mat2quat(mat) - const LLQuaternion& set(const LLMatrix4 &mat); // Sets Quaternion to mat2quat(mat) - - const LLQuaternion& setAngleAxis(F32 angle, F32 x, F32 y, F32 z); // Sets Quaternion to axis_angle2quat(angle, x, y, z) - const LLQuaternion& setAngleAxis(F32 angle, const LLVector3 &vec); // Sets Quaternion to axis_angle2quat(angle, vec) - const LLQuaternion& setAngleAxis(F32 angle, const LLVector4 &vec); // Sets Quaternion to axis_angle2quat(angle, vec) - const LLQuaternion& setEulerAngles(F32 roll, F32 pitch, F32 yaw); // Sets Quaternion to euler2quat(pitch, yaw, roll) - - const LLQuaternion& setQuatInit(F32 x, F32 y, F32 z, F32 w); // deprecated - const LLQuaternion& setQuat(const LLQuaternion &quat); // deprecated - const LLQuaternion& setQuat(const F32 *q); // deprecated - const LLQuaternion& setQuat(const LLMatrix3 &mat); // deprecated - const LLQuaternion& setQuat(const LLMatrix4 &mat); // deprecated - const LLQuaternion& setQuat(F32 angle, F32 x, F32 y, F32 z); // deprecated - const LLQuaternion& setQuat(F32 angle, const LLVector3 &vec); // deprecated - const LLQuaternion& setQuat(F32 angle, const LLVector4 &vec); // deprecated - const LLQuaternion& setQuat(F32 roll, F32 pitch, F32 yaw); // deprecated - - LLMatrix4 getMatrix4(void) const; // Returns the Matrix4 equivalent of Quaternion - LLMatrix3 getMatrix3(void) const; // Returns the Matrix3 equivalent of Quaternion - void getAngleAxis(F32* angle, F32* x, F32* y, F32* z) const; // returns rotation in radians about axis x,y,z - void getAngleAxis(F32* angle, LLVector3 &vec) const; - void getEulerAngles(F32 *roll, F32* pitch, F32 *yaw) const; - - F32 normalize(); // Normalizes Quaternion and returns magnitude - F32 normQuat(); // deprecated - - const LLQuaternion& conjugate(void); // Conjugates Quaternion and returns result - const LLQuaternion& conjQuat(void); // deprecated - - // Other useful methods - const LLQuaternion& transpose(); // transpose (same as conjugate) - const LLQuaternion& transQuat(); // deprecated - - void shortestArc(const LLVector3 &a, const LLVector3 &b); // shortest rotation from a to b - const LLQuaternion& constrain(F32 radians); // constrains rotation to a cone angle specified in radians - - // Standard operators - friend std::ostream& operator<<(std::ostream &s, const LLQuaternion &a); // Prints a - friend LLQuaternion operator+(const LLQuaternion &a, const LLQuaternion &b); // Addition - friend LLQuaternion operator-(const LLQuaternion &a, const LLQuaternion &b); // Subtraction - friend LLQuaternion operator-(const LLQuaternion &a); // Negation - friend LLQuaternion operator*(F32 a, const LLQuaternion &q); // Scale - friend LLQuaternion operator*(const LLQuaternion &q, F32 b); // Scale - friend LLQuaternion operator*(const LLQuaternion &a, const LLQuaternion &b); // Returns a * b - friend LLQuaternion operator~(const LLQuaternion &a); // Returns a* (Conjugate of a) - bool operator==(const LLQuaternion &b) const; // Returns a == b - bool operator!=(const LLQuaternion &b) const; // Returns a != b - - friend const LLQuaternion& operator*=(LLQuaternion &a, const LLQuaternion &b); // Returns a * b - - friend LLVector4 operator*(const LLVector4 &a, const LLQuaternion &rot); // Rotates a by rot - friend LLVector3 operator*(const LLVector3 &a, const LLQuaternion &rot); // Rotates a by rot - friend LLVector3d operator*(const LLVector3d &a, const LLQuaternion &rot); // Rotates a by rot - - // Non-standard operators - friend F32 dot(const LLQuaternion &a, const LLQuaternion &b); - friend LLQuaternion lerp(F32 t, const LLQuaternion &p, const LLQuaternion &q); // linear interpolation (t = 0 to 1) from p to q - friend LLQuaternion lerp(F32 t, const LLQuaternion &q); // linear interpolation (t = 0 to 1) from identity to q - friend LLQuaternion slerp(F32 t, const LLQuaternion &p, const LLQuaternion &q); // spherical linear interpolation from p to q - friend LLQuaternion slerp(F32 t, const LLQuaternion &q); // spherical linear interpolation from identity to q - friend LLQuaternion nlerp(F32 t, const LLQuaternion &p, const LLQuaternion &q); // normalized linear interpolation from p to q - friend LLQuaternion nlerp(F32 t, const LLQuaternion &q); // normalized linear interpolation from p to q - - LLVector3 packToVector3() const; // Saves space by using the fact that our quaternions are normalized - void unpackFromVector3(const LLVector3& vec); // Saves space by using the fact that our quaternions are normalized - - enum Order { - XYZ = 0, - YZX = 1, - ZXY = 2, - XZY = 3, - YXZ = 4, - ZYX = 5 - }; - // Creates a quaternions from maya's rotation representation, - // which is 3 rotations (in DEGREES) in the specified order - friend LLQuaternion mayaQ(F32 x, F32 y, F32 z, Order order); - - // Conversions between Order and strings like "xyz" or "ZYX" - friend const char *OrderToString( const Order order ); - friend Order StringToOrder( const char *str ); - - static BOOL parseQuat(const std::string& buf, LLQuaternion* value); - - // For debugging, only - //static U32 mMultCount; -}; - -// checker -inline BOOL LLQuaternion::isFinite() const -{ - return (llfinite(mQ[VX]) && llfinite(mQ[VY]) && llfinite(mQ[VZ]) && llfinite(mQ[VS])); -} - -inline BOOL LLQuaternion::isIdentity() const -{ - return - ( mQ[VX] == 0.f ) && - ( mQ[VY] == 0.f ) && - ( mQ[VZ] == 0.f ) && - ( mQ[VS] == 1.f ); -} - -inline BOOL LLQuaternion::isNotIdentity() const -{ - return - ( mQ[VX] != 0.f ) || - ( mQ[VY] != 0.f ) || - ( mQ[VZ] != 0.f ) || - ( mQ[VS] != 1.f ); -} - - - -inline LLQuaternion::LLQuaternion(void) -{ - mQ[VX] = 0.f; - mQ[VY] = 0.f; - mQ[VZ] = 0.f; - mQ[VS] = 1.f; -} - -inline LLQuaternion::LLQuaternion(F32 x, F32 y, F32 z, F32 w) -{ - mQ[VX] = x; - mQ[VY] = y; - mQ[VZ] = z; - mQ[VS] = w; - - //RN: don't normalize this case as its used mainly for temporaries during calculations - //normalize(); - /* - F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); - mag -= 1.f; - mag = fabs(mag); - llassert(mag < 10.f*FP_MAG_THRESHOLD); - */ -} - -inline LLQuaternion::LLQuaternion(const F32 *q) -{ - mQ[VX] = q[VX]; - mQ[VY] = q[VY]; - mQ[VZ] = q[VZ]; - mQ[VS] = q[VW]; - - normalize(); - /* - F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); - mag -= 1.f; - mag = fabs(mag); - llassert(mag < FP_MAG_THRESHOLD); - */ -} - - -inline void LLQuaternion::loadIdentity() -{ - mQ[VX] = 0.0f; - mQ[VY] = 0.0f; - mQ[VZ] = 0.0f; - mQ[VW] = 1.0f; -} - - -inline const LLQuaternion& LLQuaternion::set(F32 x, F32 y, F32 z, F32 w) -{ - mQ[VX] = x; - mQ[VY] = y; - mQ[VZ] = z; - mQ[VS] = w; - normalize(); - return (*this); -} - -inline const LLQuaternion& LLQuaternion::set(const LLQuaternion &quat) -{ - mQ[VX] = quat.mQ[VX]; - mQ[VY] = quat.mQ[VY]; - mQ[VZ] = quat.mQ[VZ]; - mQ[VW] = quat.mQ[VW]; - normalize(); - return (*this); -} - -inline const LLQuaternion& LLQuaternion::set(const F32 *q) -{ - mQ[VX] = q[VX]; - mQ[VY] = q[VY]; - mQ[VZ] = q[VZ]; - mQ[VS] = q[VW]; - normalize(); - return (*this); -} - - -// deprecated -inline const LLQuaternion& LLQuaternion::setQuatInit(F32 x, F32 y, F32 z, F32 w) -{ - mQ[VX] = x; - mQ[VY] = y; - mQ[VZ] = z; - mQ[VS] = w; - normalize(); - return (*this); -} - -// deprecated -inline const LLQuaternion& LLQuaternion::setQuat(const LLQuaternion &quat) -{ - mQ[VX] = quat.mQ[VX]; - mQ[VY] = quat.mQ[VY]; - mQ[VZ] = quat.mQ[VZ]; - mQ[VW] = quat.mQ[VW]; - normalize(); - return (*this); -} - -// deprecated -inline const LLQuaternion& LLQuaternion::setQuat(const F32 *q) -{ - mQ[VX] = q[VX]; - mQ[VY] = q[VY]; - mQ[VZ] = q[VZ]; - mQ[VS] = q[VW]; - normalize(); - return (*this); -} - -// There may be a cheaper way that avoids the sqrt. -// Does sin_a = VX*VX + VY*VY + VZ*VZ? -// Copied from Matrix and Quaternion FAQ 1.12 -inline void LLQuaternion::getAngleAxis(F32* angle, F32* x, F32* y, F32* z) const -{ - F32 cos_a = mQ[VW]; - if (cos_a > 1.0f) cos_a = 1.0f; - if (cos_a < -1.0f) cos_a = -1.0f; - - F32 sin_a = (F32) sqrt( 1.0f - cos_a * cos_a ); - - if ( fabs( sin_a ) < 0.0005f ) - sin_a = 1.0f; - else - sin_a = 1.f/sin_a; - - F32 temp_angle = 2.0f * (F32) acos( cos_a ); - if (temp_angle > F_PI) - { - // The (angle,axis) pair should never have angles outside [PI, -PI] - // since we want the _shortest_ (angle,axis) solution. - // Since acos is defined for [0, PI], and we multiply by 2.0, we - // can push the angle outside the acceptible range. - // When this happens we set the angle to the other portion of a - // full 2PI rotation, and negate the axis, which reverses the - // direction of the rotation (by the right-hand rule). - *angle = 2.f * F_PI - temp_angle; - *x = - mQ[VX] * sin_a; - *y = - mQ[VY] * sin_a; - *z = - mQ[VZ] * sin_a; - } - else - { - *angle = temp_angle; - *x = mQ[VX] * sin_a; - *y = mQ[VY] * sin_a; - *z = mQ[VZ] * sin_a; - } -} - -inline const LLQuaternion& LLQuaternion::conjugate() -{ - mQ[VX] *= -1.f; - mQ[VY] *= -1.f; - mQ[VZ] *= -1.f; - return (*this); -} - -inline const LLQuaternion& LLQuaternion::conjQuat() -{ - mQ[VX] *= -1.f; - mQ[VY] *= -1.f; - mQ[VZ] *= -1.f; - return (*this); -} - -// Transpose -inline const LLQuaternion& LLQuaternion::transpose() -{ - mQ[VX] *= -1.f; - mQ[VY] *= -1.f; - mQ[VZ] *= -1.f; - return (*this); -} - -// deprecated -inline const LLQuaternion& LLQuaternion::transQuat() -{ - mQ[VX] *= -1.f; - mQ[VY] *= -1.f; - mQ[VZ] *= -1.f; - return (*this); -} - - -inline LLQuaternion operator+(const LLQuaternion &a, const LLQuaternion &b) -{ - return LLQuaternion( - a.mQ[VX] + b.mQ[VX], - a.mQ[VY] + b.mQ[VY], - a.mQ[VZ] + b.mQ[VZ], - a.mQ[VW] + b.mQ[VW] ); -} - - -inline LLQuaternion operator-(const LLQuaternion &a, const LLQuaternion &b) -{ - return LLQuaternion( - a.mQ[VX] - b.mQ[VX], - a.mQ[VY] - b.mQ[VY], - a.mQ[VZ] - b.mQ[VZ], - a.mQ[VW] - b.mQ[VW] ); -} - - -inline LLQuaternion operator-(const LLQuaternion &a) -{ - return LLQuaternion( - -a.mQ[VX], - -a.mQ[VY], - -a.mQ[VZ], - -a.mQ[VW] ); -} - - -inline LLQuaternion operator*(F32 a, const LLQuaternion &q) -{ - return LLQuaternion( - a * q.mQ[VX], - a * q.mQ[VY], - a * q.mQ[VZ], - a * q.mQ[VW] ); -} - - -inline LLQuaternion operator*(const LLQuaternion &q, F32 a) -{ - return LLQuaternion( - a * q.mQ[VX], - a * q.mQ[VY], - a * q.mQ[VZ], - a * q.mQ[VW] ); -} - -inline LLQuaternion operator~(const LLQuaternion &a) -{ - LLQuaternion q(a); - q.conjQuat(); - return q; -} - -inline bool LLQuaternion::operator==(const LLQuaternion &b) const -{ - return ( (mQ[VX] == b.mQ[VX]) - &&(mQ[VY] == b.mQ[VY]) - &&(mQ[VZ] == b.mQ[VZ]) - &&(mQ[VS] == b.mQ[VS])); -} - -inline bool LLQuaternion::operator!=(const LLQuaternion &b) const -{ - return ( (mQ[VX] != b.mQ[VX]) - ||(mQ[VY] != b.mQ[VY]) - ||(mQ[VZ] != b.mQ[VZ]) - ||(mQ[VS] != b.mQ[VS])); -} - -inline const LLQuaternion& operator*=(LLQuaternion &a, const LLQuaternion &b) -{ -#if 1 - LLQuaternion q( - b.mQ[3] * a.mQ[0] + b.mQ[0] * a.mQ[3] + b.mQ[1] * a.mQ[2] - b.mQ[2] * a.mQ[1], - b.mQ[3] * a.mQ[1] + b.mQ[1] * a.mQ[3] + b.mQ[2] * a.mQ[0] - b.mQ[0] * a.mQ[2], - b.mQ[3] * a.mQ[2] + b.mQ[2] * a.mQ[3] + b.mQ[0] * a.mQ[1] - b.mQ[1] * a.mQ[0], - b.mQ[3] * a.mQ[3] - b.mQ[0] * a.mQ[0] - b.mQ[1] * a.mQ[1] - b.mQ[2] * a.mQ[2] - ); - a = q; -#else - a = a * b; -#endif - return a; -} - -const F32 ONE_PART_IN_A_MILLION = 0.000001f; - -inline F32 LLQuaternion::normalize() -{ - F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); - - if (mag > FP_MAG_THRESHOLD) - { - // Floating point error can prevent some quaternions from achieving - // exact unity length. When trying to renormalize such quaternions we - // can oscillate between multiple quantized states. To prevent such - // drifts we only renomalize if the length is far enough from unity. - if (fabs(1.f - mag) > ONE_PART_IN_A_MILLION) - { - F32 oomag = 1.f/mag; - mQ[VX] *= oomag; - mQ[VY] *= oomag; - mQ[VZ] *= oomag; - mQ[VS] *= oomag; - } - } - else - { - // we were given a very bad quaternion so we set it to identity - mQ[VX] = 0.f; - mQ[VY] = 0.f; - mQ[VZ] = 0.f; - mQ[VS] = 1.f; - } - - return mag; -} - -// deprecated -inline F32 LLQuaternion::normQuat() -{ - F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); - - if (mag > FP_MAG_THRESHOLD) - { - if (fabs(1.f - mag) > ONE_PART_IN_A_MILLION) - { - // only renormalize if length not close enough to 1.0 already - F32 oomag = 1.f/mag; - mQ[VX] *= oomag; - mQ[VY] *= oomag; - mQ[VZ] *= oomag; - mQ[VS] *= oomag; - } - } - else - { - mQ[VX] = 0.f; - mQ[VY] = 0.f; - mQ[VZ] = 0.f; - mQ[VS] = 1.f; - } - - return mag; -} - -LLQuaternion::Order StringToOrder( const char *str ); - -// Some notes about Quaternions - -// What is a Quaternion? -// --------------------- -// A quaternion is a point in 4-dimensional complex space. -// Q = { Qx, Qy, Qz, Qw } -// -// -// Why Quaternions? -// ---------------- -// The set of quaternions that make up the the 4-D unit sphere -// can be mapped to the set of all rotations in 3-D space. Sometimes -// it is easier to describe/manipulate rotations in quaternion space -// than rotation-matrix space. -// -// -// How Quaternions? -// ---------------- -// In order to take advantage of quaternions we need to know how to -// go from rotation-matricies to quaternions and back. We also have -// to agree what variety of rotations we're generating. -// -// Consider the equation... v' = v * R -// -// There are two ways to think about rotations of vectors. -// 1) v' is the same vector in a different reference frame -// 2) v' is a new vector in the same reference frame -// -// bookmark -- which way are we using? -// -// -// Quaternion from Angle-Axis: -// --------------------------- -// Suppose we wanted to represent a rotation of some angle (theta) -// about some axis ({Ax, Ay, Az})... -// -// axis of rotation = {Ax, Ay, Az} -// angle_of_rotation = theta -// -// s = sin(0.5 * theta) -// c = cos(0.5 * theta) -// Q = { s * Ax, s * Ay, s * Az, c } -// -// -// 3x3 Matrix from Quaternion -// -------------------------- -// -// | | -// | 1 - 2 * (y^2 + z^2) 2 * (x * y + z * w) 2 * (y * w - x * z) | -// | | -// M = | 2 * (x * y - z * w) 1 - 2 * (x^2 + z^2) 2 * (y * z + x * w) | -// | | -// | 2 * (x * z + y * w) 2 * (y * z - x * w) 1 - 2 * (x^2 + y^2) | -// | | - -#endif +/** + * @file llquaternion.h + * @brief LLQuaternion class header file. + * + * $LicenseInfo:firstyear=2000&license=viewergpl$ + * + * Copyright (c) 2000-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LLQUATERNION_H +#define LLQUATERNION_H + +#include + +#ifndef LLMATH_H //enforce specific include order to avoid tangling inline dependencies +#error "Please include llmath.h first." +#endif + +class LLVector4; +class LLVector3; +class LLVector3d; +class LLMatrix4; +class LLMatrix3; + +// NOTA BENE: Quaternion code is written assuming Unit Quaternions!!!! +// Moreover, it is written assuming that all vectors and matricies +// passed as arguments are normalized and unitary respectively. +// VERY VERY VERY VERY BAD THINGS will happen if these assumptions fail. + +static const U32 LENGTHOFQUAT = 4; + +class LLQuaternion +{ +public: + F32 mQ[LENGTHOFQUAT]; + + static const LLQuaternion DEFAULT; + + LLQuaternion(); // Initializes Quaternion to (0,0,0,1) + explicit LLQuaternion(const LLMatrix4 &mat); // Initializes Quaternion from Matrix4 + explicit LLQuaternion(const LLMatrix3 &mat); // Initializes Quaternion from Matrix3 + LLQuaternion(F32 x, F32 y, F32 z, F32 w); // Initializes Quaternion to normalize(x, y, z, w) + LLQuaternion(F32 angle, const LLVector4 &vec); // Initializes Quaternion to axis_angle2quat(angle, vec) + LLQuaternion(F32 angle, const LLVector3 &vec); // Initializes Quaternion to axis_angle2quat(angle, vec) + LLQuaternion(const F32 *q); // Initializes Quaternion to normalize(x, y, z, w) + LLQuaternion(const LLVector3 &x_axis, + const LLVector3 &y_axis, + const LLVector3 &z_axis); // Initializes Quaternion from Matrix3 = [x_axis ; y_axis ; z_axis] + + BOOL isIdentity() const; + BOOL isNotIdentity() const; + BOOL isFinite() const; // checks to see if all values of LLQuaternion are finite + void quantize16(F32 lower, F32 upper); // changes the vector to reflect quatization + void quantize8(F32 lower, F32 upper); // changes the vector to reflect quatization + void loadIdentity(); // Loads the quaternion that represents the identity rotation + + const LLQuaternion& set(F32 x, F32 y, F32 z, F32 w); // Sets Quaternion to normalize(x, y, z, w) + const LLQuaternion& set(const LLQuaternion &quat); // Copies Quaternion + const LLQuaternion& set(const F32 *q); // Sets Quaternion to normalize(quat[VX], quat[VY], quat[VZ], quat[VW]) + const LLQuaternion& set(const LLMatrix3 &mat); // Sets Quaternion to mat2quat(mat) + const LLQuaternion& set(const LLMatrix4 &mat); // Sets Quaternion to mat2quat(mat) + + const LLQuaternion& setAngleAxis(F32 angle, F32 x, F32 y, F32 z); // Sets Quaternion to axis_angle2quat(angle, x, y, z) + const LLQuaternion& setAngleAxis(F32 angle, const LLVector3 &vec); // Sets Quaternion to axis_angle2quat(angle, vec) + const LLQuaternion& setAngleAxis(F32 angle, const LLVector4 &vec); // Sets Quaternion to axis_angle2quat(angle, vec) + const LLQuaternion& setEulerAngles(F32 roll, F32 pitch, F32 yaw); // Sets Quaternion to euler2quat(pitch, yaw, roll) + + const LLQuaternion& setQuatInit(F32 x, F32 y, F32 z, F32 w); // deprecated + const LLQuaternion& setQuat(const LLQuaternion &quat); // deprecated + const LLQuaternion& setQuat(const F32 *q); // deprecated + const LLQuaternion& setQuat(const LLMatrix3 &mat); // deprecated + const LLQuaternion& setQuat(const LLMatrix4 &mat); // deprecated + const LLQuaternion& setQuat(F32 angle, F32 x, F32 y, F32 z); // deprecated + const LLQuaternion& setQuat(F32 angle, const LLVector3 &vec); // deprecated + const LLQuaternion& setQuat(F32 angle, const LLVector4 &vec); // deprecated + const LLQuaternion& setQuat(F32 roll, F32 pitch, F32 yaw); // deprecated + + LLMatrix4 getMatrix4(void) const; // Returns the Matrix4 equivalent of Quaternion + LLMatrix3 getMatrix3(void) const; // Returns the Matrix3 equivalent of Quaternion + void getAngleAxis(F32* angle, F32* x, F32* y, F32* z) const; // returns rotation in radians about axis x,y,z + void getAngleAxis(F32* angle, LLVector3 &vec) const; + void getEulerAngles(F32 *roll, F32* pitch, F32 *yaw) const; + + F32 normalize(); // Normalizes Quaternion and returns magnitude + F32 normQuat(); // deprecated + + const LLQuaternion& conjugate(void); // Conjugates Quaternion and returns result + const LLQuaternion& conjQuat(void); // deprecated + + // Other useful methods + const LLQuaternion& transpose(); // transpose (same as conjugate) + const LLQuaternion& transQuat(); // deprecated + + void shortestArc(const LLVector3 &a, const LLVector3 &b); // shortest rotation from a to b + const LLQuaternion& constrain(F32 radians); // constrains rotation to a cone angle specified in radians + + // Standard operators + friend std::ostream& operator<<(std::ostream &s, const LLQuaternion &a); // Prints a + friend LLQuaternion operator+(const LLQuaternion &a, const LLQuaternion &b); // Addition + friend LLQuaternion operator-(const LLQuaternion &a, const LLQuaternion &b); // Subtraction + friend LLQuaternion operator-(const LLQuaternion &a); // Negation + friend LLQuaternion operator*(F32 a, const LLQuaternion &q); // Scale + friend LLQuaternion operator*(const LLQuaternion &q, F32 b); // Scale + friend LLQuaternion operator*(const LLQuaternion &a, const LLQuaternion &b); // Returns a * b + friend LLQuaternion operator~(const LLQuaternion &a); // Returns a* (Conjugate of a) + bool operator==(const LLQuaternion &b) const; // Returns a == b + bool operator!=(const LLQuaternion &b) const; // Returns a != b + + friend const LLQuaternion& operator*=(LLQuaternion &a, const LLQuaternion &b); // Returns a * b + + friend LLVector4 operator*(const LLVector4 &a, const LLQuaternion &rot); // Rotates a by rot + friend LLVector3 operator*(const LLVector3 &a, const LLQuaternion &rot); // Rotates a by rot + friend LLVector3d operator*(const LLVector3d &a, const LLQuaternion &rot); // Rotates a by rot + + // Non-standard operators + friend F32 dot(const LLQuaternion &a, const LLQuaternion &b); + friend LLQuaternion lerp(F32 t, const LLQuaternion &p, const LLQuaternion &q); // linear interpolation (t = 0 to 1) from p to q + friend LLQuaternion lerp(F32 t, const LLQuaternion &q); // linear interpolation (t = 0 to 1) from identity to q + friend LLQuaternion slerp(F32 t, const LLQuaternion &p, const LLQuaternion &q); // spherical linear interpolation from p to q + friend LLQuaternion slerp(F32 t, const LLQuaternion &q); // spherical linear interpolation from identity to q + friend LLQuaternion nlerp(F32 t, const LLQuaternion &p, const LLQuaternion &q); // normalized linear interpolation from p to q + friend LLQuaternion nlerp(F32 t, const LLQuaternion &q); // normalized linear interpolation from p to q + + LLVector3 packToVector3() const; // Saves space by using the fact that our quaternions are normalized + void unpackFromVector3(const LLVector3& vec); // Saves space by using the fact that our quaternions are normalized + + enum Order { + XYZ = 0, + YZX = 1, + ZXY = 2, + XZY = 3, + YXZ = 4, + ZYX = 5 + }; + // Creates a quaternions from maya's rotation representation, + // which is 3 rotations (in DEGREES) in the specified order + friend LLQuaternion mayaQ(F32 x, F32 y, F32 z, Order order); + + // Conversions between Order and strings like "xyz" or "ZYX" + friend const char *OrderToString( const Order order ); + friend Order StringToOrder( const char *str ); + + static BOOL parseQuat(const std::string& buf, LLQuaternion* value); + + // For debugging, only + //static U32 mMultCount; +}; + +// checker +inline BOOL LLQuaternion::isFinite() const +{ + return (llfinite(mQ[VX]) && llfinite(mQ[VY]) && llfinite(mQ[VZ]) && llfinite(mQ[VS])); +} + +inline BOOL LLQuaternion::isIdentity() const +{ + return + ( mQ[VX] == 0.f ) && + ( mQ[VY] == 0.f ) && + ( mQ[VZ] == 0.f ) && + ( mQ[VS] == 1.f ); +} + +inline BOOL LLQuaternion::isNotIdentity() const +{ + return + ( mQ[VX] != 0.f ) || + ( mQ[VY] != 0.f ) || + ( mQ[VZ] != 0.f ) || + ( mQ[VS] != 1.f ); +} + + + +inline LLQuaternion::LLQuaternion(void) +{ + mQ[VX] = 0.f; + mQ[VY] = 0.f; + mQ[VZ] = 0.f; + mQ[VS] = 1.f; +} + +inline LLQuaternion::LLQuaternion(F32 x, F32 y, F32 z, F32 w) +{ + mQ[VX] = x; + mQ[VY] = y; + mQ[VZ] = z; + mQ[VS] = w; + + //RN: don't normalize this case as its used mainly for temporaries during calculations + //normalize(); + /* + F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); + mag -= 1.f; + mag = fabs(mag); + llassert(mag < 10.f*FP_MAG_THRESHOLD); + */ +} + +inline LLQuaternion::LLQuaternion(const F32 *q) +{ + mQ[VX] = q[VX]; + mQ[VY] = q[VY]; + mQ[VZ] = q[VZ]; + mQ[VS] = q[VW]; + + normalize(); + /* + F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); + mag -= 1.f; + mag = fabs(mag); + llassert(mag < FP_MAG_THRESHOLD); + */ +} + + +inline void LLQuaternion::loadIdentity() +{ + mQ[VX] = 0.0f; + mQ[VY] = 0.0f; + mQ[VZ] = 0.0f; + mQ[VW] = 1.0f; +} + + +inline const LLQuaternion& LLQuaternion::set(F32 x, F32 y, F32 z, F32 w) +{ + mQ[VX] = x; + mQ[VY] = y; + mQ[VZ] = z; + mQ[VS] = w; + normalize(); + return (*this); +} + +inline const LLQuaternion& LLQuaternion::set(const LLQuaternion &quat) +{ + mQ[VX] = quat.mQ[VX]; + mQ[VY] = quat.mQ[VY]; + mQ[VZ] = quat.mQ[VZ]; + mQ[VW] = quat.mQ[VW]; + normalize(); + return (*this); +} + +inline const LLQuaternion& LLQuaternion::set(const F32 *q) +{ + mQ[VX] = q[VX]; + mQ[VY] = q[VY]; + mQ[VZ] = q[VZ]; + mQ[VS] = q[VW]; + normalize(); + return (*this); +} + + +// deprecated +inline const LLQuaternion& LLQuaternion::setQuatInit(F32 x, F32 y, F32 z, F32 w) +{ + mQ[VX] = x; + mQ[VY] = y; + mQ[VZ] = z; + mQ[VS] = w; + normalize(); + return (*this); +} + +// deprecated +inline const LLQuaternion& LLQuaternion::setQuat(const LLQuaternion &quat) +{ + mQ[VX] = quat.mQ[VX]; + mQ[VY] = quat.mQ[VY]; + mQ[VZ] = quat.mQ[VZ]; + mQ[VW] = quat.mQ[VW]; + normalize(); + return (*this); +} + +// deprecated +inline const LLQuaternion& LLQuaternion::setQuat(const F32 *q) +{ + mQ[VX] = q[VX]; + mQ[VY] = q[VY]; + mQ[VZ] = q[VZ]; + mQ[VS] = q[VW]; + normalize(); + return (*this); +} + +// There may be a cheaper way that avoids the sqrt. +// Does sin_a = VX*VX + VY*VY + VZ*VZ? +// Copied from Matrix and Quaternion FAQ 1.12 +inline void LLQuaternion::getAngleAxis(F32* angle, F32* x, F32* y, F32* z) const +{ + F32 cos_a = mQ[VW]; + if (cos_a > 1.0f) cos_a = 1.0f; + if (cos_a < -1.0f) cos_a = -1.0f; + + F32 sin_a = (F32) sqrt( 1.0f - cos_a * cos_a ); + + if ( fabs( sin_a ) < 0.0005f ) + sin_a = 1.0f; + else + sin_a = 1.f/sin_a; + + F32 temp_angle = 2.0f * (F32) acos( cos_a ); + if (temp_angle > F_PI) + { + // The (angle,axis) pair should never have angles outside [PI, -PI] + // since we want the _shortest_ (angle,axis) solution. + // Since acos is defined for [0, PI], and we multiply by 2.0, we + // can push the angle outside the acceptible range. + // When this happens we set the angle to the other portion of a + // full 2PI rotation, and negate the axis, which reverses the + // direction of the rotation (by the right-hand rule). + *angle = 2.f * F_PI - temp_angle; + *x = - mQ[VX] * sin_a; + *y = - mQ[VY] * sin_a; + *z = - mQ[VZ] * sin_a; + } + else + { + *angle = temp_angle; + *x = mQ[VX] * sin_a; + *y = mQ[VY] * sin_a; + *z = mQ[VZ] * sin_a; + } +} + +inline const LLQuaternion& LLQuaternion::conjugate() +{ + mQ[VX] *= -1.f; + mQ[VY] *= -1.f; + mQ[VZ] *= -1.f; + return (*this); +} + +inline const LLQuaternion& LLQuaternion::conjQuat() +{ + mQ[VX] *= -1.f; + mQ[VY] *= -1.f; + mQ[VZ] *= -1.f; + return (*this); +} + +// Transpose +inline const LLQuaternion& LLQuaternion::transpose() +{ + mQ[VX] *= -1.f; + mQ[VY] *= -1.f; + mQ[VZ] *= -1.f; + return (*this); +} + +// deprecated +inline const LLQuaternion& LLQuaternion::transQuat() +{ + mQ[VX] *= -1.f; + mQ[VY] *= -1.f; + mQ[VZ] *= -1.f; + return (*this); +} + + +inline LLQuaternion operator+(const LLQuaternion &a, const LLQuaternion &b) +{ + return LLQuaternion( + a.mQ[VX] + b.mQ[VX], + a.mQ[VY] + b.mQ[VY], + a.mQ[VZ] + b.mQ[VZ], + a.mQ[VW] + b.mQ[VW] ); +} + + +inline LLQuaternion operator-(const LLQuaternion &a, const LLQuaternion &b) +{ + return LLQuaternion( + a.mQ[VX] - b.mQ[VX], + a.mQ[VY] - b.mQ[VY], + a.mQ[VZ] - b.mQ[VZ], + a.mQ[VW] - b.mQ[VW] ); +} + + +inline LLQuaternion operator-(const LLQuaternion &a) +{ + return LLQuaternion( + -a.mQ[VX], + -a.mQ[VY], + -a.mQ[VZ], + -a.mQ[VW] ); +} + + +inline LLQuaternion operator*(F32 a, const LLQuaternion &q) +{ + return LLQuaternion( + a * q.mQ[VX], + a * q.mQ[VY], + a * q.mQ[VZ], + a * q.mQ[VW] ); +} + + +inline LLQuaternion operator*(const LLQuaternion &q, F32 a) +{ + return LLQuaternion( + a * q.mQ[VX], + a * q.mQ[VY], + a * q.mQ[VZ], + a * q.mQ[VW] ); +} + +inline LLQuaternion operator~(const LLQuaternion &a) +{ + LLQuaternion q(a); + q.conjQuat(); + return q; +} + +inline bool LLQuaternion::operator==(const LLQuaternion &b) const +{ + return ( (mQ[VX] == b.mQ[VX]) + &&(mQ[VY] == b.mQ[VY]) + &&(mQ[VZ] == b.mQ[VZ]) + &&(mQ[VS] == b.mQ[VS])); +} + +inline bool LLQuaternion::operator!=(const LLQuaternion &b) const +{ + return ( (mQ[VX] != b.mQ[VX]) + ||(mQ[VY] != b.mQ[VY]) + ||(mQ[VZ] != b.mQ[VZ]) + ||(mQ[VS] != b.mQ[VS])); +} + +inline const LLQuaternion& operator*=(LLQuaternion &a, const LLQuaternion &b) +{ +#if 1 + LLQuaternion q( + b.mQ[3] * a.mQ[0] + b.mQ[0] * a.mQ[3] + b.mQ[1] * a.mQ[2] - b.mQ[2] * a.mQ[1], + b.mQ[3] * a.mQ[1] + b.mQ[1] * a.mQ[3] + b.mQ[2] * a.mQ[0] - b.mQ[0] * a.mQ[2], + b.mQ[3] * a.mQ[2] + b.mQ[2] * a.mQ[3] + b.mQ[0] * a.mQ[1] - b.mQ[1] * a.mQ[0], + b.mQ[3] * a.mQ[3] - b.mQ[0] * a.mQ[0] - b.mQ[1] * a.mQ[1] - b.mQ[2] * a.mQ[2] + ); + a = q; +#else + a = a * b; +#endif + return a; +} + +const F32 ONE_PART_IN_A_MILLION = 0.000001f; + +inline F32 LLQuaternion::normalize() +{ + F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); + + if (mag > FP_MAG_THRESHOLD) + { + // Floating point error can prevent some quaternions from achieving + // exact unity length. When trying to renormalize such quaternions we + // can oscillate between multiple quantized states. To prevent such + // drifts we only renomalize if the length is far enough from unity. + if (fabs(1.f - mag) > ONE_PART_IN_A_MILLION) + { + F32 oomag = 1.f/mag; + mQ[VX] *= oomag; + mQ[VY] *= oomag; + mQ[VZ] *= oomag; + mQ[VS] *= oomag; + } + } + else + { + // we were given a very bad quaternion so we set it to identity + mQ[VX] = 0.f; + mQ[VY] = 0.f; + mQ[VZ] = 0.f; + mQ[VS] = 1.f; + } + + return mag; +} + +// deprecated +inline F32 LLQuaternion::normQuat() +{ + F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); + + if (mag > FP_MAG_THRESHOLD) + { + if (fabs(1.f - mag) > ONE_PART_IN_A_MILLION) + { + // only renormalize if length not close enough to 1.0 already + F32 oomag = 1.f/mag; + mQ[VX] *= oomag; + mQ[VY] *= oomag; + mQ[VZ] *= oomag; + mQ[VS] *= oomag; + } + } + else + { + mQ[VX] = 0.f; + mQ[VY] = 0.f; + mQ[VZ] = 0.f; + mQ[VS] = 1.f; + } + + return mag; +} + +LLQuaternion::Order StringToOrder( const char *str ); + +// Some notes about Quaternions + +// What is a Quaternion? +// --------------------- +// A quaternion is a point in 4-dimensional complex space. +// Q = { Qx, Qy, Qz, Qw } +// +// +// Why Quaternions? +// ---------------- +// The set of quaternions that make up the the 4-D unit sphere +// can be mapped to the set of all rotations in 3-D space. Sometimes +// it is easier to describe/manipulate rotations in quaternion space +// than rotation-matrix space. +// +// +// How Quaternions? +// ---------------- +// In order to take advantage of quaternions we need to know how to +// go from rotation-matricies to quaternions and back. We also have +// to agree what variety of rotations we're generating. +// +// Consider the equation... v' = v * R +// +// There are two ways to think about rotations of vectors. +// 1) v' is the same vector in a different reference frame +// 2) v' is a new vector in the same reference frame +// +// bookmark -- which way are we using? +// +// +// Quaternion from Angle-Axis: +// --------------------------- +// Suppose we wanted to represent a rotation of some angle (theta) +// about some axis ({Ax, Ay, Az})... +// +// axis of rotation = {Ax, Ay, Az} +// angle_of_rotation = theta +// +// s = sin(0.5 * theta) +// c = cos(0.5 * theta) +// Q = { s * Ax, s * Ay, s * Az, c } +// +// +// 3x3 Matrix from Quaternion +// -------------------------- +// +// | | +// | 1 - 2 * (y^2 + z^2) 2 * (x * y + z * w) 2 * (y * w - x * z) | +// | | +// M = | 2 * (x * y - z * w) 1 - 2 * (x^2 + z^2) 2 * (y * z + x * w) | +// | | +// | 2 * (x * z + y * w) 2 * (y * z - x * w) 1 - 2 * (x^2 + y^2) | +// | | + +#endif diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index bba0a6d089..ab9f8c4c24 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -45,7 +45,7 @@ #include "v4math.h" #include "m4math.h" #include "m3math.h" -#include "llmatrix4a.h" +#include "llmatrix3a.h" #include "lloctree.h" #include "lldarray.h" #include "llvolume.h" @@ -53,6 +53,7 @@ #include "llstl.h" #include "llsdserialize.h" #include "llvector4a.h" +#include "llmatrix4a.h" #define DEBUG_SILHOUETTE_BINORMALS 0 #define DEBUG_SILHOUETTE_NORMALS 0 // TomY: Use this to display normals using the silhouette @@ -161,7 +162,7 @@ BOOL LLTriangleRayIntersect(const LLVector4a& vert0, const LLVector4a& vert1, co LLVector4a det; det.setAllDot3(edge1, pvec); - if (det.greaterEqual4(LLVector4a::getApproximatelyZero()).getComparisonMask() & 0x7) + if (det.greaterEqual(LLVector4a::getEpsilon()).getGatheredBits() & 0x7) { /* calculate distance from vert0 to ray origin */ LLVector4a tvec; @@ -171,8 +172,8 @@ BOOL LLTriangleRayIntersect(const LLVector4a& vert0, const LLVector4a& vert1, co LLVector4a u; u.setAllDot3(tvec,pvec); - if ((u.greaterEqual4(LLVector4a::getZero()).getComparisonMask() & 0x7) && - (u.lessEqual4(det).getComparisonMask() & 0x7)) + if ((u.greaterEqual(LLVector4a::getZero()).getGatheredBits() & 0x7) && + (u.lessEqual(det).getGatheredBits() & 0x7)) { /* prepare to test V parameter */ LLVector4a qvec; @@ -188,8 +189,8 @@ BOOL LLTriangleRayIntersect(const LLVector4a& vert0, const LLVector4a& vert1, co LLVector4a sum_uv; sum_uv.setAdd(u, v); - S32 v_gequal = v.greaterEqual4(LLVector4a::getZero()).getComparisonMask() & 0x7; - S32 sum_lequal = sum_uv.lessEqual4(det).getComparisonMask() & 0x7; + S32 v_gequal = v.greaterEqual(LLVector4a::getZero()).getGatheredBits() & 0x7; + S32 sum_lequal = sum_uv.lessEqual(det).getGatheredBits() & 0x7; if (v_gequal && sum_lequal) { @@ -230,7 +231,7 @@ BOOL LLTriangleRayIntersectTwoSided(const LLVector4a& vert0, const LLVector4a& v pvec.setCross3(dir, edge2); /* if determinant is near zero, ray lies in plane of triangle */ - F32 det = edge1.dot3(pvec); + F32 det = edge1.dot3(pvec).getF32(); if (det > -F_APPROXIMATELY_ZERO && det < F_APPROXIMATELY_ZERO) @@ -245,7 +246,7 @@ BOOL LLTriangleRayIntersectTwoSided(const LLVector4a& vert0, const LLVector4a& v tvec.setSub(orig, vert0); /* calculate U parameter and test bounds */ - u = (tvec.dot3(pvec)) * inv_det; + u = (tvec.dot3(pvec).getF32()) * inv_det; if (u < 0.f || u > 1.f) { return FALSE; @@ -255,7 +256,7 @@ BOOL LLTriangleRayIntersectTwoSided(const LLVector4a& vert0, const LLVector4a& v tvec.sub(edge1); /* calculate V parameter and test bounds */ - v = (dir.dot3(tvec)) * inv_det; + v = (dir.dot3(tvec).getF32()) * inv_det; if (v < 0.f || u + v > 1.f) { @@ -263,7 +264,7 @@ BOOL LLTriangleRayIntersectTwoSided(const LLVector4a& vert0, const LLVector4a& v } /* calculate t, ray intersects triangle */ - t = (edge2.dot3(tvec)) * inv_det; + t = (edge2.dot3(tvec).getF32()) * inv_det; intersection_a = u; intersection_b = v; @@ -326,20 +327,20 @@ public: //stretch by triangles in node tri = *iter; - min.setMin(*tri->mV[0]); - min.setMin(*tri->mV[1]); - min.setMin(*tri->mV[2]); + min.setMin(min, *tri->mV[0]); + min.setMin(min, *tri->mV[1]); + min.setMin(min, *tri->mV[2]); - max.setMax(*tri->mV[0]); - max.setMax(*tri->mV[1]); - max.setMax(*tri->mV[2]); + max.setMax(max, *tri->mV[0]); + max.setMax(max, *tri->mV[1]); + max.setMax(max, *tri->mV[2]); } for (S32 i = 0; i < branch->getChildCount(); ++i) { //stretch by child extents LLVolumeOctreeListener* child = (LLVolumeOctreeListener*) branch->getChild(i)->getListener(0); - min.setMin(child->mExtents[0]); - max.setMax(child->mExtents[1]); + min.setMin(min, child->mExtents[0]); + max.setMax(min, child->mExtents[1]); } } else if (branch->getChildCount() != 0) @@ -352,8 +353,8 @@ public: for (S32 i = 1; i < branch->getChildCount(); ++i) { //stretch by child extents child = (LLVolumeOctreeListener*) branch->getChild(i)->getListener(0); - min.setMin(child->mExtents[0]); - max.setMax(child->mExtents[1]); + min.setMin(min, child->mExtents[0]); + max.setMax(max, child->mExtents[1]); } } else @@ -2011,7 +2012,7 @@ const LLVolumeFace::VertexData& LLVolumeFace::VertexData::operator=(const LLVolu if (this != &rhs) { init(); - LLVector4a::memcpyNonAliased16((F32*) mData, (F32*) rhs.mData, 8); + LLVector4a::memcpyNonAliased16((F32*) mData, (F32*) rhs.mData, 8*sizeof(F32)); mTexCoord = rhs.mTexCoord; } return *this; @@ -2055,8 +2056,8 @@ void LLVolumeFace::VertexData::setNormal(const LLVector4a& norm) bool LLVolumeFace::VertexData::operator<(const LLVolumeFace::VertexData& rhs)const { - const F32* lp = this->getPosition().getF32(); - const F32* rp = rhs.getPosition().getF32(); + const F32* lp = this->getPosition().getF32ptr(); + const F32* rp = rhs.getPosition().getF32ptr(); if (lp[0] != rp[0]) { @@ -2073,8 +2074,8 @@ bool LLVolumeFace::VertexData::operator<(const LLVolumeFace::VertexData& rhs)con return lp[2] < rp[2]; } - lp = getNormal().getF32(); - rp = rhs.getNormal().getF32(); + lp = getNormal().getF32ptr(); + rp = rhs.getNormal().getF32ptr(); if (lp[0] != rp[0]) { @@ -2101,23 +2102,23 @@ bool LLVolumeFace::VertexData::operator<(const LLVolumeFace::VertexData& rhs)con bool LLVolumeFace::VertexData::operator==(const LLVolumeFace::VertexData& rhs)const { - return mData[POSITION].equal3(rhs.getPosition()) && - mData[NORMAL].equal3(rhs.getNormal()) && + return mData[POSITION].equals3(rhs.getPosition()) && + mData[NORMAL].equals3(rhs.getNormal()) && mTexCoord == rhs.mTexCoord; } bool LLVolumeFace::VertexData::compareNormal(const LLVolumeFace::VertexData& rhs, F32 angle_cutoff) const { bool retval = false; - if (rhs.mData[POSITION].equal3(mData[POSITION]) && rhs.mTexCoord == mTexCoord) + if (rhs.mData[POSITION].equals3(mData[POSITION]) && rhs.mTexCoord == mTexCoord) { if (angle_cutoff > 1.f) { - retval = (mData[NORMAL].equal3(rhs.mData[NORMAL])); + retval = (mData[NORMAL].equals3(rhs.mData[NORMAL])); } else { - F32 cur_angle = rhs.mData[NORMAL].dot3(mData[NORMAL]); + F32 cur_angle = rhs.mData[NORMAL].dot3(mData[NORMAL]).getF32(); retval = cur_angle > angle_cutoff; } } @@ -2331,8 +2332,8 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) } else { - min.setMin(*pos_out); - max.setMax(*pos_out); + min.setMin(min, *pos_out); + max.setMax(max, *pos_out); } pos_out++; @@ -2944,7 +2945,7 @@ void sculpt_calc_mesh_resolution(U16 width, U16 height, U8 type, F32 detail, S32 ratio = (F32) width / (F32) height; - s = (S32)fsqrtf(((F32)vertices / ratio)); + s = (S32)(F32) sqrt(((F32)vertices / ratio)); s = llmax(s, 4); // no degenerate sizes, please t = vertices / s; @@ -5280,16 +5281,15 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) freeData(); - LLVector4a::memcpyNonAliased16((F32*) mExtents, (F32*) src.mExtents, 12); + LLVector4a::memcpyNonAliased16((F32*) mExtents, (F32*) src.mExtents, 12*sizeof(F32)); resizeVertices(src.mNumVertices); resizeIndices(src.mNumIndices); if (mNumVertices) { - S32 vert_size = mNumVertices*4; + S32 vert_size = mNumVertices*4*sizeof(F32); S32 tc_size = (mNumVertices*8+0xF) & ~0xF; - tc_size /= 4; LLVector4a::memcpyNonAliased16((F32*) mPositions, (F32*) src.mPositions, vert_size); LLVector4a::memcpyNonAliased16((F32*) mNormals, (F32*) src.mNormals, vert_size); @@ -5322,8 +5322,7 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) if (mNumIndices) { S32 idx_size = (mNumIndices*2+0xF) & ~0xF; - idx_size /= 4; - + LLVector4a::memcpyNonAliased16((F32*) mIndices, (F32*) src.mIndices, idx_size); } @@ -5388,9 +5387,9 @@ void LLVolumeFace::getVertexData(U16 index, LLVolumeFace::VertexData& cv) bool LLVolumeFace::VertexMapData::operator==(const LLVolumeFace::VertexData& rhs) const { - return getPosition().equal3(rhs.getPosition()) && + return getPosition().equals3(rhs.getPosition()) && mTexCoord == rhs.mTexCoord && - getNormal().equal3(rhs.getNormal()); + getNormal().equals3(rhs.getNormal()); } bool LLVolumeFace::VertexMapData::ComparePosition::operator()(const LLVector3& a, const LLVector3& b) const @@ -5423,7 +5422,7 @@ void LLVolumeFace::optimize(F32 angle_cutoff) getVertexData(index, cv); BOOL found = FALSE; - VertexMapData::PointMap::iterator point_iter = point_map.find(LLVector3(cv.getPosition().getF32())); + VertexMapData::PointMap::iterator point_iter = point_map.find(LLVector3(cv.getPosition().getF32ptr())); if (point_iter != point_map.end()) { //duplicate point might exist for (U32 j = 0; j < point_iter->second.size(); ++j) @@ -5455,7 +5454,7 @@ void LLVolumeFace::optimize(F32 angle_cutoff) } else { - point_map[LLVector3(d.getPosition().getF32())].push_back(d); + point_map[LLVector3(d.getPosition().getF32ptr())].push_back(d); } } } @@ -5491,12 +5490,12 @@ void LLVolumeFace::createOctree() tri->mIndex[2] = mIndices[i+2]; LLVector4a min = v0; - min.setMin(v1); - min.setMin(v2); + min.setMin(min, v1); + min.setMin(min, v2); LLVector4a max = v0; - max.setMax(v1); - max.setMax(v2); + max.setMax(max, v1); + max.setMax(max, v2); LLVector4a center; center.setAdd(min, max); @@ -5507,7 +5506,7 @@ void LLVolumeFace::createOctree() LLVector4a size; size.setSub(max,min); - tri->mRadius = size.length3() * 0.5f; + tri->mRadius = size.getLength3().getF32() * 0.5f; mOctree->insert(tri); } @@ -5655,12 +5654,13 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build) if (gx == 0 && gy == 0) { - min = max = newVert.getPosition(); + min = newVert.getPosition(); + max = min; } else { - min.setMin(newVert.getPosition()); - max.setMax(newVert.getPosition()); + min.setMin(min, newVert.getPosition()); + max.setMax(max, newVert.getPosition()); } } } @@ -5795,7 +5795,8 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) if (i == 0) { - min = max = pos[i]; + max = pos[i]; + min = max; min_uv = max_uv = tc[i]; } else @@ -5848,8 +5849,8 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) for (S32 i = 0; i < num_vertices; i++) { - binorm[i].load4a((F32*) &binormal.mQ); - norm[i].load4a((F32*) &normal.mQ); + binorm[i].load4a(binormal.getF32ptr()); + norm[i].load4a(normal.getF32ptr()); } if (partial_build) @@ -6186,7 +6187,7 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con LLVector4a* dst = (LLVector4a*) ll_aligned_malloc_16(new_size); if (mPositions) { - LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mPositions, old_size/4); + LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mPositions, old_size); ll_aligned_free_16(mPositions); } mPositions = dst; @@ -6195,7 +6196,7 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con dst = (LLVector4a*) ll_aligned_malloc_16(new_size); if (mNormals) { - LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mNormals, old_size/4); + LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mNormals, old_size); ll_aligned_free_16(mNormals); } mNormals = dst; @@ -6209,7 +6210,7 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con LLVector2* dst = (LLVector2*) ll_aligned_malloc_16(new_size); if (mTexCoords) { - LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mTexCoords, old_size/4); + LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mTexCoords, old_size); ll_aligned_free_16(mTexCoords); } } @@ -6268,7 +6269,7 @@ void LLVolumeFace::pushIndex(const U16& idx) U16* dst = (U16*) ll_aligned_malloc_16(new_size); if (mIndices) { - LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mIndices, old_size/4); + LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mIndices, old_size); ll_aligned_free_16(mIndices); } mIndices = dst; @@ -6319,9 +6320,9 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat if (mNumVertices > 0) { //copy old buffers - LLVector4a::memcpyNonAliased16((F32*) new_pos, (F32*) mPositions, mNumVertices*4); - LLVector4a::memcpyNonAliased16((F32*) new_norm, (F32*) mNormals, mNumVertices*4); - LLVector4a::memcpyNonAliased16((F32*) new_tc, (F32*) mTexCoords, mNumVertices*2); + LLVector4a::memcpyNonAliased16((F32*) new_pos, (F32*) mPositions, mNumVertices*4*sizeof(F32)); + LLVector4a::memcpyNonAliased16((F32*) new_norm, (F32*) mNormals, mNumVertices*4*sizeof(F32)); + LLVector4a::memcpyNonAliased16((F32*) new_tc, (F32*) mTexCoords, mNumVertices*2*sizeof(F32)); } //free old buffer space @@ -6382,7 +6383,7 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat if (mNumIndices > 0) { //copy old index buffer S32 old_size = (mNumIndices*2+0xF) & ~0xF; - LLVector4a::memcpyNonAliased16((F32*) new_indices, (F32*) mIndices, old_size/4); + LLVector4a::memcpyNonAliased16((F32*) new_indices, (F32*) mIndices, old_size); } //free old index buffer diff --git a/indra/llmath/tests/v2math_test.cpp b/indra/llmath/tests/v2math_test.cpp index 4660fcb955..c745b9989e 100644 --- a/indra/llmath/tests/v2math_test.cpp +++ b/indra/llmath/tests/v2math_test.cpp @@ -91,7 +91,7 @@ namespace tut F32 x = 2.2345f, y = 3.5678f ; LLVector2 vec2(x,y); ensure("magVecSquared:Fail ", is_approx_equal(vec2.magVecSquared(), (x*x + y*y))); - ensure("magVec:Fail ", is_approx_equal(vec2.magVec(), fsqrtf(x*x + y*y))); + ensure("magVec:Fail ", is_approx_equal(vec2.magVec(), (F32) sqrt(x*x + y*y))); } template<> template<> @@ -413,7 +413,7 @@ namespace tut ensure_equals("dist_vec_squared values are not equal",val2, val1); val1 = dist_vec(vec2, vec3); - val2 = fsqrtf((x1 - x2)*(x1 - x2) + (y1 - y2)* (y1 - y2)); + val2 = (F32) sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)* (y1 - y2)); ensure_equals("dist_vec values are not equal",val2, val1); } @@ -437,7 +437,7 @@ namespace tut LLVector2 vec2(x1, y1); F32 vecMag = vec2.normVec(); - F32 mag = fsqrtf(x1*x1 + y1*y1); + F32 mag = (F32) sqrt(x1*x1 + y1*y1); F32 oomag = 1.f / mag; val1 = x1 * oomag; diff --git a/indra/llmath/tests/v3color_test.cpp b/indra/llmath/tests/v3color_test.cpp index 316b6e392f..0efba8e9f3 100644 --- a/indra/llmath/tests/v3color_test.cpp +++ b/indra/llmath/tests/v3color_test.cpp @@ -99,7 +99,7 @@ namespace tut F32 r = 2.3436212f, g = 1231.f, b = 4.7849321232f; LLColor3 llcolor3(r,g,b); ensure("magVecSquared:Fail ", is_approx_equal(llcolor3.magVecSquared(), (r*r + g*g + b*b))); - ensure("magVec:Fail ", is_approx_equal(llcolor3.magVec(), fsqrtf(r*r + g*g + b*b))); + ensure("magVec:Fail ", is_approx_equal(llcolor3.magVec(), (F32) sqrt(r*r + g*g + b*b))); } template<> template<> @@ -109,7 +109,7 @@ namespace tut F32 val1, val2,val3; LLColor3 llcolor3(r,g,b); F32 vecMag = llcolor3.normVec(); - F32 mag = fsqrtf(r*r + g*g + b*b); + F32 mag = (F32) sqrt(r*r + g*g + b*b); F32 oomag = 1.f / mag; val1 = r * oomag; val2 = g * oomag; @@ -292,7 +292,7 @@ namespace tut F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f; LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2); F32 val = distVec(llcolor3,llcolor3a); - ensure("distVec failed ", is_approx_equal(fsqrtf((r1-r2)*(r1-r2) + (g1-g2)*(g1-g2) + (b1-b2)*(b1-b2)) ,val)); + ensure("distVec failed ", is_approx_equal((F32) sqrt((r1-r2)*(r1-r2) + (g1-g2)*(g1-g2) + (b1-b2)*(b1-b2)) ,val)); F32 val1 = distVec_squared(llcolor3,llcolor3a); ensure("distVec_squared failed ", is_approx_equal(((r1-r2)*(r1-r2) + (g1-g2)*(g1-g2) + (b1-b2)*(b1-b2)) ,val1)); diff --git a/indra/llmath/tests/v3dmath_test.cpp b/indra/llmath/tests/v3dmath_test.cpp index e7c949186c..894b6200f5 100644 --- a/indra/llmath/tests/v3dmath_test.cpp +++ b/indra/llmath/tests/v3dmath_test.cpp @@ -409,7 +409,7 @@ namespace tut LLVector3d vec3D(x,y,z); F64 res = (x*x + y*y + z*z) - vec3D.magVecSquared(); ensure("1:magVecSquared:Fail ", ((-F_APPROXIMATELY_ZERO <= res)&& (res <=F_APPROXIMATELY_ZERO))); - res = fsqrtf(x*x + y*y + z*z) - vec3D.magVec(); + res = (F32) sqrt(x*x + y*y + z*z) - vec3D.magVec(); ensure("2:magVec: Fail ", ((-F_APPROXIMATELY_ZERO <= res)&& (res <=F_APPROXIMATELY_ZERO))); } diff --git a/indra/llmath/tests/v3math_test.cpp b/indra/llmath/tests/v3math_test.cpp index 7faf076243..d5c8dd2f9c 100644 --- a/indra/llmath/tests/v3math_test.cpp +++ b/indra/llmath/tests/v3math_test.cpp @@ -155,7 +155,7 @@ namespace tut F32 x = 2.32f, y = 1.212f, z = -.12f; LLVector3 vec3(x,y,z); ensure("1:magVecSquared:Fail ", is_approx_equal(vec3.magVecSquared(), (x*x + y*y + z*z))); - ensure("2:magVec:Fail ", is_approx_equal(vec3.magVec(), fsqrtf(x*x + y*y + z*z))); + ensure("2:magVec:Fail ", is_approx_equal(vec3.magVec(), (F32) sqrt(x*x + y*y + z*z))); } template<> template<> @@ -515,7 +515,7 @@ namespace tut F32 val1,val2; LLVector3 vec3(x1,y1,z1),vec3a(x2,y2,z2); val1 = dist_vec(vec3,vec3a); - val2 = fsqrtf((x1 - x2)*(x1 - x2) + (y1 - y2)* (y1 - y2) + (z1 - z2)* (z1 -z2)); + val2 = (F32) sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)* (y1 - y2) + (z1 - z2)* (z1 -z2)); ensure_equals("1:dist_vec: Fail ",val2, val1); val1 = dist_vec_squared(vec3,vec3a); val2 =((x1 - x2)*(x1 - x2) + (y1 - y2)* (y1 - y2) + (z1 - z2)* (z1 -z2)); diff --git a/indra/llmath/tests/v4color_test.cpp b/indra/llmath/tests/v4color_test.cpp index 33921e0f0f..636446027a 100644 --- a/indra/llmath/tests/v4color_test.cpp +++ b/indra/llmath/tests/v4color_test.cpp @@ -161,7 +161,7 @@ namespace tut F32 r = 0x20, g = 0xFFFF, b = 0xFF; LLColor4 llcolor4(r,g,b); ensure("magVecSquared:Fail ", is_approx_equal(llcolor4.magVecSquared(), (r*r + g*g + b*b))); - ensure("magVec:Fail ", is_approx_equal(llcolor4.magVec(), fsqrtf(r*r + g*g + b*b))); + ensure("magVec:Fail ", is_approx_equal(llcolor4.magVec(), (F32) sqrt(r*r + g*g + b*b))); } template<> template<> @@ -170,7 +170,7 @@ namespace tut F32 r = 0x20, g = 0xFFFF, b = 0xFF; LLColor4 llcolor4(r,g,b); F32 vecMag = llcolor4.normVec(); - F32 mag = fsqrtf(r*r + g*g + b*b); + F32 mag = (F32) sqrt(r*r + g*g + b*b); F32 oomag = 1.f / mag; F32 val1 = r * oomag, val2 = g * oomag, val3 = b * oomag; ensure("1:normVec failed ", (is_approx_equal(val1, llcolor4.mV[0]) && is_approx_equal(val2, llcolor4.mV[1]) && is_approx_equal(val3, llcolor4.mV[2]) && is_approx_equal(vecMag, mag))); diff --git a/indra/llmath/tests/v4coloru_test.cpp b/indra/llmath/tests/v4coloru_test.cpp index 9f71cfc8cc..b3dbfece34 100644 --- a/indra/llmath/tests/v4coloru_test.cpp +++ b/indra/llmath/tests/v4coloru_test.cpp @@ -141,7 +141,7 @@ namespace tut U8 r = 0x12, g = 0xFF, b = 0xAF; LLColor4U llcolor4u(r,g,b); ensure("magVecSquared:Fail ", is_approx_equal(llcolor4u.magVecSquared(), (F32)(r*r + g*g + b*b))); - ensure("magVec:Fail ", is_approx_equal(llcolor4u.magVec(), fsqrtf(r*r + g*g + b*b))); + ensure("magVec:Fail ", is_approx_equal(llcolor4u.magVec(), (F32) sqrt((F32) (r*r + g*g + b*b)))); } template<> template<> diff --git a/indra/llmath/tests/v4math_test.cpp b/indra/llmath/tests/v4math_test.cpp index fe051c27e9..e919c90efa 100644 --- a/indra/llmath/tests/v4math_test.cpp +++ b/indra/llmath/tests/v4math_test.cpp @@ -102,7 +102,7 @@ namespace tut { F32 x = 10.f, y = -2.3f, z = -.023f; LLVector4 vec4(x,y,z); - ensure("magVec:Fail ", is_approx_equal(vec4.magVec(), fsqrtf(x*x + y*y + z*z))); + ensure("magVec:Fail ", is_approx_equal(vec4.magVec(), (F32) sqrt(x*x + y*y + z*z))); ensure("magVecSquared:Fail ", is_approx_equal(vec4.magVecSquared(), (x*x + y*y + z*z))); } @@ -343,7 +343,7 @@ namespace tut F32 val1,val2; LLVector4 vec4(x1,y1,z1),vec4a(x2,y2,z2); val1 = dist_vec(vec4,vec4a); - val2 = fsqrtf((x1 - x2)*(x1 - x2) + (y1 - y2)* (y1 - y2) + (z1 - z2)* (z1 -z2)); + val2 = (F32) sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)* (y1 - y2) + (z1 - z2)* (z1 -z2)); ensure_equals("dist_vec: Fail ",val2, val1); val1 = dist_vec_squared(vec4,vec4a); val2 =((x1 - x2)*(x1 - x2) + (y1 - y2)* (y1 - y2) + (z1 - z2)* (z1 -z2)); diff --git a/indra/llmath/v2math.cpp b/indra/llmath/v2math.cpp index 220336e0c2..2603127f75 100644 --- a/indra/llmath/v2math.cpp +++ b/indra/llmath/v2math.cpp @@ -92,7 +92,7 @@ F32 dist_vec(const LLVector2 &a, const LLVector2 &b) { F32 x = a.mV[0] - b.mV[0]; F32 y = a.mV[1] - b.mV[1]; - return fsqrtf( x*x + y*y ); + return (F32) sqrt( x*x + y*y ); } F32 dist_vec_squared(const LLVector2 &a, const LLVector2 &b) diff --git a/indra/llmath/v2math.h b/indra/llmath/v2math.h index ae26c85ce4..35fd1b6048 100644 --- a/indra/llmath/v2math.h +++ b/indra/llmath/v2math.h @@ -225,7 +225,7 @@ inline void LLVector2::setVec(const F32 *vec) inline F32 LLVector2::length(void) const { - return fsqrtf(mV[0]*mV[0] + mV[1]*mV[1]); + return (F32) sqrt(mV[0]*mV[0] + mV[1]*mV[1]); } inline F32 LLVector2::lengthSquared(void) const @@ -235,7 +235,7 @@ inline F32 LLVector2::lengthSquared(void) const inline F32 LLVector2::normalize(void) { - F32 mag = fsqrtf(mV[0]*mV[0] + mV[1]*mV[1]); + F32 mag = (F32) sqrt(mV[0]*mV[0] + mV[1]*mV[1]); F32 oomag; if (mag > FP_MAG_THRESHOLD) @@ -262,7 +262,7 @@ inline bool LLVector2::isFinite() const // deprecated inline F32 LLVector2::magVec(void) const { - return fsqrtf(mV[0]*mV[0] + mV[1]*mV[1]); + return (F32) sqrt(mV[0]*mV[0] + mV[1]*mV[1]); } // deprecated @@ -274,7 +274,7 @@ inline F32 LLVector2::magVecSquared(void) const // deprecated inline F32 LLVector2::normVec(void) { - F32 mag = fsqrtf(mV[0]*mV[0] + mV[1]*mV[1]); + F32 mag = (F32) sqrt(mV[0]*mV[0] + mV[1]*mV[1]); F32 oomag; if (mag > FP_MAG_THRESHOLD) diff --git a/indra/llmath/v3color.h b/indra/llmath/v3color.h index 1915d80502..95a3de8b62 100644 --- a/indra/llmath/v3color.h +++ b/indra/llmath/v3color.h @@ -284,7 +284,7 @@ inline F32 LLColor3::brightness(void) const inline F32 LLColor3::length(void) const { - return fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); + return (F32) sqrt(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); } inline F32 LLColor3::lengthSquared(void) const @@ -294,7 +294,7 @@ inline F32 LLColor3::lengthSquared(void) const inline F32 LLColor3::normalize(void) { - F32 mag = fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); + F32 mag = (F32) sqrt(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); F32 oomag; if (mag) @@ -310,7 +310,7 @@ inline F32 LLColor3::normalize(void) // deprecated inline F32 LLColor3::magVec(void) const { - return fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); + return (F32) sqrt(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); } // deprecated @@ -322,7 +322,7 @@ inline F32 LLColor3::magVecSquared(void) const // deprecated inline F32 LLColor3::normVec(void) { - F32 mag = fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); + F32 mag = (F32) sqrt(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); F32 oomag; if (mag) @@ -444,7 +444,7 @@ inline F32 distVec(const LLColor3 &a, const LLColor3 &b) F32 x = a.mV[0] - b.mV[0]; F32 y = a.mV[1] - b.mV[1]; F32 z = a.mV[2] - b.mV[2]; - return fsqrtf( x*x + y*y + z*z ); + return (F32) sqrt( x*x + y*y + z*z ); } inline F32 distVec_squared(const LLColor3 &a, const LLColor3 &b) diff --git a/indra/llmath/v3dmath.h b/indra/llmath/v3dmath.h index 6ab31e8a41..ab253de064 100644 --- a/indra/llmath/v3dmath.h +++ b/indra/llmath/v3dmath.h @@ -240,7 +240,7 @@ inline const LLVector3d& LLVector3d::setVec(const F64 *vec) inline F64 LLVector3d::normVec(void) { - F64 mag = fsqrtf(mdV[0]*mdV[0] + mdV[1]*mdV[1] + mdV[2]*mdV[2]); + F64 mag = (F32) sqrt(mdV[0]*mdV[0] + mdV[1]*mdV[1] + mdV[2]*mdV[2]); F64 oomag; if (mag > FP_MAG_THRESHOLD) @@ -262,7 +262,7 @@ inline F64 LLVector3d::normVec(void) inline F64 LLVector3d::normalize(void) { - F64 mag = fsqrtf(mdV[0]*mdV[0] + mdV[1]*mdV[1] + mdV[2]*mdV[2]); + F64 mag = (F32) sqrt(mdV[0]*mdV[0] + mdV[1]*mdV[1] + mdV[2]*mdV[2]); F64 oomag; if (mag > FP_MAG_THRESHOLD) @@ -286,7 +286,7 @@ inline F64 LLVector3d::normalize(void) inline F64 LLVector3d::magVec(void) const { - return fsqrtf(mdV[0]*mdV[0] + mdV[1]*mdV[1] + mdV[2]*mdV[2]); + return (F32) sqrt(mdV[0]*mdV[0] + mdV[1]*mdV[1] + mdV[2]*mdV[2]); } inline F64 LLVector3d::magVecSquared(void) const @@ -296,7 +296,7 @@ inline F64 LLVector3d::magVecSquared(void) const inline F64 LLVector3d::length(void) const { - return fsqrtf(mdV[0]*mdV[0] + mdV[1]*mdV[1] + mdV[2]*mdV[2]); + return (F32) sqrt(mdV[0]*mdV[0] + mdV[1]*mdV[1] + mdV[2]*mdV[2]); } inline F64 LLVector3d::lengthSquared(void) const @@ -406,7 +406,7 @@ inline F64 dist_vec(const LLVector3d &a, const LLVector3d &b) F64 x = a.mdV[0] - b.mdV[0]; F64 y = a.mdV[1] - b.mdV[1]; F64 z = a.mdV[2] - b.mdV[2]; - return fsqrtf( x*x + y*y + z*z ); + return (F32) sqrt( x*x + y*y + z*z ); } inline F64 dist_vec_squared(const LLVector3d &a, const LLVector3d &b) diff --git a/indra/llmath/v3math.h b/indra/llmath/v3math.h index 75c860a91e..5d483a8753 100644 --- a/indra/llmath/v3math.h +++ b/indra/llmath/v3math.h @@ -282,7 +282,7 @@ inline void LLVector3::setVec(const F32 *vec) inline F32 LLVector3::normalize(void) { - F32 mag = fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); + F32 mag = (F32) sqrt(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); F32 oomag; if (mag > FP_MAG_THRESHOLD) @@ -305,7 +305,7 @@ inline F32 LLVector3::normalize(void) // deprecated inline F32 LLVector3::normVec(void) { - F32 mag = fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); + F32 mag = (F32) sqrt(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); F32 oomag; if (mag > FP_MAG_THRESHOLD) @@ -329,7 +329,7 @@ inline F32 LLVector3::normVec(void) inline F32 LLVector3::length(void) const { - return fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); + return (F32) sqrt(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); } inline F32 LLVector3::lengthSquared(void) const @@ -339,7 +339,7 @@ inline F32 LLVector3::lengthSquared(void) const inline F32 LLVector3::magVec(void) const { - return fsqrtf(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); + return (F32) sqrt(mV[0]*mV[0] + mV[1]*mV[1] + mV[2]*mV[2]); } inline F32 LLVector3::magVecSquared(void) const @@ -473,7 +473,7 @@ inline F32 dist_vec(const LLVector3 &a, const LLVector3 &b) F32 x = a.mV[0] - b.mV[0]; F32 y = a.mV[1] - b.mV[1]; F32 z = a.mV[2] - b.mV[2]; - return fsqrtf( x*x + y*y + z*z ); + return (F32) sqrt( x*x + y*y + z*z ); } inline F32 dist_vec_squared(const LLVector3 &a, const LLVector3 &b) diff --git a/indra/llmath/v4color.h b/indra/llmath/v4color.h index 6b63b976b0..dd92e1cc63 100644 --- a/indra/llmath/v4color.h +++ b/indra/llmath/v4color.h @@ -392,7 +392,7 @@ inline const LLColor4& LLColor4::setAlpha(F32 a) inline F32 LLColor4::length(void) const { - return fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); + return (F32) sqrt(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); } inline F32 LLColor4::lengthSquared(void) const @@ -402,7 +402,7 @@ inline F32 LLColor4::lengthSquared(void) const inline F32 LLColor4::normalize(void) { - F32 mag = fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); + F32 mag = (F32) sqrt(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); F32 oomag; if (mag) @@ -418,7 +418,7 @@ inline F32 LLColor4::normalize(void) // deprecated inline F32 LLColor4::magVec(void) const { - return fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); + return (F32) sqrt(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); } // deprecated @@ -430,7 +430,7 @@ inline F32 LLColor4::magVecSquared(void) const // deprecated inline F32 LLColor4::normVec(void) { - F32 mag = fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); + F32 mag = (F32) sqrt(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); F32 oomag; if (mag) diff --git a/indra/llmath/v4coloru.h b/indra/llmath/v4coloru.h index 4ec5a345eb..08245403a1 100644 --- a/indra/llmath/v4coloru.h +++ b/indra/llmath/v4coloru.h @@ -300,7 +300,7 @@ inline const LLColor4U& LLColor4U::setAlpha(U8 a) inline F32 LLColor4U::length(void) const { - return fsqrtf( ((F32)mV[VX]) * mV[VX] + ((F32)mV[VY]) * mV[VY] + ((F32)mV[VZ]) * mV[VZ] ); + return (F32) sqrt( ((F32)mV[VX]) * mV[VX] + ((F32)mV[VY]) * mV[VY] + ((F32)mV[VZ]) * mV[VZ] ); } inline F32 LLColor4U::lengthSquared(void) const @@ -311,7 +311,7 @@ inline F32 LLColor4U::lengthSquared(void) const // deprecated inline F32 LLColor4U::magVec(void) const { - return fsqrtf( ((F32)mV[VX]) * mV[VX] + ((F32)mV[VY]) * mV[VY] + ((F32)mV[VZ]) * mV[VZ] ); + return (F32) sqrt( ((F32)mV[VX]) * mV[VX] + ((F32)mV[VY]) * mV[VY] + ((F32)mV[VZ]) * mV[VZ] ); } // deprecated diff --git a/indra/llmath/v4math.h b/indra/llmath/v4math.h index 4c82e6b629..72a477ed20 100644 --- a/indra/llmath/v4math.h +++ b/indra/llmath/v4math.h @@ -321,7 +321,7 @@ inline void LLVector4::setVec(const F32 *vec) inline F32 LLVector4::length(void) const { - return fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); + return (F32) sqrt(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); } inline F32 LLVector4::lengthSquared(void) const @@ -331,7 +331,7 @@ inline F32 LLVector4::lengthSquared(void) const inline F32 LLVector4::magVec(void) const { - return fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); + return (F32) sqrt(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); } inline F32 LLVector4::magVecSquared(void) const @@ -463,7 +463,7 @@ inline LLVector4 lerp(const LLVector4 &a, const LLVector4 &b, F32 u) inline F32 LLVector4::normalize(void) { - F32 mag = fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); + F32 mag = (F32) sqrt(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); F32 oomag; if (mag > FP_MAG_THRESHOLD) @@ -486,7 +486,7 @@ inline F32 LLVector4::normalize(void) // deprecated inline F32 LLVector4::normVec(void) { - F32 mag = fsqrtf(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); + F32 mag = (F32) sqrt(mV[VX]*mV[VX] + mV[VY]*mV[VY] + mV[VZ]*mV[VZ]); F32 oomag; if (mag > FP_MAG_THRESHOLD) diff --git a/indra/llmessage/llsdmessagebuilder.cpp b/indra/llmessage/llsdmessagebuilder.cpp index 6e41b03895..2680dd0b77 100755 --- a/indra/llmessage/llsdmessagebuilder.cpp +++ b/indra/llmessage/llsdmessagebuilder.cpp @@ -35,6 +35,7 @@ #include "llsdmessagebuilder.h" #include "llmessagetemplate.h" +#include "llmath.h" #include "llquaternion.h" #include "llsdutil.h" #include "llsdutil_math.h" diff --git a/indra/llmessage/lltemplatemessagebuilder.cpp b/indra/llmessage/lltemplatemessagebuilder.cpp index fa02456d90..6f9707ed57 100644 --- a/indra/llmessage/lltemplatemessagebuilder.cpp +++ b/indra/llmessage/lltemplatemessagebuilder.cpp @@ -35,6 +35,7 @@ #include "lltemplatemessagebuilder.h" #include "llmessagetemplate.h" +#include "llmath.h" #include "llquaternion.h" #include "u64.h" #include "v3dmath.h" diff --git a/indra/llmessage/lltemplatemessagereader.cpp b/indra/llmessage/lltemplatemessagereader.cpp index 8f56cf2521..2b67e9f6fa 100644 --- a/indra/llmessage/lltemplatemessagereader.cpp +++ b/indra/llmessage/lltemplatemessagereader.cpp @@ -36,6 +36,7 @@ #include "llfasttimer.h" #include "llmessagebuilder.h" #include "llmessagetemplate.h" +#include "llmath.h" #include "llquaternion.h" #include "message.h" #include "u64.h" diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index 70601663e6..2b1a9bbf94 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -924,7 +924,7 @@ LLVector3 LLRender::getUITranslation() { llerrs << "UI offset stack empty." << llendl; } - return LLVector3(mUIOffset[mUIStackDepth-1].getF32()); + return LLVector3(mUIOffset[mUIStackDepth-1].getF32ptr()); } LLVector3 LLRender::getUIScale() @@ -933,7 +933,7 @@ LLVector3 LLRender::getUIScale() { llerrs << "UI scale stack empty." << llendl; } - return LLVector3(mUIScale[mUIStackDepth-1].getF32()); + return LLVector3(mUIScale[mUIStackDepth-1].getF32ptr()); } diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 72d51540ef..5fae5b893f 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -1210,7 +1210,7 @@ void LLAgent::startAutoPilotGlobal(const LLVector3d &target_global, const std::s else { // Guess at a reasonable stop distance. - mAutoPilotStopDistance = fsqrtf( distance ); + mAutoPilotStopDistance = (F32) sqrt( distance ); if (mAutoPilotStopDistance < 0.5f) { mAutoPilotStopDistance = 0.5f; diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index 8d0a06378f..68f52e04bc 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -743,7 +743,7 @@ void LLDrawable::updateDistance(LLCamera& camera, bool force_update) } else { - pos = LLVector3(getPositionGroup().getF32()); + pos = LLVector3(getPositionGroup().getF32ptr()); } pos -= camera.getOrigin(); @@ -824,7 +824,7 @@ void LLDrawable::shiftPos(const LLVector4a &shift_vector) for (S32 i = 0; i < getNumFaces(); i++) { LLFace *facep = getFace(i); - facep->mCenterAgent += LLVector3(shift_vector.getF32()); + facep->mCenterAgent += LLVector3(shift_vector.getF32ptr()); facep->mExtents[0].add(shift_vector); facep->mExtents[1].add(shift_vector); @@ -1153,13 +1153,13 @@ void LLSpatialBridge::updateSpatialExtents() LLVector4a max; max.setAdd(center, delta); - newMin.setMin(min); - newMax.setMax(max); + newMin.setMin(newMin, min); + newMax.setMax(newMax, max); } LLVector4a diagonal; diagonal.setSub(newMax, newMin); - mRadius = diagonal.length3() * 0.5f; + mRadius = diagonal.getLength3().getF32() * 0.5f; mPositionGroup->setAdd(newMin,newMax); mPositionGroup->mul(0.5f); diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index af082eea3e..d698624c15 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -37,6 +37,7 @@ #include "llvoavatar.h" #include "m3math.h" +#include "llmatrix4a.h" #include "llagent.h" //for gAgent.needsRenderAvatar() #include "lldrawable.h" @@ -495,7 +496,7 @@ S32 LLDrawPoolAvatar::getNumPasses() } else { - return 3; + return 4; } #else if (LLPipeline::sImpostorRender) @@ -814,26 +815,46 @@ void LLDrawPoolAvatar::endSkinned() #if LL_MESH_ENABLED void LLDrawPoolAvatar::beginRiggedSimple() { - if (LLPipeline::sUnderWaterRender) + if (sShaderLevel > 0) { - sVertexProgram = &gSkinnedObjectSimpleWaterProgram; + if (LLPipeline::sUnderWaterRender) + { + sVertexProgram = &gSkinnedObjectSimpleWaterProgram; + } + else + { + sVertexProgram = &gSkinnedObjectSimpleProgram; + } } else { - sVertexProgram = &gSkinnedObjectSimpleProgram; + if (LLPipeline::sUnderWaterRender) + { + sVertexProgram = &gObjectSimpleWaterProgram; + } + else + { + sVertexProgram = &gObjectSimpleProgram; + } } - sDiffuseChannel = 0; - sVertexProgram->bind(); - LLVertexBuffer::sWeight4Loc = sVertexProgram->getAttribLocation(LLViewerShaderMgr::OBJECT_WEIGHT); + if (sShaderLevel > 0 || gPipeline.canUseVertexShaders()) + { + sDiffuseChannel = 0; + sVertexProgram->bind(); + LLVertexBuffer::sWeight4Loc = sVertexProgram->getAttribLocation(LLViewerShaderMgr::OBJECT_WEIGHT); + } } void LLDrawPoolAvatar::endRiggedSimple() { LLVertexBuffer::unbind(); - sVertexProgram->unbind(); - sVertexProgram = NULL; - LLVertexBuffer::sWeight4Loc = -1; + if (sShaderLevel > 0 || gPipeline.canUseVertexShaders()) + { + sVertexProgram->unbind(); + sVertexProgram = NULL; + LLVertexBuffer::sWeight4Loc = -1; + } } void LLDrawPoolAvatar::beginRiggedAlpha() @@ -1281,8 +1302,10 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) } #if LL_MESH_ENABLED -void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLFace* face, const LLMeshSkinInfo* skin, LLVolume* volume, const LLVolumeFace& vol_face) +void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace* face, const LLMeshSkinInfo* skin, LLVolume* volume, const LLVolumeFace& vol_face) { + LLVertexBuffer* buffer = face->mVertexBuffer; + U32 data_mask = 0; for (U32 i = 0; i < face->mRiggedIndex.size(); ++i) { @@ -1292,17 +1315,23 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLFace* face, const LLMeshSk } } - LLVertexBuffer* buff = face->mVertexBuffer; - - if (!buff || - buff->getTypeMask() != data_mask || - buff->getRequestedVerts() != vol_face.mNumVertices) + if (!buffer || + buffer->getTypeMask() != data_mask || + buffer->getRequestedVerts() != vol_face.mNumVertices) { face->setGeomIndex(0); face->setIndicesIndex(0); face->setSize(vol_face.mNumVertices, vol_face.mNumIndices, true); - face->mVertexBuffer = new LLVertexBuffer(data_mask, 0); + if (sShaderLevel > 0) + { + face->mVertexBuffer = new LLVertexBuffer(data_mask, GL_DYNAMIC_DRAW_ARB); + } + else + { + face->mVertexBuffer = new LLVertexBuffer(data_mask, GL_STREAM_DRAW_ARB); + } + face->mVertexBuffer->allocateBuffer(face->getGeomCount(), face->getIndicesCount(), true); U16 offset = 0; @@ -1319,7 +1348,83 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLFace* face, const LLMeshSk LLMatrix3 mat_normal(mat3); face->getGeometryVolume(*volume, face->getTEOffset(), mat_vert, mat_normal, offset, true); - buff = face->mVertexBuffer; + buffer = face->mVertexBuffer; + } + + if (sShaderLevel <= 0 && face->mLastSkinTime < avatar->getLastSkinTime()) + { //perform software vertex skinning for this face + LLStrider position; + LLStrider normal; + + buffer->getVertexStrider(position); + buffer->getNormalStrider(normal); + + LLVector4a* pos = (LLVector4a*) position.get(); + LLVector4a* norm = (LLVector4a*) normal.get(); + + //build matrix palette + LLMatrix4a mp[64]; + LLMatrix4* mat = (LLMatrix4*) mp; + + for (U32 j = 0; j < skin->mJointNames.size(); ++j) + { + LLJoint* joint = avatar->getJoint(skin->mJointNames[j]); + if (joint) + { + mat[j] = skin->mInvBindMatrix[j]; + mat[j] *= joint->getWorldMatrix(); + } + } + + LLVector4a* weight = vol_face.mWeights; + + LLMatrix4a bind_shape_matrix; + bind_shape_matrix.loadu(skin->mBindShapeMatrix); + + for (U32 j = 0; j < buffer->getRequestedVerts(); ++j) + { + LLMatrix4a final_mat; + final_mat.clear(); + + S32 idx[4]; + + LLVector4 wght; + + F32 scale = 0.f; + for (U32 k = 0; k < 4; k++) + { + F32 w = weight[j][k]; + + idx[k] = (S32) floorf(w); + wght[k] = w - floorf(w); + scale += wght[k]; + } + + wght *= 1.f/scale; + + for (U32 k = 0; k < 4; k++) + { + F32 w = wght[k]; + + LLMatrix4a src; + src.setMul(mp[idx[k]], w); + + final_mat.add(src); + } + + + LLVector4a& v = vol_face.mPositions[j]; + LLVector4a t; + LLVector4a dst; + bind_shape_matrix.affineTransform(v, t); + final_mat.affineTransform(t, dst); + pos[j] = dst; + + LLVector4a& n = vol_face.mNormals[j]; + bind_shape_matrix.rotate(n, t); + final_mat.rotate(t, dst); + norm[j] = dst; + } } } @@ -1371,7 +1476,7 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow) stop_glerror(); const LLVolumeFace& vol_face = volume->getVolumeFace(te); - updateRiggedFaceVertexBuffer(face, skin, volume, vol_face); + updateRiggedFaceVertexBuffer(avatar, face, skin, volume, vol_face); stop_glerror(); @@ -1381,30 +1486,37 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow) if (buff) { - LLMatrix4 mat[64]; + if (sShaderLevel > 0) + { //upload matrix palette to shader + LLMatrix4 mat[64]; - for (U32 i = 0; i < skin->mJointNames.size(); ++i) - { - LLJoint* joint = avatar->getJoint(skin->mJointNames[i]); - if (joint) + for (U32 i = 0; i < skin->mJointNames.size(); ++i) { - mat[i] = skin->mInvBindMatrix[i]; - mat[i] *= joint->getWorldMatrix(); + LLJoint* joint = avatar->getJoint(skin->mJointNames[i]); + if (joint) + { + mat[i] = skin->mInvBindMatrix[i]; + mat[i] *= joint->getWorldMatrix(); + } } + + stop_glerror(); + + LLDrawPoolAvatar::sVertexProgram->uniformMatrix4fv("matrixPalette", + skin->mJointNames.size(), + FALSE, + (GLfloat*) mat[0].mMatrix); + LLDrawPoolAvatar::sVertexProgram->uniformMatrix4fv("matrixPalette[0]", + skin->mJointNames.size(), + FALSE, + (GLfloat*) mat[0].mMatrix); + + stop_glerror(); + } + else + { + data_mask &= ~LLVertexBuffer::MAP_WEIGHT4; } - - stop_glerror(); - - LLDrawPoolAvatar::sVertexProgram->uniformMatrix4fv("matrixPalette", - skin->mJointNames.size(), - FALSE, - (GLfloat*) mat[0].mMatrix); - LLDrawPoolAvatar::sVertexProgram->uniformMatrix4fv("matrixPalette[0]", - skin->mJointNames.size(), - FALSE, - (GLfloat*) mat[0].mMatrix); - - stop_glerror(); buff->setBuffer(data_mask); diff --git a/indra/newview/lldrawpoolavatar.h b/indra/newview/lldrawpoolavatar.h index b01394534b..d08ae04516 100644 --- a/indra/newview/lldrawpoolavatar.h +++ b/indra/newview/lldrawpoolavatar.h @@ -138,7 +138,8 @@ public: void endDeferredRiggedSimple(); void endDeferredRiggedBump(); - void updateRiggedFaceVertexBuffer(LLFace* facep, + void updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, + LLFace* facep, const LLMeshSkinInfo* skin, LLVolume* volume, const LLVolumeFace& vol_face); diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 8533f9710c..5d7d3387a4 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -106,8 +106,8 @@ void planarProjection(LLVector2 &tc, const LLVector4a& normal, LLVector4a tangent; tangent.setCross3(binormal,normal); - tc.mV[1] = -((tangent.dot3(vec))*2 - 0.5f); - tc.mV[0] = 1.0f+((binormal.dot3(vec))*2 - 0.5f); + tc.mV[1] = -((tangent.dot3(vec).getF32())*2 - 0.5f); + tc.mV[0] = 1.0f+((binormal.dot3(vec).getF32())*2 - 0.5f); } void sphericalProjection(LLVector2 &tc, const LLVector4a& normal, @@ -156,6 +156,7 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp) mLastUpdateTime = gFrameTimeSeconds; mLastMoveTime = 0.f; + mLastSkinTime = gFrameTimeSeconds; mVSize = 0.f; mPixelArea = 16.f; mState = GLOBAL; @@ -828,8 +829,8 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f, LLVector4a max; max.setAdd(center, delta); - newMin.setMin(min); - newMax.setMax(max); + newMin.setMin(newMin,min); + newMax.setMax(newMax,max); } if (!mDrawablep->isActive()) @@ -844,11 +845,11 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f, t.mul(0.5f); //VECTORIZE THIS - mCenterLocal.set(t.getF32()); + mCenterLocal.set(t.getF32ptr()); t.setSub(newMax,newMin); t.mul(0.5f); - mBoundingSphereRadius = t.length3(); + mBoundingSphereRadius = t.getLength3().getF32(); updateCenterAgent(); } @@ -1313,7 +1314,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, { if (!do_xform) { - LLVector4a::memcpyNonAliased16((F32*) tex_coords.get(), (F32*) vf.mTexCoords, num_vertices*2); + LLVector4a::memcpyNonAliased16((F32*) tex_coords.get(), (F32*) vf.mTexCoords, num_vertices*2*sizeof(F32)); } else { @@ -1529,13 +1530,13 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, if (mDrawablep->isActive()) { LLVector3 t; - t.set(binormal.getF32()); + t.set(binormal.getF32ptr()); t *= bump_quat; binormal.load3(t.mV); } binormal.normalize3fast(); - tc += LLVector2( bump_s_primary_light_ray.dot3(tangent), bump_t_primary_light_ray.dot3(binormal) ); + tc += LLVector2( bump_s_primary_light_ray.dot3(tangent).getF32(), bump_t_primary_light_ray.dot3(binormal).getF32() ); *tex_coords2++ = tc; } @@ -1583,7 +1584,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, if (rebuild_weights && vf.mWeights) { - LLVector4a::memcpyNonAliased16((F32*) weights, (F32*) vf.mWeights, num_vertices*4); + LLVector4a::memcpyNonAliased16((F32*) weights, (F32*) vf.mWeights, num_vertices*4*sizeof(F32)); } if (rebuild_color) @@ -1705,21 +1706,21 @@ BOOL LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius) LLViewerCamera* camera = LLViewerCamera::getInstance(); - F32 size_squared = size.dot3(size); + F32 size_squared = size.dot3(size).getF32(); LLVector4a lookAt; LLVector4a t; t.load3(camera->getOrigin().mV); lookAt.setSub(center, t); - F32 dist = lookAt.length3(); + F32 dist = lookAt.getLength3().getF32(); lookAt.normalize3fast() ; //get area of circle around node - F32 app_angle = atanf(fsqrtf(size_squared) / dist); + F32 app_angle = atanf((F32) sqrt(size_squared) / dist); radius = app_angle*LLDrawable::sCurPixelAngle; mPixelArea = radius*radius * 3.14159f; LLVector4a x_axis; x_axis.load3(camera->getXAxis().mV); - cos_angle_to_view_dir = lookAt.dot3(x_axis); + cos_angle_to_view_dir = lookAt.dot3(x_axis).getF32(); //if has media, check if the face is out of the view frustum. if(hasMedia()) diff --git a/indra/newview/llface.h b/indra/newview/llface.h index b6a67c7fc4..a7d7889350 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -240,6 +240,7 @@ public: LLPointer mVertexBuffer; LLPointer mLastVertexBuffer; F32 mLastUpdateTime; + F32 mLastSkinTime; F32 mLastMoveTime; LLMatrix4* mTextureMatrix; LLDrawInfo* mDrawInfo; @@ -274,7 +275,7 @@ private: S32 mReferenceIndex; std::vector mRiggedIndex; - + F32 mVSize; F32 mPixelArea; diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index 8be4e34748..62336b03bf 100644 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -100,7 +100,7 @@ void LLVolumeImplFlexible::onParameterChanged(U16 param_type, LLNetworkData *dat void LLVolumeImplFlexible::onShift(const LLVector4a &shift_vector) { //VECTORIZE THIS - LLVector3 shift(shift_vector.getF32()); + LLVector3 shift(shift_vector.getF32ptr()); for (int section = 0; section < (1<getInterest()); // proximity distance is actually distance squared -- display it as straight distance. - debug_str += llformat("%g/", fsqrtf(impl->getProximityDistance())); + debug_str += llformat("%g/", (F32) sqrt(impl->getProximityDistance())); // s += llformat("%g/", (float)impl->getCPUUsage()); // s += llformat("%g/", (float)impl->getApproximateTextureInterest()); diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 98fbebbc5d..d84ac2e4c8 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -576,8 +576,8 @@ void LLPanelPrimMediaControls::updateShape() const LLVolumeFace& vf = volume->getVolumeFace(mTargetObjectFace); LLVector3 ext[2]; - ext[0].set(vf.mExtents[0].getF32()); - ext[1].set(vf.mExtents[1].getF32()); + ext[0].set(vf.mExtents[0].getF32ptr()); + ext[1].set(vf.mExtents[1].getF32ptr()); LLVector3 center = (ext[0]+ext[1])*0.5f; LLVector3 size = (ext[1]-ext[0])*0.5f; diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 42f09f7396..92903a6aa9 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -1124,13 +1124,13 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 & size.setSub(max_extents, min_extents); size.mul(0.5f); - mGridOrigin.set(center.getF32()); + mGridOrigin.set(center.getF32ptr()); LLDrawable* drawable = first_grid_object->mDrawable; if (drawable && drawable->isActive()) { mGridOrigin = mGridOrigin * first_grid_object->getRenderMatrix(); } - mGridScale.set(size.getF32()); + mGridScale.set(size.getF32ptr()); } } else // GRID_MODE_WORLD or just plain default @@ -3543,7 +3543,7 @@ void LLSelectMgr::deselectAllIfTooFar() { if (mDebugSelectMgr) { - llinfos << "Selection manager: auto-deselecting, select_dist = " << fsqrtf(select_dist_sq) << llendl; + llinfos << "Selection manager: auto-deselecting, select_dist = " << (F32) sqrt(select_dist_sq) << llendl; llinfos << "agent pos global = " << gAgent.getPositionGlobal() << llendl; llinfos << "selection pos global = " << selectionCenter << llendl; } diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 2335c7bb8e..e55ec03356 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -231,7 +231,7 @@ U8* get_box_fan_indices(LLCamera* camera, const LLVector4a& center) LLVector4a origin; origin.load3(camera->getOrigin().mV); - S32 cypher = center.greaterThan4(origin).getComparisonMask() & 0x7; + S32 cypher = center.greaterThan(origin).getGatheredBits() & 0x7; return sOcclusionIndices+cypher*8; } @@ -253,7 +253,7 @@ void LLSpatialGroup::buildOcclusion() r2.splat(0.25f); r2.add(mBounds[1]); - r.setMin(r2); + r.setMin(r, r2); LLVector4a* v = mOcclusionVerts; const LLVector4a& c = mBounds[0]; @@ -775,8 +775,8 @@ BOOL LLSpatialGroup::boundObjects(BOOL empty, LLVector4a& minOut, LLVector4a& ma } else { - minOut.setMin(newMin); - maxOut.setMax(newMax); + minOut.setMin(minOut, newMin); + maxOut.setMax(maxOut, newMax); } return TRUE; @@ -1220,8 +1220,8 @@ void LLSpatialGroup::updateDistance(LLCamera &camera) #endif if (!getData().empty()) { - mRadius = mSpatialPartition->mRenderByGroup ? mObjectBounds[1].length3() : - (F32) mOctreeNode->getSize().length3(); + mRadius = mSpatialPartition->mRenderByGroup ? mObjectBounds[1].getLength3().getF32() : + (F32) mOctreeNode->getSize().getLength3().getF32(); mDistance = mSpatialPartition->calcDistance(this, camera); mPixelArea = mSpatialPartition->calcPixelArea(this, camera); } @@ -1241,7 +1241,7 @@ F32 LLSpatialPartition::calcDistance(LLSpatialGroup* group, LLCamera& camera) { LLVector4a v = eye; - dist = eye.length3(); + dist = eye.getLength3().getF32(); eye.normalize3fast(); if (!group->isState(LLSpatialGroup::ALPHA_DIRTY)) @@ -1253,7 +1253,7 @@ F32 LLSpatialPartition::calcDistance(LLSpatialGroup* group, LLCamera& camera) LLVector4a diff; diff.setSub(view_angle, *group->mLastUpdateViewAngle); - if (diff.length3() > 0.64f) + if (diff.getLength3().getF32() > 0.64f) { *group->mViewAngle = view_angle; *group->mLastUpdateViewAngle = view_angle; @@ -1279,11 +1279,11 @@ F32 LLSpatialPartition::calcDistance(LLSpatialGroup* group, LLCamera& camera) t.mul(group->mObjectBounds[1]); v.sub(t); - group->mDepth = v.dot3(ata); + group->mDepth = v.dot3(ata).getF32(); } else { - dist = eye.length3(); + dist = eye.getLength3().getF32(); } if (dist < 16.f) @@ -1497,8 +1497,8 @@ BOOL LLSpatialGroup::rebound() const LLVector4a& max = group->mExtents[1]; const LLVector4a& min = group->mExtents[0]; - newMax.setMax(max); - newMin.setMin(min); + newMax.setMax(newMax, max); + newMin.setMin(newMin, min); } boundObjects(FALSE, newMin, newMax); @@ -2196,8 +2196,8 @@ BOOL LLSpatialPartition::getVisibleExtents(LLCamera& camera, LLVector3& visMin, LLOctreeCullVisExtents vis(&camera, visMina, visMaxa); vis.traverse(mOctree); - visMin.set(visMina.getF32()); - visMax.set(visMaxa.getF32()); + visMin.set(visMina.getF32ptr()); + visMax.set(visMaxa.getF32ptr()); return vis.mEmpty; } @@ -2280,13 +2280,13 @@ BOOL earlyFail(LLCamera* camera, LLSpatialGroup* group) LLVector4a max; max.setAdd(c,r); - S32 lt = e.lessThan4(min).getComparisonMask() & 0x7; + S32 lt = e.lessThan(min).getGatheredBits() & 0x7; if (lt) { return FALSE; } - S32 gt = e.greaterThan4(max).getComparisonMask() & 0x7; + S32 gt = e.greaterThan(max).getGatheredBits() & 0x7; if (gt) { return FALSE; @@ -2745,8 +2745,8 @@ void renderNormals(LLDrawable* drawablep) p.setAdd(face.mPositions[j], n); gGL.color4f(1,1,1,1); - gGL.vertex3fv(face.mPositions[j].getF32()); - gGL.vertex3fv(p.getF32()); + gGL.vertex3fv(face.mPositions[j].getF32ptr()); + gGL.vertex3fv(p.getF32ptr()); if (face.mBinormals) { @@ -2754,8 +2754,8 @@ void renderNormals(LLDrawable* drawablep) p.setAdd(face.mPositions[j], n); gGL.color4f(0,1,1,1); - gGL.vertex3fv(face.mPositions[j].getF32()); - gGL.vertex3fv(p.getF32()); + gGL.vertex3fv(face.mPositions[j].getF32ptr()); + gGL.vertex3fv(p.getF32ptr()); } } @@ -3024,8 +3024,8 @@ public: LLVolumeOctreeListener* vl = (LLVolumeOctreeListener*) branch->getListener(0); LLVector3 center, size; - center.set(vl->mBounds[0].getF32()); - size.set(vl->mBounds[1].getF32()); + center.set(vl->mBounds[0].getF32ptr()); + size.set(vl->mBounds[1].getF32ptr()); drawBoxOutline(center, size); } diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp index cef7c4abbb..917185ed04 100644 --- a/indra/newview/llviewercamera.cpp +++ b/indra/newview/llviewercamera.cpp @@ -810,7 +810,7 @@ BOOL LLViewerCamera::areVertsVisible(LLViewerObject* volumep, BOOL all_verts) render_mata.affineTransform(t, vec); } - BOOL in_frustum = pointInFrustum(LLVector3(vec.getF32())) > 0; + BOOL in_frustum = pointInFrustum(LLVector3(vec.getF32ptr())) > 0; if (( !in_frustum && all_verts) || (in_frustum && !all_verts)) diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp index 9e35b5cc51..0a181e09bb 100644 --- a/indra/newview/llviewerjointmesh.cpp +++ b/indra/newview/llviewerjointmesh.cpp @@ -726,8 +726,8 @@ void LLViewerJointMesh::updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_w U32 words = num_verts*4; - LLVector4a::memcpyNonAliased16(v, (F32*) mMesh->getCoords(), words); - LLVector4a::memcpyNonAliased16(n, (F32*) mMesh->getNormals(), words); + LLVector4a::memcpyNonAliased16(v, (F32*) mMesh->getCoords(), words*sizeof(F32)); + LLVector4a::memcpyNonAliased16(n, (F32*) mMesh->getNormals(), words*sizeof(F32)); if (!terse_update) @@ -740,9 +740,9 @@ void LLViewerJointMesh::updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_w F32* vw = (F32*) vertex_weightsp.get(); F32* cw = (F32*) clothing_weightsp.get(); - LLVector4a::memcpyNonAliased16(tc, (F32*) mMesh->getTexCoords(), num_verts*2); - LLVector4a::memcpyNonAliased16(vw, (F32*) mMesh->getWeights(), num_verts); - LLVector4a::memcpyNonAliased16(cw, (F32*) mMesh->getClothingWeights(), num_verts*4); + LLVector4a::memcpyNonAliased16(tc, (F32*) mMesh->getTexCoords(), num_verts*2*sizeof(F32)); + LLVector4a::memcpyNonAliased16(vw, (F32*) mMesh->getWeights(), num_verts*sizeof(F32)); + LLVector4a::memcpyNonAliased16(cw, (F32*) mMesh->getClothingWeights(), num_verts*4*sizeof(F32)); } const U32 idx_count = mMesh->getNumFaces()*3; diff --git a/indra/newview/llviewerjoystick.cpp b/indra/newview/llviewerjoystick.cpp index 79d8fc7df9..16a6022b86 100644 --- a/indra/newview/llviewerjoystick.cpp +++ b/indra/newview/llviewerjoystick.cpp @@ -764,7 +764,7 @@ void LLViewerJoystick::moveAvatar(bool reset) sDelta[RX_I] += (cur_delta[RX_I] - sDelta[RX_I]) * time * feather; sDelta[RY_I] += (cur_delta[RY_I] - sDelta[RY_I]) * time * feather; - handleRun(fsqrtf(sDelta[Z_I]*sDelta[Z_I] + sDelta[X_I]*sDelta[X_I])); + handleRun((F32) sqrt(sDelta[Z_I]*sDelta[Z_I] + sDelta[X_I]*sDelta[X_I])); // Allow forward/backward movement some priority if (dom_axis == Z_I) diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 178d928f57..303f339f7d 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -865,7 +865,7 @@ void LLViewerMedia::updateMedia(void *dummy_arg) // Set the low priority size for downsampling to approximately the size the texture is displayed at. { - F32 approximate_interest_dimension = fsqrtf(pimpl->getInterest()); + F32 approximate_interest_dimension = (F32) sqrt(pimpl->getInterest()); pimpl->setLowPrioritySizeLimit(llround(approximate_interest_dimension)); } diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 2b89deaa53..9587fbafb1 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2973,7 +2973,7 @@ F32 LLViewerObject::getBinRadius() const LLVector4a* ext = mDrawable->getSpatialExtents(); LLVector4a diff; diff.setSub(ext[1], ext[0]); - return diff.length3(); + return diff.getLength3().getF32(); } return getScale().magVec(); diff --git a/indra/newview/llviewerpartsim.cpp b/indra/newview/llviewerpartsim.cpp index 41848e8b7a..4759454ee7 100644 --- a/indra/newview/llviewerpartsim.cpp +++ b/indra/newview/llviewerpartsim.cpp @@ -161,8 +161,8 @@ LLViewerPartGroup::LLViewerPartGroup(const LLVector3 ¢er_agent, const F32 bo if (group != NULL) { - LLVector3 center(group->mOctreeNode->getCenter().getF32()); - LLVector3 size(group->mOctreeNode->getSize().getF32()); + LLVector3 center(group->mOctreeNode->getCenter().getF32ptr()); + LLVector3 size(group->mOctreeNode->getSize().getF32ptr()); size += LLVector3(0.01f, 0.01f, 0.01f); mMinObjPos = center - size; mMaxObjPos = center + size; diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 719c5b0da5..d50efe89dd 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -1580,7 +1580,7 @@ F32 LLViewerFetchedTexture::calcDecodePriority() S32 cur_discard = getCurrentDiscardLevelForFetching(); bool have_all_data = (cur_discard >= 0 && (cur_discard <= mDesiredDiscardLevel)); - F32 pixel_priority = fsqrtf(mMaxVirtualSize); + F32 pixel_priority = (F32) sqrt(mMaxVirtualSize); F32 priority = 0.f; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index abf22b5e5a..e50d0fce49 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -675,6 +675,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id, mTexHairColor( NULL ), mTexEyeColor( NULL ), mNeedsSkin(FALSE), + mLastSkinTime(0.f), mUpdatePeriod(1), mFullyLoaded(FALSE), mPreviousFullyLoaded(FALSE), @@ -1356,7 +1357,7 @@ void LLVOAvatar::updateSpatialExtents(LLVector4a& newMin, LLVector4a &newMax) if (isImpostor() && !needsImpostorUpdate()) { LLVector3 delta = getRenderPosition() - - ((LLVector3(mDrawable->getPositionGroup().getF32())-mImpostorOffset)); + ((LLVector3(mDrawable->getPositionGroup().getF32ptr())-mImpostorOffset)); newMin.load3( (mLastAnimExtents[0] + delta).mV); newMax.load3( (mLastAnimExtents[1] + delta).mV); @@ -1364,12 +1365,12 @@ void LLVOAvatar::updateSpatialExtents(LLVector4a& newMin, LLVector4a &newMax) else { getSpatialExtents(newMin,newMax); - mLastAnimExtents[0].set(newMin.getF32()); - mLastAnimExtents[1].set(newMax.getF32()); + mLastAnimExtents[0].set(newMin.getF32ptr()); + mLastAnimExtents[1].set(newMax.getF32ptr()); LLVector4a pos_group; pos_group.setAdd(newMin,newMax); pos_group.mul(0.5f); - mImpostorOffset = LLVector3(pos_group.getF32())-getRenderPosition(); + mImpostorOffset = LLVector3(pos_group.getF32ptr())-getRenderPosition(); mDrawable->setPositionGroup(pos_group); } } @@ -1435,7 +1436,7 @@ void LLVOAvatar::getSpatialExtents(LLVector4a& newMin, LLVector4a& newMax) distance.setSub(ext[1], ext[0]); LLVector4a max_span(max_attachment_span); - S32 lt = distance.lessThan4(max_span).getComparisonMask() & 0x7; + S32 lt = distance.lessThan(max_span).getGatheredBits() & 0x7; // Only add the prim to spatial extents calculations if it isn't a megaprim. // max_attachment_span calculated at the start of the function @@ -2533,14 +2534,14 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update) getSpatialExtents(ext[0], ext[1]); LLVector4a diff; diff.setSub(ext[1], mImpostorExtents[1]); - if (diff.length3() > 0.05f) + if (diff.getLength3().getF32() > 0.05f) { mNeedsImpostorUpdate = TRUE; } else { diff.setSub(ext[0], mImpostorExtents[0]); - if (diff.length3() > 0.05f) + if (diff.getLength3().getF32() > 0.05f) { mNeedsImpostorUpdate = TRUE; } @@ -3887,7 +3888,8 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass) mMeshLOD[MESH_ID_HAIR]->updateJointGeometry(); } mNeedsSkin = FALSE; - + mLastSkinTime = gFrameTimeSeconds; + LLVertexBuffer* vb = mDrawable->getFace(0)->mVertexBuffer; if (vb) { @@ -4231,7 +4233,7 @@ void LLVOAvatar::updateTextures() if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_AREA)) { - setDebugText(llformat("%4.0f:%4.0f", fsqrtf(mMinPixelArea),fsqrtf(mMaxPixelArea))); + setDebugText(llformat("%4.0f:%4.0f", (F32) sqrt(mMinPixelArea),(F32) sqrt(mMaxPixelArea))); } } @@ -5443,7 +5445,7 @@ void LLVOAvatar::setPixelAreaAndAngle(LLAgent &agent) } else { - F32 radius = size.length3(); + F32 radius = size.getLength3().getF32(); mAppAngle = (F32) atan2( radius, range) * RAD_TO_DEG; } diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 95b0665f7d..94b564fc8f 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -345,6 +345,7 @@ public: U32 renderImpostor(LLColor4U color = LLColor4U(255,255,255,255), S32 diffuse_channel = 0); U32 renderRigid(); U32 renderSkinned(EAvatarRenderPass pass); + F32 getLastSkinTime() { return mLastSkinTime; } U32 renderSkinnedAttachments(); U32 renderTransparent(BOOL first_pass); void renderCollisionVolumes(); @@ -357,6 +358,8 @@ private: bool shouldAlphaMask(); BOOL mNeedsSkin; // avatar has been animated and verts have not been updated + F32 mLastSkinTime; //value of gFrameTimeSeconds at last skin update + S32 mUpdatePeriod; S32 mNumInitFaces; //number of faces generated when creating the avatar drawable, does not inculde splitted faces due to long vertex buffer. diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp index fe1e36cbe8..65829b213e 100644 --- a/indra/newview/llvograss.cpp +++ b/indra/newview/llvograss.cpp @@ -328,7 +328,7 @@ void LLVOGrass::updateTextures() { if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_AREA)) { - setDebugText(llformat("%4.0f", fsqrtf(mPixelArea))); + setDebugText(llformat("%4.0f", (F32) sqrt(mPixelArea))); } getTEImage(0)->addTextureStats(mPixelArea); } diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp index 63f662c5a1..c047758a59 100644 --- a/indra/newview/llvosurfacepatch.cpp +++ b/indra/newview/llvosurfacepatch.cpp @@ -999,8 +999,8 @@ BOOL LLVOSurfacePatch::lineSegmentIntersect(const LLVector3& start, const LLVect const LLVector4a* exta = mDrawable->getSpatialExtents(); LLVector3 ext[2]; - ext[0].set(exta[0].getF32()); - ext[1].set(exta[1].getF32()); + ext[0].set(exta[0].getF32ptr()); + ext[1].set(exta[1].getF32ptr()); F32 rad = (delta*tdelta).magVecSquared(); diff --git a/indra/newview/llvotextbubble.cpp b/indra/newview/llvotextbubble.cpp index 339da3c0bf..e790373d02 100644 --- a/indra/newview/llvotextbubble.cpp +++ b/indra/newview/llvotextbubble.cpp @@ -254,8 +254,8 @@ void LLVOTextBubble::getGeometry(S32 idx, LLVector2* dst_tc = (LLVector2*) texcoordsp.get(); LLVector2* src_tc = (LLVector2*) face.mTexCoords; - LLVector4a::memcpyNonAliased16((F32*) dst_norm, (F32*) src_norm, face.mNumVertices*4); - LLVector4a::memcpyNonAliased16((F32*) dst_tc, (F32*) src_tc, face.mNumVertices*2); + LLVector4a::memcpyNonAliased16((F32*) dst_norm, (F32*) src_norm, face.mNumVertices*4*sizeof(F32)); + LLVector4a::memcpyNonAliased16((F32*) dst_tc, (F32*) src_tc, face.mNumVertices*2*sizeof(F32)); for (U32 i = 0; i < face.mNumVertices; i++) diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index eb790b04cc..e3b4efb9dd 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -472,7 +472,7 @@ void LLVOTree::updateTextures() { if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_AREA)) { - setDebugText(llformat("%4.0f", fsqrtf(mPixelArea))); + setDebugText(llformat("%4.0f", (F32) sqrt(mPixelArea))); } mTreeImagep->addTextureStats(mPixelArea); } @@ -1278,8 +1278,8 @@ BOOL LLVOTree::lineSegmentIntersect(const LLVector3& start, const LLVector3& end //VECTORIZE THIS LLVector3 ext[2]; - ext[0].set(exta[0].getF32()); - ext[1].set(exta[1].getF32()); + ext[0].set(exta[0].getF32ptr()); + ext[1].set(exta[1].getF32ptr()); LLVector3 center = (ext[1]+ext[0])*0.5f; LLVector3 size = (ext[1]-ext[0]); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 1397b64623..128fd15142 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -696,7 +696,7 @@ void LLVOVolume::updateTextureVirtualSize() const LLTextureEntry *te = face->getTextureEntry(); LLViewerTexture *imagep = face->getTexture(); if (!imagep || !te || - face->mExtents[0].equal3(face->mExtents[1])) + face->mExtents[0].equals3(face->mExtents[1])) { continue; } @@ -820,15 +820,15 @@ void LLVOVolume::updateTextureVirtualSize() if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_AREA)) { - setDebugText(llformat("%.0f:%.0f", fsqrtf(min_vsize),fsqrtf(max_vsize))); + setDebugText(llformat("%.0f:%.0f", (F32) sqrt(min_vsize),(F32) sqrt(max_vsize))); } else if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY)) { - setDebugText(llformat("%.0f:%.0f", fsqrtf(min_vsize),fsqrtf(max_vsize))); + setDebugText(llformat("%.0f:%.0f", (F32) sqrt(min_vsize),(F32) sqrt(max_vsize))); } else if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_FACE_AREA)) { - setDebugText(llformat("%.0f:%.0f", fsqrtf(min_vsize),fsqrtf(max_vsize))); + setDebugText(llformat("%.0f:%.0f", (F32) sqrt(min_vsize),(F32) sqrt(max_vsize))); } if (mPixelArea == 0) @@ -1355,8 +1355,8 @@ BOOL LLVOVolume::genBBoxes(BOOL force_global) } else { - min.setMin(face->mExtents[0]); - max.setMax(face->mExtents[1]); + min.setMin(min, face->mExtents[0]); + max.setMax(max, face->mExtents[1]); } } } @@ -1864,7 +1864,7 @@ LLVector3 LLVOVolume::getApproximateFaceNormal(U8 face_id) result.add(face.mNormals[i]); } - LLVector3 ret((F32*) &result.mQ); + LLVector3 ret(result.getF32ptr()); ret = volumeDirectionToAgent(ret); ret.normVec(); } @@ -3075,7 +3075,7 @@ F32 LLVOVolume::getBinRadius() LLVector4a rad; rad.setSub(ext[1], ext[0]); - radius = rad.length3()*0.5f; + radius = rad.getLength3().getF32()*0.5f; } else if (mDrawable->isStatic()) { diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index a1e4df8a66..53eca0d08e 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -591,7 +591,7 @@ void LLWorld::updateVisibilities() region_list_t::iterator curiter = iter++; LLViewerRegion* regionp = *curiter; F32 height = regionp->getLand().getMaxZ() - regionp->getLand().getMinZ(); - F32 radius = 0.5f*fsqrtf(height * height + diagonal_squared); + F32 radius = 0.5f*(F32) sqrt(height * height + diagonal_squared); if (!regionp->getLand().hasZData() || LLViewerCamera::getInstance()->sphereInFrustum(regionp->getCenterAgent(), radius)) { @@ -612,7 +612,7 @@ void LLWorld::updateVisibilities() } F32 height = regionp->getLand().getMaxZ() - regionp->getLand().getMinZ(); - F32 radius = 0.5f*fsqrtf(height * height + diagonal_squared); + F32 radius = 0.5f*(F32) sqrt(height * height + diagonal_squared); if (LLViewerCamera::getInstance()->sphereInFrustum(regionp->getCenterAgent(), radius)) { regionp->calculateCameraDistance(); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index fec7da1dd0..b0a7b1ce83 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -1522,7 +1522,7 @@ F32 LLPipeline::calcPixelArea(const LLVector4a& center, const LLVector4a& size, LLVector4a lookAt; lookAt.setSub(center, origin); - F32 dist = lookAt.length3(); + F32 dist = lookAt.getLength3().getF32(); //ramp down distance for nearby objects //shrink dist by dist/16. @@ -1534,7 +1534,7 @@ F32 LLPipeline::calcPixelArea(const LLVector4a& center, const LLVector4a& size, } //get area of circle around node - F32 app_angle = atanf(size.length3()/dist); + F32 app_angle = atanf(size.getLength3().getF32()/dist); F32 radius = app_angle*LLDrawable::sCurPixelAngle; return radius*radius * F_PI; } @@ -4671,7 +4671,7 @@ static F32 calc_light_dist(LLVOVolume* light, const LLVector3& cam_pos, F32 max_ { return max_dist; } - F32 dist = fsqrtf(dist2); + F32 dist = (F32) sqrt(dist2); dist *= 1.f / inten; dist -= radius; if (selected) @@ -6980,7 +6980,7 @@ void LLPipeline::renderDeferredLighting() LLVector4a center; center.load3(drawablep->getPositionAgent().mV); - const F32* c = center.getF32(); + const F32* c = center.getF32ptr(); F32 s = volume->getLightRadius()*1.5f; LLColor3 col = volume->getLightColor(); @@ -7078,7 +7078,7 @@ void LLPipeline::renderDeferredLighting() LLVector4a center; center.load3(drawablep->getPositionAgent().mV); - const F32* c = center.getF32(); + const F32* c = center.getF32ptr(); F32 s = volume->getLightRadius()*1.5f; sVisibleLightCount++; @@ -9184,8 +9184,8 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar) up.mul(up); up.normalize3fast(); - tdim.mV[0] = fabsf(half_height.dot3(left)); - tdim.mV[1] = fabsf(half_height.dot3(up)); + tdim.mV[0] = fabsf(half_height.dot3(left).getF32()); + tdim.mV[1] = fabsf(half_height.dot3(up).getF32()); glMatrixMode(GL_PROJECTION); glPushMatrix(); -- cgit v1.3 From 45df2d70f018512055ed15fa52c9efd3d8e833e8 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 19 Aug 2010 13:08:57 -0500 Subject: More line endings. --- indra/cmake/00-Common.cmake | 2 +- indra/llmath/CMakeLists.txt | 256 +++--- indra/llmath/llmath.h | 1018 +++++++++++----------- indra/llmath/llquantize.h | 316 +++---- indra/llmath/llquaternion.cpp | 1922 ++++++++++++++++++++--------------------- indra/llmath/llquaternion.h | 1188 ++++++++++++------------- 6 files changed, 2351 insertions(+), 2351 deletions(-) (limited to 'indra/llmath') diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index f10a61e1e7..8262462ced 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -68,7 +68,7 @@ if (WINDOWS) add_definitions( /Zc:wchar_t- - /arch:SSE2 + /arch:SSE2 ) endif (MSVC80 OR MSVC90) diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt index 8d85765eb8..9dadad7dd3 100644 --- a/indra/llmath/CMakeLists.txt +++ b/indra/llmath/CMakeLists.txt @@ -1,128 +1,128 @@ -# -*- cmake -*- - -project(llmath) - -include(00-Common) -include(LLCommon) - -include_directories( - ${LLCOMMON_INCLUDE_DIRS} - ) - -set(llmath_SOURCE_FILES - llbbox.cpp - llbboxlocal.cpp - llcamera.cpp - llcoordframe.cpp - llline.cpp - llmatrix3a.cpp - llmodularmath.cpp - llperlin.cpp - llquaternion.cpp - llrect.cpp - llsphere.cpp - llvector4a.cpp - llvolume.cpp - llvolumemgr.cpp - llvolumeoctree.cpp - llsdutil_math.cpp - m3math.cpp - m4math.cpp - raytrace.cpp - v2math.cpp - v3color.cpp - v3dmath.cpp - v3math.cpp - v4color.cpp - v4coloru.cpp - v4math.cpp - xform.cpp - ) - -set(llmath_HEADER_FILES - CMakeLists.txt - - camera.h - coordframe.h - llbbox.h - llbboxlocal.h - llcamera.h - llcoord.h - llcoordframe.h - llinterp.h - llline.h - llmath.h - llmatrix3a.h - llmatrix3a.inl - llmodularmath.h - lloctree.h - llperlin.h - llplane.h - llquantize.h - llquaternion.h - llquaternion2.h - llquaternion2.inl - llrect.h - llsimdmath.h - llsimdtypes.h - llsimdtypes.inl - llsphere.h - lltreenode.h - llvector4a.h - llvector4a.inl - llvector4logical.h - llv4math.h - llv4matrix3.h - llv4matrix4.h - llv4vector3.h - llvolume.h - llvolumemgr.h - llvolumeoctree.h - llsdutil_math.h - m3math.h - m4math.h - raytrace.h - v2math.h - v3color.h - v3dmath.h - v3math.h - v4color.h - v4coloru.h - v4math.h - xform.h - ) - -set_source_files_properties(${llmath_HEADER_FILES} - PROPERTIES HEADER_FILE_ONLY TRUE) - -list(APPEND llmath_SOURCE_FILES ${llmath_HEADER_FILES}) - -add_library (llmath ${llmath_SOURCE_FILES}) - -# Add tests -if (LL_TESTS) - include(LLAddBuildTest) - # UNIT TESTS - SET(llmath_TEST_SOURCE_FILES - llbboxlocal.cpp - llmodularmath.cpp - llrect.cpp - v2math.cpp - v3color.cpp - v4color.cpp - v4coloru.cpp - ) - LL_ADD_PROJECT_UNIT_TESTS(llmath "${llmath_TEST_SOURCE_FILES}") - - # INTEGRATION TESTS - set(test_libs llmath llcommon ${LLCOMMON_LIBRARIES} ${WINDOWS_LIBRARIES}) - # TODO: Some of these need refactoring to be proper Unit tests rather than Integration tests. - LL_ADD_INTEGRATION_TEST(llbbox llbbox.cpp "${test_libs}") - LL_ADD_INTEGRATION_TEST(llquaternion llquaternion.cpp "${test_libs}") - LL_ADD_INTEGRATION_TEST(mathmisc "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(m3math "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(v3dmath v3dmath.cpp "${test_libs}") - LL_ADD_INTEGRATION_TEST(v3math v3math.cpp "${test_libs}") - LL_ADD_INTEGRATION_TEST(v4math v4math.cpp "${test_libs}") - LL_ADD_INTEGRATION_TEST(xform xform.cpp "${test_libs}") -endif (LL_TESTS) +# -*- cmake -*- + +project(llmath) + +include(00-Common) +include(LLCommon) + +include_directories( + ${LLCOMMON_INCLUDE_DIRS} + ) + +set(llmath_SOURCE_FILES + llbbox.cpp + llbboxlocal.cpp + llcamera.cpp + llcoordframe.cpp + llline.cpp + llmatrix3a.cpp + llmodularmath.cpp + llperlin.cpp + llquaternion.cpp + llrect.cpp + llsphere.cpp + llvector4a.cpp + llvolume.cpp + llvolumemgr.cpp + llvolumeoctree.cpp + llsdutil_math.cpp + m3math.cpp + m4math.cpp + raytrace.cpp + v2math.cpp + v3color.cpp + v3dmath.cpp + v3math.cpp + v4color.cpp + v4coloru.cpp + v4math.cpp + xform.cpp + ) + +set(llmath_HEADER_FILES + CMakeLists.txt + + camera.h + coordframe.h + llbbox.h + llbboxlocal.h + llcamera.h + llcoord.h + llcoordframe.h + llinterp.h + llline.h + llmath.h + llmatrix3a.h + llmatrix3a.inl + llmodularmath.h + lloctree.h + llperlin.h + llplane.h + llquantize.h + llquaternion.h + llquaternion2.h + llquaternion2.inl + llrect.h + llsimdmath.h + llsimdtypes.h + llsimdtypes.inl + llsphere.h + lltreenode.h + llvector4a.h + llvector4a.inl + llvector4logical.h + llv4math.h + llv4matrix3.h + llv4matrix4.h + llv4vector3.h + llvolume.h + llvolumemgr.h + llvolumeoctree.h + llsdutil_math.h + m3math.h + m4math.h + raytrace.h + v2math.h + v3color.h + v3dmath.h + v3math.h + v4color.h + v4coloru.h + v4math.h + xform.h + ) + +set_source_files_properties(${llmath_HEADER_FILES} + PROPERTIES HEADER_FILE_ONLY TRUE) + +list(APPEND llmath_SOURCE_FILES ${llmath_HEADER_FILES}) + +add_library (llmath ${llmath_SOURCE_FILES}) + +# Add tests +if (LL_TESTS) + include(LLAddBuildTest) + # UNIT TESTS + SET(llmath_TEST_SOURCE_FILES + llbboxlocal.cpp + llmodularmath.cpp + llrect.cpp + v2math.cpp + v3color.cpp + v4color.cpp + v4coloru.cpp + ) + LL_ADD_PROJECT_UNIT_TESTS(llmath "${llmath_TEST_SOURCE_FILES}") + + # INTEGRATION TESTS + set(test_libs llmath llcommon ${LLCOMMON_LIBRARIES} ${WINDOWS_LIBRARIES}) + # TODO: Some of these need refactoring to be proper Unit tests rather than Integration tests. + LL_ADD_INTEGRATION_TEST(llbbox llbbox.cpp "${test_libs}") + LL_ADD_INTEGRATION_TEST(llquaternion llquaternion.cpp "${test_libs}") + LL_ADD_INTEGRATION_TEST(mathmisc "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(m3math "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(v3dmath v3dmath.cpp "${test_libs}") + LL_ADD_INTEGRATION_TEST(v3math v3math.cpp "${test_libs}") + LL_ADD_INTEGRATION_TEST(v4math v4math.cpp "${test_libs}") + LL_ADD_INTEGRATION_TEST(xform xform.cpp "${test_libs}") +endif (LL_TESTS) diff --git a/indra/llmath/llmath.h b/indra/llmath/llmath.h index 742bbc4751..e572381b1a 100644 --- a/indra/llmath/llmath.h +++ b/indra/llmath/llmath.h @@ -1,509 +1,509 @@ -/** - * @file llmath.h - * @brief Useful math constants and macros. - * - * $LicenseInfo:firstyear=2000&license=viewergpl$ - * - * Copyright (c) 2000-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#ifndef LLMATH_H -#define LLMATH_H - -#include -#include -#include "lldefs.h" -//#include "llstl.h" // *TODO: Remove when LLString is gone -//#include "llstring.h" // *TODO: Remove when LLString is gone -// lltut.h uses is_approx_equal_fraction(). This was moved to its own header -// file in llcommon so we can use lltut.h for llcommon tests without making -// llcommon depend on llmath. -#include "is_approx_equal_fraction.h" - -// work around for Windows & older gcc non-standard function names. -#if LL_WINDOWS -#include -#define llisnan(val) _isnan(val) -#define llfinite(val) _finite(val) -#elif (LL_LINUX && __GNUC__ <= 2) -#define llisnan(val) isnan(val) -#define llfinite(val) isfinite(val) -#elif LL_SOLARIS -#define llisnan(val) isnan(val) -#define llfinite(val) (val <= std::numeric_limits::max()) -#else -#define llisnan(val) std::isnan(val) -#define llfinite(val) std::isfinite(val) -#endif - -// Single Precision Floating Point Routines -// (There used to be more defined here, but they appeared to be redundant and -// were breaking some other includes. Removed by Falcon, reviewed by Andrew, 11/25/09) -/*#ifndef tanf -#define tanf(x) ((F32)tan((F64)(x))) -#endif*/ - -const F32 GRAVITY = -9.8f; - -// mathematical constants -const F32 F_PI = 3.1415926535897932384626433832795f; -const F32 F_TWO_PI = 6.283185307179586476925286766559f; -const F32 F_PI_BY_TWO = 1.5707963267948966192313216916398f; -const F32 F_SQRT_TWO_PI = 2.506628274631000502415765284811f; -const F32 F_E = 2.71828182845904523536f; -const F32 F_SQRT2 = 1.4142135623730950488016887242097f; -const F32 F_SQRT3 = 1.73205080756888288657986402541f; -const F32 OO_SQRT2 = 0.7071067811865475244008443621049f; -const F32 DEG_TO_RAD = 0.017453292519943295769236907684886f; -const F32 RAD_TO_DEG = 57.295779513082320876798154814105f; -const F32 F_APPROXIMATELY_ZERO = 0.00001f; -const F32 F_LN2 = 0.69314718056f; -const F32 OO_LN2 = 1.4426950408889634073599246810019f; - -const F32 F_ALMOST_ZERO = 0.0001f; -const F32 F_ALMOST_ONE = 1.0f - F_ALMOST_ZERO; - -// BUG: Eliminate in favor of F_APPROXIMATELY_ZERO above? -const F32 FP_MAG_THRESHOLD = 0.0000001f; - -// TODO: Replace with logic like is_approx_equal -inline BOOL is_approx_zero( F32 f ) { return (-F_APPROXIMATELY_ZERO < f) && (f < F_APPROXIMATELY_ZERO); } - -// These functions work by interpreting sign+exp+mantissa as an unsigned -// integer. -// For example: -// x = 1 00000010 00000000000000000000000 -// y = 1 00000001 11111111111111111111111 -// -// interpreted as ints = -// x = 10000001000000000000000000000000 -// y = 10000000111111111111111111111111 -// which is clearly a different of 1 in the least significant bit -// Values with the same exponent can be trivially shown to work. -// -// WARNING: Denormals of opposite sign do not work -// x = 1 00000000 00000000000000000000001 -// y = 0 00000000 00000000000000000000001 -// Although these values differ by 2 in the LSB, the sign bit makes -// the int comparison fail. -// -// WARNING: NaNs can compare equal -// There is no special treatment of exceptional values like NaNs -// -// WARNING: Infinity is comparable with F32_MAX and negative -// infinity is comparable with F32_MIN - -inline BOOL is_approx_equal(F32 x, F32 y) -{ - const S32 COMPARE_MANTISSA_UP_TO_BIT = 0x02; - return (std::abs((S32) ((U32&)x - (U32&)y) ) < COMPARE_MANTISSA_UP_TO_BIT); -} - -inline BOOL is_approx_equal(F64 x, F64 y) -{ - const S64 COMPARE_MANTISSA_UP_TO_BIT = 0x02; - return (std::abs((S32) ((U64&)x - (U64&)y) ) < COMPARE_MANTISSA_UP_TO_BIT); -} - -inline S32 llabs(const S32 a) -{ - return S32(std::labs(a)); -} - -inline F32 llabs(const F32 a) -{ - return F32(std::fabs(a)); -} - -inline F64 llabs(const F64 a) -{ - return F64(std::fabs(a)); -} - -inline S32 lltrunc( F32 f ) -{ -#if LL_WINDOWS && !defined( __INTEL_COMPILER ) - // Avoids changing the floating point control word. - // Add or subtract 0.5 - epsilon and then round - const static U32 zpfp[] = { 0xBEFFFFFF, 0x3EFFFFFF }; - S32 result; - __asm { - fld f - mov eax, f - shr eax, 29 - and eax, 4 - fadd dword ptr [zpfp + eax] - fistp result - } - return result; -#else - return (S32)f; -#endif -} - -inline S32 lltrunc( F64 f ) -{ - return (S32)f; -} - -inline S32 llfloor( F32 f ) -{ -#if LL_WINDOWS && !defined( __INTEL_COMPILER ) - // Avoids changing the floating point control word. - // Accurate (unlike Stereopsis version) for all values between S32_MIN and S32_MAX and slightly faster than Stereopsis version. - // Add -(0.5 - epsilon) and then round - const U32 zpfp = 0xBEFFFFFF; - S32 result; - __asm { - fld f - fadd dword ptr [zpfp] - fistp result - } - return result; -#else - return (S32)floor(f); -#endif -} - - -inline S32 llceil( F32 f ) -{ - // This could probably be optimized, but this works. - return (S32)ceil(f); -} - - -#ifndef BOGUS_ROUND -// Use this round. Does an arithmetic round (0.5 always rounds up) -inline S32 llround(const F32 val) -{ - return llfloor(val + 0.5f); -} - -#else // BOGUS_ROUND -// Old llround implementation - does banker's round (toward nearest even in the case of a 0.5. -// Not using this because we don't have a consistent implementation on both platforms, use -// llfloor(val + 0.5f), which is consistent on all platforms. -inline S32 llround(const F32 val) -{ - #if LL_WINDOWS - // Note: assumes that the floating point control word is set to rounding mode (the default) - S32 ret_val; - _asm fld val - _asm fistp ret_val; - return ret_val; - #elif LL_LINUX - // Note: assumes that the floating point control word is set - // to rounding mode (the default) - S32 ret_val; - __asm__ __volatile__( "flds %1 \n\t" - "fistpl %0 \n\t" - : "=m" (ret_val) - : "m" (val) ); - return ret_val; - #else - return llfloor(val + 0.5f); - #endif -} - -// A fast arithmentic round on intel, from Laurent de Soras http://ldesoras.free.fr -inline int round_int(double x) -{ - const float round_to_nearest = 0.5f; - int i; - __asm - { - fld x - fadd st, st (0) - fadd round_to_nearest - fistp i - sar i, 1 - } - return (i); -} -#endif // BOGUS_ROUND - -inline F32 llround( F32 val, F32 nearest ) -{ - return F32(floor(val * (1.0f / nearest) + 0.5f)) * nearest; -} - -inline F64 llround( F64 val, F64 nearest ) -{ - return F64(floor(val * (1.0 / nearest) + 0.5)) * nearest; -} - -// these provide minimum peak error -// -// avg error = -0.013049 -// peak error = -31.4 dB -// RMS error = -28.1 dB - -const F32 FAST_MAG_ALPHA = 0.960433870103f; -const F32 FAST_MAG_BETA = 0.397824734759f; - -// these provide minimum RMS error -// -// avg error = 0.000003 -// peak error = -32.6 dB -// RMS error = -25.7 dB -// -//const F32 FAST_MAG_ALPHA = 0.948059448969f; -//const F32 FAST_MAG_BETA = 0.392699081699f; - -inline F32 fastMagnitude(F32 a, F32 b) -{ - a = (a > 0) ? a : -a; - b = (b > 0) ? b : -b; - return(FAST_MAG_ALPHA * llmax(a,b) + FAST_MAG_BETA * llmin(a,b)); -} - - - -//////////////////// -// -// Fast F32/S32 conversions -// -// Culled from www.stereopsis.com/FPU.html - -const F64 LL_DOUBLE_TO_FIX_MAGIC = 68719476736.0*1.5; //2^36 * 1.5, (52-_shiftamt=36) uses limited precisicion to floor -const S32 LL_SHIFT_AMOUNT = 16; //16.16 fixed point representation, - -// Endian dependent code -#ifdef LL_LITTLE_ENDIAN - #define LL_EXP_INDEX 1 - #define LL_MAN_INDEX 0 -#else - #define LL_EXP_INDEX 0 - #define LL_MAN_INDEX 1 -#endif - -/* Deprecated: use llround(), lltrunc(), or llfloor() instead -// ================================================================================================ -// Real2Int -// ================================================================================================ -inline S32 F64toS32(F64 val) -{ - val = val + LL_DOUBLE_TO_FIX_MAGIC; - return ((S32*)&val)[LL_MAN_INDEX] >> LL_SHIFT_AMOUNT; -} - -// ================================================================================================ -// Real2Int -// ================================================================================================ -inline S32 F32toS32(F32 val) -{ - return F64toS32 ((F64)val); -} -*/ - -//////////////////////////////////////////////// -// -// Fast exp and log -// - -// Implementation of fast exp() approximation (from a paper by Nicol N. Schraudolph -// http://www.inf.ethz.ch/~schraudo/pubs/exp.pdf -static union -{ - double d; - struct - { -#ifdef LL_LITTLE_ENDIAN - S32 j, i; -#else - S32 i, j; -#endif - } n; -} LLECO; // not sure what the name means - -#define LL_EXP_A (1048576 * OO_LN2) // use 1512775 for integer -#define LL_EXP_C (60801) // this value of C good for -4 < y < 4 - -#define LL_FAST_EXP(y) (LLECO.n.i = llround(F32(LL_EXP_A*(y))) + (1072693248 - LL_EXP_C), LLECO.d) - - - -inline F32 llfastpow(const F32 x, const F32 y) -{ - return (F32)(LL_FAST_EXP(y * log(x))); -} - - -inline F32 snap_to_sig_figs(F32 foo, S32 sig_figs) -{ - // compute the power of ten - F32 bar = 1.f; - for (S32 i = 0; i < sig_figs; i++) - { - bar *= 10.f; - } - - //F32 new_foo = (F32)llround(foo * bar); - // the llround() implementation sucks. Don't us it. - - F32 sign = (foo > 0.f) ? 1.f : -1.f; - F32 new_foo = F32( S64(foo * bar + sign * 0.5f)); - new_foo /= bar; - - return new_foo; -} - -inline F32 lerp(F32 a, F32 b, F32 u) -{ - return a + ((b - a) * u); -} - -inline F32 lerp2d(F32 x00, F32 x01, F32 x10, F32 x11, F32 u, F32 v) -{ - F32 a = x00 + (x01-x00)*u; - F32 b = x10 + (x11-x10)*u; - F32 r = a + (b-a)*v; - return r; -} - -inline F32 ramp(F32 x, F32 a, F32 b) -{ - return (a == b) ? 0.0f : ((a - x) / (a - b)); -} - -inline F32 rescale(F32 x, F32 x1, F32 x2, F32 y1, F32 y2) -{ - return lerp(y1, y2, ramp(x, x1, x2)); -} - -inline F32 clamp_rescale(F32 x, F32 x1, F32 x2, F32 y1, F32 y2) -{ - if (y1 < y2) - { - return llclamp(rescale(x,x1,x2,y1,y2),y1,y2); - } - else - { - return llclamp(rescale(x,x1,x2,y1,y2),y2,y1); - } -} - - -inline F32 cubic_step( F32 x, F32 x0, F32 x1, F32 s0, F32 s1 ) -{ - if (x <= x0) - return s0; - - if (x >= x1) - return s1; - - F32 f = (x - x0) / (x1 - x0); - - return s0 + (s1 - s0) * (f * f) * (3.0f - 2.0f * f); -} - -inline F32 cubic_step( F32 x ) -{ - x = llclampf(x); - - return (x * x) * (3.0f - 2.0f * x); -} - -inline F32 quadratic_step( F32 x, F32 x0, F32 x1, F32 s0, F32 s1 ) -{ - if (x <= x0) - return s0; - - if (x >= x1) - return s1; - - F32 f = (x - x0) / (x1 - x0); - F32 f_squared = f * f; - - return (s0 * (1.f - f_squared)) + ((s1 - s0) * f_squared); -} - -inline F32 llsimple_angle(F32 angle) -{ - while(angle <= -F_PI) - angle += F_TWO_PI; - while(angle > F_PI) - angle -= F_TWO_PI; - return angle; -} - -//SDK - Renamed this to get_lower_power_two, since this is what this actually does. -inline U32 get_lower_power_two(U32 val, U32 max_power_two) -{ - if(!max_power_two) - { - max_power_two = 1 << 31 ; - } - if(max_power_two & (max_power_two - 1)) - { - return 0 ; - } - - for(; val < max_power_two ; max_power_two >>= 1) ; - - return max_power_two ; -} - -// calculate next highest power of two, limited by max_power_two -// This is taken from a brilliant little code snipped on http://acius2.blogspot.com/2007/11/calculating-next-power-of-2.html -// Basically we convert the binary to a solid string of 1's with the same -// number of digits, then add one. We subtract 1 initially to handle -// the case where the number passed in is actually a power of two. -// WARNING: this only works with 32 bit ints. -inline U32 get_next_power_two(U32 val, U32 max_power_two) -{ - if(!max_power_two) - { - max_power_two = 1 << 31 ; - } - - if(val >= max_power_two) - { - return max_power_two; - } - - val--; - val = (val >> 1) | val; - val = (val >> 2) | val; - val = (val >> 4) | val; - val = (val >> 8) | val; - val = (val >> 16) | val; - val++; - - return val; -} - -//get the gaussian value given the linear distance from axis x and guassian value o -inline F32 llgaussian(F32 x, F32 o) -{ - return 1.f/(F_SQRT_TWO_PI*o)*powf(F_E, -(x*x)/(2*o*o)); -} - -// Include simd math header -#include "llsimdmath.h" - -#endif +/** + * @file llmath.h + * @brief Useful math constants and macros. + * + * $LicenseInfo:firstyear=2000&license=viewergpl$ + * + * Copyright (c) 2000-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LLMATH_H +#define LLMATH_H + +#include +#include +#include "lldefs.h" +//#include "llstl.h" // *TODO: Remove when LLString is gone +//#include "llstring.h" // *TODO: Remove when LLString is gone +// lltut.h uses is_approx_equal_fraction(). This was moved to its own header +// file in llcommon so we can use lltut.h for llcommon tests without making +// llcommon depend on llmath. +#include "is_approx_equal_fraction.h" + +// work around for Windows & older gcc non-standard function names. +#if LL_WINDOWS +#include +#define llisnan(val) _isnan(val) +#define llfinite(val) _finite(val) +#elif (LL_LINUX && __GNUC__ <= 2) +#define llisnan(val) isnan(val) +#define llfinite(val) isfinite(val) +#elif LL_SOLARIS +#define llisnan(val) isnan(val) +#define llfinite(val) (val <= std::numeric_limits::max()) +#else +#define llisnan(val) std::isnan(val) +#define llfinite(val) std::isfinite(val) +#endif + +// Single Precision Floating Point Routines +// (There used to be more defined here, but they appeared to be redundant and +// were breaking some other includes. Removed by Falcon, reviewed by Andrew, 11/25/09) +/*#ifndef tanf +#define tanf(x) ((F32)tan((F64)(x))) +#endif*/ + +const F32 GRAVITY = -9.8f; + +// mathematical constants +const F32 F_PI = 3.1415926535897932384626433832795f; +const F32 F_TWO_PI = 6.283185307179586476925286766559f; +const F32 F_PI_BY_TWO = 1.5707963267948966192313216916398f; +const F32 F_SQRT_TWO_PI = 2.506628274631000502415765284811f; +const F32 F_E = 2.71828182845904523536f; +const F32 F_SQRT2 = 1.4142135623730950488016887242097f; +const F32 F_SQRT3 = 1.73205080756888288657986402541f; +const F32 OO_SQRT2 = 0.7071067811865475244008443621049f; +const F32 DEG_TO_RAD = 0.017453292519943295769236907684886f; +const F32 RAD_TO_DEG = 57.295779513082320876798154814105f; +const F32 F_APPROXIMATELY_ZERO = 0.00001f; +const F32 F_LN2 = 0.69314718056f; +const F32 OO_LN2 = 1.4426950408889634073599246810019f; + +const F32 F_ALMOST_ZERO = 0.0001f; +const F32 F_ALMOST_ONE = 1.0f - F_ALMOST_ZERO; + +// BUG: Eliminate in favor of F_APPROXIMATELY_ZERO above? +const F32 FP_MAG_THRESHOLD = 0.0000001f; + +// TODO: Replace with logic like is_approx_equal +inline BOOL is_approx_zero( F32 f ) { return (-F_APPROXIMATELY_ZERO < f) && (f < F_APPROXIMATELY_ZERO); } + +// These functions work by interpreting sign+exp+mantissa as an unsigned +// integer. +// For example: +// x = 1 00000010 00000000000000000000000 +// y = 1 00000001 11111111111111111111111 +// +// interpreted as ints = +// x = 10000001000000000000000000000000 +// y = 10000000111111111111111111111111 +// which is clearly a different of 1 in the least significant bit +// Values with the same exponent can be trivially shown to work. +// +// WARNING: Denormals of opposite sign do not work +// x = 1 00000000 00000000000000000000001 +// y = 0 00000000 00000000000000000000001 +// Although these values differ by 2 in the LSB, the sign bit makes +// the int comparison fail. +// +// WARNING: NaNs can compare equal +// There is no special treatment of exceptional values like NaNs +// +// WARNING: Infinity is comparable with F32_MAX and negative +// infinity is comparable with F32_MIN + +inline BOOL is_approx_equal(F32 x, F32 y) +{ + const S32 COMPARE_MANTISSA_UP_TO_BIT = 0x02; + return (std::abs((S32) ((U32&)x - (U32&)y) ) < COMPARE_MANTISSA_UP_TO_BIT); +} + +inline BOOL is_approx_equal(F64 x, F64 y) +{ + const S64 COMPARE_MANTISSA_UP_TO_BIT = 0x02; + return (std::abs((S32) ((U64&)x - (U64&)y) ) < COMPARE_MANTISSA_UP_TO_BIT); +} + +inline S32 llabs(const S32 a) +{ + return S32(std::labs(a)); +} + +inline F32 llabs(const F32 a) +{ + return F32(std::fabs(a)); +} + +inline F64 llabs(const F64 a) +{ + return F64(std::fabs(a)); +} + +inline S32 lltrunc( F32 f ) +{ +#if LL_WINDOWS && !defined( __INTEL_COMPILER ) + // Avoids changing the floating point control word. + // Add or subtract 0.5 - epsilon and then round + const static U32 zpfp[] = { 0xBEFFFFFF, 0x3EFFFFFF }; + S32 result; + __asm { + fld f + mov eax, f + shr eax, 29 + and eax, 4 + fadd dword ptr [zpfp + eax] + fistp result + } + return result; +#else + return (S32)f; +#endif +} + +inline S32 lltrunc( F64 f ) +{ + return (S32)f; +} + +inline S32 llfloor( F32 f ) +{ +#if LL_WINDOWS && !defined( __INTEL_COMPILER ) + // Avoids changing the floating point control word. + // Accurate (unlike Stereopsis version) for all values between S32_MIN and S32_MAX and slightly faster than Stereopsis version. + // Add -(0.5 - epsilon) and then round + const U32 zpfp = 0xBEFFFFFF; + S32 result; + __asm { + fld f + fadd dword ptr [zpfp] + fistp result + } + return result; +#else + return (S32)floor(f); +#endif +} + + +inline S32 llceil( F32 f ) +{ + // This could probably be optimized, but this works. + return (S32)ceil(f); +} + + +#ifndef BOGUS_ROUND +// Use this round. Does an arithmetic round (0.5 always rounds up) +inline S32 llround(const F32 val) +{ + return llfloor(val + 0.5f); +} + +#else // BOGUS_ROUND +// Old llround implementation - does banker's round (toward nearest even in the case of a 0.5. +// Not using this because we don't have a consistent implementation on both platforms, use +// llfloor(val + 0.5f), which is consistent on all platforms. +inline S32 llround(const F32 val) +{ + #if LL_WINDOWS + // Note: assumes that the floating point control word is set to rounding mode (the default) + S32 ret_val; + _asm fld val + _asm fistp ret_val; + return ret_val; + #elif LL_LINUX + // Note: assumes that the floating point control word is set + // to rounding mode (the default) + S32 ret_val; + __asm__ __volatile__( "flds %1 \n\t" + "fistpl %0 \n\t" + : "=m" (ret_val) + : "m" (val) ); + return ret_val; + #else + return llfloor(val + 0.5f); + #endif +} + +// A fast arithmentic round on intel, from Laurent de Soras http://ldesoras.free.fr +inline int round_int(double x) +{ + const float round_to_nearest = 0.5f; + int i; + __asm + { + fld x + fadd st, st (0) + fadd round_to_nearest + fistp i + sar i, 1 + } + return (i); +} +#endif // BOGUS_ROUND + +inline F32 llround( F32 val, F32 nearest ) +{ + return F32(floor(val * (1.0f / nearest) + 0.5f)) * nearest; +} + +inline F64 llround( F64 val, F64 nearest ) +{ + return F64(floor(val * (1.0 / nearest) + 0.5)) * nearest; +} + +// these provide minimum peak error +// +// avg error = -0.013049 +// peak error = -31.4 dB +// RMS error = -28.1 dB + +const F32 FAST_MAG_ALPHA = 0.960433870103f; +const F32 FAST_MAG_BETA = 0.397824734759f; + +// these provide minimum RMS error +// +// avg error = 0.000003 +// peak error = -32.6 dB +// RMS error = -25.7 dB +// +//const F32 FAST_MAG_ALPHA = 0.948059448969f; +//const F32 FAST_MAG_BETA = 0.392699081699f; + +inline F32 fastMagnitude(F32 a, F32 b) +{ + a = (a > 0) ? a : -a; + b = (b > 0) ? b : -b; + return(FAST_MAG_ALPHA * llmax(a,b) + FAST_MAG_BETA * llmin(a,b)); +} + + + +//////////////////// +// +// Fast F32/S32 conversions +// +// Culled from www.stereopsis.com/FPU.html + +const F64 LL_DOUBLE_TO_FIX_MAGIC = 68719476736.0*1.5; //2^36 * 1.5, (52-_shiftamt=36) uses limited precisicion to floor +const S32 LL_SHIFT_AMOUNT = 16; //16.16 fixed point representation, + +// Endian dependent code +#ifdef LL_LITTLE_ENDIAN + #define LL_EXP_INDEX 1 + #define LL_MAN_INDEX 0 +#else + #define LL_EXP_INDEX 0 + #define LL_MAN_INDEX 1 +#endif + +/* Deprecated: use llround(), lltrunc(), or llfloor() instead +// ================================================================================================ +// Real2Int +// ================================================================================================ +inline S32 F64toS32(F64 val) +{ + val = val + LL_DOUBLE_TO_FIX_MAGIC; + return ((S32*)&val)[LL_MAN_INDEX] >> LL_SHIFT_AMOUNT; +} + +// ================================================================================================ +// Real2Int +// ================================================================================================ +inline S32 F32toS32(F32 val) +{ + return F64toS32 ((F64)val); +} +*/ + +//////////////////////////////////////////////// +// +// Fast exp and log +// + +// Implementation of fast exp() approximation (from a paper by Nicol N. Schraudolph +// http://www.inf.ethz.ch/~schraudo/pubs/exp.pdf +static union +{ + double d; + struct + { +#ifdef LL_LITTLE_ENDIAN + S32 j, i; +#else + S32 i, j; +#endif + } n; +} LLECO; // not sure what the name means + +#define LL_EXP_A (1048576 * OO_LN2) // use 1512775 for integer +#define LL_EXP_C (60801) // this value of C good for -4 < y < 4 + +#define LL_FAST_EXP(y) (LLECO.n.i = llround(F32(LL_EXP_A*(y))) + (1072693248 - LL_EXP_C), LLECO.d) + + + +inline F32 llfastpow(const F32 x, const F32 y) +{ + return (F32)(LL_FAST_EXP(y * log(x))); +} + + +inline F32 snap_to_sig_figs(F32 foo, S32 sig_figs) +{ + // compute the power of ten + F32 bar = 1.f; + for (S32 i = 0; i < sig_figs; i++) + { + bar *= 10.f; + } + + //F32 new_foo = (F32)llround(foo * bar); + // the llround() implementation sucks. Don't us it. + + F32 sign = (foo > 0.f) ? 1.f : -1.f; + F32 new_foo = F32( S64(foo * bar + sign * 0.5f)); + new_foo /= bar; + + return new_foo; +} + +inline F32 lerp(F32 a, F32 b, F32 u) +{ + return a + ((b - a) * u); +} + +inline F32 lerp2d(F32 x00, F32 x01, F32 x10, F32 x11, F32 u, F32 v) +{ + F32 a = x00 + (x01-x00)*u; + F32 b = x10 + (x11-x10)*u; + F32 r = a + (b-a)*v; + return r; +} + +inline F32 ramp(F32 x, F32 a, F32 b) +{ + return (a == b) ? 0.0f : ((a - x) / (a - b)); +} + +inline F32 rescale(F32 x, F32 x1, F32 x2, F32 y1, F32 y2) +{ + return lerp(y1, y2, ramp(x, x1, x2)); +} + +inline F32 clamp_rescale(F32 x, F32 x1, F32 x2, F32 y1, F32 y2) +{ + if (y1 < y2) + { + return llclamp(rescale(x,x1,x2,y1,y2),y1,y2); + } + else + { + return llclamp(rescale(x,x1,x2,y1,y2),y2,y1); + } +} + + +inline F32 cubic_step( F32 x, F32 x0, F32 x1, F32 s0, F32 s1 ) +{ + if (x <= x0) + return s0; + + if (x >= x1) + return s1; + + F32 f = (x - x0) / (x1 - x0); + + return s0 + (s1 - s0) * (f * f) * (3.0f - 2.0f * f); +} + +inline F32 cubic_step( F32 x ) +{ + x = llclampf(x); + + return (x * x) * (3.0f - 2.0f * x); +} + +inline F32 quadratic_step( F32 x, F32 x0, F32 x1, F32 s0, F32 s1 ) +{ + if (x <= x0) + return s0; + + if (x >= x1) + return s1; + + F32 f = (x - x0) / (x1 - x0); + F32 f_squared = f * f; + + return (s0 * (1.f - f_squared)) + ((s1 - s0) * f_squared); +} + +inline F32 llsimple_angle(F32 angle) +{ + while(angle <= -F_PI) + angle += F_TWO_PI; + while(angle > F_PI) + angle -= F_TWO_PI; + return angle; +} + +//SDK - Renamed this to get_lower_power_two, since this is what this actually does. +inline U32 get_lower_power_two(U32 val, U32 max_power_two) +{ + if(!max_power_two) + { + max_power_two = 1 << 31 ; + } + if(max_power_two & (max_power_two - 1)) + { + return 0 ; + } + + for(; val < max_power_two ; max_power_two >>= 1) ; + + return max_power_two ; +} + +// calculate next highest power of two, limited by max_power_two +// This is taken from a brilliant little code snipped on http://acius2.blogspot.com/2007/11/calculating-next-power-of-2.html +// Basically we convert the binary to a solid string of 1's with the same +// number of digits, then add one. We subtract 1 initially to handle +// the case where the number passed in is actually a power of two. +// WARNING: this only works with 32 bit ints. +inline U32 get_next_power_two(U32 val, U32 max_power_two) +{ + if(!max_power_two) + { + max_power_two = 1 << 31 ; + } + + if(val >= max_power_two) + { + return max_power_two; + } + + val--; + val = (val >> 1) | val; + val = (val >> 2) | val; + val = (val >> 4) | val; + val = (val >> 8) | val; + val = (val >> 16) | val; + val++; + + return val; +} + +//get the gaussian value given the linear distance from axis x and guassian value o +inline F32 llgaussian(F32 x, F32 o) +{ + return 1.f/(F_SQRT_TWO_PI*o)*powf(F_E, -(x*x)/(2*o*o)); +} + +// Include simd math header +#include "llsimdmath.h" + +#endif diff --git a/indra/llmath/llquantize.h b/indra/llmath/llquantize.h index 000d8a060f..c043f7f752 100644 --- a/indra/llmath/llquantize.h +++ b/indra/llmath/llquantize.h @@ -1,158 +1,158 @@ -/** - * @file llquantize.h - * @brief useful routines for quantizing floats to various length ints - * and back out again - * - * $LicenseInfo:firstyear=2001&license=viewergpl$ - * - * Copyright (c) 2001-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#ifndef LL_LLQUANTIZE_H -#define LL_LLQUANTIZE_H - -const U16 U16MAX = 65535; -LL_ALIGN_16( const F32 F_U16MAX_4A[4] ) = { 65535.f, 65535.f, 65535.f, 65535.f }; - -const F32 OOU16MAX = 1.f/(F32)(U16MAX); -LL_ALIGN_16( const F32 F_OOU16MAX_4A[4] ) = { OOU16MAX, OOU16MAX, OOU16MAX, OOU16MAX }; - -const U8 U8MAX = 255; -LL_ALIGN_16( const F32 F_U8MAX_4A[4] ) = { 255.f, 255.f, 255.f, 255.f }; - -const F32 OOU8MAX = 1.f/(F32)(U8MAX); -LL_ALIGN_16( const F32 F_OOU8MAX_4A[4] ) = { OOU8MAX, OOU8MAX, OOU8MAX, OOU8MAX }; - -const U8 FIRSTVALIDCHAR = 54; -const U8 MAXSTRINGVAL = U8MAX - FIRSTVALIDCHAR; //we don't allow newline or null - - -inline U16 F32_to_U16_ROUND(F32 val, F32 lower, F32 upper) -{ - val = llclamp(val, lower, upper); - // make sure that the value is positive and normalized to <0, 1> - val -= lower; - val /= (upper - lower); - - // round the value. Sreturn the U16 - return (U16)(llround(val*U16MAX)); -} - - -inline U16 F32_to_U16(F32 val, F32 lower, F32 upper) -{ - val = llclamp(val, lower, upper); - // make sure that the value is positive and normalized to <0, 1> - val -= lower; - val /= (upper - lower); - - // return the U16 - return (U16)(llfloor(val*U16MAX)); -} - -inline F32 U16_to_F32(U16 ival, F32 lower, F32 upper) -{ - F32 val = ival*OOU16MAX; - F32 delta = (upper - lower); - val *= delta; - val += lower; - - F32 max_error = delta*OOU16MAX; - - // make sure that zero's come through as zero - if (fabsf(val) < max_error) - val = 0.f; - - return val; -} - - -inline U8 F32_to_U8_ROUND(F32 val, F32 lower, F32 upper) -{ - val = llclamp(val, lower, upper); - // make sure that the value is positive and normalized to <0, 1> - val -= lower; - val /= (upper - lower); - - // return the rounded U8 - return (U8)(llround(val*U8MAX)); -} - - -inline U8 F32_to_U8(F32 val, F32 lower, F32 upper) -{ - val = llclamp(val, lower, upper); - // make sure that the value is positive and normalized to <0, 1> - val -= lower; - val /= (upper - lower); - - // return the U8 - return (U8)(llfloor(val*U8MAX)); -} - -inline F32 U8_to_F32(U8 ival, F32 lower, F32 upper) -{ - F32 val = ival*OOU8MAX; - F32 delta = (upper - lower); - val *= delta; - val += lower; - - F32 max_error = delta*OOU8MAX; - - // make sure that zero's come through as zero - if (fabsf(val) < max_error) - val = 0.f; - - return val; -} - -inline U8 F32_TO_STRING(F32 val, F32 lower, F32 upper) -{ - val = llclamp(val, lower, upper); //[lower, upper] - // make sure that the value is positive and normalized to <0, 1> - val -= lower; //[0, upper-lower] - val /= (upper - lower); //[0,1] - val = val * MAXSTRINGVAL; //[0, MAXSTRINGVAL] - val = floor(val + 0.5f); //[0, MAXSTRINGVAL] - - U8 stringVal = (U8)(val) + FIRSTVALIDCHAR; //[FIRSTVALIDCHAR, MAXSTRINGVAL + FIRSTVALIDCHAR] - return stringVal; -} - -inline F32 STRING_TO_F32(U8 ival, F32 lower, F32 upper) -{ - // remove empty space left for NULL, newline, etc. - ival -= FIRSTVALIDCHAR; //[0, MAXSTRINGVAL] - - F32 val = (F32)ival * (1.f / (F32)MAXSTRINGVAL); //[0, 1] - F32 delta = (upper - lower); - val *= delta; //[0, upper - lower] - val += lower; //[lower, upper] - - return val; -} - -#endif +/** + * @file llquantize.h + * @brief useful routines for quantizing floats to various length ints + * and back out again + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLQUANTIZE_H +#define LL_LLQUANTIZE_H + +const U16 U16MAX = 65535; +LL_ALIGN_16( const F32 F_U16MAX_4A[4] ) = { 65535.f, 65535.f, 65535.f, 65535.f }; + +const F32 OOU16MAX = 1.f/(F32)(U16MAX); +LL_ALIGN_16( const F32 F_OOU16MAX_4A[4] ) = { OOU16MAX, OOU16MAX, OOU16MAX, OOU16MAX }; + +const U8 U8MAX = 255; +LL_ALIGN_16( const F32 F_U8MAX_4A[4] ) = { 255.f, 255.f, 255.f, 255.f }; + +const F32 OOU8MAX = 1.f/(F32)(U8MAX); +LL_ALIGN_16( const F32 F_OOU8MAX_4A[4] ) = { OOU8MAX, OOU8MAX, OOU8MAX, OOU8MAX }; + +const U8 FIRSTVALIDCHAR = 54; +const U8 MAXSTRINGVAL = U8MAX - FIRSTVALIDCHAR; //we don't allow newline or null + + +inline U16 F32_to_U16_ROUND(F32 val, F32 lower, F32 upper) +{ + val = llclamp(val, lower, upper); + // make sure that the value is positive and normalized to <0, 1> + val -= lower; + val /= (upper - lower); + + // round the value. Sreturn the U16 + return (U16)(llround(val*U16MAX)); +} + + +inline U16 F32_to_U16(F32 val, F32 lower, F32 upper) +{ + val = llclamp(val, lower, upper); + // make sure that the value is positive and normalized to <0, 1> + val -= lower; + val /= (upper - lower); + + // return the U16 + return (U16)(llfloor(val*U16MAX)); +} + +inline F32 U16_to_F32(U16 ival, F32 lower, F32 upper) +{ + F32 val = ival*OOU16MAX; + F32 delta = (upper - lower); + val *= delta; + val += lower; + + F32 max_error = delta*OOU16MAX; + + // make sure that zero's come through as zero + if (fabsf(val) < max_error) + val = 0.f; + + return val; +} + + +inline U8 F32_to_U8_ROUND(F32 val, F32 lower, F32 upper) +{ + val = llclamp(val, lower, upper); + // make sure that the value is positive and normalized to <0, 1> + val -= lower; + val /= (upper - lower); + + // return the rounded U8 + return (U8)(llround(val*U8MAX)); +} + + +inline U8 F32_to_U8(F32 val, F32 lower, F32 upper) +{ + val = llclamp(val, lower, upper); + // make sure that the value is positive and normalized to <0, 1> + val -= lower; + val /= (upper - lower); + + // return the U8 + return (U8)(llfloor(val*U8MAX)); +} + +inline F32 U8_to_F32(U8 ival, F32 lower, F32 upper) +{ + F32 val = ival*OOU8MAX; + F32 delta = (upper - lower); + val *= delta; + val += lower; + + F32 max_error = delta*OOU8MAX; + + // make sure that zero's come through as zero + if (fabsf(val) < max_error) + val = 0.f; + + return val; +} + +inline U8 F32_TO_STRING(F32 val, F32 lower, F32 upper) +{ + val = llclamp(val, lower, upper); //[lower, upper] + // make sure that the value is positive and normalized to <0, 1> + val -= lower; //[0, upper-lower] + val /= (upper - lower); //[0,1] + val = val * MAXSTRINGVAL; //[0, MAXSTRINGVAL] + val = floor(val + 0.5f); //[0, MAXSTRINGVAL] + + U8 stringVal = (U8)(val) + FIRSTVALIDCHAR; //[FIRSTVALIDCHAR, MAXSTRINGVAL + FIRSTVALIDCHAR] + return stringVal; +} + +inline F32 STRING_TO_F32(U8 ival, F32 lower, F32 upper) +{ + // remove empty space left for NULL, newline, etc. + ival -= FIRSTVALIDCHAR; //[0, MAXSTRINGVAL] + + F32 val = (F32)ival * (1.f / (F32)MAXSTRINGVAL); //[0, 1] + F32 delta = (upper - lower); + val *= delta; //[0, upper - lower] + val += lower; //[lower, upper] + + return val; +} + +#endif diff --git a/indra/llmath/llquaternion.cpp b/indra/llmath/llquaternion.cpp index efdc10e2c6..73c5f4505e 100644 --- a/indra/llmath/llquaternion.cpp +++ b/indra/llmath/llquaternion.cpp @@ -1,961 +1,961 @@ -/** - * @file llquaternion.cpp - * @brief LLQuaternion class implementation. - * - * $LicenseInfo:firstyear=2000&license=viewergpl$ - * - * Copyright (c) 2000-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#include "linden_common.h" - -#include "llmath.h" // for F_PI - -#include "llquaternion.h" - -//#include "vmath.h" -#include "v3math.h" -#include "v3dmath.h" -#include "v4math.h" -#include "m4math.h" -#include "m3math.h" -#include "llquantize.h" - -// WARNING: Don't use this for global const definitions! using this -// at the top of a *.cpp file might not give you what you think. -const LLQuaternion LLQuaternion::DEFAULT; - -// Constructors - -LLQuaternion::LLQuaternion(const LLMatrix4 &mat) -{ - *this = mat.quaternion(); - normalize(); -} - -LLQuaternion::LLQuaternion(const LLMatrix3 &mat) -{ - *this = mat.quaternion(); - normalize(); -} - -LLQuaternion::LLQuaternion(F32 angle, const LLVector4 &vec) -{ - LLVector3 v(vec.mV[VX], vec.mV[VY], vec.mV[VZ]); - v.normalize(); - - F32 c, s; - c = cosf(angle*0.5f); - s = sinf(angle*0.5f); - - mQ[VX] = v.mV[VX] * s; - mQ[VY] = v.mV[VY] * s; - mQ[VZ] = v.mV[VZ] * s; - mQ[VW] = c; - normalize(); -} - -LLQuaternion::LLQuaternion(F32 angle, const LLVector3 &vec) -{ - LLVector3 v(vec); - v.normalize(); - - F32 c, s; - c = cosf(angle*0.5f); - s = sinf(angle*0.5f); - - mQ[VX] = v.mV[VX] * s; - mQ[VY] = v.mV[VY] * s; - mQ[VZ] = v.mV[VZ] * s; - mQ[VW] = c; - normalize(); -} - -LLQuaternion::LLQuaternion(const LLVector3 &x_axis, - const LLVector3 &y_axis, - const LLVector3 &z_axis) -{ - LLMatrix3 mat; - mat.setRows(x_axis, y_axis, z_axis); - *this = mat.quaternion(); - normalize(); -} - -// Quatizations -void LLQuaternion::quantize16(F32 lower, F32 upper) -{ - F32 x = mQ[VX]; - F32 y = mQ[VY]; - F32 z = mQ[VZ]; - F32 s = mQ[VS]; - - x = U16_to_F32(F32_to_U16_ROUND(x, lower, upper), lower, upper); - y = U16_to_F32(F32_to_U16_ROUND(y, lower, upper), lower, upper); - z = U16_to_F32(F32_to_U16_ROUND(z, lower, upper), lower, upper); - s = U16_to_F32(F32_to_U16_ROUND(s, lower, upper), lower, upper); - - mQ[VX] = x; - mQ[VY] = y; - mQ[VZ] = z; - mQ[VS] = s; - - normalize(); -} - -void LLQuaternion::quantize8(F32 lower, F32 upper) -{ - mQ[VX] = U8_to_F32(F32_to_U8_ROUND(mQ[VX], lower, upper), lower, upper); - mQ[VY] = U8_to_F32(F32_to_U8_ROUND(mQ[VY], lower, upper), lower, upper); - mQ[VZ] = U8_to_F32(F32_to_U8_ROUND(mQ[VZ], lower, upper), lower, upper); - mQ[VS] = U8_to_F32(F32_to_U8_ROUND(mQ[VS], lower, upper), lower, upper); - - normalize(); -} - -// LLVector3 Magnitude and Normalization Functions - - -// Set LLQuaternion routines - -const LLQuaternion& LLQuaternion::setAngleAxis(F32 angle, F32 x, F32 y, F32 z) -{ - LLVector3 vec(x, y, z); - vec.normalize(); - - angle *= 0.5f; - F32 c, s; - c = cosf(angle); - s = sinf(angle); - - mQ[VX] = vec.mV[VX]*s; - mQ[VY] = vec.mV[VY]*s; - mQ[VZ] = vec.mV[VZ]*s; - mQ[VW] = c; - - normalize(); - return (*this); -} - -const LLQuaternion& LLQuaternion::setAngleAxis(F32 angle, const LLVector3 &vec) -{ - LLVector3 v(vec); - v.normalize(); - - angle *= 0.5f; - F32 c, s; - c = cosf(angle); - s = sinf(angle); - - mQ[VX] = v.mV[VX]*s; - mQ[VY] = v.mV[VY]*s; - mQ[VZ] = v.mV[VZ]*s; - mQ[VW] = c; - - normalize(); - return (*this); -} - -const LLQuaternion& LLQuaternion::setAngleAxis(F32 angle, const LLVector4 &vec) -{ - LLVector3 v(vec.mV[VX], vec.mV[VY], vec.mV[VZ]); - v.normalize(); - - F32 c, s; - c = cosf(angle*0.5f); - s = sinf(angle*0.5f); - - mQ[VX] = v.mV[VX]*s; - mQ[VY] = v.mV[VY]*s; - mQ[VZ] = v.mV[VZ]*s; - mQ[VW] = c; - - normalize(); - return (*this); -} - -const LLQuaternion& LLQuaternion::setEulerAngles(F32 roll, F32 pitch, F32 yaw) -{ - LLMatrix3 rot_mat(roll, pitch, yaw); - rot_mat.orthogonalize(); - *this = rot_mat.quaternion(); - - normalize(); - return (*this); -} - -// deprecated -const LLQuaternion& LLQuaternion::set(const LLMatrix3 &mat) -{ - *this = mat.quaternion(); - normalize(); - return (*this); -} - -// deprecated -const LLQuaternion& LLQuaternion::set(const LLMatrix4 &mat) -{ - *this = mat.quaternion(); - normalize(); - return (*this); -} - -// deprecated -const LLQuaternion& LLQuaternion::setQuat(F32 angle, F32 x, F32 y, F32 z) -{ - LLVector3 vec(x, y, z); - vec.normalize(); - - angle *= 0.5f; - F32 c, s; - c = cosf(angle); - s = sinf(angle); - - mQ[VX] = vec.mV[VX]*s; - mQ[VY] = vec.mV[VY]*s; - mQ[VZ] = vec.mV[VZ]*s; - mQ[VW] = c; - - normalize(); - return (*this); -} - -// deprecated -const LLQuaternion& LLQuaternion::setQuat(F32 angle, const LLVector3 &vec) -{ - LLVector3 v(vec); - v.normalize(); - - angle *= 0.5f; - F32 c, s; - c = cosf(angle); - s = sinf(angle); - - mQ[VX] = v.mV[VX]*s; - mQ[VY] = v.mV[VY]*s; - mQ[VZ] = v.mV[VZ]*s; - mQ[VW] = c; - - normalize(); - return (*this); -} - -const LLQuaternion& LLQuaternion::setQuat(F32 angle, const LLVector4 &vec) -{ - LLVector3 v(vec.mV[VX], vec.mV[VY], vec.mV[VZ]); - v.normalize(); - - F32 c, s; - c = cosf(angle*0.5f); - s = sinf(angle*0.5f); - - mQ[VX] = v.mV[VX]*s; - mQ[VY] = v.mV[VY]*s; - mQ[VZ] = v.mV[VZ]*s; - mQ[VW] = c; - - normalize(); - return (*this); -} - -const LLQuaternion& LLQuaternion::setQuat(F32 roll, F32 pitch, F32 yaw) -{ - LLMatrix3 rot_mat(roll, pitch, yaw); - rot_mat.orthogonalize(); - *this = rot_mat.quaternion(); - - normalize(); - return (*this); -} - -const LLQuaternion& LLQuaternion::setQuat(const LLMatrix3 &mat) -{ - *this = mat.quaternion(); - normalize(); - return (*this); -} - -const LLQuaternion& LLQuaternion::setQuat(const LLMatrix4 &mat) -{ - *this = mat.quaternion(); - normalize(); - return (*this); -//#if 1 -// // NOTE: LLQuaternion's are actually inverted with respect to -// // the matrices, so this code also assumes inverted quaternions -// // (-x, -y, -z, w). The result is that roll,pitch,yaw are applied -// // in reverse order (yaw,pitch,roll). -// F64 cosX = cos(roll); -// F64 cosY = cos(pitch); -// F64 cosZ = cos(yaw); -// -// F64 sinX = sin(roll); -// F64 sinY = sin(pitch); -// F64 sinZ = sin(yaw); -// -// mQ[VW] = (F32)sqrt(cosY*cosZ - sinX*sinY*sinZ + cosX*cosZ + cosX*cosY + 1.0)*.5; -// if (fabs(mQ[VW]) < F_APPROXIMATELY_ZERO) -// { -// // null rotation, any axis will do -// mQ[VX] = 0.0f; -// mQ[VY] = 1.0f; -// mQ[VZ] = 0.0f; -// } -// else -// { -// F32 inv_s = 1.0f / (4.0f * mQ[VW]); -// mQ[VX] = (F32)-(-sinX*cosY - cosX*sinY*sinZ - sinX*cosZ) * inv_s; -// mQ[VY] = (F32)-(-cosX*sinY*cosZ + sinX*sinZ - sinY) * inv_s; -// mQ[VZ] = (F32)-(-cosY*sinZ - sinX*sinY*cosZ - cosX*sinZ) * inv_s; -// } -// -//#else // This only works on a certain subset of roll/pitch/yaw -// -// F64 cosX = cosf(roll/2.0); -// F64 cosY = cosf(pitch/2.0); -// F64 cosZ = cosf(yaw/2.0); -// -// F64 sinX = sinf(roll/2.0); -// F64 sinY = sinf(pitch/2.0); -// F64 sinZ = sinf(yaw/2.0); -// -// mQ[VW] = (F32)(cosX*cosY*cosZ + sinX*sinY*sinZ); -// mQ[VX] = (F32)(sinX*cosY*cosZ - cosX*sinY*sinZ); -// mQ[VY] = (F32)(cosX*sinY*cosZ + sinX*cosY*sinZ); -// mQ[VZ] = (F32)(cosX*cosY*sinZ - sinX*sinY*cosZ); -//#endif -// -// normalize(); -// return (*this); -} - -// SJB: This code is correct for a logicly stored (non-transposed) matrix; -// Our matrices are stored transposed, OpenGL style, so this generates the -// INVERSE matrix, or the CORRECT matrix form an INVERSE quaternion. -// Because we use similar logic in LLMatrix3::quaternion(), -// we are internally consistant so everything works OK :) -LLMatrix3 LLQuaternion::getMatrix3(void) const -{ - LLMatrix3 mat; - F32 xx, xy, xz, xw, yy, yz, yw, zz, zw; - - xx = mQ[VX] * mQ[VX]; - xy = mQ[VX] * mQ[VY]; - xz = mQ[VX] * mQ[VZ]; - xw = mQ[VX] * mQ[VW]; - - yy = mQ[VY] * mQ[VY]; - yz = mQ[VY] * mQ[VZ]; - yw = mQ[VY] * mQ[VW]; - - zz = mQ[VZ] * mQ[VZ]; - zw = mQ[VZ] * mQ[VW]; - - mat.mMatrix[0][0] = 1.f - 2.f * ( yy + zz ); - mat.mMatrix[0][1] = 2.f * ( xy + zw ); - mat.mMatrix[0][2] = 2.f * ( xz - yw ); - - mat.mMatrix[1][0] = 2.f * ( xy - zw ); - mat.mMatrix[1][1] = 1.f - 2.f * ( xx + zz ); - mat.mMatrix[1][2] = 2.f * ( yz + xw ); - - mat.mMatrix[2][0] = 2.f * ( xz + yw ); - mat.mMatrix[2][1] = 2.f * ( yz - xw ); - mat.mMatrix[2][2] = 1.f - 2.f * ( xx + yy ); - - return mat; -} - -LLMatrix4 LLQuaternion::getMatrix4(void) const -{ - LLMatrix4 mat; - F32 xx, xy, xz, xw, yy, yz, yw, zz, zw; - - xx = mQ[VX] * mQ[VX]; - xy = mQ[VX] * mQ[VY]; - xz = mQ[VX] * mQ[VZ]; - xw = mQ[VX] * mQ[VW]; - - yy = mQ[VY] * mQ[VY]; - yz = mQ[VY] * mQ[VZ]; - yw = mQ[VY] * mQ[VW]; - - zz = mQ[VZ] * mQ[VZ]; - zw = mQ[VZ] * mQ[VW]; - - mat.mMatrix[0][0] = 1.f - 2.f * ( yy + zz ); - mat.mMatrix[0][1] = 2.f * ( xy + zw ); - mat.mMatrix[0][2] = 2.f * ( xz - yw ); - - mat.mMatrix[1][0] = 2.f * ( xy - zw ); - mat.mMatrix[1][1] = 1.f - 2.f * ( xx + zz ); - mat.mMatrix[1][2] = 2.f * ( yz + xw ); - - mat.mMatrix[2][0] = 2.f * ( xz + yw ); - mat.mMatrix[2][1] = 2.f * ( yz - xw ); - mat.mMatrix[2][2] = 1.f - 2.f * ( xx + yy ); - - // TODO -- should we set the translation portion to zero? - - return mat; -} - - - - -// Other useful methods - - -// calculate the shortest rotation from a to b -void LLQuaternion::shortestArc(const LLVector3 &a, const LLVector3 &b) -{ - // Make a local copy of both vectors. - LLVector3 vec_a = a; - LLVector3 vec_b = b; - - // Make sure neither vector is zero length. Also normalize - // the vectors while we are at it. - F32 vec_a_mag = vec_a.normalize(); - F32 vec_b_mag = vec_b.normalize(); - if (vec_a_mag < F_APPROXIMATELY_ZERO || - vec_b_mag < F_APPROXIMATELY_ZERO) - { - // Can't calculate a rotation from this. - // Just return ZERO_ROTATION instead. - loadIdentity(); - return; - } - - // Create an axis to rotate around, and the cos of the angle to rotate. - LLVector3 axis = vec_a % vec_b; - F32 cos_theta = vec_a * vec_b; - - // Check the angle between the vectors to see if they are parallel or anti-parallel. - if (cos_theta > 1.0 - F_APPROXIMATELY_ZERO) - { - // a and b are parallel. No rotation is necessary. - loadIdentity(); - } - else if (cos_theta < -1.0 + F_APPROXIMATELY_ZERO) - { - // a and b are anti-parallel. - // Rotate 180 degrees around some orthogonal axis. - // Find the projection of the x-axis onto a, and try - // using the vector between the projection and the x-axis - // as the orthogonal axis. - LLVector3 proj = vec_a.mV[VX] / (vec_a * vec_a) * vec_a; - LLVector3 ortho_axis(1.f, 0.f, 0.f); - ortho_axis -= proj; - - // Turn this into an orthonormal axis. - F32 ortho_length = ortho_axis.normalize(); - // If the axis' length is 0, then our guess at an orthogonal axis - // was wrong (a is parallel to the x-axis). - if (ortho_length < F_APPROXIMATELY_ZERO) - { - // Use the z-axis instead. - ortho_axis.setVec(0.f, 0.f, 1.f); - } - - // Construct a quaternion from this orthonormal axis. - mQ[VX] = ortho_axis.mV[VX]; - mQ[VY] = ortho_axis.mV[VY]; - mQ[VZ] = ortho_axis.mV[VZ]; - mQ[VW] = 0.f; - } - else - { - // a and b are NOT parallel or anti-parallel. - // Return the rotation between these vectors. - F32 theta = (F32)acos(cos_theta); - - setAngleAxis(theta, axis); - } -} - -// constrains rotation to a cone angle specified in radians -const LLQuaternion &LLQuaternion::constrain(F32 radians) -{ - const F32 cos_angle_lim = cosf( radians/2 ); // mQ[VW] limit - const F32 sin_angle_lim = sinf( radians/2 ); // rotation axis length limit - - if (mQ[VW] < 0.f) - { - mQ[VX] *= -1.f; - mQ[VY] *= -1.f; - mQ[VZ] *= -1.f; - mQ[VW] *= -1.f; - } - - // if rotation angle is greater than limit (cos is less than limit) - if( mQ[VW] < cos_angle_lim ) - { - mQ[VW] = cos_angle_lim; - F32 axis_len = sqrtf( mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] ); // sin(theta/2) - F32 axis_mult_fact = sin_angle_lim / axis_len; - mQ[VX] *= axis_mult_fact; - mQ[VY] *= axis_mult_fact; - mQ[VZ] *= axis_mult_fact; - } - - return *this; -} - -// Operators - -std::ostream& operator<<(std::ostream &s, const LLQuaternion &a) -{ - s << "{ " - << a.mQ[VX] << ", " << a.mQ[VY] << ", " << a.mQ[VZ] << ", " << a.mQ[VW] - << " }"; - return s; -} - - -// Does NOT renormalize the result -LLQuaternion operator*(const LLQuaternion &a, const LLQuaternion &b) -{ -// LLQuaternion::mMultCount++; - - LLQuaternion q( - b.mQ[3] * a.mQ[0] + b.mQ[0] * a.mQ[3] + b.mQ[1] * a.mQ[2] - b.mQ[2] * a.mQ[1], - b.mQ[3] * a.mQ[1] + b.mQ[1] * a.mQ[3] + b.mQ[2] * a.mQ[0] - b.mQ[0] * a.mQ[2], - b.mQ[3] * a.mQ[2] + b.mQ[2] * a.mQ[3] + b.mQ[0] * a.mQ[1] - b.mQ[1] * a.mQ[0], - b.mQ[3] * a.mQ[3] - b.mQ[0] * a.mQ[0] - b.mQ[1] * a.mQ[1] - b.mQ[2] * a.mQ[2] - ); - return q; -} - -/* -LLMatrix4 operator*(const LLMatrix4 &m, const LLQuaternion &q) -{ - LLMatrix4 qmat(q); - return (m*qmat); -} -*/ - - - -LLVector4 operator*(const LLVector4 &a, const LLQuaternion &rot) -{ - F32 rw = - rot.mQ[VX] * a.mV[VX] - rot.mQ[VY] * a.mV[VY] - rot.mQ[VZ] * a.mV[VZ]; - F32 rx = rot.mQ[VW] * a.mV[VX] + rot.mQ[VY] * a.mV[VZ] - rot.mQ[VZ] * a.mV[VY]; - F32 ry = rot.mQ[VW] * a.mV[VY] + rot.mQ[VZ] * a.mV[VX] - rot.mQ[VX] * a.mV[VZ]; - F32 rz = rot.mQ[VW] * a.mV[VZ] + rot.mQ[VX] * a.mV[VY] - rot.mQ[VY] * a.mV[VX]; - - F32 nx = - rw * rot.mQ[VX] + rx * rot.mQ[VW] - ry * rot.mQ[VZ] + rz * rot.mQ[VY]; - F32 ny = - rw * rot.mQ[VY] + ry * rot.mQ[VW] - rz * rot.mQ[VX] + rx * rot.mQ[VZ]; - F32 nz = - rw * rot.mQ[VZ] + rz * rot.mQ[VW] - rx * rot.mQ[VY] + ry * rot.mQ[VX]; - - return LLVector4(nx, ny, nz, a.mV[VW]); -} - -LLVector3 operator*(const LLVector3 &a, const LLQuaternion &rot) -{ - F32 rw = - rot.mQ[VX] * a.mV[VX] - rot.mQ[VY] * a.mV[VY] - rot.mQ[VZ] * a.mV[VZ]; - F32 rx = rot.mQ[VW] * a.mV[VX] + rot.mQ[VY] * a.mV[VZ] - rot.mQ[VZ] * a.mV[VY]; - F32 ry = rot.mQ[VW] * a.mV[VY] + rot.mQ[VZ] * a.mV[VX] - rot.mQ[VX] * a.mV[VZ]; - F32 rz = rot.mQ[VW] * a.mV[VZ] + rot.mQ[VX] * a.mV[VY] - rot.mQ[VY] * a.mV[VX]; - - F32 nx = - rw * rot.mQ[VX] + rx * rot.mQ[VW] - ry * rot.mQ[VZ] + rz * rot.mQ[VY]; - F32 ny = - rw * rot.mQ[VY] + ry * rot.mQ[VW] - rz * rot.mQ[VX] + rx * rot.mQ[VZ]; - F32 nz = - rw * rot.mQ[VZ] + rz * rot.mQ[VW] - rx * rot.mQ[VY] + ry * rot.mQ[VX]; - - return LLVector3(nx, ny, nz); -} - -LLVector3d operator*(const LLVector3d &a, const LLQuaternion &rot) -{ - F64 rw = - rot.mQ[VX] * a.mdV[VX] - rot.mQ[VY] * a.mdV[VY] - rot.mQ[VZ] * a.mdV[VZ]; - F64 rx = rot.mQ[VW] * a.mdV[VX] + rot.mQ[VY] * a.mdV[VZ] - rot.mQ[VZ] * a.mdV[VY]; - F64 ry = rot.mQ[VW] * a.mdV[VY] + rot.mQ[VZ] * a.mdV[VX] - rot.mQ[VX] * a.mdV[VZ]; - F64 rz = rot.mQ[VW] * a.mdV[VZ] + rot.mQ[VX] * a.mdV[VY] - rot.mQ[VY] * a.mdV[VX]; - - F64 nx = - rw * rot.mQ[VX] + rx * rot.mQ[VW] - ry * rot.mQ[VZ] + rz * rot.mQ[VY]; - F64 ny = - rw * rot.mQ[VY] + ry * rot.mQ[VW] - rz * rot.mQ[VX] + rx * rot.mQ[VZ]; - F64 nz = - rw * rot.mQ[VZ] + rz * rot.mQ[VW] - rx * rot.mQ[VY] + ry * rot.mQ[VX]; - - return LLVector3d(nx, ny, nz); -} - -F32 dot(const LLQuaternion &a, const LLQuaternion &b) -{ - return a.mQ[VX] * b.mQ[VX] + - a.mQ[VY] * b.mQ[VY] + - a.mQ[VZ] * b.mQ[VZ] + - a.mQ[VW] * b.mQ[VW]; -} - -// DEMO HACK: This lerp is probably inocrrect now due intermediate normalization -// it should look more like the lerp below -#if 0 -// linear interpolation -LLQuaternion lerp(F32 t, const LLQuaternion &p, const LLQuaternion &q) -{ - LLQuaternion r; - r = t * (q - p) + p; - r.normalize(); - return r; -} -#endif - -// lerp from identity to q -LLQuaternion lerp(F32 t, const LLQuaternion &q) -{ - LLQuaternion r; - r.mQ[VX] = t * q.mQ[VX]; - r.mQ[VY] = t * q.mQ[VY]; - r.mQ[VZ] = t * q.mQ[VZ]; - r.mQ[VW] = t * (q.mQ[VZ] - 1.f) + 1.f; - r.normalize(); - return r; -} - -LLQuaternion lerp(F32 t, const LLQuaternion &p, const LLQuaternion &q) -{ - LLQuaternion r; - F32 inv_t; - - inv_t = 1.f - t; - - r.mQ[VX] = t * q.mQ[VX] + (inv_t * p.mQ[VX]); - r.mQ[VY] = t * q.mQ[VY] + (inv_t * p.mQ[VY]); - r.mQ[VZ] = t * q.mQ[VZ] + (inv_t * p.mQ[VZ]); - r.mQ[VW] = t * q.mQ[VW] + (inv_t * p.mQ[VW]); - r.normalize(); - return r; -} - - -// spherical linear interpolation -LLQuaternion slerp( F32 u, const LLQuaternion &a, const LLQuaternion &b ) -{ - // cosine theta = dot product of a and b - F32 cos_t = a.mQ[0]*b.mQ[0] + a.mQ[1]*b.mQ[1] + a.mQ[2]*b.mQ[2] + a.mQ[3]*b.mQ[3]; - - // if b is on opposite hemisphere from a, use -a instead - int bflip; - if (cos_t < 0.0f) - { - cos_t = -cos_t; - bflip = TRUE; - } - else - bflip = FALSE; - - // if B is (within precision limits) the same as A, - // just linear interpolate between A and B. - F32 alpha; // interpolant - F32 beta; // 1 - interpolant - if (1.0f - cos_t < 0.00001f) - { - beta = 1.0f - u; - alpha = u; - } - else - { - F32 theta = acosf(cos_t); - F32 sin_t = sinf(theta); - beta = sinf(theta - u*theta) / sin_t; - alpha = sinf(u*theta) / sin_t; - } - - if (bflip) - beta = -beta; - - // interpolate - LLQuaternion ret; - ret.mQ[0] = beta*a.mQ[0] + alpha*b.mQ[0]; - ret.mQ[1] = beta*a.mQ[1] + alpha*b.mQ[1]; - ret.mQ[2] = beta*a.mQ[2] + alpha*b.mQ[2]; - ret.mQ[3] = beta*a.mQ[3] + alpha*b.mQ[3]; - - return ret; -} - -// lerp whenever possible -LLQuaternion nlerp(F32 t, const LLQuaternion &a, const LLQuaternion &b) -{ - if (dot(a, b) < 0.f) - { - return slerp(t, a, b); - } - else - { - return lerp(t, a, b); - } -} - -LLQuaternion nlerp(F32 t, const LLQuaternion &q) -{ - if (q.mQ[VW] < 0.f) - { - return slerp(t, q); - } - else - { - return lerp(t, q); - } -} - -// slerp from identity quaternion to another quaternion -LLQuaternion slerp(F32 t, const LLQuaternion &q) -{ - F32 c = q.mQ[VW]; - if (1.0f == t || 1.0f == c) - { - // the trivial cases - return q; - } - - LLQuaternion r; - F32 s, angle, stq, stp; - - s = (F32) sqrt(1.f - c*c); - - if (c < 0.0f) - { - // when c < 0.0 then theta > PI/2 - // since quat and -quat are the same rotation we invert one of - // p or q to reduce unecessary spins - // A equivalent way to do it is to convert acos(c) as if it had - // been negative, and to negate stp - angle = (F32) acos(-c); - stp = -(F32) sin(angle * (1.f - t)); - stq = (F32) sin(angle * t); - } - else - { - angle = (F32) acos(c); - stp = (F32) sin(angle * (1.f - t)); - stq = (F32) sin(angle * t); - } - - r.mQ[VX] = (q.mQ[VX] * stq) / s; - r.mQ[VY] = (q.mQ[VY] * stq) / s; - r.mQ[VZ] = (q.mQ[VZ] * stq) / s; - r.mQ[VW] = (stp + q.mQ[VW] * stq) / s; - - return r; -} - -LLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order) -{ - LLQuaternion xQ( xRot*DEG_TO_RAD, LLVector3(1.0f, 0.0f, 0.0f) ); - LLQuaternion yQ( yRot*DEG_TO_RAD, LLVector3(0.0f, 1.0f, 0.0f) ); - LLQuaternion zQ( zRot*DEG_TO_RAD, LLVector3(0.0f, 0.0f, 1.0f) ); - LLQuaternion ret; - switch( order ) - { - case LLQuaternion::XYZ: - ret = xQ * yQ * zQ; - break; - case LLQuaternion::YZX: - ret = yQ * zQ * xQ; - break; - case LLQuaternion::ZXY: - ret = zQ * xQ * yQ; - break; - case LLQuaternion::XZY: - ret = xQ * zQ * yQ; - break; - case LLQuaternion::YXZ: - ret = yQ * xQ * zQ; - break; - case LLQuaternion::ZYX: - ret = zQ * yQ * xQ; - break; - } - return ret; -} - -const char *OrderToString( const LLQuaternion::Order order ) -{ - const char *p = NULL; - switch( order ) - { - default: - case LLQuaternion::XYZ: - p = "XYZ"; - break; - case LLQuaternion::YZX: - p = "YZX"; - break; - case LLQuaternion::ZXY: - p = "ZXY"; - break; - case LLQuaternion::XZY: - p = "XZY"; - break; - case LLQuaternion::YXZ: - p = "YXZ"; - break; - case LLQuaternion::ZYX: - p = "ZYX"; - break; - } - return p; -} - -LLQuaternion::Order StringToOrder( const char *str ) -{ - if (strncmp(str, "XYZ", 3)==0 || strncmp(str, "xyz", 3)==0) - return LLQuaternion::XYZ; - - if (strncmp(str, "YZX", 3)==0 || strncmp(str, "yzx", 3)==0) - return LLQuaternion::YZX; - - if (strncmp(str, "ZXY", 3)==0 || strncmp(str, "zxy", 3)==0) - return LLQuaternion::ZXY; - - if (strncmp(str, "XZY", 3)==0 || strncmp(str, "xzy", 3)==0) - return LLQuaternion::XZY; - - if (strncmp(str, "YXZ", 3)==0 || strncmp(str, "yxz", 3)==0) - return LLQuaternion::YXZ; - - if (strncmp(str, "ZYX", 3)==0 || strncmp(str, "zyx", 3)==0) - return LLQuaternion::ZYX; - - return LLQuaternion::XYZ; -} - -void LLQuaternion::getAngleAxis(F32* angle, LLVector3 &vec) const -{ - F32 cos_a = mQ[VW]; - if (cos_a > 1.0f) cos_a = 1.0f; - if (cos_a < -1.0f) cos_a = -1.0f; - - F32 sin_a = (F32) sqrt( 1.0f - cos_a * cos_a ); - - if ( fabs( sin_a ) < 0.0005f ) - sin_a = 1.0f; - else - sin_a = 1.f/sin_a; - - F32 temp_angle = 2.0f * (F32) acos( cos_a ); - if (temp_angle > F_PI) - { - // The (angle,axis) pair should never have angles outside [PI, -PI] - // since we want the _shortest_ (angle,axis) solution. - // Since acos is defined for [0, PI], and we multiply by 2.0, we - // can push the angle outside the acceptible range. - // When this happens we set the angle to the other portion of a - // full 2PI rotation, and negate the axis, which reverses the - // direction of the rotation (by the right-hand rule). - *angle = 2.f * F_PI - temp_angle; - vec.mV[VX] = - mQ[VX] * sin_a; - vec.mV[VY] = - mQ[VY] * sin_a; - vec.mV[VZ] = - mQ[VZ] * sin_a; - } - else - { - *angle = temp_angle; - vec.mV[VX] = mQ[VX] * sin_a; - vec.mV[VY] = mQ[VY] * sin_a; - vec.mV[VZ] = mQ[VZ] * sin_a; - } -} - - -// quaternion does not need to be normalized -void LLQuaternion::getEulerAngles(F32 *roll, F32 *pitch, F32 *yaw) const -{ - LLMatrix3 rot_mat(*this); - rot_mat.orthogonalize(); - rot_mat.getEulerAngles(roll, pitch, yaw); - -// // NOTE: LLQuaternion's are actually inverted with respect to -// // the matrices, so this code also assumes inverted quaternions -// // (-x, -y, -z, w). The result is that roll,pitch,yaw are applied -// // in reverse order (yaw,pitch,roll). -// F32 x = -mQ[VX], y = -mQ[VY], z = -mQ[VZ], w = mQ[VW]; -// F64 m20 = 2.0*(x*z-y*w); -// if (1.0f - fabsf(m20) < F_APPROXIMATELY_ZERO) -// { -// *roll = 0.0f; -// *pitch = (F32)asin(m20); -// *yaw = (F32)atan2(2.0*(x*y-z*w), 1.0 - 2.0*(x*x+z*z)); -// } -// else -// { -// *roll = (F32)atan2(-2.0*(y*z+x*w), 1.0-2.0*(x*x+y*y)); -// *pitch = (F32)asin(m20); -// *yaw = (F32)atan2(-2.0*(x*y+z*w), 1.0-2.0*(y*y+z*z)); -// } -} - -// Saves space by using the fact that our quaternions are normalized -LLVector3 LLQuaternion::packToVector3() const -{ - if( mQ[VW] >= 0 ) - { - return LLVector3( mQ[VX], mQ[VY], mQ[VZ] ); - } - else - { - return LLVector3( -mQ[VX], -mQ[VY], -mQ[VZ] ); - } -} - -// Saves space by using the fact that our quaternions are normalized -void LLQuaternion::unpackFromVector3( const LLVector3& vec ) -{ - mQ[VX] = vec.mV[VX]; - mQ[VY] = vec.mV[VY]; - mQ[VZ] = vec.mV[VZ]; - F32 t = 1.f - vec.magVecSquared(); - if( t > 0 ) - { - mQ[VW] = sqrt( t ); - } - else - { - // Need this to avoid trying to find the square root of a negative number due - // to floating point error. - mQ[VW] = 0; - } -} - -BOOL LLQuaternion::parseQuat(const std::string& buf, LLQuaternion* value) -{ - if( buf.empty() || value == NULL) - { - return FALSE; - } - - LLQuaternion quat; - S32 count = sscanf( buf.c_str(), "%f %f %f %f", quat.mQ + 0, quat.mQ + 1, quat.mQ + 2, quat.mQ + 3 ); - if( 4 == count ) - { - value->set( quat ); - return TRUE; - } - - return FALSE; -} - - -// End +/** + * @file llquaternion.cpp + * @brief LLQuaternion class implementation. + * + * $LicenseInfo:firstyear=2000&license=viewergpl$ + * + * Copyright (c) 2000-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "linden_common.h" + +#include "llmath.h" // for F_PI + +#include "llquaternion.h" + +//#include "vmath.h" +#include "v3math.h" +#include "v3dmath.h" +#include "v4math.h" +#include "m4math.h" +#include "m3math.h" +#include "llquantize.h" + +// WARNING: Don't use this for global const definitions! using this +// at the top of a *.cpp file might not give you what you think. +const LLQuaternion LLQuaternion::DEFAULT; + +// Constructors + +LLQuaternion::LLQuaternion(const LLMatrix4 &mat) +{ + *this = mat.quaternion(); + normalize(); +} + +LLQuaternion::LLQuaternion(const LLMatrix3 &mat) +{ + *this = mat.quaternion(); + normalize(); +} + +LLQuaternion::LLQuaternion(F32 angle, const LLVector4 &vec) +{ + LLVector3 v(vec.mV[VX], vec.mV[VY], vec.mV[VZ]); + v.normalize(); + + F32 c, s; + c = cosf(angle*0.5f); + s = sinf(angle*0.5f); + + mQ[VX] = v.mV[VX] * s; + mQ[VY] = v.mV[VY] * s; + mQ[VZ] = v.mV[VZ] * s; + mQ[VW] = c; + normalize(); +} + +LLQuaternion::LLQuaternion(F32 angle, const LLVector3 &vec) +{ + LLVector3 v(vec); + v.normalize(); + + F32 c, s; + c = cosf(angle*0.5f); + s = sinf(angle*0.5f); + + mQ[VX] = v.mV[VX] * s; + mQ[VY] = v.mV[VY] * s; + mQ[VZ] = v.mV[VZ] * s; + mQ[VW] = c; + normalize(); +} + +LLQuaternion::LLQuaternion(const LLVector3 &x_axis, + const LLVector3 &y_axis, + const LLVector3 &z_axis) +{ + LLMatrix3 mat; + mat.setRows(x_axis, y_axis, z_axis); + *this = mat.quaternion(); + normalize(); +} + +// Quatizations +void LLQuaternion::quantize16(F32 lower, F32 upper) +{ + F32 x = mQ[VX]; + F32 y = mQ[VY]; + F32 z = mQ[VZ]; + F32 s = mQ[VS]; + + x = U16_to_F32(F32_to_U16_ROUND(x, lower, upper), lower, upper); + y = U16_to_F32(F32_to_U16_ROUND(y, lower, upper), lower, upper); + z = U16_to_F32(F32_to_U16_ROUND(z, lower, upper), lower, upper); + s = U16_to_F32(F32_to_U16_ROUND(s, lower, upper), lower, upper); + + mQ[VX] = x; + mQ[VY] = y; + mQ[VZ] = z; + mQ[VS] = s; + + normalize(); +} + +void LLQuaternion::quantize8(F32 lower, F32 upper) +{ + mQ[VX] = U8_to_F32(F32_to_U8_ROUND(mQ[VX], lower, upper), lower, upper); + mQ[VY] = U8_to_F32(F32_to_U8_ROUND(mQ[VY], lower, upper), lower, upper); + mQ[VZ] = U8_to_F32(F32_to_U8_ROUND(mQ[VZ], lower, upper), lower, upper); + mQ[VS] = U8_to_F32(F32_to_U8_ROUND(mQ[VS], lower, upper), lower, upper); + + normalize(); +} + +// LLVector3 Magnitude and Normalization Functions + + +// Set LLQuaternion routines + +const LLQuaternion& LLQuaternion::setAngleAxis(F32 angle, F32 x, F32 y, F32 z) +{ + LLVector3 vec(x, y, z); + vec.normalize(); + + angle *= 0.5f; + F32 c, s; + c = cosf(angle); + s = sinf(angle); + + mQ[VX] = vec.mV[VX]*s; + mQ[VY] = vec.mV[VY]*s; + mQ[VZ] = vec.mV[VZ]*s; + mQ[VW] = c; + + normalize(); + return (*this); +} + +const LLQuaternion& LLQuaternion::setAngleAxis(F32 angle, const LLVector3 &vec) +{ + LLVector3 v(vec); + v.normalize(); + + angle *= 0.5f; + F32 c, s; + c = cosf(angle); + s = sinf(angle); + + mQ[VX] = v.mV[VX]*s; + mQ[VY] = v.mV[VY]*s; + mQ[VZ] = v.mV[VZ]*s; + mQ[VW] = c; + + normalize(); + return (*this); +} + +const LLQuaternion& LLQuaternion::setAngleAxis(F32 angle, const LLVector4 &vec) +{ + LLVector3 v(vec.mV[VX], vec.mV[VY], vec.mV[VZ]); + v.normalize(); + + F32 c, s; + c = cosf(angle*0.5f); + s = sinf(angle*0.5f); + + mQ[VX] = v.mV[VX]*s; + mQ[VY] = v.mV[VY]*s; + mQ[VZ] = v.mV[VZ]*s; + mQ[VW] = c; + + normalize(); + return (*this); +} + +const LLQuaternion& LLQuaternion::setEulerAngles(F32 roll, F32 pitch, F32 yaw) +{ + LLMatrix3 rot_mat(roll, pitch, yaw); + rot_mat.orthogonalize(); + *this = rot_mat.quaternion(); + + normalize(); + return (*this); +} + +// deprecated +const LLQuaternion& LLQuaternion::set(const LLMatrix3 &mat) +{ + *this = mat.quaternion(); + normalize(); + return (*this); +} + +// deprecated +const LLQuaternion& LLQuaternion::set(const LLMatrix4 &mat) +{ + *this = mat.quaternion(); + normalize(); + return (*this); +} + +// deprecated +const LLQuaternion& LLQuaternion::setQuat(F32 angle, F32 x, F32 y, F32 z) +{ + LLVector3 vec(x, y, z); + vec.normalize(); + + angle *= 0.5f; + F32 c, s; + c = cosf(angle); + s = sinf(angle); + + mQ[VX] = vec.mV[VX]*s; + mQ[VY] = vec.mV[VY]*s; + mQ[VZ] = vec.mV[VZ]*s; + mQ[VW] = c; + + normalize(); + return (*this); +} + +// deprecated +const LLQuaternion& LLQuaternion::setQuat(F32 angle, const LLVector3 &vec) +{ + LLVector3 v(vec); + v.normalize(); + + angle *= 0.5f; + F32 c, s; + c = cosf(angle); + s = sinf(angle); + + mQ[VX] = v.mV[VX]*s; + mQ[VY] = v.mV[VY]*s; + mQ[VZ] = v.mV[VZ]*s; + mQ[VW] = c; + + normalize(); + return (*this); +} + +const LLQuaternion& LLQuaternion::setQuat(F32 angle, const LLVector4 &vec) +{ + LLVector3 v(vec.mV[VX], vec.mV[VY], vec.mV[VZ]); + v.normalize(); + + F32 c, s; + c = cosf(angle*0.5f); + s = sinf(angle*0.5f); + + mQ[VX] = v.mV[VX]*s; + mQ[VY] = v.mV[VY]*s; + mQ[VZ] = v.mV[VZ]*s; + mQ[VW] = c; + + normalize(); + return (*this); +} + +const LLQuaternion& LLQuaternion::setQuat(F32 roll, F32 pitch, F32 yaw) +{ + LLMatrix3 rot_mat(roll, pitch, yaw); + rot_mat.orthogonalize(); + *this = rot_mat.quaternion(); + + normalize(); + return (*this); +} + +const LLQuaternion& LLQuaternion::setQuat(const LLMatrix3 &mat) +{ + *this = mat.quaternion(); + normalize(); + return (*this); +} + +const LLQuaternion& LLQuaternion::setQuat(const LLMatrix4 &mat) +{ + *this = mat.quaternion(); + normalize(); + return (*this); +//#if 1 +// // NOTE: LLQuaternion's are actually inverted with respect to +// // the matrices, so this code also assumes inverted quaternions +// // (-x, -y, -z, w). The result is that roll,pitch,yaw are applied +// // in reverse order (yaw,pitch,roll). +// F64 cosX = cos(roll); +// F64 cosY = cos(pitch); +// F64 cosZ = cos(yaw); +// +// F64 sinX = sin(roll); +// F64 sinY = sin(pitch); +// F64 sinZ = sin(yaw); +// +// mQ[VW] = (F32)sqrt(cosY*cosZ - sinX*sinY*sinZ + cosX*cosZ + cosX*cosY + 1.0)*.5; +// if (fabs(mQ[VW]) < F_APPROXIMATELY_ZERO) +// { +// // null rotation, any axis will do +// mQ[VX] = 0.0f; +// mQ[VY] = 1.0f; +// mQ[VZ] = 0.0f; +// } +// else +// { +// F32 inv_s = 1.0f / (4.0f * mQ[VW]); +// mQ[VX] = (F32)-(-sinX*cosY - cosX*sinY*sinZ - sinX*cosZ) * inv_s; +// mQ[VY] = (F32)-(-cosX*sinY*cosZ + sinX*sinZ - sinY) * inv_s; +// mQ[VZ] = (F32)-(-cosY*sinZ - sinX*sinY*cosZ - cosX*sinZ) * inv_s; +// } +// +//#else // This only works on a certain subset of roll/pitch/yaw +// +// F64 cosX = cosf(roll/2.0); +// F64 cosY = cosf(pitch/2.0); +// F64 cosZ = cosf(yaw/2.0); +// +// F64 sinX = sinf(roll/2.0); +// F64 sinY = sinf(pitch/2.0); +// F64 sinZ = sinf(yaw/2.0); +// +// mQ[VW] = (F32)(cosX*cosY*cosZ + sinX*sinY*sinZ); +// mQ[VX] = (F32)(sinX*cosY*cosZ - cosX*sinY*sinZ); +// mQ[VY] = (F32)(cosX*sinY*cosZ + sinX*cosY*sinZ); +// mQ[VZ] = (F32)(cosX*cosY*sinZ - sinX*sinY*cosZ); +//#endif +// +// normalize(); +// return (*this); +} + +// SJB: This code is correct for a logicly stored (non-transposed) matrix; +// Our matrices are stored transposed, OpenGL style, so this generates the +// INVERSE matrix, or the CORRECT matrix form an INVERSE quaternion. +// Because we use similar logic in LLMatrix3::quaternion(), +// we are internally consistant so everything works OK :) +LLMatrix3 LLQuaternion::getMatrix3(void) const +{ + LLMatrix3 mat; + F32 xx, xy, xz, xw, yy, yz, yw, zz, zw; + + xx = mQ[VX] * mQ[VX]; + xy = mQ[VX] * mQ[VY]; + xz = mQ[VX] * mQ[VZ]; + xw = mQ[VX] * mQ[VW]; + + yy = mQ[VY] * mQ[VY]; + yz = mQ[VY] * mQ[VZ]; + yw = mQ[VY] * mQ[VW]; + + zz = mQ[VZ] * mQ[VZ]; + zw = mQ[VZ] * mQ[VW]; + + mat.mMatrix[0][0] = 1.f - 2.f * ( yy + zz ); + mat.mMatrix[0][1] = 2.f * ( xy + zw ); + mat.mMatrix[0][2] = 2.f * ( xz - yw ); + + mat.mMatrix[1][0] = 2.f * ( xy - zw ); + mat.mMatrix[1][1] = 1.f - 2.f * ( xx + zz ); + mat.mMatrix[1][2] = 2.f * ( yz + xw ); + + mat.mMatrix[2][0] = 2.f * ( xz + yw ); + mat.mMatrix[2][1] = 2.f * ( yz - xw ); + mat.mMatrix[2][2] = 1.f - 2.f * ( xx + yy ); + + return mat; +} + +LLMatrix4 LLQuaternion::getMatrix4(void) const +{ + LLMatrix4 mat; + F32 xx, xy, xz, xw, yy, yz, yw, zz, zw; + + xx = mQ[VX] * mQ[VX]; + xy = mQ[VX] * mQ[VY]; + xz = mQ[VX] * mQ[VZ]; + xw = mQ[VX] * mQ[VW]; + + yy = mQ[VY] * mQ[VY]; + yz = mQ[VY] * mQ[VZ]; + yw = mQ[VY] * mQ[VW]; + + zz = mQ[VZ] * mQ[VZ]; + zw = mQ[VZ] * mQ[VW]; + + mat.mMatrix[0][0] = 1.f - 2.f * ( yy + zz ); + mat.mMatrix[0][1] = 2.f * ( xy + zw ); + mat.mMatrix[0][2] = 2.f * ( xz - yw ); + + mat.mMatrix[1][0] = 2.f * ( xy - zw ); + mat.mMatrix[1][1] = 1.f - 2.f * ( xx + zz ); + mat.mMatrix[1][2] = 2.f * ( yz + xw ); + + mat.mMatrix[2][0] = 2.f * ( xz + yw ); + mat.mMatrix[2][1] = 2.f * ( yz - xw ); + mat.mMatrix[2][2] = 1.f - 2.f * ( xx + yy ); + + // TODO -- should we set the translation portion to zero? + + return mat; +} + + + + +// Other useful methods + + +// calculate the shortest rotation from a to b +void LLQuaternion::shortestArc(const LLVector3 &a, const LLVector3 &b) +{ + // Make a local copy of both vectors. + LLVector3 vec_a = a; + LLVector3 vec_b = b; + + // Make sure neither vector is zero length. Also normalize + // the vectors while we are at it. + F32 vec_a_mag = vec_a.normalize(); + F32 vec_b_mag = vec_b.normalize(); + if (vec_a_mag < F_APPROXIMATELY_ZERO || + vec_b_mag < F_APPROXIMATELY_ZERO) + { + // Can't calculate a rotation from this. + // Just return ZERO_ROTATION instead. + loadIdentity(); + return; + } + + // Create an axis to rotate around, and the cos of the angle to rotate. + LLVector3 axis = vec_a % vec_b; + F32 cos_theta = vec_a * vec_b; + + // Check the angle between the vectors to see if they are parallel or anti-parallel. + if (cos_theta > 1.0 - F_APPROXIMATELY_ZERO) + { + // a and b are parallel. No rotation is necessary. + loadIdentity(); + } + else if (cos_theta < -1.0 + F_APPROXIMATELY_ZERO) + { + // a and b are anti-parallel. + // Rotate 180 degrees around some orthogonal axis. + // Find the projection of the x-axis onto a, and try + // using the vector between the projection and the x-axis + // as the orthogonal axis. + LLVector3 proj = vec_a.mV[VX] / (vec_a * vec_a) * vec_a; + LLVector3 ortho_axis(1.f, 0.f, 0.f); + ortho_axis -= proj; + + // Turn this into an orthonormal axis. + F32 ortho_length = ortho_axis.normalize(); + // If the axis' length is 0, then our guess at an orthogonal axis + // was wrong (a is parallel to the x-axis). + if (ortho_length < F_APPROXIMATELY_ZERO) + { + // Use the z-axis instead. + ortho_axis.setVec(0.f, 0.f, 1.f); + } + + // Construct a quaternion from this orthonormal axis. + mQ[VX] = ortho_axis.mV[VX]; + mQ[VY] = ortho_axis.mV[VY]; + mQ[VZ] = ortho_axis.mV[VZ]; + mQ[VW] = 0.f; + } + else + { + // a and b are NOT parallel or anti-parallel. + // Return the rotation between these vectors. + F32 theta = (F32)acos(cos_theta); + + setAngleAxis(theta, axis); + } +} + +// constrains rotation to a cone angle specified in radians +const LLQuaternion &LLQuaternion::constrain(F32 radians) +{ + const F32 cos_angle_lim = cosf( radians/2 ); // mQ[VW] limit + const F32 sin_angle_lim = sinf( radians/2 ); // rotation axis length limit + + if (mQ[VW] < 0.f) + { + mQ[VX] *= -1.f; + mQ[VY] *= -1.f; + mQ[VZ] *= -1.f; + mQ[VW] *= -1.f; + } + + // if rotation angle is greater than limit (cos is less than limit) + if( mQ[VW] < cos_angle_lim ) + { + mQ[VW] = cos_angle_lim; + F32 axis_len = sqrtf( mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] ); // sin(theta/2) + F32 axis_mult_fact = sin_angle_lim / axis_len; + mQ[VX] *= axis_mult_fact; + mQ[VY] *= axis_mult_fact; + mQ[VZ] *= axis_mult_fact; + } + + return *this; +} + +// Operators + +std::ostream& operator<<(std::ostream &s, const LLQuaternion &a) +{ + s << "{ " + << a.mQ[VX] << ", " << a.mQ[VY] << ", " << a.mQ[VZ] << ", " << a.mQ[VW] + << " }"; + return s; +} + + +// Does NOT renormalize the result +LLQuaternion operator*(const LLQuaternion &a, const LLQuaternion &b) +{ +// LLQuaternion::mMultCount++; + + LLQuaternion q( + b.mQ[3] * a.mQ[0] + b.mQ[0] * a.mQ[3] + b.mQ[1] * a.mQ[2] - b.mQ[2] * a.mQ[1], + b.mQ[3] * a.mQ[1] + b.mQ[1] * a.mQ[3] + b.mQ[2] * a.mQ[0] - b.mQ[0] * a.mQ[2], + b.mQ[3] * a.mQ[2] + b.mQ[2] * a.mQ[3] + b.mQ[0] * a.mQ[1] - b.mQ[1] * a.mQ[0], + b.mQ[3] * a.mQ[3] - b.mQ[0] * a.mQ[0] - b.mQ[1] * a.mQ[1] - b.mQ[2] * a.mQ[2] + ); + return q; +} + +/* +LLMatrix4 operator*(const LLMatrix4 &m, const LLQuaternion &q) +{ + LLMatrix4 qmat(q); + return (m*qmat); +} +*/ + + + +LLVector4 operator*(const LLVector4 &a, const LLQuaternion &rot) +{ + F32 rw = - rot.mQ[VX] * a.mV[VX] - rot.mQ[VY] * a.mV[VY] - rot.mQ[VZ] * a.mV[VZ]; + F32 rx = rot.mQ[VW] * a.mV[VX] + rot.mQ[VY] * a.mV[VZ] - rot.mQ[VZ] * a.mV[VY]; + F32 ry = rot.mQ[VW] * a.mV[VY] + rot.mQ[VZ] * a.mV[VX] - rot.mQ[VX] * a.mV[VZ]; + F32 rz = rot.mQ[VW] * a.mV[VZ] + rot.mQ[VX] * a.mV[VY] - rot.mQ[VY] * a.mV[VX]; + + F32 nx = - rw * rot.mQ[VX] + rx * rot.mQ[VW] - ry * rot.mQ[VZ] + rz * rot.mQ[VY]; + F32 ny = - rw * rot.mQ[VY] + ry * rot.mQ[VW] - rz * rot.mQ[VX] + rx * rot.mQ[VZ]; + F32 nz = - rw * rot.mQ[VZ] + rz * rot.mQ[VW] - rx * rot.mQ[VY] + ry * rot.mQ[VX]; + + return LLVector4(nx, ny, nz, a.mV[VW]); +} + +LLVector3 operator*(const LLVector3 &a, const LLQuaternion &rot) +{ + F32 rw = - rot.mQ[VX] * a.mV[VX] - rot.mQ[VY] * a.mV[VY] - rot.mQ[VZ] * a.mV[VZ]; + F32 rx = rot.mQ[VW] * a.mV[VX] + rot.mQ[VY] * a.mV[VZ] - rot.mQ[VZ] * a.mV[VY]; + F32 ry = rot.mQ[VW] * a.mV[VY] + rot.mQ[VZ] * a.mV[VX] - rot.mQ[VX] * a.mV[VZ]; + F32 rz = rot.mQ[VW] * a.mV[VZ] + rot.mQ[VX] * a.mV[VY] - rot.mQ[VY] * a.mV[VX]; + + F32 nx = - rw * rot.mQ[VX] + rx * rot.mQ[VW] - ry * rot.mQ[VZ] + rz * rot.mQ[VY]; + F32 ny = - rw * rot.mQ[VY] + ry * rot.mQ[VW] - rz * rot.mQ[VX] + rx * rot.mQ[VZ]; + F32 nz = - rw * rot.mQ[VZ] + rz * rot.mQ[VW] - rx * rot.mQ[VY] + ry * rot.mQ[VX]; + + return LLVector3(nx, ny, nz); +} + +LLVector3d operator*(const LLVector3d &a, const LLQuaternion &rot) +{ + F64 rw = - rot.mQ[VX] * a.mdV[VX] - rot.mQ[VY] * a.mdV[VY] - rot.mQ[VZ] * a.mdV[VZ]; + F64 rx = rot.mQ[VW] * a.mdV[VX] + rot.mQ[VY] * a.mdV[VZ] - rot.mQ[VZ] * a.mdV[VY]; + F64 ry = rot.mQ[VW] * a.mdV[VY] + rot.mQ[VZ] * a.mdV[VX] - rot.mQ[VX] * a.mdV[VZ]; + F64 rz = rot.mQ[VW] * a.mdV[VZ] + rot.mQ[VX] * a.mdV[VY] - rot.mQ[VY] * a.mdV[VX]; + + F64 nx = - rw * rot.mQ[VX] + rx * rot.mQ[VW] - ry * rot.mQ[VZ] + rz * rot.mQ[VY]; + F64 ny = - rw * rot.mQ[VY] + ry * rot.mQ[VW] - rz * rot.mQ[VX] + rx * rot.mQ[VZ]; + F64 nz = - rw * rot.mQ[VZ] + rz * rot.mQ[VW] - rx * rot.mQ[VY] + ry * rot.mQ[VX]; + + return LLVector3d(nx, ny, nz); +} + +F32 dot(const LLQuaternion &a, const LLQuaternion &b) +{ + return a.mQ[VX] * b.mQ[VX] + + a.mQ[VY] * b.mQ[VY] + + a.mQ[VZ] * b.mQ[VZ] + + a.mQ[VW] * b.mQ[VW]; +} + +// DEMO HACK: This lerp is probably inocrrect now due intermediate normalization +// it should look more like the lerp below +#if 0 +// linear interpolation +LLQuaternion lerp(F32 t, const LLQuaternion &p, const LLQuaternion &q) +{ + LLQuaternion r; + r = t * (q - p) + p; + r.normalize(); + return r; +} +#endif + +// lerp from identity to q +LLQuaternion lerp(F32 t, const LLQuaternion &q) +{ + LLQuaternion r; + r.mQ[VX] = t * q.mQ[VX]; + r.mQ[VY] = t * q.mQ[VY]; + r.mQ[VZ] = t * q.mQ[VZ]; + r.mQ[VW] = t * (q.mQ[VZ] - 1.f) + 1.f; + r.normalize(); + return r; +} + +LLQuaternion lerp(F32 t, const LLQuaternion &p, const LLQuaternion &q) +{ + LLQuaternion r; + F32 inv_t; + + inv_t = 1.f - t; + + r.mQ[VX] = t * q.mQ[VX] + (inv_t * p.mQ[VX]); + r.mQ[VY] = t * q.mQ[VY] + (inv_t * p.mQ[VY]); + r.mQ[VZ] = t * q.mQ[VZ] + (inv_t * p.mQ[VZ]); + r.mQ[VW] = t * q.mQ[VW] + (inv_t * p.mQ[VW]); + r.normalize(); + return r; +} + + +// spherical linear interpolation +LLQuaternion slerp( F32 u, const LLQuaternion &a, const LLQuaternion &b ) +{ + // cosine theta = dot product of a and b + F32 cos_t = a.mQ[0]*b.mQ[0] + a.mQ[1]*b.mQ[1] + a.mQ[2]*b.mQ[2] + a.mQ[3]*b.mQ[3]; + + // if b is on opposite hemisphere from a, use -a instead + int bflip; + if (cos_t < 0.0f) + { + cos_t = -cos_t; + bflip = TRUE; + } + else + bflip = FALSE; + + // if B is (within precision limits) the same as A, + // just linear interpolate between A and B. + F32 alpha; // interpolant + F32 beta; // 1 - interpolant + if (1.0f - cos_t < 0.00001f) + { + beta = 1.0f - u; + alpha = u; + } + else + { + F32 theta = acosf(cos_t); + F32 sin_t = sinf(theta); + beta = sinf(theta - u*theta) / sin_t; + alpha = sinf(u*theta) / sin_t; + } + + if (bflip) + beta = -beta; + + // interpolate + LLQuaternion ret; + ret.mQ[0] = beta*a.mQ[0] + alpha*b.mQ[0]; + ret.mQ[1] = beta*a.mQ[1] + alpha*b.mQ[1]; + ret.mQ[2] = beta*a.mQ[2] + alpha*b.mQ[2]; + ret.mQ[3] = beta*a.mQ[3] + alpha*b.mQ[3]; + + return ret; +} + +// lerp whenever possible +LLQuaternion nlerp(F32 t, const LLQuaternion &a, const LLQuaternion &b) +{ + if (dot(a, b) < 0.f) + { + return slerp(t, a, b); + } + else + { + return lerp(t, a, b); + } +} + +LLQuaternion nlerp(F32 t, const LLQuaternion &q) +{ + if (q.mQ[VW] < 0.f) + { + return slerp(t, q); + } + else + { + return lerp(t, q); + } +} + +// slerp from identity quaternion to another quaternion +LLQuaternion slerp(F32 t, const LLQuaternion &q) +{ + F32 c = q.mQ[VW]; + if (1.0f == t || 1.0f == c) + { + // the trivial cases + return q; + } + + LLQuaternion r; + F32 s, angle, stq, stp; + + s = (F32) sqrt(1.f - c*c); + + if (c < 0.0f) + { + // when c < 0.0 then theta > PI/2 + // since quat and -quat are the same rotation we invert one of + // p or q to reduce unecessary spins + // A equivalent way to do it is to convert acos(c) as if it had + // been negative, and to negate stp + angle = (F32) acos(-c); + stp = -(F32) sin(angle * (1.f - t)); + stq = (F32) sin(angle * t); + } + else + { + angle = (F32) acos(c); + stp = (F32) sin(angle * (1.f - t)); + stq = (F32) sin(angle * t); + } + + r.mQ[VX] = (q.mQ[VX] * stq) / s; + r.mQ[VY] = (q.mQ[VY] * stq) / s; + r.mQ[VZ] = (q.mQ[VZ] * stq) / s; + r.mQ[VW] = (stp + q.mQ[VW] * stq) / s; + + return r; +} + +LLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order) +{ + LLQuaternion xQ( xRot*DEG_TO_RAD, LLVector3(1.0f, 0.0f, 0.0f) ); + LLQuaternion yQ( yRot*DEG_TO_RAD, LLVector3(0.0f, 1.0f, 0.0f) ); + LLQuaternion zQ( zRot*DEG_TO_RAD, LLVector3(0.0f, 0.0f, 1.0f) ); + LLQuaternion ret; + switch( order ) + { + case LLQuaternion::XYZ: + ret = xQ * yQ * zQ; + break; + case LLQuaternion::YZX: + ret = yQ * zQ * xQ; + break; + case LLQuaternion::ZXY: + ret = zQ * xQ * yQ; + break; + case LLQuaternion::XZY: + ret = xQ * zQ * yQ; + break; + case LLQuaternion::YXZ: + ret = yQ * xQ * zQ; + break; + case LLQuaternion::ZYX: + ret = zQ * yQ * xQ; + break; + } + return ret; +} + +const char *OrderToString( const LLQuaternion::Order order ) +{ + const char *p = NULL; + switch( order ) + { + default: + case LLQuaternion::XYZ: + p = "XYZ"; + break; + case LLQuaternion::YZX: + p = "YZX"; + break; + case LLQuaternion::ZXY: + p = "ZXY"; + break; + case LLQuaternion::XZY: + p = "XZY"; + break; + case LLQuaternion::YXZ: + p = "YXZ"; + break; + case LLQuaternion::ZYX: + p = "ZYX"; + break; + } + return p; +} + +LLQuaternion::Order StringToOrder( const char *str ) +{ + if (strncmp(str, "XYZ", 3)==0 || strncmp(str, "xyz", 3)==0) + return LLQuaternion::XYZ; + + if (strncmp(str, "YZX", 3)==0 || strncmp(str, "yzx", 3)==0) + return LLQuaternion::YZX; + + if (strncmp(str, "ZXY", 3)==0 || strncmp(str, "zxy", 3)==0) + return LLQuaternion::ZXY; + + if (strncmp(str, "XZY", 3)==0 || strncmp(str, "xzy", 3)==0) + return LLQuaternion::XZY; + + if (strncmp(str, "YXZ", 3)==0 || strncmp(str, "yxz", 3)==0) + return LLQuaternion::YXZ; + + if (strncmp(str, "ZYX", 3)==0 || strncmp(str, "zyx", 3)==0) + return LLQuaternion::ZYX; + + return LLQuaternion::XYZ; +} + +void LLQuaternion::getAngleAxis(F32* angle, LLVector3 &vec) const +{ + F32 cos_a = mQ[VW]; + if (cos_a > 1.0f) cos_a = 1.0f; + if (cos_a < -1.0f) cos_a = -1.0f; + + F32 sin_a = (F32) sqrt( 1.0f - cos_a * cos_a ); + + if ( fabs( sin_a ) < 0.0005f ) + sin_a = 1.0f; + else + sin_a = 1.f/sin_a; + + F32 temp_angle = 2.0f * (F32) acos( cos_a ); + if (temp_angle > F_PI) + { + // The (angle,axis) pair should never have angles outside [PI, -PI] + // since we want the _shortest_ (angle,axis) solution. + // Since acos is defined for [0, PI], and we multiply by 2.0, we + // can push the angle outside the acceptible range. + // When this happens we set the angle to the other portion of a + // full 2PI rotation, and negate the axis, which reverses the + // direction of the rotation (by the right-hand rule). + *angle = 2.f * F_PI - temp_angle; + vec.mV[VX] = - mQ[VX] * sin_a; + vec.mV[VY] = - mQ[VY] * sin_a; + vec.mV[VZ] = - mQ[VZ] * sin_a; + } + else + { + *angle = temp_angle; + vec.mV[VX] = mQ[VX] * sin_a; + vec.mV[VY] = mQ[VY] * sin_a; + vec.mV[VZ] = mQ[VZ] * sin_a; + } +} + + +// quaternion does not need to be normalized +void LLQuaternion::getEulerAngles(F32 *roll, F32 *pitch, F32 *yaw) const +{ + LLMatrix3 rot_mat(*this); + rot_mat.orthogonalize(); + rot_mat.getEulerAngles(roll, pitch, yaw); + +// // NOTE: LLQuaternion's are actually inverted with respect to +// // the matrices, so this code also assumes inverted quaternions +// // (-x, -y, -z, w). The result is that roll,pitch,yaw are applied +// // in reverse order (yaw,pitch,roll). +// F32 x = -mQ[VX], y = -mQ[VY], z = -mQ[VZ], w = mQ[VW]; +// F64 m20 = 2.0*(x*z-y*w); +// if (1.0f - fabsf(m20) < F_APPROXIMATELY_ZERO) +// { +// *roll = 0.0f; +// *pitch = (F32)asin(m20); +// *yaw = (F32)atan2(2.0*(x*y-z*w), 1.0 - 2.0*(x*x+z*z)); +// } +// else +// { +// *roll = (F32)atan2(-2.0*(y*z+x*w), 1.0-2.0*(x*x+y*y)); +// *pitch = (F32)asin(m20); +// *yaw = (F32)atan2(-2.0*(x*y+z*w), 1.0-2.0*(y*y+z*z)); +// } +} + +// Saves space by using the fact that our quaternions are normalized +LLVector3 LLQuaternion::packToVector3() const +{ + if( mQ[VW] >= 0 ) + { + return LLVector3( mQ[VX], mQ[VY], mQ[VZ] ); + } + else + { + return LLVector3( -mQ[VX], -mQ[VY], -mQ[VZ] ); + } +} + +// Saves space by using the fact that our quaternions are normalized +void LLQuaternion::unpackFromVector3( const LLVector3& vec ) +{ + mQ[VX] = vec.mV[VX]; + mQ[VY] = vec.mV[VY]; + mQ[VZ] = vec.mV[VZ]; + F32 t = 1.f - vec.magVecSquared(); + if( t > 0 ) + { + mQ[VW] = sqrt( t ); + } + else + { + // Need this to avoid trying to find the square root of a negative number due + // to floating point error. + mQ[VW] = 0; + } +} + +BOOL LLQuaternion::parseQuat(const std::string& buf, LLQuaternion* value) +{ + if( buf.empty() || value == NULL) + { + return FALSE; + } + + LLQuaternion quat; + S32 count = sscanf( buf.c_str(), "%f %f %f %f", quat.mQ + 0, quat.mQ + 1, quat.mQ + 2, quat.mQ + 3 ); + if( 4 == count ) + { + value->set( quat ); + return TRUE; + } + + return FALSE; +} + + +// End diff --git a/indra/llmath/llquaternion.h b/indra/llmath/llquaternion.h index bbd4326483..a7bb09fae3 100644 --- a/indra/llmath/llquaternion.h +++ b/indra/llmath/llquaternion.h @@ -1,594 +1,594 @@ -/** - * @file llquaternion.h - * @brief LLQuaternion class header file. - * - * $LicenseInfo:firstyear=2000&license=viewergpl$ - * - * Copyright (c) 2000-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#ifndef LLQUATERNION_H -#define LLQUATERNION_H - -#include - -#ifndef LLMATH_H //enforce specific include order to avoid tangling inline dependencies -#error "Please include llmath.h first." -#endif - -class LLVector4; -class LLVector3; -class LLVector3d; -class LLMatrix4; -class LLMatrix3; - -// NOTA BENE: Quaternion code is written assuming Unit Quaternions!!!! -// Moreover, it is written assuming that all vectors and matricies -// passed as arguments are normalized and unitary respectively. -// VERY VERY VERY VERY BAD THINGS will happen if these assumptions fail. - -static const U32 LENGTHOFQUAT = 4; - -class LLQuaternion -{ -public: - F32 mQ[LENGTHOFQUAT]; - - static const LLQuaternion DEFAULT; - - LLQuaternion(); // Initializes Quaternion to (0,0,0,1) - explicit LLQuaternion(const LLMatrix4 &mat); // Initializes Quaternion from Matrix4 - explicit LLQuaternion(const LLMatrix3 &mat); // Initializes Quaternion from Matrix3 - LLQuaternion(F32 x, F32 y, F32 z, F32 w); // Initializes Quaternion to normalize(x, y, z, w) - LLQuaternion(F32 angle, const LLVector4 &vec); // Initializes Quaternion to axis_angle2quat(angle, vec) - LLQuaternion(F32 angle, const LLVector3 &vec); // Initializes Quaternion to axis_angle2quat(angle, vec) - LLQuaternion(const F32 *q); // Initializes Quaternion to normalize(x, y, z, w) - LLQuaternion(const LLVector3 &x_axis, - const LLVector3 &y_axis, - const LLVector3 &z_axis); // Initializes Quaternion from Matrix3 = [x_axis ; y_axis ; z_axis] - - BOOL isIdentity() const; - BOOL isNotIdentity() const; - BOOL isFinite() const; // checks to see if all values of LLQuaternion are finite - void quantize16(F32 lower, F32 upper); // changes the vector to reflect quatization - void quantize8(F32 lower, F32 upper); // changes the vector to reflect quatization - void loadIdentity(); // Loads the quaternion that represents the identity rotation - - const LLQuaternion& set(F32 x, F32 y, F32 z, F32 w); // Sets Quaternion to normalize(x, y, z, w) - const LLQuaternion& set(const LLQuaternion &quat); // Copies Quaternion - const LLQuaternion& set(const F32 *q); // Sets Quaternion to normalize(quat[VX], quat[VY], quat[VZ], quat[VW]) - const LLQuaternion& set(const LLMatrix3 &mat); // Sets Quaternion to mat2quat(mat) - const LLQuaternion& set(const LLMatrix4 &mat); // Sets Quaternion to mat2quat(mat) - - const LLQuaternion& setAngleAxis(F32 angle, F32 x, F32 y, F32 z); // Sets Quaternion to axis_angle2quat(angle, x, y, z) - const LLQuaternion& setAngleAxis(F32 angle, const LLVector3 &vec); // Sets Quaternion to axis_angle2quat(angle, vec) - const LLQuaternion& setAngleAxis(F32 angle, const LLVector4 &vec); // Sets Quaternion to axis_angle2quat(angle, vec) - const LLQuaternion& setEulerAngles(F32 roll, F32 pitch, F32 yaw); // Sets Quaternion to euler2quat(pitch, yaw, roll) - - const LLQuaternion& setQuatInit(F32 x, F32 y, F32 z, F32 w); // deprecated - const LLQuaternion& setQuat(const LLQuaternion &quat); // deprecated - const LLQuaternion& setQuat(const F32 *q); // deprecated - const LLQuaternion& setQuat(const LLMatrix3 &mat); // deprecated - const LLQuaternion& setQuat(const LLMatrix4 &mat); // deprecated - const LLQuaternion& setQuat(F32 angle, F32 x, F32 y, F32 z); // deprecated - const LLQuaternion& setQuat(F32 angle, const LLVector3 &vec); // deprecated - const LLQuaternion& setQuat(F32 angle, const LLVector4 &vec); // deprecated - const LLQuaternion& setQuat(F32 roll, F32 pitch, F32 yaw); // deprecated - - LLMatrix4 getMatrix4(void) const; // Returns the Matrix4 equivalent of Quaternion - LLMatrix3 getMatrix3(void) const; // Returns the Matrix3 equivalent of Quaternion - void getAngleAxis(F32* angle, F32* x, F32* y, F32* z) const; // returns rotation in radians about axis x,y,z - void getAngleAxis(F32* angle, LLVector3 &vec) const; - void getEulerAngles(F32 *roll, F32* pitch, F32 *yaw) const; - - F32 normalize(); // Normalizes Quaternion and returns magnitude - F32 normQuat(); // deprecated - - const LLQuaternion& conjugate(void); // Conjugates Quaternion and returns result - const LLQuaternion& conjQuat(void); // deprecated - - // Other useful methods - const LLQuaternion& transpose(); // transpose (same as conjugate) - const LLQuaternion& transQuat(); // deprecated - - void shortestArc(const LLVector3 &a, const LLVector3 &b); // shortest rotation from a to b - const LLQuaternion& constrain(F32 radians); // constrains rotation to a cone angle specified in radians - - // Standard operators - friend std::ostream& operator<<(std::ostream &s, const LLQuaternion &a); // Prints a - friend LLQuaternion operator+(const LLQuaternion &a, const LLQuaternion &b); // Addition - friend LLQuaternion operator-(const LLQuaternion &a, const LLQuaternion &b); // Subtraction - friend LLQuaternion operator-(const LLQuaternion &a); // Negation - friend LLQuaternion operator*(F32 a, const LLQuaternion &q); // Scale - friend LLQuaternion operator*(const LLQuaternion &q, F32 b); // Scale - friend LLQuaternion operator*(const LLQuaternion &a, const LLQuaternion &b); // Returns a * b - friend LLQuaternion operator~(const LLQuaternion &a); // Returns a* (Conjugate of a) - bool operator==(const LLQuaternion &b) const; // Returns a == b - bool operator!=(const LLQuaternion &b) const; // Returns a != b - - friend const LLQuaternion& operator*=(LLQuaternion &a, const LLQuaternion &b); // Returns a * b - - friend LLVector4 operator*(const LLVector4 &a, const LLQuaternion &rot); // Rotates a by rot - friend LLVector3 operator*(const LLVector3 &a, const LLQuaternion &rot); // Rotates a by rot - friend LLVector3d operator*(const LLVector3d &a, const LLQuaternion &rot); // Rotates a by rot - - // Non-standard operators - friend F32 dot(const LLQuaternion &a, const LLQuaternion &b); - friend LLQuaternion lerp(F32 t, const LLQuaternion &p, const LLQuaternion &q); // linear interpolation (t = 0 to 1) from p to q - friend LLQuaternion lerp(F32 t, const LLQuaternion &q); // linear interpolation (t = 0 to 1) from identity to q - friend LLQuaternion slerp(F32 t, const LLQuaternion &p, const LLQuaternion &q); // spherical linear interpolation from p to q - friend LLQuaternion slerp(F32 t, const LLQuaternion &q); // spherical linear interpolation from identity to q - friend LLQuaternion nlerp(F32 t, const LLQuaternion &p, const LLQuaternion &q); // normalized linear interpolation from p to q - friend LLQuaternion nlerp(F32 t, const LLQuaternion &q); // normalized linear interpolation from p to q - - LLVector3 packToVector3() const; // Saves space by using the fact that our quaternions are normalized - void unpackFromVector3(const LLVector3& vec); // Saves space by using the fact that our quaternions are normalized - - enum Order { - XYZ = 0, - YZX = 1, - ZXY = 2, - XZY = 3, - YXZ = 4, - ZYX = 5 - }; - // Creates a quaternions from maya's rotation representation, - // which is 3 rotations (in DEGREES) in the specified order - friend LLQuaternion mayaQ(F32 x, F32 y, F32 z, Order order); - - // Conversions between Order and strings like "xyz" or "ZYX" - friend const char *OrderToString( const Order order ); - friend Order StringToOrder( const char *str ); - - static BOOL parseQuat(const std::string& buf, LLQuaternion* value); - - // For debugging, only - //static U32 mMultCount; -}; - -// checker -inline BOOL LLQuaternion::isFinite() const -{ - return (llfinite(mQ[VX]) && llfinite(mQ[VY]) && llfinite(mQ[VZ]) && llfinite(mQ[VS])); -} - -inline BOOL LLQuaternion::isIdentity() const -{ - return - ( mQ[VX] == 0.f ) && - ( mQ[VY] == 0.f ) && - ( mQ[VZ] == 0.f ) && - ( mQ[VS] == 1.f ); -} - -inline BOOL LLQuaternion::isNotIdentity() const -{ - return - ( mQ[VX] != 0.f ) || - ( mQ[VY] != 0.f ) || - ( mQ[VZ] != 0.f ) || - ( mQ[VS] != 1.f ); -} - - - -inline LLQuaternion::LLQuaternion(void) -{ - mQ[VX] = 0.f; - mQ[VY] = 0.f; - mQ[VZ] = 0.f; - mQ[VS] = 1.f; -} - -inline LLQuaternion::LLQuaternion(F32 x, F32 y, F32 z, F32 w) -{ - mQ[VX] = x; - mQ[VY] = y; - mQ[VZ] = z; - mQ[VS] = w; - - //RN: don't normalize this case as its used mainly for temporaries during calculations - //normalize(); - /* - F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); - mag -= 1.f; - mag = fabs(mag); - llassert(mag < 10.f*FP_MAG_THRESHOLD); - */ -} - -inline LLQuaternion::LLQuaternion(const F32 *q) -{ - mQ[VX] = q[VX]; - mQ[VY] = q[VY]; - mQ[VZ] = q[VZ]; - mQ[VS] = q[VW]; - - normalize(); - /* - F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); - mag -= 1.f; - mag = fabs(mag); - llassert(mag < FP_MAG_THRESHOLD); - */ -} - - -inline void LLQuaternion::loadIdentity() -{ - mQ[VX] = 0.0f; - mQ[VY] = 0.0f; - mQ[VZ] = 0.0f; - mQ[VW] = 1.0f; -} - - -inline const LLQuaternion& LLQuaternion::set(F32 x, F32 y, F32 z, F32 w) -{ - mQ[VX] = x; - mQ[VY] = y; - mQ[VZ] = z; - mQ[VS] = w; - normalize(); - return (*this); -} - -inline const LLQuaternion& LLQuaternion::set(const LLQuaternion &quat) -{ - mQ[VX] = quat.mQ[VX]; - mQ[VY] = quat.mQ[VY]; - mQ[VZ] = quat.mQ[VZ]; - mQ[VW] = quat.mQ[VW]; - normalize(); - return (*this); -} - -inline const LLQuaternion& LLQuaternion::set(const F32 *q) -{ - mQ[VX] = q[VX]; - mQ[VY] = q[VY]; - mQ[VZ] = q[VZ]; - mQ[VS] = q[VW]; - normalize(); - return (*this); -} - - -// deprecated -inline const LLQuaternion& LLQuaternion::setQuatInit(F32 x, F32 y, F32 z, F32 w) -{ - mQ[VX] = x; - mQ[VY] = y; - mQ[VZ] = z; - mQ[VS] = w; - normalize(); - return (*this); -} - -// deprecated -inline const LLQuaternion& LLQuaternion::setQuat(const LLQuaternion &quat) -{ - mQ[VX] = quat.mQ[VX]; - mQ[VY] = quat.mQ[VY]; - mQ[VZ] = quat.mQ[VZ]; - mQ[VW] = quat.mQ[VW]; - normalize(); - return (*this); -} - -// deprecated -inline const LLQuaternion& LLQuaternion::setQuat(const F32 *q) -{ - mQ[VX] = q[VX]; - mQ[VY] = q[VY]; - mQ[VZ] = q[VZ]; - mQ[VS] = q[VW]; - normalize(); - return (*this); -} - -// There may be a cheaper way that avoids the sqrt. -// Does sin_a = VX*VX + VY*VY + VZ*VZ? -// Copied from Matrix and Quaternion FAQ 1.12 -inline void LLQuaternion::getAngleAxis(F32* angle, F32* x, F32* y, F32* z) const -{ - F32 cos_a = mQ[VW]; - if (cos_a > 1.0f) cos_a = 1.0f; - if (cos_a < -1.0f) cos_a = -1.0f; - - F32 sin_a = (F32) sqrt( 1.0f - cos_a * cos_a ); - - if ( fabs( sin_a ) < 0.0005f ) - sin_a = 1.0f; - else - sin_a = 1.f/sin_a; - - F32 temp_angle = 2.0f * (F32) acos( cos_a ); - if (temp_angle > F_PI) - { - // The (angle,axis) pair should never have angles outside [PI, -PI] - // since we want the _shortest_ (angle,axis) solution. - // Since acos is defined for [0, PI], and we multiply by 2.0, we - // can push the angle outside the acceptible range. - // When this happens we set the angle to the other portion of a - // full 2PI rotation, and negate the axis, which reverses the - // direction of the rotation (by the right-hand rule). - *angle = 2.f * F_PI - temp_angle; - *x = - mQ[VX] * sin_a; - *y = - mQ[VY] * sin_a; - *z = - mQ[VZ] * sin_a; - } - else - { - *angle = temp_angle; - *x = mQ[VX] * sin_a; - *y = mQ[VY] * sin_a; - *z = mQ[VZ] * sin_a; - } -} - -inline const LLQuaternion& LLQuaternion::conjugate() -{ - mQ[VX] *= -1.f; - mQ[VY] *= -1.f; - mQ[VZ] *= -1.f; - return (*this); -} - -inline const LLQuaternion& LLQuaternion::conjQuat() -{ - mQ[VX] *= -1.f; - mQ[VY] *= -1.f; - mQ[VZ] *= -1.f; - return (*this); -} - -// Transpose -inline const LLQuaternion& LLQuaternion::transpose() -{ - mQ[VX] *= -1.f; - mQ[VY] *= -1.f; - mQ[VZ] *= -1.f; - return (*this); -} - -// deprecated -inline const LLQuaternion& LLQuaternion::transQuat() -{ - mQ[VX] *= -1.f; - mQ[VY] *= -1.f; - mQ[VZ] *= -1.f; - return (*this); -} - - -inline LLQuaternion operator+(const LLQuaternion &a, const LLQuaternion &b) -{ - return LLQuaternion( - a.mQ[VX] + b.mQ[VX], - a.mQ[VY] + b.mQ[VY], - a.mQ[VZ] + b.mQ[VZ], - a.mQ[VW] + b.mQ[VW] ); -} - - -inline LLQuaternion operator-(const LLQuaternion &a, const LLQuaternion &b) -{ - return LLQuaternion( - a.mQ[VX] - b.mQ[VX], - a.mQ[VY] - b.mQ[VY], - a.mQ[VZ] - b.mQ[VZ], - a.mQ[VW] - b.mQ[VW] ); -} - - -inline LLQuaternion operator-(const LLQuaternion &a) -{ - return LLQuaternion( - -a.mQ[VX], - -a.mQ[VY], - -a.mQ[VZ], - -a.mQ[VW] ); -} - - -inline LLQuaternion operator*(F32 a, const LLQuaternion &q) -{ - return LLQuaternion( - a * q.mQ[VX], - a * q.mQ[VY], - a * q.mQ[VZ], - a * q.mQ[VW] ); -} - - -inline LLQuaternion operator*(const LLQuaternion &q, F32 a) -{ - return LLQuaternion( - a * q.mQ[VX], - a * q.mQ[VY], - a * q.mQ[VZ], - a * q.mQ[VW] ); -} - -inline LLQuaternion operator~(const LLQuaternion &a) -{ - LLQuaternion q(a); - q.conjQuat(); - return q; -} - -inline bool LLQuaternion::operator==(const LLQuaternion &b) const -{ - return ( (mQ[VX] == b.mQ[VX]) - &&(mQ[VY] == b.mQ[VY]) - &&(mQ[VZ] == b.mQ[VZ]) - &&(mQ[VS] == b.mQ[VS])); -} - -inline bool LLQuaternion::operator!=(const LLQuaternion &b) const -{ - return ( (mQ[VX] != b.mQ[VX]) - ||(mQ[VY] != b.mQ[VY]) - ||(mQ[VZ] != b.mQ[VZ]) - ||(mQ[VS] != b.mQ[VS])); -} - -inline const LLQuaternion& operator*=(LLQuaternion &a, const LLQuaternion &b) -{ -#if 1 - LLQuaternion q( - b.mQ[3] * a.mQ[0] + b.mQ[0] * a.mQ[3] + b.mQ[1] * a.mQ[2] - b.mQ[2] * a.mQ[1], - b.mQ[3] * a.mQ[1] + b.mQ[1] * a.mQ[3] + b.mQ[2] * a.mQ[0] - b.mQ[0] * a.mQ[2], - b.mQ[3] * a.mQ[2] + b.mQ[2] * a.mQ[3] + b.mQ[0] * a.mQ[1] - b.mQ[1] * a.mQ[0], - b.mQ[3] * a.mQ[3] - b.mQ[0] * a.mQ[0] - b.mQ[1] * a.mQ[1] - b.mQ[2] * a.mQ[2] - ); - a = q; -#else - a = a * b; -#endif - return a; -} - -const F32 ONE_PART_IN_A_MILLION = 0.000001f; - -inline F32 LLQuaternion::normalize() -{ - F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); - - if (mag > FP_MAG_THRESHOLD) - { - // Floating point error can prevent some quaternions from achieving - // exact unity length. When trying to renormalize such quaternions we - // can oscillate between multiple quantized states. To prevent such - // drifts we only renomalize if the length is far enough from unity. - if (fabs(1.f - mag) > ONE_PART_IN_A_MILLION) - { - F32 oomag = 1.f/mag; - mQ[VX] *= oomag; - mQ[VY] *= oomag; - mQ[VZ] *= oomag; - mQ[VS] *= oomag; - } - } - else - { - // we were given a very bad quaternion so we set it to identity - mQ[VX] = 0.f; - mQ[VY] = 0.f; - mQ[VZ] = 0.f; - mQ[VS] = 1.f; - } - - return mag; -} - -// deprecated -inline F32 LLQuaternion::normQuat() -{ - F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); - - if (mag > FP_MAG_THRESHOLD) - { - if (fabs(1.f - mag) > ONE_PART_IN_A_MILLION) - { - // only renormalize if length not close enough to 1.0 already - F32 oomag = 1.f/mag; - mQ[VX] *= oomag; - mQ[VY] *= oomag; - mQ[VZ] *= oomag; - mQ[VS] *= oomag; - } - } - else - { - mQ[VX] = 0.f; - mQ[VY] = 0.f; - mQ[VZ] = 0.f; - mQ[VS] = 1.f; - } - - return mag; -} - -LLQuaternion::Order StringToOrder( const char *str ); - -// Some notes about Quaternions - -// What is a Quaternion? -// --------------------- -// A quaternion is a point in 4-dimensional complex space. -// Q = { Qx, Qy, Qz, Qw } -// -// -// Why Quaternions? -// ---------------- -// The set of quaternions that make up the the 4-D unit sphere -// can be mapped to the set of all rotations in 3-D space. Sometimes -// it is easier to describe/manipulate rotations in quaternion space -// than rotation-matrix space. -// -// -// How Quaternions? -// ---------------- -// In order to take advantage of quaternions we need to know how to -// go from rotation-matricies to quaternions and back. We also have -// to agree what variety of rotations we're generating. -// -// Consider the equation... v' = v * R -// -// There are two ways to think about rotations of vectors. -// 1) v' is the same vector in a different reference frame -// 2) v' is a new vector in the same reference frame -// -// bookmark -- which way are we using? -// -// -// Quaternion from Angle-Axis: -// --------------------------- -// Suppose we wanted to represent a rotation of some angle (theta) -// about some axis ({Ax, Ay, Az})... -// -// axis of rotation = {Ax, Ay, Az} -// angle_of_rotation = theta -// -// s = sin(0.5 * theta) -// c = cos(0.5 * theta) -// Q = { s * Ax, s * Ay, s * Az, c } -// -// -// 3x3 Matrix from Quaternion -// -------------------------- -// -// | | -// | 1 - 2 * (y^2 + z^2) 2 * (x * y + z * w) 2 * (y * w - x * z) | -// | | -// M = | 2 * (x * y - z * w) 1 - 2 * (x^2 + z^2) 2 * (y * z + x * w) | -// | | -// | 2 * (x * z + y * w) 2 * (y * z - x * w) 1 - 2 * (x^2 + y^2) | -// | | - -#endif +/** + * @file llquaternion.h + * @brief LLQuaternion class header file. + * + * $LicenseInfo:firstyear=2000&license=viewergpl$ + * + * Copyright (c) 2000-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LLQUATERNION_H +#define LLQUATERNION_H + +#include + +#ifndef LLMATH_H //enforce specific include order to avoid tangling inline dependencies +#error "Please include llmath.h first." +#endif + +class LLVector4; +class LLVector3; +class LLVector3d; +class LLMatrix4; +class LLMatrix3; + +// NOTA BENE: Quaternion code is written assuming Unit Quaternions!!!! +// Moreover, it is written assuming that all vectors and matricies +// passed as arguments are normalized and unitary respectively. +// VERY VERY VERY VERY BAD THINGS will happen if these assumptions fail. + +static const U32 LENGTHOFQUAT = 4; + +class LLQuaternion +{ +public: + F32 mQ[LENGTHOFQUAT]; + + static const LLQuaternion DEFAULT; + + LLQuaternion(); // Initializes Quaternion to (0,0,0,1) + explicit LLQuaternion(const LLMatrix4 &mat); // Initializes Quaternion from Matrix4 + explicit LLQuaternion(const LLMatrix3 &mat); // Initializes Quaternion from Matrix3 + LLQuaternion(F32 x, F32 y, F32 z, F32 w); // Initializes Quaternion to normalize(x, y, z, w) + LLQuaternion(F32 angle, const LLVector4 &vec); // Initializes Quaternion to axis_angle2quat(angle, vec) + LLQuaternion(F32 angle, const LLVector3 &vec); // Initializes Quaternion to axis_angle2quat(angle, vec) + LLQuaternion(const F32 *q); // Initializes Quaternion to normalize(x, y, z, w) + LLQuaternion(const LLVector3 &x_axis, + const LLVector3 &y_axis, + const LLVector3 &z_axis); // Initializes Quaternion from Matrix3 = [x_axis ; y_axis ; z_axis] + + BOOL isIdentity() const; + BOOL isNotIdentity() const; + BOOL isFinite() const; // checks to see if all values of LLQuaternion are finite + void quantize16(F32 lower, F32 upper); // changes the vector to reflect quatization + void quantize8(F32 lower, F32 upper); // changes the vector to reflect quatization + void loadIdentity(); // Loads the quaternion that represents the identity rotation + + const LLQuaternion& set(F32 x, F32 y, F32 z, F32 w); // Sets Quaternion to normalize(x, y, z, w) + const LLQuaternion& set(const LLQuaternion &quat); // Copies Quaternion + const LLQuaternion& set(const F32 *q); // Sets Quaternion to normalize(quat[VX], quat[VY], quat[VZ], quat[VW]) + const LLQuaternion& set(const LLMatrix3 &mat); // Sets Quaternion to mat2quat(mat) + const LLQuaternion& set(const LLMatrix4 &mat); // Sets Quaternion to mat2quat(mat) + + const LLQuaternion& setAngleAxis(F32 angle, F32 x, F32 y, F32 z); // Sets Quaternion to axis_angle2quat(angle, x, y, z) + const LLQuaternion& setAngleAxis(F32 angle, const LLVector3 &vec); // Sets Quaternion to axis_angle2quat(angle, vec) + const LLQuaternion& setAngleAxis(F32 angle, const LLVector4 &vec); // Sets Quaternion to axis_angle2quat(angle, vec) + const LLQuaternion& setEulerAngles(F32 roll, F32 pitch, F32 yaw); // Sets Quaternion to euler2quat(pitch, yaw, roll) + + const LLQuaternion& setQuatInit(F32 x, F32 y, F32 z, F32 w); // deprecated + const LLQuaternion& setQuat(const LLQuaternion &quat); // deprecated + const LLQuaternion& setQuat(const F32 *q); // deprecated + const LLQuaternion& setQuat(const LLMatrix3 &mat); // deprecated + const LLQuaternion& setQuat(const LLMatrix4 &mat); // deprecated + const LLQuaternion& setQuat(F32 angle, F32 x, F32 y, F32 z); // deprecated + const LLQuaternion& setQuat(F32 angle, const LLVector3 &vec); // deprecated + const LLQuaternion& setQuat(F32 angle, const LLVector4 &vec); // deprecated + const LLQuaternion& setQuat(F32 roll, F32 pitch, F32 yaw); // deprecated + + LLMatrix4 getMatrix4(void) const; // Returns the Matrix4 equivalent of Quaternion + LLMatrix3 getMatrix3(void) const; // Returns the Matrix3 equivalent of Quaternion + void getAngleAxis(F32* angle, F32* x, F32* y, F32* z) const; // returns rotation in radians about axis x,y,z + void getAngleAxis(F32* angle, LLVector3 &vec) const; + void getEulerAngles(F32 *roll, F32* pitch, F32 *yaw) const; + + F32 normalize(); // Normalizes Quaternion and returns magnitude + F32 normQuat(); // deprecated + + const LLQuaternion& conjugate(void); // Conjugates Quaternion and returns result + const LLQuaternion& conjQuat(void); // deprecated + + // Other useful methods + const LLQuaternion& transpose(); // transpose (same as conjugate) + const LLQuaternion& transQuat(); // deprecated + + void shortestArc(const LLVector3 &a, const LLVector3 &b); // shortest rotation from a to b + const LLQuaternion& constrain(F32 radians); // constrains rotation to a cone angle specified in radians + + // Standard operators + friend std::ostream& operator<<(std::ostream &s, const LLQuaternion &a); // Prints a + friend LLQuaternion operator+(const LLQuaternion &a, const LLQuaternion &b); // Addition + friend LLQuaternion operator-(const LLQuaternion &a, const LLQuaternion &b); // Subtraction + friend LLQuaternion operator-(const LLQuaternion &a); // Negation + friend LLQuaternion operator*(F32 a, const LLQuaternion &q); // Scale + friend LLQuaternion operator*(const LLQuaternion &q, F32 b); // Scale + friend LLQuaternion operator*(const LLQuaternion &a, const LLQuaternion &b); // Returns a * b + friend LLQuaternion operator~(const LLQuaternion &a); // Returns a* (Conjugate of a) + bool operator==(const LLQuaternion &b) const; // Returns a == b + bool operator!=(const LLQuaternion &b) const; // Returns a != b + + friend const LLQuaternion& operator*=(LLQuaternion &a, const LLQuaternion &b); // Returns a * b + + friend LLVector4 operator*(const LLVector4 &a, const LLQuaternion &rot); // Rotates a by rot + friend LLVector3 operator*(const LLVector3 &a, const LLQuaternion &rot); // Rotates a by rot + friend LLVector3d operator*(const LLVector3d &a, const LLQuaternion &rot); // Rotates a by rot + + // Non-standard operators + friend F32 dot(const LLQuaternion &a, const LLQuaternion &b); + friend LLQuaternion lerp(F32 t, const LLQuaternion &p, const LLQuaternion &q); // linear interpolation (t = 0 to 1) from p to q + friend LLQuaternion lerp(F32 t, const LLQuaternion &q); // linear interpolation (t = 0 to 1) from identity to q + friend LLQuaternion slerp(F32 t, const LLQuaternion &p, const LLQuaternion &q); // spherical linear interpolation from p to q + friend LLQuaternion slerp(F32 t, const LLQuaternion &q); // spherical linear interpolation from identity to q + friend LLQuaternion nlerp(F32 t, const LLQuaternion &p, const LLQuaternion &q); // normalized linear interpolation from p to q + friend LLQuaternion nlerp(F32 t, const LLQuaternion &q); // normalized linear interpolation from p to q + + LLVector3 packToVector3() const; // Saves space by using the fact that our quaternions are normalized + void unpackFromVector3(const LLVector3& vec); // Saves space by using the fact that our quaternions are normalized + + enum Order { + XYZ = 0, + YZX = 1, + ZXY = 2, + XZY = 3, + YXZ = 4, + ZYX = 5 + }; + // Creates a quaternions from maya's rotation representation, + // which is 3 rotations (in DEGREES) in the specified order + friend LLQuaternion mayaQ(F32 x, F32 y, F32 z, Order order); + + // Conversions between Order and strings like "xyz" or "ZYX" + friend const char *OrderToString( const Order order ); + friend Order StringToOrder( const char *str ); + + static BOOL parseQuat(const std::string& buf, LLQuaternion* value); + + // For debugging, only + //static U32 mMultCount; +}; + +// checker +inline BOOL LLQuaternion::isFinite() const +{ + return (llfinite(mQ[VX]) && llfinite(mQ[VY]) && llfinite(mQ[VZ]) && llfinite(mQ[VS])); +} + +inline BOOL LLQuaternion::isIdentity() const +{ + return + ( mQ[VX] == 0.f ) && + ( mQ[VY] == 0.f ) && + ( mQ[VZ] == 0.f ) && + ( mQ[VS] == 1.f ); +} + +inline BOOL LLQuaternion::isNotIdentity() const +{ + return + ( mQ[VX] != 0.f ) || + ( mQ[VY] != 0.f ) || + ( mQ[VZ] != 0.f ) || + ( mQ[VS] != 1.f ); +} + + + +inline LLQuaternion::LLQuaternion(void) +{ + mQ[VX] = 0.f; + mQ[VY] = 0.f; + mQ[VZ] = 0.f; + mQ[VS] = 1.f; +} + +inline LLQuaternion::LLQuaternion(F32 x, F32 y, F32 z, F32 w) +{ + mQ[VX] = x; + mQ[VY] = y; + mQ[VZ] = z; + mQ[VS] = w; + + //RN: don't normalize this case as its used mainly for temporaries during calculations + //normalize(); + /* + F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); + mag -= 1.f; + mag = fabs(mag); + llassert(mag < 10.f*FP_MAG_THRESHOLD); + */ +} + +inline LLQuaternion::LLQuaternion(const F32 *q) +{ + mQ[VX] = q[VX]; + mQ[VY] = q[VY]; + mQ[VZ] = q[VZ]; + mQ[VS] = q[VW]; + + normalize(); + /* + F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); + mag -= 1.f; + mag = fabs(mag); + llassert(mag < FP_MAG_THRESHOLD); + */ +} + + +inline void LLQuaternion::loadIdentity() +{ + mQ[VX] = 0.0f; + mQ[VY] = 0.0f; + mQ[VZ] = 0.0f; + mQ[VW] = 1.0f; +} + + +inline const LLQuaternion& LLQuaternion::set(F32 x, F32 y, F32 z, F32 w) +{ + mQ[VX] = x; + mQ[VY] = y; + mQ[VZ] = z; + mQ[VS] = w; + normalize(); + return (*this); +} + +inline const LLQuaternion& LLQuaternion::set(const LLQuaternion &quat) +{ + mQ[VX] = quat.mQ[VX]; + mQ[VY] = quat.mQ[VY]; + mQ[VZ] = quat.mQ[VZ]; + mQ[VW] = quat.mQ[VW]; + normalize(); + return (*this); +} + +inline const LLQuaternion& LLQuaternion::set(const F32 *q) +{ + mQ[VX] = q[VX]; + mQ[VY] = q[VY]; + mQ[VZ] = q[VZ]; + mQ[VS] = q[VW]; + normalize(); + return (*this); +} + + +// deprecated +inline const LLQuaternion& LLQuaternion::setQuatInit(F32 x, F32 y, F32 z, F32 w) +{ + mQ[VX] = x; + mQ[VY] = y; + mQ[VZ] = z; + mQ[VS] = w; + normalize(); + return (*this); +} + +// deprecated +inline const LLQuaternion& LLQuaternion::setQuat(const LLQuaternion &quat) +{ + mQ[VX] = quat.mQ[VX]; + mQ[VY] = quat.mQ[VY]; + mQ[VZ] = quat.mQ[VZ]; + mQ[VW] = quat.mQ[VW]; + normalize(); + return (*this); +} + +// deprecated +inline const LLQuaternion& LLQuaternion::setQuat(const F32 *q) +{ + mQ[VX] = q[VX]; + mQ[VY] = q[VY]; + mQ[VZ] = q[VZ]; + mQ[VS] = q[VW]; + normalize(); + return (*this); +} + +// There may be a cheaper way that avoids the sqrt. +// Does sin_a = VX*VX + VY*VY + VZ*VZ? +// Copied from Matrix and Quaternion FAQ 1.12 +inline void LLQuaternion::getAngleAxis(F32* angle, F32* x, F32* y, F32* z) const +{ + F32 cos_a = mQ[VW]; + if (cos_a > 1.0f) cos_a = 1.0f; + if (cos_a < -1.0f) cos_a = -1.0f; + + F32 sin_a = (F32) sqrt( 1.0f - cos_a * cos_a ); + + if ( fabs( sin_a ) < 0.0005f ) + sin_a = 1.0f; + else + sin_a = 1.f/sin_a; + + F32 temp_angle = 2.0f * (F32) acos( cos_a ); + if (temp_angle > F_PI) + { + // The (angle,axis) pair should never have angles outside [PI, -PI] + // since we want the _shortest_ (angle,axis) solution. + // Since acos is defined for [0, PI], and we multiply by 2.0, we + // can push the angle outside the acceptible range. + // When this happens we set the angle to the other portion of a + // full 2PI rotation, and negate the axis, which reverses the + // direction of the rotation (by the right-hand rule). + *angle = 2.f * F_PI - temp_angle; + *x = - mQ[VX] * sin_a; + *y = - mQ[VY] * sin_a; + *z = - mQ[VZ] * sin_a; + } + else + { + *angle = temp_angle; + *x = mQ[VX] * sin_a; + *y = mQ[VY] * sin_a; + *z = mQ[VZ] * sin_a; + } +} + +inline const LLQuaternion& LLQuaternion::conjugate() +{ + mQ[VX] *= -1.f; + mQ[VY] *= -1.f; + mQ[VZ] *= -1.f; + return (*this); +} + +inline const LLQuaternion& LLQuaternion::conjQuat() +{ + mQ[VX] *= -1.f; + mQ[VY] *= -1.f; + mQ[VZ] *= -1.f; + return (*this); +} + +// Transpose +inline const LLQuaternion& LLQuaternion::transpose() +{ + mQ[VX] *= -1.f; + mQ[VY] *= -1.f; + mQ[VZ] *= -1.f; + return (*this); +} + +// deprecated +inline const LLQuaternion& LLQuaternion::transQuat() +{ + mQ[VX] *= -1.f; + mQ[VY] *= -1.f; + mQ[VZ] *= -1.f; + return (*this); +} + + +inline LLQuaternion operator+(const LLQuaternion &a, const LLQuaternion &b) +{ + return LLQuaternion( + a.mQ[VX] + b.mQ[VX], + a.mQ[VY] + b.mQ[VY], + a.mQ[VZ] + b.mQ[VZ], + a.mQ[VW] + b.mQ[VW] ); +} + + +inline LLQuaternion operator-(const LLQuaternion &a, const LLQuaternion &b) +{ + return LLQuaternion( + a.mQ[VX] - b.mQ[VX], + a.mQ[VY] - b.mQ[VY], + a.mQ[VZ] - b.mQ[VZ], + a.mQ[VW] - b.mQ[VW] ); +} + + +inline LLQuaternion operator-(const LLQuaternion &a) +{ + return LLQuaternion( + -a.mQ[VX], + -a.mQ[VY], + -a.mQ[VZ], + -a.mQ[VW] ); +} + + +inline LLQuaternion operator*(F32 a, const LLQuaternion &q) +{ + return LLQuaternion( + a * q.mQ[VX], + a * q.mQ[VY], + a * q.mQ[VZ], + a * q.mQ[VW] ); +} + + +inline LLQuaternion operator*(const LLQuaternion &q, F32 a) +{ + return LLQuaternion( + a * q.mQ[VX], + a * q.mQ[VY], + a * q.mQ[VZ], + a * q.mQ[VW] ); +} + +inline LLQuaternion operator~(const LLQuaternion &a) +{ + LLQuaternion q(a); + q.conjQuat(); + return q; +} + +inline bool LLQuaternion::operator==(const LLQuaternion &b) const +{ + return ( (mQ[VX] == b.mQ[VX]) + &&(mQ[VY] == b.mQ[VY]) + &&(mQ[VZ] == b.mQ[VZ]) + &&(mQ[VS] == b.mQ[VS])); +} + +inline bool LLQuaternion::operator!=(const LLQuaternion &b) const +{ + return ( (mQ[VX] != b.mQ[VX]) + ||(mQ[VY] != b.mQ[VY]) + ||(mQ[VZ] != b.mQ[VZ]) + ||(mQ[VS] != b.mQ[VS])); +} + +inline const LLQuaternion& operator*=(LLQuaternion &a, const LLQuaternion &b) +{ +#if 1 + LLQuaternion q( + b.mQ[3] * a.mQ[0] + b.mQ[0] * a.mQ[3] + b.mQ[1] * a.mQ[2] - b.mQ[2] * a.mQ[1], + b.mQ[3] * a.mQ[1] + b.mQ[1] * a.mQ[3] + b.mQ[2] * a.mQ[0] - b.mQ[0] * a.mQ[2], + b.mQ[3] * a.mQ[2] + b.mQ[2] * a.mQ[3] + b.mQ[0] * a.mQ[1] - b.mQ[1] * a.mQ[0], + b.mQ[3] * a.mQ[3] - b.mQ[0] * a.mQ[0] - b.mQ[1] * a.mQ[1] - b.mQ[2] * a.mQ[2] + ); + a = q; +#else + a = a * b; +#endif + return a; +} + +const F32 ONE_PART_IN_A_MILLION = 0.000001f; + +inline F32 LLQuaternion::normalize() +{ + F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); + + if (mag > FP_MAG_THRESHOLD) + { + // Floating point error can prevent some quaternions from achieving + // exact unity length. When trying to renormalize such quaternions we + // can oscillate between multiple quantized states. To prevent such + // drifts we only renomalize if the length is far enough from unity. + if (fabs(1.f - mag) > ONE_PART_IN_A_MILLION) + { + F32 oomag = 1.f/mag; + mQ[VX] *= oomag; + mQ[VY] *= oomag; + mQ[VZ] *= oomag; + mQ[VS] *= oomag; + } + } + else + { + // we were given a very bad quaternion so we set it to identity + mQ[VX] = 0.f; + mQ[VY] = 0.f; + mQ[VZ] = 0.f; + mQ[VS] = 1.f; + } + + return mag; +} + +// deprecated +inline F32 LLQuaternion::normQuat() +{ + F32 mag = sqrtf(mQ[VX]*mQ[VX] + mQ[VY]*mQ[VY] + mQ[VZ]*mQ[VZ] + mQ[VS]*mQ[VS]); + + if (mag > FP_MAG_THRESHOLD) + { + if (fabs(1.f - mag) > ONE_PART_IN_A_MILLION) + { + // only renormalize if length not close enough to 1.0 already + F32 oomag = 1.f/mag; + mQ[VX] *= oomag; + mQ[VY] *= oomag; + mQ[VZ] *= oomag; + mQ[VS] *= oomag; + } + } + else + { + mQ[VX] = 0.f; + mQ[VY] = 0.f; + mQ[VZ] = 0.f; + mQ[VS] = 1.f; + } + + return mag; +} + +LLQuaternion::Order StringToOrder( const char *str ); + +// Some notes about Quaternions + +// What is a Quaternion? +// --------------------- +// A quaternion is a point in 4-dimensional complex space. +// Q = { Qx, Qy, Qz, Qw } +// +// +// Why Quaternions? +// ---------------- +// The set of quaternions that make up the the 4-D unit sphere +// can be mapped to the set of all rotations in 3-D space. Sometimes +// it is easier to describe/manipulate rotations in quaternion space +// than rotation-matrix space. +// +// +// How Quaternions? +// ---------------- +// In order to take advantage of quaternions we need to know how to +// go from rotation-matricies to quaternions and back. We also have +// to agree what variety of rotations we're generating. +// +// Consider the equation... v' = v * R +// +// There are two ways to think about rotations of vectors. +// 1) v' is the same vector in a different reference frame +// 2) v' is a new vector in the same reference frame +// +// bookmark -- which way are we using? +// +// +// Quaternion from Angle-Axis: +// --------------------------- +// Suppose we wanted to represent a rotation of some angle (theta) +// about some axis ({Ax, Ay, Az})... +// +// axis of rotation = {Ax, Ay, Az} +// angle_of_rotation = theta +// +// s = sin(0.5 * theta) +// c = cos(0.5 * theta) +// Q = { s * Ax, s * Ay, s * Az, c } +// +// +// 3x3 Matrix from Quaternion +// -------------------------- +// +// | | +// | 1 - 2 * (y^2 + z^2) 2 * (x * y + z * w) 2 * (y * w - x * z) | +// | | +// M = | 2 * (x * y - z * w) 1 - 2 * (x^2 + z^2) 2 * (y * z + x * w) | +// | | +// | 2 * (x * z + y * w) 2 * (y * z - x * w) 1 - 2 * (x^2 + y^2) | +// | | + +#endif -- cgit v1.3 From 71de5f622a7917f78823a7e7840194e1b0f8f070 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 26 Aug 2010 14:23:12 -0500 Subject: Add missing files from viewer-experimental --- indra/cmake/GLOD.cmake | 9 + indra/cmake/LLConvexDecomposition.cmake | 16 + indra/llmath/llmatrix3a.cpp | 140 + indra/llmath/llmatrix3a.h | 134 + indra/llmath/llmatrix3a.inl | 125 + indra/llmath/llmatrix4a.h | 149 + indra/llmath/llquaternion2.h | 111 + indra/llmath/llquaternion2.inl | 108 + indra/llmath/llsimdmath.h | 95 + indra/llmath/llsimdtypes.h | 130 + indra/llmath/llsimdtypes.inl | 163 + indra/llmath/llvector4a.cpp | 228 ++ indra/llmath/llvector4a.h | 331 ++ indra/llmath/llvector4a.inl | 599 ++++ indra/llmath/llvector4logical.h | 130 + indra/llmath/llvolumeoctree.cpp | 208 ++ indra/llmath/llvolumeoctree.h | 138 + indra/llprimitive/llmodel.cpp | 1695 ++++++++++ indra/llprimitive/llmodel.h | 179 ++ .../shaders/class1/avatar/objectSkinV.glsl | 30 + .../shaders/class1/deferred/alphaSkinnedV.glsl | 75 + .../shaders/class1/deferred/attachmentShadowF.glsl | 16 + .../shaders/class1/deferred/attachmentShadowV.glsl | 25 + .../shaders/class1/deferred/bumpSkinnedV.glsl | 37 + .../shaders/class1/deferred/diffuseSkinnedV.glsl | 33 + .../lighting/lightFullbrightShinyWaterF.glsl | 15 + .../class1/objects/fullbrightShinySkinnedV.glsl | 39 + .../class1/objects/fullbrightShinyWaterF.glsl | 13 + .../shaders/class1/objects/fullbrightSkinnedV.glsl | 37 + .../class1/objects/shinySimpleSkinnedV.glsl | 39 + .../shaders/class1/objects/simpleSkinnedV.glsl | 39 + .../shaders/class2/deferred/alphaSkinnedV.glsl | 84 + .../lighting/lightFullbrightShinyWaterF.glsl | 29 + indra/newview/llfloaterimportcollada.cpp | 1116 +++++++ indra/newview/llfloaterimportcollada.h | 143 + indra/newview/llfloatermodelpreview.cpp | 3382 ++++++++++++++++++++ indra/newview/llfloatermodelpreview.h | 275 ++ indra/newview/llmeshreduction.cpp | 291 ++ indra/newview/llmeshreduction.h | 59 + indra/newview/llmeshrepository.cpp | 2676 ++++++++++++++++ indra/newview/llmeshrepository.h | 471 +++ 41 files changed, 13612 insertions(+) create mode 100644 indra/cmake/GLOD.cmake create mode 100644 indra/cmake/LLConvexDecomposition.cmake create mode 100644 indra/llmath/llmatrix3a.cpp create mode 100644 indra/llmath/llmatrix3a.h create mode 100644 indra/llmath/llmatrix3a.inl create mode 100644 indra/llmath/llmatrix4a.h create mode 100644 indra/llmath/llquaternion2.h create mode 100644 indra/llmath/llquaternion2.inl create mode 100644 indra/llmath/llsimdmath.h create mode 100644 indra/llmath/llsimdtypes.h create mode 100644 indra/llmath/llsimdtypes.inl create mode 100644 indra/llmath/llvector4a.cpp create mode 100644 indra/llmath/llvector4a.h create mode 100644 indra/llmath/llvector4a.inl create mode 100644 indra/llmath/llvector4logical.h create mode 100644 indra/llmath/llvolumeoctree.cpp create mode 100644 indra/llmath/llvolumeoctree.h create mode 100644 indra/llprimitive/llmodel.cpp create mode 100644 indra/llprimitive/llmodel.h create mode 100644 indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl create mode 100644 indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl create mode 100644 indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl create mode 100644 indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl create mode 100644 indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl create mode 100644 indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl create mode 100644 indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl create mode 100644 indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl create mode 100644 indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl create mode 100644 indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl create mode 100644 indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl create mode 100644 indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl create mode 100644 indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl create mode 100644 indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl create mode 100644 indra/newview/llfloaterimportcollada.cpp create mode 100644 indra/newview/llfloaterimportcollada.h create mode 100644 indra/newview/llfloatermodelpreview.cpp create mode 100644 indra/newview/llfloatermodelpreview.h create mode 100644 indra/newview/llmeshreduction.cpp create mode 100644 indra/newview/llmeshreduction.h create mode 100644 indra/newview/llmeshrepository.cpp create mode 100644 indra/newview/llmeshrepository.h (limited to 'indra/llmath') diff --git a/indra/cmake/GLOD.cmake b/indra/cmake/GLOD.cmake new file mode 100644 index 0000000000..77221d55ed --- /dev/null +++ b/indra/cmake/GLOD.cmake @@ -0,0 +1,9 @@ +# -*- cmake -*- +include(Prebuilt) + +if (NOT STANDALONE) + use_prebuilt_binary(GLOD) +endif (NOT STANDALONE) + +set(GLOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include) +set(GLOD_LIBRARIES glod) diff --git a/indra/cmake/LLConvexDecomposition.cmake b/indra/cmake/LLConvexDecomposition.cmake new file mode 100644 index 0000000000..ae9dc3c17a --- /dev/null +++ b/indra/cmake/LLConvexDecomposition.cmake @@ -0,0 +1,16 @@ +# -*- cmake -*- +include(Prebuilt) + +set(LLCONVEXDECOMP_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include) + +if (INSTALL_PROPRIETARY AND NOT STANDALONE) + use_prebuilt_binary(llconvexdecomposition) + if (WINDOWS) + set(LLCONVEXDECOMP_LIBRARY llconvexdecomposition) + else (WINDOWS) + set(LLCONVEXDECOMP_LIBRARY llconvexdecompositionstub) + endif (WINDOWS) +else (INSTALL_PROPRIETARY AND NOT STANDALONE) + use_prebuilt_binary(llconvexdecompositionstub) + set(LLCONVEXDECOMP_LIBRARY llconvexdecompositionstub) +endif (INSTALL_PROPRIETARY AND NOT STANDALONE) diff --git a/indra/llmath/llmatrix3a.cpp b/indra/llmath/llmatrix3a.cpp new file mode 100644 index 0000000000..b7468f4914 --- /dev/null +++ b/indra/llmath/llmatrix3a.cpp @@ -0,0 +1,140 @@ +/** + * @file llvector4a.cpp + * @brief SIMD vector implementation + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2007-2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llmath.h" + +static LL_ALIGN_16(const F32 M_IDENT_3A[12]) = + { 1.f, 0.f, 0.f, 0.f, // Column 1 + 0.f, 1.f, 0.f, 0.f, // Column 2 + 0.f, 0.f, 1.f, 0.f }; // Column 3 + +extern const LLMatrix3a LL_M3A_IDENTITY = *reinterpret_cast (M_IDENT_3A); + +void LLMatrix3a::setMul( const LLMatrix3a& lhs, const LLMatrix3a& rhs ) +{ + const LLVector4a col0 = lhs.getColumn(0); + const LLVector4a col1 = lhs.getColumn(1); + const LLVector4a col2 = lhs.getColumn(2); + + for ( int i = 0; i < 3; i++ ) + { + LLVector4a xxxx = _mm_load_ss( rhs.mColumns[i].getF32ptr() ); + xxxx.splat<0>( xxxx ); + xxxx.mul( col0 ); + + { + LLVector4a yyyy = _mm_load_ss( rhs.mColumns[i].getF32ptr() + 1 ); + yyyy.splat<0>( yyyy ); + yyyy.mul( col1 ); + xxxx.add( yyyy ); + } + + { + LLVector4a zzzz = _mm_load_ss( rhs.mColumns[i].getF32ptr() + 2 ); + zzzz.splat<0>( zzzz ); + zzzz.mul( col2 ); + xxxx.add( zzzz ); + } + + xxxx.store4a( mColumns[i].getF32ptr() ); + } + +} + +/*static */void LLMatrix3a::batchTransform( const LLMatrix3a& xform, const LLVector4a* src, int numVectors, LLVector4a* dst ) +{ + const LLVector4a col0 = xform.getColumn(0); + const LLVector4a col1 = xform.getColumn(1); + const LLVector4a col2 = xform.getColumn(2); + const LLVector4a* maxAddr = src + numVectors; + + if ( numVectors & 0x1 ) + { + LLVector4a xxxx = _mm_load_ss( (const F32*)src ); + LLVector4a yyyy = _mm_load_ss( (const F32*)src + 1 ); + LLVector4a zzzz = _mm_load_ss( (const F32*)src + 2 ); + xxxx.splat<0>( xxxx ); + yyyy.splat<0>( yyyy ); + zzzz.splat<0>( zzzz ); + xxxx.mul( col0 ); + yyyy.mul( col1 ); + zzzz.mul( col2 ); + xxxx.add( yyyy ); + xxxx.add( zzzz ); + xxxx.store4a( (F32*)dst ); + src++; + dst++; + } + + + numVectors >>= 1; + while ( src < maxAddr ) + { + _mm_prefetch( (const char*)(src + 32 ), _MM_HINT_NTA ); + _mm_prefetch( (const char*)(dst + 32), _MM_HINT_NTA ); + LLVector4a xxxx = _mm_load_ss( (const F32*)src ); + LLVector4a xxxx1= _mm_load_ss( (const F32*)(src + 1) ); + + xxxx.splat<0>( xxxx ); + xxxx1.splat<0>( xxxx1 ); + xxxx.mul( col0 ); + xxxx1.mul( col0 ); + + { + LLVector4a yyyy = _mm_load_ss( (const F32*)src + 1 ); + LLVector4a yyyy1 = _mm_load_ss( (const F32*)(src + 1) + 1); + yyyy.splat<0>( yyyy ); + yyyy1.splat<0>( yyyy1 ); + yyyy.mul( col1 ); + yyyy1.mul( col1 ); + xxxx.add( yyyy ); + xxxx1.add( yyyy1 ); + } + + { + LLVector4a zzzz = _mm_load_ss( (const F32*)(src) + 2 ); + LLVector4a zzzz1 = _mm_load_ss( (const F32*)(++src) + 2 ); + zzzz.splat<0>( zzzz ); + zzzz1.splat<0>( zzzz1 ); + zzzz.mul( col2 ); + zzzz1.mul( col2 ); + xxxx.add( zzzz ); + xxxx1.add( zzzz1 ); + } + + xxxx.store4a(dst->getF32ptr()); + src++; + dst++; + + xxxx1.store4a((F32*)dst++); + } +} diff --git a/indra/llmath/llmatrix3a.h b/indra/llmath/llmatrix3a.h new file mode 100644 index 0000000000..56327f9f6d --- /dev/null +++ b/indra/llmath/llmatrix3a.h @@ -0,0 +1,134 @@ +/** + * @file llmatrix3a.h + * @brief LLMatrix3a class header file - memory aligned and vectorized 3x3 matrix + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLMATRIX3A_H +#define LL_LLMATRIX3A_H + +///////////////////////////// +// LLMatrix3a, LLRotation +///////////////////////////// +// This class stores a 3x3 (technically 4x3) matrix in column-major order +///////////////////////////// +///////////////////////////// +// These classes are intentionally minimal right now. If you need additional +// functionality, please contact someone with SSE experience (e.g., Falcon or +// Huseby). +///////////////////////////// + +// LLMatrix3a is the base class for LLRotation, which should be used instead any time you're dealing with a +// rotation matrix. +class LLMatrix3a +{ +public: + + // Utility function for quickly transforming an array of LLVector4a's + // For transforming a single LLVector4a, see LLVector4a::setRotated + static void batchTransform( const LLMatrix3a& xform, const LLVector4a* src, int numVectors, LLVector4a* dst ); + + // Utility function to obtain the identity matrix + static inline const LLMatrix3a& getIdentity(); + + ////////////////////////// + // Ctors + ////////////////////////// + + // Ctor + LLMatrix3a() {} + + // Ctor for setting by columns + inline LLMatrix3a( const LLVector4a& c0, const LLVector4a& c1, const LLVector4a& c2 ); + + ////////////////////////// + // Get/Set + ////////////////////////// + + // Loads from an LLMatrix3 + inline void loadu(const LLMatrix3& src); + + // Set rows + inline void setRows(const LLVector4a& r0, const LLVector4a& r1, const LLVector4a& r2); + + // Set columns + inline void setColumns(const LLVector4a& c0, const LLVector4a& c1, const LLVector4a& c2); + + // Get the read-only access to a specified column. Valid columns are 0-2, but the + // function is unchecked. You've been warned. + inline const LLVector4a& getColumn(const U32 column) const; + + ///////////////////////// + // Matrix modification + ///////////////////////// + + // Set this matrix to the product of lhs and rhs ( this = lhs * rhs ) + void setMul( const LLMatrix3a& lhs, const LLMatrix3a& rhs ); + + // Set this matrix to the transpose of src + inline void setTranspose(const LLMatrix3a& src); + + // Set this matrix to a*w + b*(1-w) + inline void setLerp(const LLMatrix3a& a, const LLMatrix3a& b, F32 w); + + ///////////////////////// + // Matrix inspection + ///////////////////////// + + // Sets all 4 elements in 'dest' to the determinant of this matrix. + // If you will be using the determinant in subsequent ops with LLVector4a, use this version + inline void getDeterminant( LLVector4a& dest ) const; + + // Returns the determinant as an LLSimdScalar. Use this if you will be using the determinant + // primary for scalar operations. + inline LLSimdScalar getDeterminant() const; + + // Returns nonzero if rows 0-2 and colums 0-2 contain no NaN or INF values. Row 3 is ignored + inline LLBool32 isFinite() const; + + // Returns true if this matrix is equal to 'rhs' up to 'tolerance' + inline bool isApproximatelyEqual( const LLMatrix3a& rhs, F32 tolerance = F_APPROXIMATELY_ZERO ) const; + +protected: + + LLVector4a mColumns[3]; + +}; + +class LLRotation : public LLMatrix3a +{ +public: + + LLRotation() {} + + // Returns true if this rotation is orthonormal with det ~= 1 + inline bool isOkRotation() const; +}; + +#endif diff --git a/indra/llmath/llmatrix3a.inl b/indra/llmath/llmatrix3a.inl new file mode 100644 index 0000000000..65fd949f78 --- /dev/null +++ b/indra/llmath/llmatrix3a.inl @@ -0,0 +1,125 @@ +/** + * @file llmatrix3a.inl + * @brief LLMatrix3a inline definitions + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llmatrix3a.h" +#include "m3math.h" + +inline LLMatrix3a::LLMatrix3a( const LLVector4a& c0, const LLVector4a& c1, const LLVector4a& c2 ) +{ + setColumns( c0, c1, c2 ); +} + +inline void LLMatrix3a::loadu(const LLMatrix3& src) +{ + mColumns[0].load3(src.mMatrix[0]); + mColumns[1].load3(src.mMatrix[1]); + mColumns[2].load3(src.mMatrix[2]); +} + +inline void LLMatrix3a::setRows(const LLVector4a& r0, const LLVector4a& r1, const LLVector4a& r2) +{ + mColumns[0] = r0; + mColumns[1] = r1; + mColumns[2] = r2; + setTranspose( *this ); +} + +inline void LLMatrix3a::setColumns(const LLVector4a& c0, const LLVector4a& c1, const LLVector4a& c2) +{ + mColumns[0] = c0; + mColumns[1] = c1; + mColumns[2] = c2; +} + +inline void LLMatrix3a::setTranspose(const LLMatrix3a& src) +{ + const LLQuad srcCol0 = src.mColumns[0]; + const LLQuad srcCol1 = src.mColumns[1]; + const LLQuad unpacklo = _mm_unpacklo_ps( srcCol0, srcCol1 ); + mColumns[0] = _mm_movelh_ps( unpacklo, src.mColumns[2] ); + mColumns[1] = _mm_shuffle_ps( _mm_movehl_ps( srcCol0, unpacklo ), src.mColumns[2], _MM_SHUFFLE(0, 1, 1, 0) ); + mColumns[2] = _mm_shuffle_ps( _mm_unpackhi_ps( srcCol0, srcCol1 ), src.mColumns[2], _MM_SHUFFLE(0, 2, 1, 0) ); +} + +inline const LLVector4a& LLMatrix3a::getColumn(const U32 column) const +{ + llassert( column < 3 ); + return mColumns[column]; +} + +inline void LLMatrix3a::setLerp(const LLMatrix3a& a, const LLMatrix3a& b, F32 w) +{ + mColumns[0].setLerp( a.mColumns[0], b.mColumns[0], w ); + mColumns[1].setLerp( a.mColumns[1], b.mColumns[1], w ); + mColumns[2].setLerp( a.mColumns[2], b.mColumns[2], w ); +} + +inline LLBool32 LLMatrix3a::isFinite() const +{ + return mColumns[0].isFinite3() && mColumns[1].isFinite3() && mColumns[2].isFinite3(); +} + +inline void LLMatrix3a::getDeterminant( LLVector4a& dest ) const +{ + LLVector4a col1xcol2; col1xcol2.setCross3( mColumns[1], mColumns[2] ); + dest.setAllDot3( col1xcol2, mColumns[0] ); +} + +inline LLSimdScalar LLMatrix3a::getDeterminant() const +{ + LLVector4a col1xcol2; col1xcol2.setCross3( mColumns[1], mColumns[2] ); + return col1xcol2.dot3( mColumns[0] ); +} + +inline bool LLMatrix3a::isApproximatelyEqual( const LLMatrix3a& rhs, F32 tolerance /*= F_APPROXIMATELY_ZERO*/ ) const +{ + return rhs.getColumn(0).equals3(mColumns[0], tolerance) + && rhs.getColumn(1).equals3(mColumns[1], tolerance) + && rhs.getColumn(2).equals3(mColumns[2], tolerance); +} + +inline const LLMatrix3a& LLMatrix3a::getIdentity() +{ + extern const LLMatrix3a LL_M3A_IDENTITY; + return LL_M3A_IDENTITY; +} + +inline bool LLRotation::isOkRotation() const +{ + LLMatrix3a transpose; transpose.setTranspose( *this ); + LLMatrix3a product; product.setMul( *this, transpose ); + + LLSimdScalar detMinusOne = getDeterminant() - 1.f; + + return product.isApproximatelyEqual( LLMatrix3a::getIdentity() ) && (detMinusOne.getAbs() < F_APPROXIMATELY_ZERO); +} + diff --git a/indra/llmath/llmatrix4a.h b/indra/llmath/llmatrix4a.h new file mode 100644 index 0000000000..0ead045d04 --- /dev/null +++ b/indra/llmath/llmatrix4a.h @@ -0,0 +1,149 @@ +/** + * @file llmatrix4a.h + * @brief LLMatrix4a class header file - memory aligned and vectorized 4x4 matrix + * + * $LicenseInfo:firstyear=2007&license=viewergpl$ + * + * Copyright (c) 2007-2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLMATRIX4A_H +#define LL_LLMATRIX4A_H + +#include "llvector4a.h" +#include "m4math.h" +#include "m3math.h" + +class LLMatrix4a +{ +public: + LLVector4a mMatrix[4]; + + inline void clear() + { + mMatrix[0].clear(); + mMatrix[1].clear(); + mMatrix[2].clear(); + mMatrix[3].clear(); + } + + inline void loadu(const LLMatrix4& src) + { + mMatrix[0] = _mm_loadu_ps(src.mMatrix[0]); + mMatrix[1] = _mm_loadu_ps(src.mMatrix[1]); + mMatrix[2] = _mm_loadu_ps(src.mMatrix[2]); + mMatrix[3] = _mm_loadu_ps(src.mMatrix[3]); + + } + + inline void loadu(const LLMatrix3& src) + { + mMatrix[0].load3(src.mMatrix[0]); + mMatrix[1].load3(src.mMatrix[1]); + mMatrix[2].load3(src.mMatrix[2]); + mMatrix[3].set(0,0,0,1.f); + } + + inline void add(const LLMatrix4a& rhs) + { + mMatrix[0].add(rhs.mMatrix[0]); + mMatrix[1].add(rhs.mMatrix[1]); + mMatrix[2].add(rhs.mMatrix[2]); + mMatrix[3].add(rhs.mMatrix[3]); + } + + inline void setRows(const LLVector4a& r0, const LLVector4a& r1, const LLVector4a& r2) + { + mMatrix[0] = r0; + mMatrix[1] = r1; + mMatrix[2] = r2; + } + + inline void setMul(const LLMatrix4a& m, const F32 s) + { + mMatrix[0].setMul(m.mMatrix[0], s); + mMatrix[1].setMul(m.mMatrix[1], s); + mMatrix[2].setMul(m.mMatrix[2], s); + mMatrix[3].setMul(m.mMatrix[3], s); + } + + inline void setLerp(const LLMatrix4a& a, const LLMatrix4a& b, F32 w) + { + LLVector4a d0,d1,d2,d3; + d0.setSub(b.mMatrix[0], a.mMatrix[0]); + d1.setSub(b.mMatrix[1], a.mMatrix[1]); + d2.setSub(b.mMatrix[2], a.mMatrix[2]); + d3.setSub(b.mMatrix[3], a.mMatrix[3]); + + // this = a + d*w + + d0.mul(w); + d1.mul(w); + d2.mul(w); + d3.mul(w); + + mMatrix[0].setAdd(a.mMatrix[0],d0); + mMatrix[1].setAdd(a.mMatrix[1],d1); + mMatrix[2].setAdd(a.mMatrix[2],d2); + mMatrix[3].setAdd(a.mMatrix[3],d3); + } + + inline void rotate(const LLVector4a& v, LLVector4a& res) + { + res = _mm_shuffle_ps(v, v, _MM_SHUFFLE(0, 0, 0, 0)); + res.mul(mMatrix[0]); + + LLVector4a y; + y = _mm_shuffle_ps(v, v, _MM_SHUFFLE(1, 1, 1, 1)); + y.mul(mMatrix[1]); + + LLVector4a z; + z = _mm_shuffle_ps(v, v, _MM_SHUFFLE(2, 2, 2, 2)); + z.mul(mMatrix[2]); + + res.add(y); + res.add(z); + } + + inline void affineTransform(const LLVector4a& v, LLVector4a& res) + { + LLVector4a x,y,z; + + x = _mm_shuffle_ps(v, v, _MM_SHUFFLE(0, 0, 0, 0)); + y = _mm_shuffle_ps(v, v, _MM_SHUFFLE(1, 1, 1, 1)); + z = _mm_shuffle_ps(v, v, _MM_SHUFFLE(2, 2, 2, 2)); + + x.mul(mMatrix[0]); + y.mul(mMatrix[1]); + z.mul(mMatrix[2]); + + x.add(y); + z.add(mMatrix[3]); + res.setAdd(x,z); + } +}; + +#endif diff --git a/indra/llmath/llquaternion2.h b/indra/llmath/llquaternion2.h new file mode 100644 index 0000000000..dbb4afe312 --- /dev/null +++ b/indra/llmath/llquaternion2.h @@ -0,0 +1,111 @@ +/** + * @file llquaternion2.h + * @brief LLQuaternion2 class header file - SIMD-enabled quaternion class + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_QUATERNION2_H +#define LL_QUATERNION2_H + +///////////////////////////// +// LLQuaternion2 +///////////////////////////// +// This class stores a quaternion x*i + y*j + z*k + w in order +// (i.e., w in high order element of vector) +///////////////////////////// +///////////////////////////// +// These classes are intentionally minimal right now. If you need additional +// functionality, please contact someone with SSE experience (e.g., Falcon or +// Huseby). +///////////////////////////// +#include "llquaternion.h" + +class LLQuaternion2 +{ +public: + + ////////////////////////// + // Ctors + ////////////////////////// + + // Ctor + LLQuaternion2() {} + + // Ctor from LLQuaternion + explicit LLQuaternion2( const class LLQuaternion& quat ); + + ////////////////////////// + // Get/Set + ////////////////////////// + + // Load from an LLQuaternion + inline void operator=( const LLQuaternion& quat ) + { + mQ.loadua( quat.mQ ); + } + + // Return the internal LLVector4a representation of the quaternion + inline const LLVector4a& getVector4a() const; + inline LLVector4a& getVector4aRw(); + + ///////////////////////// + // Quaternion modification + ///////////////////////// + + // Set this quaternion to the conjugate of src + inline void setConjugate(const LLQuaternion2& src); + + // Renormalizes the quaternion. Assumes it has nonzero length. + inline void normalize(); + + // Quantize this quaternion to 8 bit precision + inline void quantize8(); + + // Quantize this quaternion to 16 bit precision + inline void quantize16(); + + ///////////////////////// + // Quaternion inspection + ///////////////////////// + + // Return true if this quaternion is equal to 'rhs'. + // Note! Quaternions exhibit "double-cover", so any rotation has two equally valid + // quaternion representations and they will NOT compare equal. + inline bool equals(const LLQuaternion2& rhs, F32 tolerance = F_APPROXIMATELY_ZERO ) const; + + // Return true if all components are finite and the quaternion is normalized + inline bool isOkRotation() const; + +protected: + + LLVector4a mQ; + +}; + +#endif diff --git a/indra/llmath/llquaternion2.inl b/indra/llmath/llquaternion2.inl new file mode 100644 index 0000000000..9a4274d6a4 --- /dev/null +++ b/indra/llmath/llquaternion2.inl @@ -0,0 +1,108 @@ +/** + * @file llquaternion2.inl + * @brief LLQuaternion2 inline definitions + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llquaternion2.h" + +static const LLQuad LL_V4A_PLUS_ONE = {1.f, 1.f, 1.f, 1.f}; +static const LLQuad LL_V4A_MINUS_ONE = {-1.f, -1.f, -1.f, -1.f}; + +// Ctor from LLQuaternion +inline LLQuaternion2::LLQuaternion2( const LLQuaternion& quat ) +{ + mQ.set(quat.mQ[VX], quat.mQ[VY], quat.mQ[VZ], quat.mQ[VW]); +} + +////////////////////////// +// Get/Set +////////////////////////// + +// Return the internal LLVector4a representation of the quaternion +inline const LLVector4a& LLQuaternion2::getVector4a() const +{ + return mQ; +} + +inline LLVector4a& LLQuaternion2::getVector4aRw() +{ + return mQ; +} + +///////////////////////// +// Quaternion modification +///////////////////////// + +// Set this quaternion to the conjugate of src +inline void LLQuaternion2::setConjugate(const LLQuaternion2& src) +{ + static LL_ALIGN_16( const U32 F_QUAT_INV_MASK_4A[4] ) = { 0x80000000, 0x80000000, 0x80000000, 0x00000000 }; + mQ = _mm_xor_ps(src.mQ, *reinterpret_cast(&F_QUAT_INV_MASK_4A)); +} + +// Renormalizes the quaternion. Assumes it has nonzero length. +inline void LLQuaternion2::normalize() +{ + mQ.normalize4(); +} + +// Quantize this quaternion to 8 bit precision +inline void LLQuaternion2::quantize8() +{ + mQ.quantize8( LL_V4A_MINUS_ONE, LL_V4A_PLUS_ONE ); + normalize(); +} + +// Quantize this quaternion to 16 bit precision +inline void LLQuaternion2::quantize16() +{ + mQ.quantize16( LL_V4A_MINUS_ONE, LL_V4A_PLUS_ONE ); + normalize(); +} + + +///////////////////////// +// Quaternion inspection +///////////////////////// + +// Return true if this quaternion is equal to 'rhs'. +// Note! Quaternions exhibit "double-cover", so any rotation has two equally valid +// quaternion representations and they will NOT compare equal. +inline bool LLQuaternion2::equals(const LLQuaternion2 &rhs, F32 tolerance/* = F_APPROXIMATELY_ZERO*/) const +{ + return mQ.equals4(rhs.mQ, tolerance); +} + +// Return true if all components are finite and the quaternion is normalized +inline bool LLQuaternion2::isOkRotation() const +{ + return mQ.isFinite4() && mQ.isNormalized4(); +} + diff --git a/indra/llmath/llsimdmath.h b/indra/llmath/llsimdmath.h new file mode 100644 index 0000000000..9377bfdb53 --- /dev/null +++ b/indra/llmath/llsimdmath.h @@ -0,0 +1,95 @@ +/** + * @file llsimdmath.h + * @brief Common header for SIMD-based math library (llvector4a, llmatrix3a, etc.) + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2007-2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_SIMD_MATH_H +#define LL_SIMD_MATH_H + +#ifndef LLMATH_H +#error "Please include llmath.h before this file." +#endif + +#if ( ( LL_DARWIN || LL_LINUX ) && !(__SSE2__) ) || ( LL_WINDOWS && ( _M_IX86_FP < 2 ) ) +#error SSE2 not enabled. LLVector4a and related class will not compile. +#endif + +template T* LL_NEXT_ALIGNED_ADDRESS(T* address) +{ + return reinterpret_cast( + (reinterpret_cast(address) + 0xF) & ~0xF); +} + +template T* LL_NEXT_ALIGNED_ADDRESS_64(T* address) +{ + return reinterpret_cast( + (reinterpret_cast(address) + 0x3F) & ~0x3F); +} + +#if LL_LINUX || LL_DARWIN + +#define LL_ALIGN_PREFIX(x) +#define LL_ALIGN_POSTFIX(x) __attribute__((aligned(x))) + +#elif LL_WINDOWS + +#define LL_ALIGN_PREFIX(x) __declspec(align(x)) +#define LL_ALIGN_POSTFIX(x) + +#else +#error "LL_ALIGN_PREFIX and LL_ALIGN_POSTFIX undefined" +#endif + +#define LL_ALIGN_16(var) LL_ALIGN_PREFIX(16) var LL_ALIGN_POSTFIX(16) + + + +#include +#include + +#include "llsimdtypes.h" +#include "llsimdtypes.inl" + +class LLMatrix3a; +class LLRotation; +class LLMatrix3; + +#include "llquaternion.h" + +#include "llvector4logical.h" +#include "llvector4a.h" +#include "llmatrix3a.h" +#include "llquaternion2.h" +#include "llvector4a.inl" +#include "llmatrix3a.inl" +#include "llquaternion2.inl" + + +#endif //LL_SIMD_MATH_H diff --git a/indra/llmath/llsimdtypes.h b/indra/llmath/llsimdtypes.h new file mode 100644 index 0000000000..82e318c8bf --- /dev/null +++ b/indra/llmath/llsimdtypes.h @@ -0,0 +1,130 @@ +/** + * @file llsimdtypes.h + * @brief Declaration of basic SIMD math related types + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2007-2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_SIMD_TYPES_H +#define LL_SIMD_TYPES_H + +#ifndef LL_SIMD_MATH_H +#error "Please include llmath.h before this file." +#endif + +typedef __m128 LLQuad; + + +#if LL_WINDOWS +#pragma warning(push) +#pragma warning( disable : 4800 3 ) // Disable warning about casting int to bool for this class. +#if defined(_MSC_VER) && (_MSC_VER < 1500) +// VC++ 2005 is missing these intrinsics +// __forceinline is MSVC specific and attempts to override compiler inlining judgment. This is so +// even in debug builds this call is a NOP. +__forceinline const __m128 _mm_castsi128_ps( const __m128i a ) { return reinterpret_cast(a); } +__forceinline const __m128i _mm_castps_si128( const __m128 a ) { return reinterpret_cast(a); } +#endif // _MSC_VER + +#endif // LL_WINDOWS + +class LLBool32 +{ +public: + inline LLBool32() {} + inline LLBool32(int rhs) : m_bool(rhs) {} + inline LLBool32(unsigned int rhs) : m_bool(rhs) {} + inline LLBool32(bool rhs) { m_bool = static_cast(rhs); } + inline LLBool32& operator= (bool rhs) { m_bool = (int)rhs; return *this; } + inline bool operator== (bool rhs) const { return static_cast(m_bool) == rhs; } + inline bool operator!= (bool rhs) const { return !operator==(rhs); } + inline operator bool() const { return static_cast(m_bool); } + +private: + int m_bool; +}; + +#if LL_WINDOWS +#pragma warning(pop) +#endif + +class LLSimdScalar +{ +public: + inline LLSimdScalar() {} + inline LLSimdScalar(LLQuad q) + { + mQ = q; + } + + inline LLSimdScalar(F32 f) + { + mQ = _mm_set_ss(f); + } + + static inline const LLSimdScalar& getZero() + { + extern const LLQuad F_ZERO_4A; + return reinterpret_cast(F_ZERO_4A); + } + + inline F32 getF32() const; + + inline LLBool32 isApproximatelyEqual(const LLSimdScalar& rhs, F32 tolerance = F_APPROXIMATELY_ZERO) const; + + inline LLSimdScalar getAbs() const; + + inline void setMax( const LLSimdScalar& a, const LLSimdScalar& b ); + + inline void setMin( const LLSimdScalar& a, const LLSimdScalar& b ); + + inline LLSimdScalar& operator=(F32 rhs); + + inline LLSimdScalar& operator+=(const LLSimdScalar& rhs); + + inline LLSimdScalar& operator-=(const LLSimdScalar& rhs); + + inline LLSimdScalar& operator*=(const LLSimdScalar& rhs); + + inline LLSimdScalar& operator/=(const LLSimdScalar& rhs); + + inline operator LLQuad() const + { + return mQ; + } + + inline const LLQuad& getQuad() const + { + return mQ; + } + +private: + LLQuad mQ; +}; + +#endif //LL_SIMD_TYPES_H diff --git a/indra/llmath/llsimdtypes.inl b/indra/llmath/llsimdtypes.inl new file mode 100644 index 0000000000..69c858e310 --- /dev/null +++ b/indra/llmath/llsimdtypes.inl @@ -0,0 +1,163 @@ +/** + * @file llsimdtypes.inl + * @brief Inlined definitions of basic SIMD math related types + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2007-2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + + + + +////////////////// +// LLSimdScalar +////////////////// + +inline LLSimdScalar operator+(const LLSimdScalar& a, const LLSimdScalar& b) +{ + LLSimdScalar t(a); + t += b; + return t; +} + +inline LLSimdScalar operator-(const LLSimdScalar& a, const LLSimdScalar& b) +{ + LLSimdScalar t(a); + t -= b; + return t; +} + +inline LLSimdScalar operator*(const LLSimdScalar& a, const LLSimdScalar& b) +{ + LLSimdScalar t(a); + t *= b; + return t; +} + +inline LLSimdScalar operator/(const LLSimdScalar& a, const LLSimdScalar& b) +{ + LLSimdScalar t(a); + t /= b; + return t; +} + +inline LLSimdScalar operator-(const LLSimdScalar& a) +{ + static LL_ALIGN_16(const U32 signMask[4]) = {0x80000000, 0x80000000, 0x80000000, 0x80000000 }; + return _mm_xor_ps(*reinterpret_cast(signMask), a); +} + +inline LLBool32 operator==(const LLSimdScalar& a, const LLSimdScalar& b) +{ + return _mm_comieq_ss(a, b); +} + +inline LLBool32 operator!=(const LLSimdScalar& a, const LLSimdScalar& b) +{ + return _mm_comineq_ss(a, b); +} + +inline LLBool32 operator<(const LLSimdScalar& a, const LLSimdScalar& b) +{ + return _mm_comilt_ss(a, b); +} + +inline LLBool32 operator<=(const LLSimdScalar& a, const LLSimdScalar& b) +{ + return _mm_comile_ss(a, b); +} + +inline LLBool32 operator>(const LLSimdScalar& a, const LLSimdScalar& b) +{ + return _mm_comigt_ss(a, b); +} + +inline LLBool32 operator>=(const LLSimdScalar& a, const LLSimdScalar& b) +{ + return _mm_comige_ss(a, b); +} + +inline LLBool32 LLSimdScalar::isApproximatelyEqual(const LLSimdScalar& rhs, F32 tolerance /* = F_APPROXIMATELY_ZERO */) const +{ + const LLSimdScalar tol( tolerance ); + const LLSimdScalar diff = _mm_sub_ss( mQ, rhs.mQ ); + const LLSimdScalar absDiff = diff.getAbs(); + return absDiff <= tol; +} + +inline void LLSimdScalar::setMax( const LLSimdScalar& a, const LLSimdScalar& b ) +{ + mQ = _mm_max_ss( a, b ); +} + +inline void LLSimdScalar::setMin( const LLSimdScalar& a, const LLSimdScalar& b ) +{ + mQ = _mm_min_ss( a, b ); +} + +inline LLSimdScalar& LLSimdScalar::operator=(F32 rhs) +{ + mQ = _mm_set_ss(rhs); + return *this; +} + +inline LLSimdScalar& LLSimdScalar::operator+=(const LLSimdScalar& rhs) +{ + mQ = _mm_add_ss( mQ, rhs ); + return *this; +} + +inline LLSimdScalar& LLSimdScalar::operator-=(const LLSimdScalar& rhs) +{ + mQ = _mm_sub_ss( mQ, rhs ); + return *this; +} + +inline LLSimdScalar& LLSimdScalar::operator*=(const LLSimdScalar& rhs) +{ + mQ = _mm_mul_ss( mQ, rhs ); + return *this; +} + +inline LLSimdScalar& LLSimdScalar::operator/=(const LLSimdScalar& rhs) +{ + mQ = _mm_div_ss( mQ, rhs ); + return *this; +} + +inline LLSimdScalar LLSimdScalar::getAbs() const +{ + static const LL_ALIGN_16(U32 F_ABS_MASK_4A[4]) = { 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF }; + return _mm_and_ps( mQ, *reinterpret_cast(F_ABS_MASK_4A)); +} + +inline F32 LLSimdScalar::getF32() const +{ + F32 ret; + _mm_store_ss(&ret, mQ); + return ret; +} diff --git a/indra/llmath/llvector4a.cpp b/indra/llmath/llvector4a.cpp new file mode 100644 index 0000000000..b62c17302f --- /dev/null +++ b/indra/llmath/llvector4a.cpp @@ -0,0 +1,228 @@ +/** + * @file llvector4a.cpp + * @brief SIMD vector implementation + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2007-2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llmath.h" +#include "llquantize.h" + +extern const LLQuad F_ZERO_4A = { 0, 0, 0, 0 }; +extern const LLQuad F_APPROXIMATELY_ZERO_4A = { + F_APPROXIMATELY_ZERO, + F_APPROXIMATELY_ZERO, + F_APPROXIMATELY_ZERO, + F_APPROXIMATELY_ZERO +}; + +extern const LLVector4a LL_V4A_ZERO = reinterpret_cast ( F_ZERO_4A ); +extern const LLVector4a LL_V4A_EPSILON = reinterpret_cast ( F_APPROXIMATELY_ZERO_4A ); + +/*static */void LLVector4a::memcpyNonAliased16(F32* __restrict dst, const F32* __restrict src, size_t bytes) +{ + assert(src != NULL); + assert(dst != NULL); + assert(bytes > 0); + assert((bytes % sizeof(F32))== 0); + + F32* end = dst + (bytes / sizeof(F32) ); + + if (bytes > 64) + { + F32* begin_64 = LL_NEXT_ALIGNED_ADDRESS_64(dst); + + //at least 64 (16*4) bytes before the end of the destination, switch to 16 byte copies + F32* end_64 = end-16; + + _mm_prefetch((char*)begin_64, _MM_HINT_NTA); + _mm_prefetch((char*)begin_64 + 64, _MM_HINT_NTA); + _mm_prefetch((char*)begin_64 + 128, _MM_HINT_NTA); + _mm_prefetch((char*)begin_64 + 192, _MM_HINT_NTA); + + while (dst < begin_64) + { + copy4a(dst, src); + dst += 4; + src += 4; + } + + while (dst < end_64) + { + _mm_prefetch((char*)src + 512, _MM_HINT_NTA); + _mm_prefetch((char*)dst + 512, _MM_HINT_NTA); + copy4a(dst, src); + copy4a(dst+4, src+4); + copy4a(dst+8, src+8); + copy4a(dst+12, src+12); + + dst += 16; + src += 16; + } + } + + while (dst < end) + { + copy4a(dst, src); + dst += 4; + src += 4; + } +} + +void LLVector4a::setRotated( const LLRotation& rot, const LLVector4a& vec ) +{ + const LLVector4a col0 = rot.getColumn(0); + const LLVector4a col1 = rot.getColumn(1); + const LLVector4a col2 = rot.getColumn(2); + + LLVector4a result = _mm_load_ss( vec.getF32ptr() ); + result.splat<0>( result ); + result.mul( col0 ); + + { + LLVector4a yyyy = _mm_load_ss( vec.getF32ptr() + 1 ); + yyyy.splat<0>( yyyy ); + yyyy.mul( col1 ); + result.add( yyyy ); + } + + { + LLVector4a zzzz = _mm_load_ss( vec.getF32ptr() + 2 ); + zzzz.splat<0>( zzzz ); + zzzz.mul( col2 ); + result.add( zzzz ); + } + + *this = result; +} + +void LLVector4a::setRotated( const LLQuaternion2& quat, const LLVector4a& vec ) +{ + const LLVector4a& quatVec = quat.getVector4a(); + LLVector4a temp; temp.setCross3(quatVec, vec); + temp.add( temp ); + + const LLVector4a realPart( quatVec.getScalarAt<3>() ); + LLVector4a tempTimesReal; tempTimesReal.setMul( temp, realPart ); + + mQ = vec; + add( tempTimesReal ); + + LLVector4a imagCrossTemp; imagCrossTemp.setCross3( quatVec, temp ); + add(imagCrossTemp); +} + +void LLVector4a::quantize8( const LLVector4a& low, const LLVector4a& high ) +{ + LLVector4a val(mQ); + LLVector4a delta; delta.setSub( high, low ); + + { + val.clamp(low, high); + val.sub(low); + + // 8-bit quantization means we can do with just 12 bits of reciprocal accuracy + const LLVector4a oneOverDelta = _mm_rcp_ps(delta.mQ); +// { +// static LL_ALIGN_16( const F32 F_TWO_4A[4] ) = { 2.f, 2.f, 2.f, 2.f }; +// LLVector4a two; two.load4a( F_TWO_4A ); +// +// // Here we use _mm_rcp_ps plus one round of newton-raphson +// // We wish to find 'x' such that x = 1/delta +// // As a first approximation, we take x0 = _mm_rcp_ps(delta) +// // Then x1 = 2 * x0 - a * x0^2 or x1 = x0 * ( 2 - a * x0 ) +// // See Intel AP-803 http://ompf.org/!/Intel_application_note_AP-803.pdf +// const LLVector4a recipApprox = _mm_rcp_ps(delta.mQ); +// oneOverDelta.setMul( delta, recipApprox ); +// oneOverDelta.setSub( two, oneOverDelta ); +// oneOverDelta.mul( recipApprox ); +// } + + val.mul(oneOverDelta); + val.mul(*reinterpret_cast(F_U8MAX_4A)); + } + + val = _mm_cvtepi32_ps(_mm_cvtps_epi32( val.mQ )); + + { + val.mul(*reinterpret_cast(F_OOU8MAX_4A)); + val.mul(delta); + val.add(low); + } + + { + LLVector4a maxError; maxError.setMul(delta, *reinterpret_cast(F_OOU8MAX_4A)); + LLVector4a absVal; absVal.setAbs( val ); + setSelectWithMask( absVal.lessThan( maxError ), F_ZERO_4A, val ); + } +} + +void LLVector4a::quantize16( const LLVector4a& low, const LLVector4a& high ) +{ + LLVector4a val(mQ); + LLVector4a delta; delta.setSub( high, low ); + + { + val.clamp(low, high); + val.sub(low); + + // 16-bit quantization means we need a round of Newton-Raphson + LLVector4a oneOverDelta; + { + static LL_ALIGN_16( const F32 F_TWO_4A[4] ) = { 2.f, 2.f, 2.f, 2.f }; + LLVector4a two; two.load4a( F_TWO_4A ); + + // Here we use _mm_rcp_ps plus one round of newton-raphson + // We wish to find 'x' such that x = 1/delta + // As a first approximation, we take x0 = _mm_rcp_ps(delta) + // Then x1 = 2 * x0 - a * x0^2 or x1 = x0 * ( 2 - a * x0 ) + // See Intel AP-803 http://ompf.org/!/Intel_application_note_AP-803.pdf + const LLVector4a recipApprox = _mm_rcp_ps(delta.mQ); + oneOverDelta.setMul( delta, recipApprox ); + oneOverDelta.setSub( two, oneOverDelta ); + oneOverDelta.mul( recipApprox ); + } + + val.mul(oneOverDelta); + val.mul(*reinterpret_cast(F_U16MAX_4A)); + } + + val = _mm_cvtepi32_ps(_mm_cvtps_epi32( val.mQ )); + + { + val.mul(*reinterpret_cast(F_OOU16MAX_4A)); + val.mul(delta); + val.add(low); + } + + { + LLVector4a maxError; maxError.setMul(delta, *reinterpret_cast(F_OOU16MAX_4A)); + LLVector4a absVal; absVal.setAbs( val ); + setSelectWithMask( absVal.lessThan( maxError ), F_ZERO_4A, val ); + } +} diff --git a/indra/llmath/llvector4a.h b/indra/llmath/llvector4a.h new file mode 100644 index 0000000000..76a3e999ce --- /dev/null +++ b/indra/llmath/llvector4a.h @@ -0,0 +1,331 @@ +/** + * @file llvector4a.h + * @brief LLVector4a class header file - memory aligned and vectorized 4 component vector + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2007-2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLVECTOR4A_H +#define LL_LLVECTOR4A_H + + +class LLRotation; + +#include +#include "llpreprocessor.h" + +/////////////////////////////////// +// FIRST TIME USERS PLEASE READ +////////////////////////////////// +// This is just the beginning of LLVector4a. There are many more useful functions +// yet to be implemented. For example, setNeg to negate a vector, rotate() to apply +// a matrix rotation, various functions to manipulate only the X, Y, and Z elements +// and many others (including a whole variety of accessors). So if you don't see a +// function here that you need, please contact Falcon or someone else with SSE +// experience (Richard, I think, has some and davep has a little as of the time +// of this writing, July 08, 2010) about getting it implemented before you resort to +// LLVector3/LLVector4. +///////////////////////////////// + +class LLVector4a +{ +public: + + /////////////////////////////////// + // STATIC METHODS + /////////////////////////////////// + + // Call initClass() at startup to avoid 15,000+ cycle penalties from denormalized numbers + static void initClass() + { + _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON); + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + } + + // Return a vector of all zeros + static inline const LLVector4a& getZero() + { + extern const LLVector4a LL_V4A_ZERO; + return LL_V4A_ZERO; + } + + // Return a vector of all epsilon, where epsilon is a small float suitable for approximate equality checks + static inline const LLVector4a& getEpsilon() + { + extern const LLVector4a LL_V4A_EPSILON; + return LL_V4A_EPSILON; + } + + // Copy 16 bytes from src to dst. Source and destination must be 16-byte aligned + static inline void copy4a(F32* dst, const F32* src) + { + _mm_store_ps(dst, _mm_load_ps(src)); + } + + // Copy words 16-byte blocks from src to dst. Source and destination must not overlap. + static void memcpyNonAliased16(F32* __restrict dst, const F32* __restrict src, size_t bytes); + + //////////////////////////////////// + // CONSTRUCTORS + //////////////////////////////////// + + LLVector4a() + { //DO NOT INITIALIZE -- The overhead is completely unnecessary + } + + LLVector4a(F32 x, F32 y, F32 z, F32 w = 0.f) + { + set(x,y,z,w); + } + + LLVector4a(F32 x) + { + splat(x); + } + + LLVector4a(const LLSimdScalar& x) + { + splat(x); + } + + LLVector4a(LLQuad q) + { + mQ = q; + } + + //////////////////////////////////// + // LOAD/STORE + //////////////////////////////////// + + // Load from 16-byte aligned src array (preferred method of loading) + inline void load4a(const F32* src); + + // Load from unaligned src array (NB: Significantly slower than load4a) + inline void loadua(const F32* src); + + // Load only three floats beginning at address 'src'. Slowest method. + inline void load3(const F32* src); + + // Store to a 16-byte aligned memory address + inline void store4a(F32* dst) const; + + //////////////////////////////////// + // BASIC GET/SET + //////////////////////////////////// + + // Return a "this" as an F32 pointer. Do not use unless you have a very good reason. (Not sure? Ask Falcon) + inline F32* getF32ptr(); + + // Return a "this" as a const F32 pointer. Do not use unless you have a very good reason. (Not sure? Ask Falcon) + inline const F32* const getF32ptr() const; + + // Read-only access a single float in this vector. Do not use in proximity to any function call that manipulates + // the data at the whole vector level or you will incur a substantial penalty. Consider using the splat functions instead + inline F32 operator[](const S32 idx) const; + + // Prefer this method for read-only access to a single element. Prefer the templated version if the elem is known at compile time. + inline LLSimdScalar getScalarAt(const S32 idx) const; + + // Prefer this method for read-only access to a single element. Prefer the templated version if the elem is known at compile time. + template LL_FORCE_INLINE LLSimdScalar getScalarAt() const; + template <> LL_FORCE_INLINE LLSimdScalar getScalarAt<0>() const; + + // Set to an x, y, z and optional w provided + inline void set(F32 x, F32 y, F32 z, F32 w = 0.f); + + // Set to all zeros. This is preferred to using ::getZero() + inline void clear(); + + // Set all elements to 'x' + inline void splat(const F32 x); + + // Set all elements to 'x' + inline void splat(const LLSimdScalar& x); + + // Set all 4 elements to element N of src, with N known at compile time + template void splat(const LLVector4a& src); + + // Set all 4 elements to element i of v, with i NOT known at compile time + inline void splat(const LLVector4a& v, U32 i); + + // Select bits from sourceIfTrue and sourceIfFalse according to bits in mask + inline void setSelectWithMask( const LLVector4Logical& mask, const LLVector4a& sourceIfTrue, const LLVector4a& sourceIfFalse ); + + //////////////////////////////////// + // ALGEBRAIC + //////////////////////////////////// + + // Set this to the element-wise (a + b) + inline void setAdd(const LLVector4a& a, const LLVector4a& b); + + // Set this to element-wise (a - b) + inline void setSub(const LLVector4a& a, const LLVector4a& b); + + // Set this to element-wise multiply (a * b) + inline void setMul(const LLVector4a& a, const LLVector4a& b); + + // Set this to element-wise quotient (a / b) + inline void setDiv(const LLVector4a& a, const LLVector4a& b); + + // Set this to the element-wise absolute value of src + inline void setAbs(const LLVector4a& src); + + // Add to each component in this vector the corresponding component in rhs + inline void add(const LLVector4a& rhs); + + // Subtract from each component in this vector the corresponding component in rhs + inline void sub(const LLVector4a& rhs); + + // Multiply each component in this vector by the corresponding component in rhs + inline void mul(const LLVector4a& rhs); + + // Divide each component in this vector by the corresponding component in rhs + inline void div(const LLVector4a& rhs); + + // Multiply this vector by x in a scalar fashion + inline void mul(const F32 x); + + // Set this to (a x b) (geometric cross-product) + inline void setCross3(const LLVector4a& a, const LLVector4a& b); + + // Set all elements to the dot product of the x, y, and z elements in a and b + inline void setAllDot3(const LLVector4a& a, const LLVector4a& b); + + // Set all elements to the dot product of the x, y, z, and w elements in a and b + inline void setAllDot4(const LLVector4a& a, const LLVector4a& b); + + // Return the 3D dot product of this vector and b + inline LLSimdScalar dot3(const LLVector4a& b) const; + + // Return the 4D dot product of this vector and b + inline LLSimdScalar dot4(const LLVector4a& b) const; + + // Normalize this vector with respect to the x, y, and z components only. Accurate to 22 bites of precision. W component is destroyed + // Note that this does not consider zero length vectors! + inline void normalize3(); + + // Same as normalize3() but with respect to all 4 components + inline void normalize4(); + + // Same as normalize3(), but returns length as a SIMD scalar + inline LLSimdScalar normalize3withLength(); + + // Normalize this vector with respect to the x, y, and z components only. Accurate only to 10-12 bits of precision. W component is destroyed + // Note that this does not consider zero length vectors! + inline void normalize3fast(); + + // Return true if this vector is normalized with respect to x,y,z up to tolerance + inline LLBool32 isNormalized3( F32 tolerance = 1e-3 ) const; + + // Return true if this vector is normalized with respect to all components up to tolerance + inline LLBool32 isNormalized4( F32 tolerance = 1e-3 ) const; + + // Set all elements to the length of vector 'v' + inline void setAllLength3( const LLVector4a& v ); + + // Get this vector's length + inline LLSimdScalar getLength3() const; + + // Set the components of this vector to the minimum of the corresponding components of lhs and rhs + inline void setMin(const LLVector4a& lhs, const LLVector4a& rhs); + + // Set the components of this vector to the maximum of the corresponding components of lhs and rhs + inline void setMax(const LLVector4a& lhs, const LLVector4a& rhs); + + // Clamps this vector to be within the component-wise range low to high (inclusive) + inline void clamp( const LLVector4a& low, const LLVector4a& high ); + + // Set this to (c * lhs) + rhs * ( 1 - c) + inline void setLerp(const LLVector4a& lhs, const LLVector4a& rhs, F32 c); + + // Return true (nonzero) if x, y, z (and w for Finite4) are all finite floats + inline LLBool32 isFinite3() const; + inline LLBool32 isFinite4() const; + + // Set this vector to 'vec' rotated by the LLRotation or LLQuaternion2 provided + void setRotated( const LLRotation& rot, const LLVector4a& vec ); + void setRotated( const class LLQuaternion2& quat, const LLVector4a& vec ); + + // Set this vector to 'vec' rotated by the INVERSE of the LLRotation or LLQuaternion2 provided + inline void setRotatedInv( const LLRotation& rot, const LLVector4a& vec ); + inline void setRotatedInv( const class LLQuaternion2& quat, const LLVector4a& vec ); + + // Quantize this vector to 8 or 16 bit precision + void quantize8( const LLVector4a& low, const LLVector4a& high ); + void quantize16( const LLVector4a& low, const LLVector4a& high ); + + //////////////////////////////////// + // LOGICAL + //////////////////////////////////// + // The functions in this section will compare the elements in this vector + // to those in rhs and return an LLVector4Logical with all bits set in elements + // where the comparison was true and all bits unset in elements where the comparison + // was false. See llvector4logica.h + //////////////////////////////////// + // WARNING: Other than equals3 and equals4, these functions do NOT account + // for floating point tolerance. You should include the appropriate tolerance + // in the inputs. + //////////////////////////////////// + + inline LLVector4Logical greaterThan(const LLVector4a& rhs) const; + + inline LLVector4Logical lessThan(const LLVector4a& rhs) const; + + inline LLVector4Logical greaterEqual(const LLVector4a& rhs) const; + + inline LLVector4Logical lessEqual(const LLVector4a& rhs) const; + + inline LLVector4Logical equal(const LLVector4a& rhs) const; + + // Returns true if this and rhs are componentwise equal up to the specified absolute tolerance + inline bool equals4(const LLVector4a& rhs, F32 tolerance = F_APPROXIMATELY_ZERO ) const; + + inline bool equals3(const LLVector4a& rhs, F32 tolerance = F_APPROXIMATELY_ZERO ) const; + + //////////////////////////////////// + // OPERATORS + //////////////////////////////////// + + // Do NOT add aditional operators without consulting someone with SSE experience + inline const LLVector4a& operator= ( const LLVector4a& rhs ); + + inline const LLVector4a& operator= ( const LLQuad& rhs ); + + inline operator LLQuad() const; + +private: + LLQuad mQ; +}; + +inline void update_min_max(LLVector4a& min, LLVector4a& max, const LLVector4a& p) +{ + min.setMin(min, p); + max.setMax(max, p); +} + +#endif diff --git a/indra/llmath/llvector4a.inl b/indra/llmath/llvector4a.inl new file mode 100644 index 0000000000..e52b550883 --- /dev/null +++ b/indra/llmath/llvector4a.inl @@ -0,0 +1,599 @@ +/** + * @file llvector4a.inl + * @brief LLVector4a inline function implementations + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2007-2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +//////////////////////////////////// +// LOAD/STORE +//////////////////////////////////// + +// Load from 16-byte aligned src array (preferred method of loading) +inline void LLVector4a::load4a(const F32* src) +{ + mQ = _mm_load_ps(src); +} + +// Load from unaligned src array (NB: Significantly slower than load4a) +inline void LLVector4a::loadua(const F32* src) +{ + mQ = _mm_loadu_ps(src); +} + +// Load only three floats beginning at address 'src'. Slowest method. +inline void LLVector4a::load3(const F32* src) +{ + // mQ = { 0.f, src[2], src[1], src[0] } = { W, Z, Y, X } + // NB: This differs from the convention of { Z, Y, X, W } + mQ = _mm_set_ps(0.f, src[2], src[1], src[0]); +} + +// Store to a 16-byte aligned memory address +inline void LLVector4a::store4a(F32* dst) const +{ + _mm_store_ps(dst, mQ); +} + +//////////////////////////////////// +// BASIC GET/SET +//////////////////////////////////// + +// Return a "this" as an F32 pointer. Do not use unless you have a very good reason. (Not sure? Ask Falcon) +F32* LLVector4a::getF32ptr() +{ + return (F32*) &mQ; +} + +// Return a "this" as a const F32 pointer. Do not use unless you have a very good reason. (Not sure? Ask Falcon) +const F32* const LLVector4a::getF32ptr() const +{ + return (const F32* const) &mQ; +} + +// Read-only access a single float in this vector. Do not use in proximity to any function call that manipulates +// the data at the whole vector level or you will incur a substantial penalty. Consider using the splat functions instead +inline F32 LLVector4a::operator[](const S32 idx) const +{ + return ((F32*)&mQ)[idx]; +} + +// Prefer this method for read-only access to a single element. Prefer the templated version if the elem is known at compile time. +inline LLSimdScalar LLVector4a::getScalarAt(const S32 idx) const +{ + // Return appropriate LLQuad. It will be cast to LLSimdScalar automatically (should be effectively a nop) + switch (idx) + { + case 0: + return mQ; + case 1: + return _mm_shuffle_ps(mQ, mQ, _MM_SHUFFLE(1, 1, 1, 1)); + case 2: + return _mm_shuffle_ps(mQ, mQ, _MM_SHUFFLE(2, 2, 2, 2)); + case 3: + default: + return _mm_shuffle_ps(mQ, mQ, _MM_SHUFFLE(3, 3, 3, 3)); + } +} + +// Prefer this method for read-only access to a single element. Prefer the templated version if the elem is known at compile time. +template LL_FORCE_INLINE LLSimdScalar LLVector4a::getScalarAt() const +{ + return _mm_shuffle_ps(mQ, mQ, _MM_SHUFFLE(N, N, N, N)); +} + +template<> LL_FORCE_INLINE LLSimdScalar LLVector4a::getScalarAt<0>() const +{ + return mQ; +} + +// Set to an x, y, z and optional w provided +inline void LLVector4a::set(F32 x, F32 y, F32 z, F32 w) +{ + mQ = _mm_set_ps(w, z, y, x); +} + +// Set to all zeros +inline void LLVector4a::clear() +{ + mQ = LLVector4a::getZero().mQ; +} + +inline void LLVector4a::splat(const F32 x) +{ + mQ = _mm_set1_ps(x); +} + +inline void LLVector4a::splat(const LLSimdScalar& x) +{ + mQ = _mm_shuffle_ps( x.getQuad(), x.getQuad(), _MM_SHUFFLE(0,0,0,0) ); +} + +// Set all 4 elements to element N of src, with N known at compile time +template void LLVector4a::splat(const LLVector4a& src) +{ + mQ = _mm_shuffle_ps(src.mQ, src.mQ, _MM_SHUFFLE(N, N, N, N) ); +} + +// Set all 4 elements to element i of v, with i NOT known at compile time +inline void LLVector4a::splat(const LLVector4a& v, U32 i) +{ + switch (i) + { + case 0: + mQ = _mm_shuffle_ps(v.mQ, v.mQ, _MM_SHUFFLE(0, 0, 0, 0)); + break; + case 1: + mQ = _mm_shuffle_ps(v.mQ, v.mQ, _MM_SHUFFLE(1, 1, 1, 1)); + break; + case 2: + mQ = _mm_shuffle_ps(v.mQ, v.mQ, _MM_SHUFFLE(2, 2, 2, 2)); + break; + case 3: + mQ = _mm_shuffle_ps(v.mQ, v.mQ, _MM_SHUFFLE(3, 3, 3, 3)); + break; + } +} + +// Select bits from sourceIfTrue and sourceIfFalse according to bits in mask +inline void LLVector4a::setSelectWithMask( const LLVector4Logical& mask, const LLVector4a& sourceIfTrue, const LLVector4a& sourceIfFalse ) +{ + // ((( sourceIfTrue ^ sourceIfFalse ) & mask) ^ sourceIfFalse ) + // E.g., sourceIfFalse = 1010b, sourceIfTrue = 0101b, mask = 1100b + // (sourceIfTrue ^ sourceIfFalse) = 1111b --> & mask = 1100b --> ^ sourceIfFalse = 0110b, + // as expected (01 from sourceIfTrue, 10 from sourceIfFalse) + // Courtesy of Mark++, http://markplusplus.wordpress.com/2007/03/14/fast-sse-select-operation/ + mQ = _mm_xor_ps( sourceIfFalse, _mm_and_ps( mask, _mm_xor_ps( sourceIfTrue, sourceIfFalse ) ) ); +} + +//////////////////////////////////// +// ALGEBRAIC +//////////////////////////////////// + +// Set this to the element-wise (a + b) +inline void LLVector4a::setAdd(const LLVector4a& a, const LLVector4a& b) +{ + mQ = _mm_add_ps(a.mQ, b.mQ); +} + +// Set this to element-wise (a - b) +inline void LLVector4a::setSub(const LLVector4a& a, const LLVector4a& b) +{ + mQ = _mm_sub_ps(a.mQ, b.mQ); +} + +// Set this to element-wise multiply (a * b) +inline void LLVector4a::setMul(const LLVector4a& a, const LLVector4a& b) +{ + mQ = _mm_mul_ps(a.mQ, b.mQ); +} + +// Set this to element-wise quotient (a / b) +inline void LLVector4a::setDiv(const LLVector4a& a, const LLVector4a& b) +{ + mQ = _mm_div_ps( a.mQ, b.mQ ); +} + +// Set this to the element-wise absolute value of src +inline void LLVector4a::setAbs(const LLVector4a& src) +{ + static const LL_ALIGN_16(U32 F_ABS_MASK_4A[4]) = { 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF }; + mQ = _mm_and_ps(src.mQ, *reinterpret_cast(F_ABS_MASK_4A)); +} + +// Add to each component in this vector the corresponding component in rhs +inline void LLVector4a::add(const LLVector4a& rhs) +{ + mQ = _mm_add_ps(mQ, rhs.mQ); +} + +// Subtract from each component in this vector the corresponding component in rhs +inline void LLVector4a::sub(const LLVector4a& rhs) +{ + mQ = _mm_sub_ps(mQ, rhs.mQ); +} + +// Multiply each component in this vector by the corresponding component in rhs +inline void LLVector4a::mul(const LLVector4a& rhs) +{ + mQ = _mm_mul_ps(mQ, rhs.mQ); +} + +// Divide each component in this vector by the corresponding component in rhs +inline void LLVector4a::div(const LLVector4a& rhs) +{ + // TODO: Check accuracy, maybe add divFast + mQ = _mm_div_ps(mQ, rhs.mQ); +} + +// Multiply this vector by x in a scalar fashion +inline void LLVector4a::mul(const F32 x) +{ + LLVector4a t; + t.splat(x); + + mQ = _mm_mul_ps(mQ, t.mQ); +} + +// Set this to (a x b) (geometric cross-product) +inline void LLVector4a::setCross3(const LLVector4a& a, const LLVector4a& b) +{ + // Vectors are stored in memory in w, z, y, x order from high to low + // Set vector1 = { a[W], a[X], a[Z], a[Y] } + const LLQuad vector1 = _mm_shuffle_ps( a.mQ, a.mQ, _MM_SHUFFLE( 3, 0, 2, 1 )); + // Set vector2 = { b[W], b[Y], b[X], b[Z] } + const LLQuad vector2 = _mm_shuffle_ps( b.mQ, b.mQ, _MM_SHUFFLE( 3, 1, 0, 2 )); + // mQ = { a[W]*b[W], a[X]*b[Y], a[Z]*b[X], a[Y]*b[Z] } + mQ = _mm_mul_ps( vector1, vector2 ); + // vector3 = { a[W], a[Y], a[X], a[Z] } + const LLQuad vector3 = _mm_shuffle_ps( a.mQ, a.mQ, _MM_SHUFFLE( 3, 1, 0, 2 )); + // vector4 = { b[W], b[X], b[Z], b[Y] } + const LLQuad vector4 = _mm_shuffle_ps( b.mQ, b.mQ, _MM_SHUFFLE( 3, 0, 2, 1 )); + // mQ = { 0, a[X]*b[Y] - a[Y]*b[X], a[Z]*b[X] - a[X]*b[Z], a[Y]*b[Z] - a[Z]*b[Y] } + mQ = _mm_sub_ps( mQ, _mm_mul_ps( vector3, vector4 )); +} + +/* This function works, but may be slightly slower than the one below on older machines + inline void LLVector4a::setAllDot3(const LLVector4a& a, const LLVector4a& b) + { + // ab = { a[W]*b[W], a[Z]*b[Z], a[Y]*b[Y], a[X]*b[X] } + const LLQuad ab = _mm_mul_ps( a.mQ, b.mQ ); + // yzxw = { a[W]*b[W], a[Z]*b[Z], a[X]*b[X], a[Y]*b[Y] } + const LLQuad wzxy = _mm_shuffle_ps( ab, ab, _MM_SHUFFLE(3, 2, 0, 1 )); + // xPlusY = { 2*a[W]*b[W], 2 * a[Z] * b[Z], a[Y]*b[Y] + a[X] * b[X], a[X] * b[X] + a[Y] * b[Y] } + const LLQuad xPlusY = _mm_add_ps(ab, wzxy); + // xPlusYSplat = { a[Y]*b[Y] + a[X] * b[X], a[X] * b[X] + a[Y] * b[Y], a[Y]*b[Y] + a[X] * b[X], a[X] * b[X] + a[Y] * b[Y] } + const LLQuad xPlusYSplat = _mm_movelh_ps(xPlusY, xPlusY); + // zSplat = { a[Z]*b[Z], a[Z]*b[Z], a[Z]*b[Z], a[Z]*b[Z] } + const LLQuad zSplat = _mm_shuffle_ps( ab, ab, _MM_SHUFFLE( 2, 2, 2, 2 )); + // mQ = { a[Z] * b[Z] + a[Y] * b[Y] + a[X] * b[X], same, same, same } + mQ = _mm_add_ps(zSplat, xPlusYSplat); + }*/ + +// Set all elements to the dot product of the x, y, and z elements in a and b +inline void LLVector4a::setAllDot3(const LLVector4a& a, const LLVector4a& b) +{ + // ab = { a[W]*b[W], a[Z]*b[Z], a[Y]*b[Y], a[X]*b[X] } + const LLQuad ab = _mm_mul_ps( a.mQ, b.mQ ); + // yzxw = { a[W]*b[W], a[Z]*b[Z], a[X]*b[X], a[Y]*b[Y] } + const __m128i wzxy = _mm_shuffle_epi32(_mm_castps_si128(ab), _MM_SHUFFLE(3, 2, 0, 1 )); + // xPlusY = { 2*a[W]*b[W], 2 * a[Z] * b[Z], a[Y]*b[Y] + a[X] * b[X], a[X] * b[X] + a[Y] * b[Y] } + const LLQuad xPlusY = _mm_add_ps(ab, _mm_castsi128_ps(wzxy)); + // xPlusYSplat = { a[Y]*b[Y] + a[X] * b[X], a[X] * b[X] + a[Y] * b[Y], a[Y]*b[Y] + a[X] * b[X], a[X] * b[X] + a[Y] * b[Y] } + const LLQuad xPlusYSplat = _mm_movelh_ps(xPlusY, xPlusY); + // zSplat = { a[Z]*b[Z], a[Z]*b[Z], a[Z]*b[Z], a[Z]*b[Z] } + const __m128i zSplat = _mm_shuffle_epi32(_mm_castps_si128(ab), _MM_SHUFFLE( 2, 2, 2, 2 )); + // mQ = { a[Z] * b[Z] + a[Y] * b[Y] + a[X] * b[X], same, same, same } + mQ = _mm_add_ps(_mm_castsi128_ps(zSplat), xPlusYSplat); +} + +// Set all elements to the dot product of the x, y, z, and w elements in a and b +inline void LLVector4a::setAllDot4(const LLVector4a& a, const LLVector4a& b) +{ + // ab = { a[W]*b[W], a[Z]*b[Z], a[Y]*b[Y], a[X]*b[X] } + const LLQuad ab = _mm_mul_ps( a.mQ, b.mQ ); + // yzxw = { a[W]*b[W], a[Z]*b[Z], a[X]*b[X], a[Y]*b[Y] } + const __m128i zwxy = _mm_shuffle_epi32(_mm_castps_si128(ab), _MM_SHUFFLE(2, 3, 0, 1 )); + // zPlusWandXplusY = { a[W]*b[W] + a[Z]*b[Z], a[Z] * b[Z] + a[W]*b[W], a[Y]*b[Y] + a[X] * b[X], a[X] * b[X] + a[Y] * b[Y] } + const LLQuad zPlusWandXplusY = _mm_add_ps(ab, _mm_castsi128_ps(zwxy)); + // xPlusYSplat = { a[Y]*b[Y] + a[X] * b[X], a[X] * b[X] + a[Y] * b[Y], a[Y]*b[Y] + a[X] * b[X], a[X] * b[X] + a[Y] * b[Y] } + const LLQuad xPlusYSplat = _mm_movelh_ps(zPlusWandXplusY, zPlusWandXplusY); + const LLQuad zPlusWSplat = _mm_movehl_ps(zPlusWandXplusY, zPlusWandXplusY); + + // mQ = { a[W]*b[W] + a[Z] * b[Z] + a[Y] * b[Y] + a[X] * b[X], same, same, same } + mQ = _mm_add_ps(xPlusYSplat, zPlusWSplat); +} + +// Return the 3D dot product of this vector and b +inline LLSimdScalar LLVector4a::dot3(const LLVector4a& b) const +{ + const LLQuad ab = _mm_mul_ps( mQ, b.mQ ); + const LLQuad splatY = _mm_castsi128_ps( _mm_shuffle_epi32( _mm_castps_si128(ab), _MM_SHUFFLE(1, 1, 1, 1) ) ); + const LLQuad splatZ = _mm_castsi128_ps( _mm_shuffle_epi32( _mm_castps_si128(ab), _MM_SHUFFLE(2, 2, 2, 2) ) ); + const LLQuad xPlusY = _mm_add_ps( ab, splatY ); + return _mm_add_ps( xPlusY, splatZ ); +} + +// Return the 4D dot product of this vector and b +inline LLSimdScalar LLVector4a::dot4(const LLVector4a& b) const +{ + // ab = { w, z, y, x } + const LLQuad ab = _mm_mul_ps( mQ, b.mQ ); + // upperProdsInLowerElems = { y, x, y, x } + const LLQuad upperProdsInLowerElems = _mm_movehl_ps( ab, ab ); + // sumOfPairs = { w+y, z+x, 2y, 2x } + const LLQuad sumOfPairs = _mm_add_ps( upperProdsInLowerElems, ab ); + // shuffled = { z+x, z+x, z+x, z+x } + const LLQuad shuffled = _mm_castsi128_ps( _mm_shuffle_epi32( _mm_castps_si128( sumOfPairs ), _MM_SHUFFLE(1, 1, 1, 1) ) ); + return _mm_add_ss( sumOfPairs, shuffled ); +} + +// Normalize this vector with respect to the x, y, and z components only. Accurate to 22 bites of precision. W component is destroyed +// Note that this does not consider zero length vectors! +inline void LLVector4a::normalize3() +{ + // lenSqrd = a dot a + LLVector4a lenSqrd; lenSqrd.setAllDot3( *this, *this ); + // rsqrt = approximate reciprocal square (i.e., { ~1/len(a)^2, ~1/len(a)^2, ~1/len(a)^2, ~1/len(a)^2 } + const LLQuad rsqrt = _mm_rsqrt_ps(lenSqrd.mQ); + static const LLQuad half = { 0.5f, 0.5f, 0.5f, 0.5f }; + static const LLQuad three = {3.f, 3.f, 3.f, 3.f }; + // Now we do one round of Newton-Raphson approximation to get full accuracy + // According to the Newton-Raphson method, given a first 'w' for the root of f(x) = 1/x^2 - a (i.e., x = 1/sqrt(a)) + // the next better approximation w[i+1] = w - f(w)/f'(w) = w - (1/w^2 - a)/(-2*w^(-3)) + // w[i+1] = w + 0.5 * (1/w^2 - a) * w^3 = w + 0.5 * (w - a*w^3) = 1.5 * w - 0.5 * a * w^3 + // = 0.5 * w * (3 - a*w^2) + // Our first approx is w = rsqrt. We need out = a * w[i+1] (this is the input vector 'a', not the 'a' from the above formula + // which is actually lenSqrd). So out = a * [0.5*rsqrt * (3 - lenSqrd*rsqrt*rsqrt)] + const LLQuad AtimesRsqrt = _mm_mul_ps( lenSqrd.mQ, rsqrt ); + const LLQuad AtimesRsqrtTimesRsqrt = _mm_mul_ps( AtimesRsqrt, rsqrt ); + const LLQuad threeMinusAtimesRsqrtTimesRsqrt = _mm_sub_ps(three, AtimesRsqrtTimesRsqrt ); + const LLQuad nrApprox = _mm_mul_ps(half, _mm_mul_ps(rsqrt, threeMinusAtimesRsqrtTimesRsqrt)); + mQ = _mm_mul_ps( mQ, nrApprox ); +} + +// Normalize this vector with respect to all components. Accurate to 22 bites of precision. +// Note that this does not consider zero length vectors! +inline void LLVector4a::normalize4() +{ + // lenSqrd = a dot a + LLVector4a lenSqrd; lenSqrd.setAllDot4( *this, *this ); + // rsqrt = approximate reciprocal square (i.e., { ~1/len(a)^2, ~1/len(a)^2, ~1/len(a)^2, ~1/len(a)^2 } + const LLQuad rsqrt = _mm_rsqrt_ps(lenSqrd.mQ); + static const LLQuad half = { 0.5f, 0.5f, 0.5f, 0.5f }; + static const LLQuad three = {3.f, 3.f, 3.f, 3.f }; + // Now we do one round of Newton-Raphson approximation to get full accuracy + // According to the Newton-Raphson method, given a first 'w' for the root of f(x) = 1/x^2 - a (i.e., x = 1/sqrt(a)) + // the next better approximation w[i+1] = w - f(w)/f'(w) = w - (1/w^2 - a)/(-2*w^(-3)) + // w[i+1] = w + 0.5 * (1/w^2 - a) * w^3 = w + 0.5 * (w - a*w^3) = 1.5 * w - 0.5 * a * w^3 + // = 0.5 * w * (3 - a*w^2) + // Our first approx is w = rsqrt. We need out = a * w[i+1] (this is the input vector 'a', not the 'a' from the above formula + // which is actually lenSqrd). So out = a * [0.5*rsqrt * (3 - lenSqrd*rsqrt*rsqrt)] + const LLQuad AtimesRsqrt = _mm_mul_ps( lenSqrd.mQ, rsqrt ); + const LLQuad AtimesRsqrtTimesRsqrt = _mm_mul_ps( AtimesRsqrt, rsqrt ); + const LLQuad threeMinusAtimesRsqrtTimesRsqrt = _mm_sub_ps(three, AtimesRsqrtTimesRsqrt ); + const LLQuad nrApprox = _mm_mul_ps(half, _mm_mul_ps(rsqrt, threeMinusAtimesRsqrtTimesRsqrt)); + mQ = _mm_mul_ps( mQ, nrApprox ); +} + +// Normalize this vector with respect to the x, y, and z components only. Accurate to 22 bites of precision. W component is destroyed +// Note that this does not consider zero length vectors! +inline LLSimdScalar LLVector4a::normalize3withLength() +{ + // lenSqrd = a dot a + LLVector4a lenSqrd; lenSqrd.setAllDot3( *this, *this ); + // rsqrt = approximate reciprocal square (i.e., { ~1/len(a)^2, ~1/len(a)^2, ~1/len(a)^2, ~1/len(a)^2 } + const LLQuad rsqrt = _mm_rsqrt_ps(lenSqrd.mQ); + static const LLQuad half = { 0.5f, 0.5f, 0.5f, 0.5f }; + static const LLQuad three = {3.f, 3.f, 3.f, 3.f }; + // Now we do one round of Newton-Raphson approximation to get full accuracy + // According to the Newton-Raphson method, given a first 'w' for the root of f(x) = 1/x^2 - a (i.e., x = 1/sqrt(a)) + // the next better approximation w[i+1] = w - f(w)/f'(w) = w - (1/w^2 - a)/(-2*w^(-3)) + // w[i+1] = w + 0.5 * (1/w^2 - a) * w^3 = w + 0.5 * (w - a*w^3) = 1.5 * w - 0.5 * a * w^3 + // = 0.5 * w * (3 - a*w^2) + // Our first approx is w = rsqrt. We need out = a * w[i+1] (this is the input vector 'a', not the 'a' from the above formula + // which is actually lenSqrd). So out = a * [0.5*rsqrt * (3 - lenSqrd*rsqrt*rsqrt)] + const LLQuad AtimesRsqrt = _mm_mul_ps( lenSqrd.mQ, rsqrt ); + const LLQuad AtimesRsqrtTimesRsqrt = _mm_mul_ps( AtimesRsqrt, rsqrt ); + const LLQuad threeMinusAtimesRsqrtTimesRsqrt = _mm_sub_ps(three, AtimesRsqrtTimesRsqrt ); + const LLQuad nrApprox = _mm_mul_ps(half, _mm_mul_ps(rsqrt, threeMinusAtimesRsqrtTimesRsqrt)); + mQ = _mm_mul_ps( mQ, nrApprox ); + return _mm_sqrt_ss(lenSqrd); +} + +// Normalize this vector with respect to the x, y, and z components only. Accurate only to 10-12 bits of precision. W component is destroyed +// Note that this does not consider zero length vectors! +inline void LLVector4a::normalize3fast() +{ + LLVector4a lenSqrd; lenSqrd.setAllDot3( *this, *this ); + const LLQuad approxRsqrt = _mm_rsqrt_ps(lenSqrd.mQ); + mQ = _mm_mul_ps( mQ, approxRsqrt ); +} + +// Return true if this vector is normalized with respect to x,y,z up to tolerance +inline LLBool32 LLVector4a::isNormalized3( F32 tolerance ) const +{ + static LL_ALIGN_16(const U32 ones[4]) = { 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000 }; + LLSimdScalar tol = _mm_load_ss( &tolerance ); + tol = _mm_mul_ss( tol, tol ); + LLVector4a lenSquared; lenSquared.setAllDot3( *this, *this ); + lenSquared.sub( *reinterpret_cast(ones) ); + lenSquared.setAbs(lenSquared); + return _mm_comile_ss( lenSquared, tol ); +} + +// Return true if this vector is normalized with respect to all components up to tolerance +inline LLBool32 LLVector4a::isNormalized4( F32 tolerance ) const +{ + static LL_ALIGN_16(const U32 ones[4]) = { 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000 }; + LLSimdScalar tol = _mm_load_ss( &tolerance ); + tol = _mm_mul_ss( tol, tol ); + LLVector4a lenSquared; lenSquared.setAllDot4( *this, *this ); + lenSquared.sub( *reinterpret_cast(ones) ); + lenSquared.setAbs(lenSquared); + return _mm_comile_ss( lenSquared, tol ); +} + +// Set all elements to the length of vector 'v' +inline void LLVector4a::setAllLength3( const LLVector4a& v ) +{ + LLVector4a lenSqrd; + lenSqrd.setAllDot3(v, v); + + mQ = _mm_sqrt_ps(lenSqrd.mQ); +} + +// Get this vector's length +inline LLSimdScalar LLVector4a::getLength3() const +{ + return _mm_sqrt_ss( dot3( (const LLVector4a)mQ ) ); +} + +// Set the components of this vector to the minimum of the corresponding components of lhs and rhs +inline void LLVector4a::setMin(const LLVector4a& lhs, const LLVector4a& rhs) +{ + mQ = _mm_min_ps(lhs.mQ, rhs.mQ); +} + +// Set the components of this vector to the maximum of the corresponding components of lhs and rhs +inline void LLVector4a::setMax(const LLVector4a& lhs, const LLVector4a& rhs) +{ + mQ = _mm_max_ps(lhs.mQ, rhs.mQ); +} + +// Set this to (c * lhs) + rhs * ( 1 - c) +inline void LLVector4a::setLerp(const LLVector4a& lhs, const LLVector4a& rhs, F32 c) +{ + LLVector4a a = lhs; + a.mul(c); + + LLVector4a b = rhs; + b.mul(1.f-c); + + setAdd(a, b); +} + +inline LLBool32 LLVector4a::isFinite3() const +{ + static LL_ALIGN_16(const U32 nanOrInfMask[4]) = { 0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000 }; + const __m128i nanOrInfMaskV = *reinterpret_cast (nanOrInfMask); + const __m128i maskResult = _mm_and_si128( _mm_castps_si128(mQ), nanOrInfMaskV ); + const LLVector4Logical equalityCheck = _mm_castsi128_ps(_mm_cmpeq_epi32( maskResult, nanOrInfMaskV )); + return !equalityCheck.areAnySet( LLVector4Logical::MASK_XYZ ); +} + +inline LLBool32 LLVector4a::isFinite4() const +{ + static LL_ALIGN_16(const U32 nanOrInfMask[4]) = { 0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000 }; + const __m128i nanOrInfMaskV = *reinterpret_cast (nanOrInfMask); + const __m128i maskResult = _mm_and_si128( _mm_castps_si128(mQ), nanOrInfMaskV ); + const LLVector4Logical equalityCheck = _mm_castsi128_ps(_mm_cmpeq_epi32( maskResult, nanOrInfMaskV )); + return !equalityCheck.areAnySet( LLVector4Logical::MASK_XYZW ); +} + +inline void LLVector4a::setRotatedInv( const LLRotation& rot, const LLVector4a& vec ) +{ + LLRotation inv; inv.setTranspose( rot ); + setRotated( inv, vec ); +} + +inline void LLVector4a::setRotatedInv( const LLQuaternion2& quat, const LLVector4a& vec ) +{ + LLQuaternion2 invRot; invRot.setConjugate( quat ); + setRotated(invRot, vec); +} + +inline void LLVector4a::clamp( const LLVector4a& low, const LLVector4a& high ) +{ + const LLVector4Logical highMask = greaterThan( high ); + const LLVector4Logical lowMask = lessThan( low ); + + setSelectWithMask( highMask, high, *this ); + setSelectWithMask( lowMask, low, *this ); +} + + +//////////////////////////////////// +// LOGICAL +//////////////////////////////////// +// The functions in this section will compare the elements in this vector +// to those in rhs and return an LLVector4Logical with all bits set in elements +// where the comparison was true and all bits unset in elements where the comparison +// was false. See llvector4logica.h +//////////////////////////////////// +// WARNING: Other than equals3 and equals4, these functions do NOT account +// for floating point tolerance. You should include the appropriate tolerance +// in the inputs. +//////////////////////////////////// + +inline LLVector4Logical LLVector4a::greaterThan(const LLVector4a& rhs) const +{ + return _mm_cmpgt_ps(mQ, rhs.mQ); +} + +inline LLVector4Logical LLVector4a::lessThan(const LLVector4a& rhs) const +{ + return _mm_cmplt_ps(mQ, rhs.mQ); +} + +inline LLVector4Logical LLVector4a::greaterEqual(const LLVector4a& rhs) const +{ + return _mm_cmpge_ps(mQ, rhs.mQ); +} + +inline LLVector4Logical LLVector4a::lessEqual(const LLVector4a& rhs) const +{ + return _mm_cmple_ps(mQ, rhs.mQ); +} + +inline LLVector4Logical LLVector4a::equal(const LLVector4a& rhs) const +{ + return _mm_cmpeq_ps(mQ, rhs.mQ); +} + +// Returns true if this and rhs are componentwise equal up to the specified absolute tolerance +inline bool LLVector4a::equals4(const LLVector4a& rhs, F32 tolerance ) const +{ + LLVector4a diff; diff.setSub( *this, rhs ); + diff.setAbs( diff ); + const LLQuad tol = _mm_set1_ps( tolerance ); + const LLQuad cmp = _mm_cmplt_ps( diff, tol ); + return (_mm_movemask_ps( cmp ) & LLVector4Logical::MASK_XYZW) == LLVector4Logical::MASK_XYZW; +} + +inline bool LLVector4a::equals3(const LLVector4a& rhs, F32 tolerance ) const +{ + LLVector4a diff; diff.setSub( *this, rhs ); + diff.setAbs( diff ); + const LLQuad tol = _mm_set1_ps( tolerance ); + const LLQuad t = _mm_cmplt_ps( diff, tol ); + return (_mm_movemask_ps( t ) & LLVector4Logical::MASK_XYZ) == LLVector4Logical::MASK_XYZ; + +} + +//////////////////////////////////// +// OPERATORS +//////////////////////////////////// + +// Do NOT add aditional operators without consulting someone with SSE experience +inline const LLVector4a& LLVector4a::operator= ( const LLVector4a& rhs ) +{ + mQ = rhs.mQ; + return *this; +} + +inline const LLVector4a& LLVector4a::operator= ( const LLQuad& rhs ) +{ + mQ = rhs; + return *this; +} + +inline LLVector4a::operator LLQuad() const +{ + return mQ; +} diff --git a/indra/llmath/llvector4logical.h b/indra/llmath/llvector4logical.h new file mode 100644 index 0000000000..1c7ee1d79f --- /dev/null +++ b/indra/llmath/llvector4logical.h @@ -0,0 +1,130 @@ +/** + * @file llvector4logical.h + * @brief LLVector4Logical class header file - Companion class to LLVector4a for logical and bit-twiddling operations + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2007-2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_VECTOR4LOGICAL_H +#define LL_VECTOR4LOGICAL_H + + +//////////////////////////// +// LLVector4Logical +//////////////////////////// +// This class is incomplete. If you need additional functionality, +// for example setting/unsetting particular elements or performing +// other boolean operations, feel free to implement. If you need +// assistance in determining the most optimal implementation, +// contact someone with SSE experience (Falcon, Richard, Davep, e.g.) +//////////////////////////// + +static LL_ALIGN_16(const U32 S_V4LOGICAL_MASK_TABLE[4*4]) = +{ + 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF +}; + +class LLVector4Logical +{ +public: + + enum { + MASK_X = 1, + MASK_Y = 1 << 1, + MASK_Z = 1 << 2, + MASK_W = 1 << 3, + MASK_XYZ = MASK_X | MASK_Y | MASK_Z, + MASK_XYZW = MASK_XYZ | MASK_W + }; + + // Empty default ctor + LLVector4Logical() {} + + LLVector4Logical( const LLQuad& quad ) + { + mQ = quad; + } + + // Create and return a mask consisting of the lowest order bit of each element + inline U32 getGatheredBits() const + { + return _mm_movemask_ps(mQ); + }; + + // Invert this mask + inline LLVector4Logical& invert() + { + static const LL_ALIGN_16(U32 allOnes[4]) = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; + mQ = _mm_andnot_ps( mQ, *(LLQuad*)(allOnes) ); + return *this; + } + + inline LLBool32 areAllSet( U32 mask ) const + { + return ( getGatheredBits() & mask) == mask; + } + + inline LLBool32 areAllSet() const + { + return areAllSet( MASK_XYZW ); + } + + inline LLBool32 areAnySet( U32 mask ) const + { + return getGatheredBits() & mask; + } + + inline LLBool32 areAnySet() const + { + return areAnySet( MASK_XYZW ); + } + + inline operator LLQuad() const + { + return mQ; + } + + inline void clear() + { + mQ = _mm_setzero_ps(); + } + + template void setElement() + { + mQ = _mm_or_ps( mQ, *reinterpret_cast(S_V4LOGICAL_MASK_TABLE + 4*N) ); + } + +private: + + LLQuad mQ; +}; + +#endif //LL_VECTOR4ALOGICAL_H diff --git a/indra/llmath/llvolumeoctree.cpp b/indra/llmath/llvolumeoctree.cpp new file mode 100644 index 0000000000..194b1faf81 --- /dev/null +++ b/indra/llmath/llvolumeoctree.cpp @@ -0,0 +1,208 @@ +/** + + * @file llvolumeoctree.cpp + * + * $LicenseInfo:firstyear=2002&license=viewergpl$ + * + * Copyright (c) 2002-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llvolumeoctree.h" +#include "llvector4a.h" + +BOOL LLLineSegmentBoxIntersect(const LLVector4a& start, const LLVector4a& end, const LLVector4a& center, const LLVector4a& size) +{ + LLVector4a fAWdU; + LLVector4a dir; + LLVector4a diff; + + dir.setSub(end, start); + dir.mul(0.5f); + + diff.setAdd(end,start); + diff.mul(0.5f); + diff.sub(center); + fAWdU.setAbs(dir); + + LLVector4a rhs; + rhs.setAdd(size, fAWdU); + + LLVector4a lhs; + lhs.setAbs(diff); + + U32 grt = lhs.greaterThan(rhs).getGatheredBits(); + + if (grt & 0x7) + { + return false; + } + + LLVector4a f; + f.setCross3(dir, diff); + f.setAbs(f); + + LLVector4a v0, v1; + + v0 = _mm_shuffle_ps(size, size,_MM_SHUFFLE(3,0,0,1)); + v1 = _mm_shuffle_ps(fAWdU, fAWdU, _MM_SHUFFLE(3,1,2,2)); + lhs.setMul(v0, v1); + + v0 = _mm_shuffle_ps(size, size, _MM_SHUFFLE(3,1,2,2)); + v1 = _mm_shuffle_ps(fAWdU, fAWdU, _MM_SHUFFLE(3,0,0,1)); + rhs.setMul(v0, v1); + rhs.add(lhs); + + grt = f.greaterThan(rhs).getGatheredBits(); + + return (grt & 0x7) ? false : true; +} + + +LLVolumeOctreeListener::LLVolumeOctreeListener(LLOctreeNode* node) +{ + node->addListener(this); + + mBounds = (LLVector4a*) ll_aligned_malloc_16(sizeof(LLVector4a)*4); + mExtents = mBounds+2; +} + +LLVolumeOctreeListener::~LLVolumeOctreeListener() +{ + ll_aligned_free_16(mBounds); +} + +void LLVolumeOctreeListener::handleChildAddition(const LLOctreeNode* parent, + LLOctreeNode* child) +{ + new LLVolumeOctreeListener(child); +} + + +LLOctreeTriangleRayIntersect::LLOctreeTriangleRayIntersect(const LLVector4a& start, const LLVector4a& dir, + const LLVolumeFace* face, F32* closest_t, + LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal) + : mFace(face), + mStart(start), + mDir(dir), + mIntersection(intersection), + mTexCoord(tex_coord), + mNormal(normal), + mBinormal(bi_normal), + mClosestT(closest_t), + mHitFace(false) +{ + mEnd.setAdd(mStart, mDir); +} + +void LLOctreeTriangleRayIntersect::traverse(const LLOctreeNode* node) +{ + LLVolumeOctreeListener* vl = (LLVolumeOctreeListener*) node->getListener(0); + + /*const F32* start = mStart.getF32(); + const F32* end = mEnd.getF32(); + const F32* center = vl->mBounds[0].getF32(); + const F32* size = vl->mBounds[1].getF32();*/ + + //if (LLLineSegmentBoxIntersect(mStart.getF32(), mEnd.getF32(), vl->mBounds[0].getF32(), vl->mBounds[1].getF32())) + if (LLLineSegmentBoxIntersect(mStart, mEnd, vl->mBounds[0], vl->mBounds[1])) + { + node->accept(this); + for (S32 i = 0; i < node->getChildCount(); ++i) + { + traverse(node->getChild(i)); + } + } +} + +void LLOctreeTriangleRayIntersect::visit(const LLOctreeNode* node) +{ + for (LLOctreeNode::const_element_iter iter = + node->getData().begin(); iter != node->getData().end(); ++iter) + { + const LLVolumeTriangle* tri = *iter; + + F32 a, b, t; + + if (LLTriangleRayIntersect(*tri->mV[0], *tri->mV[1], *tri->mV[2], + mStart, mDir, a, b, t)) + { + if ((t >= 0.f) && // if hit is after start + (t <= 1.f) && // and before end + (t < *mClosestT)) // and this hit is closer + { + *mClosestT = t; + mHitFace = true; + + if (mIntersection != NULL) + { + LLVector4a intersect = mDir; + intersect.mul(*mClosestT); + intersect.add(mStart); + mIntersection->set(intersect.getF32ptr()); + } + + + if (mTexCoord != NULL) + { + LLVector2* tc = (LLVector2*) mFace->mTexCoords; + *mTexCoord = ((1.f - a - b) * tc[tri->mIndex[0]] + + a * tc[tri->mIndex[1]] + + b * tc[tri->mIndex[2]]); + + } + + if (mNormal != NULL) + { + LLVector4* norm = (LLVector4*) mFace->mNormals; + + *mNormal = ((1.f - a - b) * LLVector3(norm[tri->mIndex[0]]) + + a * LLVector3(norm[tri->mIndex[1]]) + + b * LLVector3(norm[tri->mIndex[2]])); + } + + if (mBinormal != NULL) + { + LLVector4* binormal = (LLVector4*) mFace->mBinormals; + *mBinormal = ((1.f - a - b) * LLVector3(binormal[tri->mIndex[0]]) + + a * LLVector3(binormal[tri->mIndex[1]]) + + b * LLVector3(binormal[tri->mIndex[2]])); + } + } + } + } +} + +const LLVector4a& LLVolumeTriangle::getPositionGroup() const +{ + return *mPositionGroup; +} + +const F32& LLVolumeTriangle::getBinRadius() const +{ + return mRadius; +} + + diff --git a/indra/llmath/llvolumeoctree.h b/indra/llmath/llvolumeoctree.h new file mode 100644 index 0000000000..0031626498 --- /dev/null +++ b/indra/llmath/llvolumeoctree.h @@ -0,0 +1,138 @@ +/** + * @file llvolumeoctree.h + * @brief LLVolume octree classes. + * + * $LicenseInfo:firstyear=2002&license=viewergpl$ + * + * Copyright (c) 2002-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLVOLUME_OCTREE_H +#define LL_LLVOLUME_OCTREE_H + +#include "linden_common.h" +#include "llmemory.h" + +#include "lloctree.h" +#include "llvolume.h" +#include "llvector4a.h" + +class LLVolumeOctreeListener : public LLOctreeListener +{ +public: + + LLVolumeOctreeListener(LLOctreeNode* node); + ~LLVolumeOctreeListener(); + + LLVolumeOctreeListener(const LLVolumeOctreeListener& rhs) + { + *this = rhs; + } + + const LLVolumeOctreeListener& operator=(const LLVolumeOctreeListener& rhs) + { + llerrs << "Illegal operation!" << llendl; + return *this; + } + + //LISTENER FUNCTIONS + virtual void handleChildAddition(const LLOctreeNode* parent, + LLOctreeNode* child); + virtual void handleStateChange(const LLTreeNode* node) { } + virtual void handleChildRemoval(const LLOctreeNode* parent, + const LLOctreeNode* child) { } + virtual void handleInsertion(const LLTreeNode* node, LLVolumeTriangle* tri) { } + virtual void handleRemoval(const LLTreeNode* node, LLVolumeTriangle* tri) { } + virtual void handleDestruction(const LLTreeNode* node) { } + + +public: + LLVector4a* mBounds; // bounding box (center, size) of this node and all its children (tight fit to objects) + LLVector4a* mExtents; // extents (min, max) of this node and all its children +}; + +class LLOctreeTriangleRayIntersect : public LLOctreeTraveler +{ +public: + const LLVolumeFace* mFace; + LLVector4a mStart; + LLVector4a mDir; + LLVector4a mEnd; + LLVector3* mIntersection; + LLVector2* mTexCoord; + LLVector3* mNormal; + LLVector3* mBinormal; + F32* mClosestT; + bool mHitFace; + + LLOctreeTriangleRayIntersect() { }; + + LLOctreeTriangleRayIntersect(const LLVector4a& start, const LLVector4a& dir, + const LLVolumeFace* face, F32* closest_t, + LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal); + + void traverse(const LLOctreeNode* node); + + virtual void visit(const LLOctreeNode* node); +}; + +class LLVolumeTriangle : public LLRefCount +{ +public: + LLVolumeTriangle() + { + mPositionGroup = (LLVector4a*) ll_aligned_malloc_16(16); + } + + LLVolumeTriangle(const LLVolumeTriangle& rhs) + { + *this = rhs; + } + + const LLVolumeTriangle& operator=(const LLVolumeTriangle& rhs) + { + llerrs << "Illegal operation!" << llendl; + return *this; + } + + ~LLVolumeTriangle() + { + ll_aligned_free_16(mPositionGroup); + } + + const LLVector4a* mV[3]; + U16 mIndex[3]; + + LLVector4a* mPositionGroup; + + F32 mRadius; + + virtual const LLVector4a& getPositionGroup() const; + virtual const F32& getBinRadius() const; +}; + + +#endif diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp new file mode 100644 index 0000000000..82765c740f --- /dev/null +++ b/indra/llprimitive/llmodel.cpp @@ -0,0 +1,1695 @@ +/** + * @file llmodel.cpp + * @brief Model handling implementation + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "linden_common.h" + +#include "llmodel.h" +#include "llsdserialize.h" +#include "llvector4a.h" + +#include "dae.h" +#include "dae/daeErrorHandler.h" +#include "dom/domConstants.h" +#include "dom/domMesh.h" +#include "zlib/zlib.h" + +#if LL_MESH_ENABLED + +std::string model_names[] = +{ + "lowest_lod", + "low_lod", + "medium_lod", + "high_lod", + "physics_shape" +}; + +const int MODEL_NAMES_LENGTH = sizeof(model_names) / sizeof(std::string); + +LLModel::LLModel(LLVolumeParams& params, F32 detail) + : LLVolume(params, detail), mNormalizedScale(1,1,1), mNormalizedTranslation(0,0,0) +{ + +} + +void load_face_from_dom_inputs(LLVolumeFace& face, const domInputLocalOffset_Array& inputs, U32 min_idx, U32 max_idx) +{ + for (U32 j = 0; j < inputs.getCount(); ++j) + { + if (strcmp(COMMON_PROFILE_INPUT_VERTEX, inputs[j]->getSemantic()) == 0) + { //found vertex array + const domURIFragmentType& uri = inputs[j]->getSource(); + daeElementRef elem = uri.getElement(); + domVertices* vertices = (domVertices*) elem.cast(); + + domInputLocal_Array& v_inp = vertices->getInput_array(); + if (inputs[j]->getOffset() != 0) + { + llerrs << "WTF?" << llendl; + } + + for (U32 k = 0; k < v_inp.getCount(); ++k) + { + if (strcmp(COMMON_PROFILE_INPUT_POSITION, v_inp[k]->getSemantic()) == 0) + { + const domURIFragmentType& uri = v_inp[k]->getSource(); + + daeElementRef elem = uri.getElement(); + domSource* src = (domSource*) elem.cast(); + + if (src->getTechnique_common()->getAccessor()->getStride() != 3) + { + llerrs << "WTF?" << llendl; + } + + domListOfFloats& v = src->getFloat_array()->getValue(); + + LLVector4a min; + min.set(v[min_idx], v[min_idx+1], v[min_idx+2]); + LLVector4a max = min; + + for (U32 j = min_idx; j <= max_idx; ++j) + { //copy vertex array + face.mPositions[j-min_idx].set(v[j*3+0], v[j*3+1], v[j*3+2]); + update_min_max(min, max, face.mPositions[j-min_idx]); + } + + face.mExtents[0] = min; + face.mExtents[1] = max; + } + } + } + + if (strcmp(COMMON_PROFILE_INPUT_NORMAL, inputs[j]->getSemantic()) == 0) + { + //found normal array for this triangle list + const domURIFragmentType& uri = inputs[j]->getSource(); + daeElementRef elem = uri.getElement(); + domSource* src = (domSource*) elem.cast(); + domListOfFloats& n = src->getFloat_array()->getValue(); + + for (U32 j = min_idx; j <= max_idx; ++j) + { + LLVector4a* norm = (LLVector4a*) face.mNormals + (j-min_idx); + norm->set(n[j*3+0], n[j*3+1], n[j*3+2]); + norm->normalize3fast(); + } + } + else if (strcmp(COMMON_PROFILE_INPUT_TEXCOORD, inputs[j]->getSemantic()) == 0) + { //found texCoords + const domURIFragmentType& uri = inputs[j]->getSource(); + daeElementRef elem = uri.getElement(); + domSource* src = (domSource*) elem.cast(); + domListOfFloats& u = src->getFloat_array()->getValue(); + + for (U32 j = min_idx; j <= max_idx; ++j) + { + face.mTexCoords[j-min_idx].setVec(u[j*2+0], u[j*2+1]); + } + } + } +} + +void 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) + { + idx_stride = llmax((S32) inputs[j]->getOffset(), idx_stride); + + if (strcmp(COMMON_PROFILE_INPUT_VERTEX, inputs[j]->getSemantic()) == 0) + { //found vertex array + const domURIFragmentType& uri = inputs[j]->getSource(); + daeElementRef elem = uri.getElement(); + domVertices* vertices = (domVertices*) elem.cast(); + + domInputLocal_Array& v_inp = vertices->getInput_array(); + + + for (U32 k = 0; k < v_inp.getCount(); ++k) + { + if (strcmp(COMMON_PROFILE_INPUT_POSITION, v_inp[k]->getSemantic()) == 0) + { + pos_offset = inputs[j]->getOffset(); + + const domURIFragmentType& uri = v_inp[k]->getSource(); + daeElementRef elem = uri.getElement(); + pos_source = (domSource*) elem.cast(); + } + + if (strcmp(COMMON_PROFILE_INPUT_NORMAL, v_inp[k]->getSemantic()) == 0) + { + norm_offset = inputs[j]->getOffset(); + + const domURIFragmentType& uri = v_inp[k]->getSource(); + daeElementRef elem = uri.getElement(); + norm_source = (domSource*) elem.cast(); + } + } + } + + if (strcmp(COMMON_PROFILE_INPUT_NORMAL, inputs[j]->getSemantic()) == 0) + { + //found normal array for this triangle list + norm_offset = inputs[j]->getOffset(); + const domURIFragmentType& uri = inputs[j]->getSource(); + daeElementRef elem = uri.getElement(); + norm_source = (domSource*) elem.cast(); + } + else if (strcmp(COMMON_PROFILE_INPUT_TEXCOORD, inputs[j]->getSemantic()) == 0) + { //found texCoords + tc_offset = inputs[j]->getOffset(); + const domURIFragmentType& uri = inputs[j]->getSource(); + daeElementRef elem = uri.getElement(); + tc_source = (domSource*) elem.cast(); + } + } + + idx_stride += 1; +} + +void load_face_from_dom_triangles(std::vector& face_list, std::vector& materials, domTrianglesRef& tri) +{ + LLVolumeFace face; + std::vector verts; + std::vector indices; + + const domInputLocalOffset_Array& inputs = tri->getInput_array(); + + S32 pos_offset = -1; + S32 tc_offset = -1; + S32 norm_offset = -1; + + domSource* pos_source = NULL; + domSource* tc_source = NULL; + domSource* norm_source = NULL; + + S32 idx_stride = 0; + + get_dom_sources(inputs, pos_offset, tc_offset, norm_offset, idx_stride, pos_source, tc_source, norm_source); + + domPRef p = tri->getP(); + domListOfUInts& idx = p->getValue(); + + domListOfFloats v; + domListOfFloats tc; + domListOfFloats n; + + if (pos_source) + { + v = pos_source->getFloat_array()->getValue(); + face.mExtents[0].set(v[0], v[1], v[2]); + face.mExtents[1].set(v[0], v[1], v[2]); + } + + if (tc_source) + { + tc = tc_source->getFloat_array()->getValue(); + } + + if (norm_source) + { + n = norm_source->getFloat_array()->getValue(); + } + + + LLVolumeFace::VertexMapData::PointMap point_map; + + for (U32 i = 0; i < idx.getCount(); i += idx_stride) + { + LLVolumeFace::VertexData cv; + if (pos_source) + { + cv.setPosition(LLVector4a(v[idx[i+pos_offset]*3+0], + v[idx[i+pos_offset]*3+1], + v[idx[i+pos_offset]*3+2])); + } + + if (tc_source) + { + cv.mTexCoord.setVec(tc[idx[i+tc_offset]*2+0], + tc[idx[i+tc_offset]*2+1]); + } + + if (norm_source) + { + cv.setNormal(LLVector4a(n[idx[i+norm_offset]*3+0], + n[idx[i+norm_offset]*3+1], + n[idx[i+norm_offset]*3+2])); + } + + + BOOL found = FALSE; + + LLVolumeFace::VertexMapData::PointMap::iterator point_iter; + point_iter = point_map.find(LLVector3(cv.getPosition().getF32ptr())); + + if (point_iter != point_map.end()) + { + for (U32 j = 0; j < point_iter->second.size(); ++j) + { + if ((point_iter->second)[j] == cv) + { + found = TRUE; + indices.push_back((point_iter->second)[j].mIndex); + break; + } + } + } + + if (!found) + { + update_min_max(face.mExtents[0], face.mExtents[1], cv.getPosition()); + verts.push_back(cv); + if (verts.size() >= 65535) + { + llerrs << "Attempted to write model exceeding 16-bit index buffer limitation." << llendl; + } + U16 index = (U16) (verts.size()-1); + indices.push_back(index); + + LLVolumeFace::VertexMapData d; + d.setPosition(cv.getPosition()); + d.mTexCoord = cv.mTexCoord; + d.setNormal(cv.getNormal()); + d.mIndex = index; + if (point_iter != point_map.end()) + { + point_iter->second.push_back(d); + } + else + { + point_map[LLVector3(d.getPosition().getF32ptr())].push_back(d); + } + } + + if (indices.size()%3 == 0 && verts.size() >= 65532) + { + face_list.push_back(face); + face_list.rbegin()->fillFromLegacyData(verts, indices); + face = LLVolumeFace(); + point_map.clear(); + } + + } + + if (!verts.empty()) + { + std::string material; + + if (tri->getMaterial()) + { + material = std::string(tri->getMaterial()); + } + + materials.push_back(material); + face_list.push_back(face); + + face_list.rbegin()->fillFromLegacyData(verts, indices); + } + +} + +void load_face_from_dom_polylist(std::vector& face_list, std::vector& materials, domPolylistRef& poly) +{ + domPRef p = poly->getP(); + domListOfUInts& idx = p->getValue(); + + if (idx.getCount() == 0) + { + return; + } + + const domInputLocalOffset_Array& inputs = poly->getInput_array(); + + + domListOfUInts& vcount = poly->getVcount()->getValue(); + + S32 pos_offset = -1; + S32 tc_offset = -1; + S32 norm_offset = -1; + + domSource* pos_source = NULL; + domSource* tc_source = NULL; + domSource* norm_source = NULL; + + S32 idx_stride = 0; + + get_dom_sources(inputs, pos_offset, tc_offset, norm_offset, idx_stride, pos_source, tc_source, norm_source); + + LLVolumeFace face; + + std::vector indices; + std::vector verts; + + domListOfFloats v; + domListOfFloats tc; + domListOfFloats n; + + if (pos_source) + { + v = pos_source->getFloat_array()->getValue(); + face.mExtents[0].set(v[0], v[1], v[2]); + face.mExtents[1].set(v[0], v[1], v[2]); + } + + if (tc_source) + { + tc = tc_source->getFloat_array()->getValue(); + } + + if (norm_source) + { + n = norm_source->getFloat_array()->getValue(); + } + + LLVolumeFace::VertexMapData::PointMap point_map; + + U32 cur_idx = 0; + for (U32 i = 0; i < vcount.getCount(); ++i) + { //for each polygon + U32 first_index = 0; + U32 last_index = 0; + for (U32 j = 0; j < vcount[i]; ++j) + { //for each vertex + + LLVolumeFace::VertexData cv; + + if (pos_source) + { + cv.getPosition().set(v[idx[cur_idx+pos_offset]*3+0], + v[idx[cur_idx+pos_offset]*3+1], + v[idx[cur_idx+pos_offset]*3+2]); + } + + if (tc_source) + { + cv.mTexCoord.setVec(tc[idx[cur_idx+tc_offset]*2+0], + tc[idx[cur_idx+tc_offset]*2+1]); + } + + if (norm_source) + { + cv.getNormal().set(n[idx[cur_idx+norm_offset]*3+0], + n[idx[cur_idx+norm_offset]*3+1], + n[idx[cur_idx+norm_offset]*3+2]); + } + + cur_idx += idx_stride; + + BOOL found = FALSE; + + LLVolumeFace::VertexMapData::PointMap::iterator point_iter; + LLVector3 pos3(cv.getPosition().getF32ptr()); + point_iter = point_map.find(pos3); + + if (point_iter != point_map.end()) + { + for (U32 k = 0; k < point_iter->second.size(); ++k) + { + if ((point_iter->second)[k] == cv) + { + found = TRUE; + U32 index = (point_iter->second)[k].mIndex; + if (j == 0) + { + first_index = index; + } + else if (j == 1) + { + last_index = index; + } + else + { + indices.push_back(first_index); + indices.push_back(last_index); + indices.push_back(index); + last_index = index; + } + + break; + } + } + } + + if (!found) + { + update_min_max(face.mExtents[0], face.mExtents[1], cv.getPosition()); + verts.push_back(cv); + if (verts.size() >= 65535) + { + llerrs << "Attempted to write model exceeding 16-bit index buffer limitation." << llendl; + } + U16 index = (U16) (verts.size()-1); + + if (j == 0) + { + first_index = index; + } + else if (j == 1) + { + last_index = index; + } + else + { + indices.push_back(first_index); + indices.push_back(last_index); + indices.push_back(index); + last_index = index; + } + + LLVolumeFace::VertexMapData d; + d.setPosition(cv.getPosition()); + d.mTexCoord = cv.mTexCoord; + d.setNormal(cv.getNormal()); + d.mIndex = index; + if (point_iter != point_map.end()) + { + point_iter->second.push_back(d); + } + else + { + point_map[pos3].push_back(d); + } + } + + if (indices.size()%3 == 0 && indices.size() >= 65532) + { + face_list.push_back(face); + face_list.rbegin()->fillFromLegacyData(verts, indices); + face = LLVolumeFace(); + verts.clear(); + indices.clear(); + point_map.clear(); + } + } + } + + if (!verts.empty()) + { + std::string material; + + if (poly->getMaterial()) + { + material = std::string(poly->getMaterial()); + } + + materials.push_back(material); + face_list.push_back(face); + face_list.rbegin()->fillFromLegacyData(verts, indices); + } +} + +void load_face_from_dom_polygons(std::vector& face_list, std::vector& materials, domPolygonsRef& poly) +{ + LLVolumeFace face; + std::vector indices; + std::vector verts; + + const domInputLocalOffset_Array& inputs = poly->getInput_array(); + + + S32 v_offset = -1; + S32 n_offset = -1; + S32 t_offset = -1; + + domListOfFloats* v = NULL; + domListOfFloats* n = NULL; + domListOfFloats* t = NULL; + + U32 stride = 0; + for (U32 i = 0; i < inputs.getCount(); ++i) + { + stride = llmax((U32) inputs[i]->getOffset()+1, stride); + + if (strcmp(COMMON_PROFILE_INPUT_VERTEX, inputs[i]->getSemantic()) == 0) + { //found vertex array + v_offset = inputs[i]->getOffset(); + + const domURIFragmentType& uri = inputs[i]->getSource(); + daeElementRef elem = uri.getElement(); + domVertices* vertices = (domVertices*) elem.cast(); + + domInputLocal_Array& v_inp = vertices->getInput_array(); + + for (U32 k = 0; k < v_inp.getCount(); ++k) + { + if (strcmp(COMMON_PROFILE_INPUT_POSITION, v_inp[k]->getSemantic()) == 0) + { + const domURIFragmentType& uri = v_inp[k]->getSource(); + daeElementRef elem = uri.getElement(); + domSource* src = (domSource*) elem.cast(); + v = &(src->getFloat_array()->getValue()); + } + } + } + else if (strcmp(COMMON_PROFILE_INPUT_NORMAL, inputs[i]->getSemantic()) == 0) + { + n_offset = inputs[i]->getOffset(); + //found normal array for this triangle list + const domURIFragmentType& uri = inputs[i]->getSource(); + daeElementRef elem = uri.getElement(); + domSource* src = (domSource*) elem.cast(); + n = &(src->getFloat_array()->getValue()); + } + else if (strcmp(COMMON_PROFILE_INPUT_TEXCOORD, inputs[i]->getSemantic()) == 0 && inputs[i]->getSet() == 0) + { //found texCoords + t_offset = inputs[i]->getOffset(); + const domURIFragmentType& uri = inputs[i]->getSource(); + daeElementRef elem = uri.getElement(); + domSource* src = (domSource*) elem.cast(); + t = &(src->getFloat_array()->getValue()); + } + } + + domP_Array& ps = poly->getP_array(); + + //make a triangle list in + for (U32 i = 0; i < ps.getCount(); ++i) + { //for each polygon + domListOfUInts& idx = ps[i]->getValue(); + for (U32 j = 0; j < idx.getCount()/stride; ++j) + { //for each vertex + if (j > 2) + { + U32 size = verts.size(); + LLVolumeFace::VertexData v0 = verts[size-3]; + LLVolumeFace::VertexData v1 = verts[size-1]; + + verts.push_back(v0); + verts.push_back(v1); + } + + LLVolumeFace::VertexData vert; + + + if (v) + { + U32 v_idx = idx[j*stride+v_offset]*3; + vert.getPosition().set(v->get(v_idx), + v->get(v_idx+1), + v->get(v_idx+2)); + } + + if (n) + { + U32 n_idx = idx[j*stride+n_offset]*3; + vert.getNormal().set(n->get(n_idx), + n->get(n_idx+1), + n->get(n_idx+2)); + } + + if (t) + { + U32 t_idx = idx[j*stride+t_offset]*2; + vert.mTexCoord.setVec(t->get(t_idx), + t->get(t_idx+1)); + } + + + verts.push_back(vert); + } + } + + if (verts.empty()) + { + return; + } + + face.mExtents[0] = verts[0].getPosition(); + face.mExtents[1] = verts[0].getPosition(); + + //create a map of unique vertices to indices + std::map vert_idx; + + U32 cur_idx = 0; + for (U32 i = 0; i < verts.size(); ++i) + { + std::map::iterator iter = vert_idx.find(verts[i]); + if (iter == vert_idx.end()) + { + vert_idx[verts[i]] = cur_idx++; + } + } + + //build vertex array from map + verts.resize(vert_idx.size()); + + for (std::map::iterator iter = vert_idx.begin(); iter != vert_idx.end(); ++iter) + { + verts[iter->second] = iter->first; + update_min_max(face.mExtents[0], face.mExtents[1], iter->first.getPosition()); + } + + //build index array from map + indices.resize(verts.size()); + + for (U32 i = 0; i < verts.size(); ++i) + { + indices[i] = vert_idx[verts[i]]; + } + + + if (!verts.empty()) + { + std::string material; + + if (poly->getMaterial()) + { + material = std::string(poly->getMaterial()); + } + + materials.push_back(material); + face_list.push_back(face); + face_list.rbegin()->fillFromLegacyData(verts, indices); + } +} + +void LLModel::addVolumeFacesFromDomMesh(domMesh* mesh) +{ + domTriangles_Array& tris = mesh->getTriangles_array(); + + for (U32 i = 0; i < tris.getCount(); ++i) + { + domTrianglesRef& tri = tris.get(i); + + load_face_from_dom_triangles(mVolumeFaces, mMaterialList, tri); + } + + domPolylist_Array& polys = mesh->getPolylist_array(); + for (U32 i = 0; i < polys.getCount(); ++i) + { + domPolylistRef& poly = polys.get(i); + + load_face_from_dom_polylist(mVolumeFaces, mMaterialList, poly); + } + + domPolygons_Array& polygons = mesh->getPolygons_array(); + for (U32 i = 0; i < polygons.getCount(); ++i) + { + domPolygonsRef& poly = polygons.get(i); + + load_face_from_dom_polygons(mVolumeFaces, mMaterialList, poly); + } + +} + +BOOL LLModel::createVolumeFacesFromDomMesh(domMesh* mesh) +{ + if (mesh) + { + mVolumeFaces.clear(); + mMaterialList.clear(); + + addVolumeFacesFromDomMesh(mesh); + + if (getNumVolumeFaces() > 0) + { + optimizeVolumeFaces(); + normalizeVolumeFaces(); + + if (getNumVolumeFaces() > 0) + { + return TRUE; + } + } + } + else + { + llwarns << "no mesh found" << llendl; + } + + return FALSE; +} + + +BOOL LLModel::createVolumeFacesFromFile(const std::string& file_name) +{ + DAE dae; + domCOLLADA* dom = dae.open(file_name); + if (dom) + { + daeDatabase* db = dae.getDatabase(); + + daeInt count = db->getElementCount(NULL, COLLADA_TYPE_MESH); + + mVolumeFaces.clear(); + mMaterialList.clear(); + + for (daeInt idx = 0; idx < count; ++idx) + { + domMesh* mesh = NULL; + + db->getElement((daeElement**) &mesh, idx, NULL, COLLADA_TYPE_MESH); + + if (mesh) + { + addVolumeFacesFromDomMesh(mesh); + } + } + + if (getNumVolumeFaces() > 0) + { + optimizeVolumeFaces(); + normalizeVolumeFaces(); + return TRUE; + } + } + + return FALSE; +} + + +void LLModel::optimizeVolumeFaces() +{ +#if 0 //VECTORIZE ? + for (std::vector::iterator iter = mVolumeFaces.begin(); iter != mVolumeFaces.end(); ) + { + std::vector::iterator cur_iter = iter++; + LLVolumeFace& face = *cur_iter; + + for (S32 i = 0; i < (S32) face.mNumIndices; i += 3) + { //remove zero area triangles + U16 i0 = face.mIndices[i+0]; + U16 i1 = face.mIndices[i+1]; + U16 i2 = face.mIndices[i+2]; + + if (i0 == i1 || + i1 == i2 || + i0 == i2) + { //duplicate index in triangle, remove triangle + face.mIndices.erase(face.mIndices.begin()+i, face.mIndices.begin()+i+3); + i -= 3; + } + else + { + LLVolumeFace::VertexData& v0 = face.mVertices[i0]; + LLVolumeFace::VertexData& v1 = face.mVertices[i1]; + LLVolumeFace::VertexData& v2 = face.mVertices[i2]; + + if (v0.mPosition == v1.mPosition || + v1.mPosition == v2.mPosition || + v2.mPosition == v0.mPosition) + { //zero area triangle, delete + face.mIndices.erase(face.mIndices.begin()+i, face.mIndices.begin()+i+3); + i-=3; + } + } + } + + //remove unreference vertices + std::vector ref; + ref.resize(face.mNumVertices); + + for (U32 i = 0; i < ref.size(); ++i) + { + ref[i] = false; + } + + for (U32 i = 0; i < face.mNumIndices; ++i) + { + ref[face.mIndices[i]] = true; + } + + U32 unref_count = 0; + for (U32 i = 0; i < ref.size(); ++i) + { + if (!ref[i]) + { + //vertex is unreferenced + face.mVertices.erase(face.mVertices.begin()+(i-unref_count)); + U16 idx = (U16) (i-unref_count); + + for (U32 j = 0; j < face.mNumIndices; ++j) + { //decrement every index array value greater than idx + if (face.mIndices[j] > idx) + { + --face.mIndices[j]; + } + } + ++unref_count; + } + } + + if (face.mVertices.empty() || face.mIndices.empty()) + { //face is empty, remove it + iter = mVolumeFaces.erase(cur_iter); + } + } +#endif +} + +void LLModel::normalizeVolumeFaces() +{ + + // ensure we don't have too many faces + if (mVolumeFaces.size() > LL_SCULPT_MESH_MAX_FACES) + mVolumeFaces.resize(LL_SCULPT_MESH_MAX_FACES); + + if (!mVolumeFaces.empty()) + { + LLVector4a min, max; + + if (mVolumeFaces[0].mNumVertices <= 0) + { + llerrs << "WTF?" << llendl; + } + + min = mVolumeFaces[0].mExtents[0]; + max = mVolumeFaces[0].mExtents[1]; + + for (U32 i = 1; i < mVolumeFaces.size(); ++i) + { + 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]); + } + + LLVector4a trans; + trans.setAdd(min, max); + trans.mul(-0.5f); + LLVector4a size; + size.setSub(max, min); + + F32 scale = 1.f/llmax(llmax(size[0], size[1]), size[2]); + + for (U32 i = 0; i < mVolumeFaces.size(); ++i) + { + LLVolumeFace& face = mVolumeFaces[i]; + + face.mExtents[0].add(trans); + face.mExtents[0].mul(scale); + + face.mExtents[1].add(trans); + face.mExtents[1].mul(scale); + + LLVector4a* pos = (LLVector4a*) face.mPositions; + for (U32 j = 0; j < face.mNumVertices; ++j) + { + pos[j].add(trans); + pos[j].mul(scale); + } + } + + mNormalizedScale = LLVector3(1,1,1) / scale; + mNormalizedTranslation.set(trans.getF32ptr()); + mNormalizedTranslation *= -1.f; + } +} + +void LLModel::getNormalizedScaleTranslation(LLVector3& scale_out, LLVector3& translation_out) +{ + scale_out = mNormalizedScale; + translation_out = mNormalizedTranslation; +} + +void LLModel::setNumVolumeFaces(S32 count) +{ + mVolumeFaces.resize(count); +} + +void LLModel::setVolumeFaceData(S32 f, + LLStrider pos, + LLStrider norm, + LLStrider tc, + LLStrider ind, + U32 num_verts, + U32 num_indices) +{ + LLVolumeFace& face = mVolumeFaces[f]; + + face.resizeVertices(num_verts); + face.resizeIndices(num_indices); + + LLVector4a::memcpyNonAliased16((F32*) face.mPositions, (F32*) pos.get(), num_verts*4*sizeof(F32)); + LLVector4a::memcpyNonAliased16((F32*) face.mNormals, (F32*) norm.get(), num_verts*4*sizeof(F32)); + LLVector4a::memcpyNonAliased16((F32*) face.mTexCoords, (F32*) tc.get(), num_verts*2*sizeof(F32)); + U32 size = (num_indices*2+0xF)&~0xF; + LLVector4a::memcpyNonAliased16((F32*) face.mIndices, (F32*) ind.get(), size); +} + +void LLModel::appendFaces(LLModel *model, LLMatrix4 &transform, LLMatrix4& norm_mat) +{ + if (mVolumeFaces.empty()) + { + setNumVolumeFaces(1); + } + + LLVolumeFace& face = mVolumeFaces[mVolumeFaces.size()-1]; + + + for (S32 i = 0; i < model->getNumFaces(); ++i) + { + face.appendFace(model->getVolumeFace(i), transform, norm_mat); + } + +} + +void LLModel::appendFace(const LLVolumeFace& src_face, std::string src_material, LLMatrix4& mat, LLMatrix4& norm_mat) +{ + S32 rindex = getNumVolumeFaces()-1; + if (rindex == -1 || + mVolumeFaces[rindex].mNumVertices + src_face.mNumVertices >= 65536) + { //empty or overflow will occur, append new face + LLVolumeFace cur_face; + cur_face.appendFace(src_face, mat, norm_mat); + addFace(cur_face); + mMaterialList.push_back(src_material); + } + else + { //append to existing end face + mVolumeFaces.rbegin()->appendFace(src_face, mat, norm_mat); + } +} + +void LLModel::addFace(const LLVolumeFace& face) +{ + if (face.mNumVertices == 0) + { + llerrs << "Cannot add empty face." << llendl; + } + + mVolumeFaces.push_back(face); + + if (mVolumeFaces.size() > MAX_MODEL_FACES) + { + llerrs << "Model prims cannot have more than " << MAX_MODEL_FACES << " faces!" << llendl; + } +} + + +void LLModel::smoothNormals(F32 angle_cutoff) +{ + //smooth normals for all faces by: + // 1 - Create faceted copy of face with no texture coordinates + // 2 - Weld vertices in faceted copy that are shared between triangles with less than "angle_cutoff" difference between normals + // 3 - Generate smoothed set of normals based on welding results + // 4 - Create faceted copy of face with texture coordinates + // 5 - Copy smoothed normals to faceted copy, using closest normal to triangle normal where more than one normal exists for a given position + // 6 - Remove redundant vertices from new faceted (now smooth) copy + + angle_cutoff = cosf(angle_cutoff); + for (U32 j = 0; j < mVolumeFaces.size(); ++j) + { + LLVolumeFace& vol_face = mVolumeFaces[j]; + + //create faceted copy of current face with no texture coordinates (step 1) + LLVolumeFace faceted; + + LLVector4a* src_pos = (LLVector4a*) vol_face.mPositions; + //LLVector4a* src_norm = (LLVector4a*) vol_face.mNormals; + + + //bake out triangles into temporary face, clearing normals and texture coordinates + for (U32 i = 0; i < vol_face.mNumIndices; ++i) + { + U32 idx = vol_face.mIndices[i]; + LLVolumeFace::VertexData v; + v.setPosition(src_pos[idx]); + v.getNormal().clear(); + v.mTexCoord.clear(); + faceted.pushVertex(v); + faceted.pushIndex(i); + } + + //generate normals for temporary face + for (U32 i = 0; i < faceted.mNumIndices; i += 3) + { //for each triangle + U16 i0 = faceted.mIndices[i+0]; + U16 i1 = faceted.mIndices[i+1]; + U16 i2 = faceted.mIndices[i+2]; + + LLVector4a& p0 = faceted.mPositions[i0]; + LLVector4a& p1 = faceted.mPositions[i1]; + LLVector4a& p2 = faceted.mPositions[i2]; + + LLVector4a& n0 = faceted.mNormals[i0]; + LLVector4a& n1 = faceted.mNormals[i1]; + LLVector4a& n2 = faceted.mNormals[i2]; + + LLVector4a lhs, rhs; + lhs.setSub(p1, p0); + rhs.setSub(p2, p0); + + n0.setCross3(lhs, rhs); + n0.normalize3fast(); + n1 = n0; + n2 = n0; + } + + //weld vertices in temporary face, respecting angle_cutoff (step 2) + faceted.optimize(angle_cutoff); + + //generate normals for welded face based on new topology (step 3) + + for (U32 i = 0; i < faceted.mNumVertices; i++) + { + faceted.mNormals[i].clear(); + } + + for (U32 i = 0; i < faceted.mNumIndices; i += 3) + { //for each triangle + U16 i0 = faceted.mIndices[i+0]; + U16 i1 = faceted.mIndices[i+1]; + U16 i2 = faceted.mIndices[i+2]; + + LLVector4a& p0 = faceted.mPositions[i0]; + LLVector4a& p1 = faceted.mPositions[i1]; + LLVector4a& p2 = faceted.mPositions[i2]; + + LLVector4a& n0 = faceted.mNormals[i0]; + LLVector4a& n1 = faceted.mNormals[i1]; + LLVector4a& n2 = faceted.mNormals[i2]; + + LLVector4a lhs, rhs; + lhs.setSub(p1, p0); + rhs.setSub(p2, p0); + + LLVector4a n; + n.setCross3(lhs, rhs); + + n0.add(n); + n1.add(n); + n2.add(n); + } + + //normalize normals and build point map + LLVolumeFace::VertexMapData::PointMap point_map; + + for (U32 i = 0; i < faceted.mNumVertices; ++i) + { + faceted.mNormals[i].normalize3fast(); + + LLVolumeFace::VertexMapData v; + v.setPosition(faceted.mPositions[i]); + v.setNormal(faceted.mNormals[i]); + + point_map[LLVector3(v.getPosition().getF32ptr())].push_back(v); + } + + //create faceted copy of current face with texture coordinates (step 4) + LLVolumeFace new_face; + + //bake out triangles into new face + for (U32 i = 0; i < vol_face.mNumIndices; ++i) + { + U32 idx = vol_face.mIndices[i]; + LLVolumeFace::VertexData v; + v.setPosition(vol_face.mPositions[idx]); + v.setNormal(vol_face.mNormals[idx]); + v.mTexCoord = vol_face.mTexCoords[idx]; + + new_face.pushVertex(v); + new_face.pushIndex(i); + } + + //generate normals for new face + for (U32 i = 0; i < new_face.mNumIndices; i += 3) + { //for each triangle + U16 i0 = new_face.mIndices[i+0]; + U16 i1 = new_face.mIndices[i+1]; + U16 i2 = new_face.mIndices[i+2]; + + LLVector4a& p0 = new_face.mPositions[i0]; + LLVector4a& p1 = new_face.mPositions[i1]; + LLVector4a& p2 = new_face.mPositions[i2]; + + LLVector4a& n0 = new_face.mNormals[i0]; + LLVector4a& n1 = new_face.mNormals[i1]; + LLVector4a& n2 = new_face.mNormals[i2]; + + LLVector4a lhs, rhs; + lhs.setSub(p1, p0); + rhs.setSub(p2, p0); + + n0.setCross3(lhs, rhs); + n0.normalize3fast(); + n1 = n0; + n2 = n0; + } + + //swap out normals in new_face with best match from point map (step 5) + for (U32 i = 0; i < new_face.mNumVertices; ++i) + { + //LLVolumeFace::VertexData v = new_face.mVertices[i]; + + LLVector4a ref_norm = new_face.mNormals[i]; + + LLVolumeFace::VertexMapData::PointMap::iterator iter = point_map.find(LLVector3(new_face.mPositions[i].getF32ptr())); + + if (iter != point_map.end()) + { + F32 best = -2.f; + for (U32 k = 0; k < iter->second.size(); ++k) + { + 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) + { + best = cur; + new_face.mNormals[i] = n; + } + } + } + } + + //remove redundant vertices from new face (step 6) + new_face.optimize(); + + mVolumeFaces[j] = new_face; + } +} + +//static +std::string LLModel::getElementLabel(daeElement *element) +{ // try to get a decent label for this element + // if we have a name attribute, use it + std::string name = element->getAttribute("name"); + if (name.length()) + { + return name; + } + + // if we have an ID attribute, use it + if (element->getID()) + { + return std::string(element->getID()); + } + + // if we have a parent, use it + daeElement* parent = element->getParent(); + if (parent) + { + // if parent has a name, use it + std::string name = parent->getAttribute("name"); + if (name.length()) + { + return name; + } + + // if parent has an ID, use it + if (parent->getID()) + { + return std::string(parent->getID()); + } + } + + // try to use our type + daeString element_name = element->getElementName(); + if (element_name) + { + return std::string(element_name); + } + + // if all else fails, use "object" + return std::string("object"); +} + +//static +LLModel* LLModel::loadModelFromDae(std::string filename) +{ + LLVolumeParams volume_params; + volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE); + LLModel* ret = new LLModel(volume_params, 0.f); + ret->createVolumeFacesFromFile(filename); + return ret; +} + +//static +LLModel* LLModel::loadModelFromDomMesh(domMesh *mesh) +{ + LLVolumeParams volume_params; + volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE); + LLModel* ret = new LLModel(volume_params, 0.f); + ret->createVolumeFacesFromDomMesh(mesh); + ret->mLabel = getElementLabel(mesh); + return ret; +} + +//static +LLSD LLModel::writeModel(std::string filename, LLModel* physics, LLModel* high, LLModel* medium, LLModel* low, LLModel* impostor, LLModel::physics_shape& decomp, BOOL nowrite) +{ + std::ofstream os(filename.c_str(), std::ofstream::out | std::ofstream::binary); + + LLSD header = writeModel(os, physics, high, medium, low, impostor, decomp, nowrite); + + os.close(); + + return header; +} + +//static +LLSD LLModel::writeModel(std::ostream& ostr, LLModel* physics, LLModel* high, LLModel* medium, LLModel* low, LLModel* impostor, LLModel::physics_shape& decomp, BOOL nowrite) +{ + LLSD mdl; + + LLModel* model[] = + { + impostor, + low, + medium, + high, + physics + }; + + bool skinning = high && !high->mSkinWeights.empty(); + + if (skinning) + { //write skinning block + if (high->mJointList.size() != high->mInvBindMatrix.size()) + { + llerrs << "WTF?" << llendl; + } + + for (U32 i = 0; i < high->mJointList.size(); ++i) + { + mdl["skin"]["joint_names"][i] = high->mJointList[i]; + + for (U32 j = 0; j < 4; j++) + { + for (U32 k = 0; k < 4; k++) + { + mdl["skin"]["inverse_bind_matrix"][i][j*4+k] = high->mInvBindMatrix[i].mMatrix[j][k]; + } + } + } + + for (U32 i = 0; i < 4; i++) + { + for (U32 j = 0; j < 4; j++) + { + mdl["skin"]["bind_shape_matrix"][i*4+j] = high->mBindShapeMatrix.mMatrix[i][j]; + } + } + } + + if (!decomp.empty()) + { + //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 + + //get minimum and maximum + LLVector3 min = decomp[0][0]; + LLVector3 max = min; + + LLSD::Binary hulls(decomp.size()); + + U32 total = 0; + + for (U32 i = 0; i < decomp.size(); ++i) + { + U32 size = decomp[i].size(); + total += size; + hulls[i] = (U8) size; + + for (U32 j = 0; j < decomp[i].size(); ++j) + { + update_min_max(min, max, decomp[i][j]); + } + } + + mdl["decomposition"]["Min"] = min.getValue(); + mdl["decomposition"]["Max"] = max.getValue(); + mdl["decomposition"]["HullList"] = hulls; + + LLSD::Binary p(total*3*2); + + LLVector3 range = max-min; + + U32 vert_idx = 0; + for (U32 i = 0; i < decomp.size(); ++i) + { + for (U32 j = 0; j < decomp[i].size(); ++j) + { + for (U32 k = 0; k < 3; k++) + { + //convert to 16-bit normalized across domain + U16 val = (U16) (((decomp[i][j].mV[k]-min.mV[k])/range.mV[k])*65535); + + U8* buff = (U8*) &val; + //write to binary buffer + p[vert_idx++] = buff[0]; + p[vert_idx++] = buff[1]; + + if (vert_idx > p.size()) + { + llerrs << "WTF?" << llendl; + } + } + } + } + + mdl["decomposition"]["Position"] = p; + } + + for (U32 idx = 0; idx < MODEL_NAMES_LENGTH; ++idx) + { + if (model[idx] && model[idx]->getNumVolumeFaces() > 0) + { + LLVector3 min_pos = LLVector3(model[idx]->getVolumeFace(0).mPositions[0].getF32ptr()); + LLVector3 max_pos = min_pos; + + //find position domain + for (S32 i = 0; i < model[idx]->getNumVolumeFaces(); ++i) + { //for each face + const LLVolumeFace& face = model[idx]->getVolumeFace(i); + for (U32 j = 0; j < face.mNumVertices; ++j) + { + update_min_max(min_pos, max_pos, face.mPositions[j].getF32ptr()); + } + } + + LLVector3 pos_range = max_pos - min_pos; + + for (S32 i = 0; i < model[idx]->getNumVolumeFaces(); ++i) + { //for each face + const LLVolumeFace& face = model[idx]->getVolumeFace(i); + if (!face.mNumVertices) + { //don't export an empty face + continue; + } + LLSD::Binary verts(face.mNumVertices*3*2); + LLSD::Binary tc(face.mNumVertices*2*2); + LLSD::Binary normals(face.mNumVertices*3*2); + LLSD::Binary indices(face.mNumIndices*2); + + U32 vert_idx = 0; + U32 norm_idx = 0; + U32 tc_idx = 0; + + LLVector2* ftc = (LLVector2*) face.mTexCoords; + LLVector2 min_tc = ftc[0]; + LLVector2 max_tc = min_tc; + + //get texture coordinate domain + for (U32 j = 0; j < face.mNumVertices; ++j) + { + update_min_max(min_tc, max_tc, ftc[j]); + } + + LLVector2 tc_range = max_tc - min_tc; + + for (U32 j = 0; j < face.mNumVertices; ++j) + { //for each vert + + F32* pos = face.mPositions[j].getF32ptr(); + F32* norm = face.mNormals[j].getF32ptr(); + + //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); + + U8* buff = (U8*) &val; + //write to binary buffer + verts[vert_idx++] = buff[0]; + verts[vert_idx++] = buff[1]; + + //convert to 16-bit normalized + val = (U16) ((norm[k]+1.f)*0.5f*65535); + + //write to binary buffer + normals[norm_idx++] = buff[0]; + normals[norm_idx++] = buff[1]; + } + + F32* src_tc = (F32*) face.mTexCoords[j].mV; + + //texcoord + for (U32 k = 0; k < 2; ++k) + { //for each component + //convert to 16-bit normalized + U16 val = (U16) ((src_tc[k]-min_tc.mV[k])/tc_range.mV[k]*65535); + + U8* buff = (U8*) &val; + //write to binary buffer + tc[tc_idx++] = buff[0]; + tc[tc_idx++] = buff[1]; + } + + } + + U32 idx_idx = 0; + for (U32 j = 0; j < face.mNumIndices; ++j) + { + U8* buff = (U8*) &(face.mIndices[j]); + indices[idx_idx++] = buff[0]; + indices[idx_idx++] = buff[1]; + } + + //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(); + + mdl[model_names[idx]][i]["Position"] = verts; + mdl[model_names[idx]][i]["Normal"] = normals; + mdl[model_names[idx]][i]["TexCoord0"] = tc; + mdl[model_names[idx]][i]["TriangleList"] = indices; + + if (skinning) + { + //write out skin weights + + //each influence list entry is up to 4 24-bit values + // first 8 bits is bone index + // last 16 bits is bone influence weight + // a bone index of 0xFF signifies no more influences for this vertex + + std::stringstream ostr; + + for (U32 j = 0; j < face.mNumVertices; ++j) + { + LLVector3 pos(face.mPositions[j].getF32ptr()); + + 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) + { + if (iter->mJointIdx < 255 && iter->mJointIdx >= 0) + { + U8 idx = (U8) iter->mJointIdx; + ostr.write((const char*) &idx, 1); + + U16 influence = (U16) (iter->mWeight*65535); + ostr.write((const char*) &influence, 2); + + ++count; + } + } + U8 end_list = 0xFF; + if (count < 4) + { + ostr.write((const char*) &end_list, 1); + } + } + + //copy ostr to binary buffer + std::string data = ostr.str(); + const U8* buff = (U8*) data.data(); + U32 bytes = data.size(); + + LLSD::Binary w(bytes); + for (U32 j = 0; j < bytes; ++j) + { + w[j] = buff[j]; + } + + mdl[model_names[idx]][i]["Weights"] = w; + } + } + } + } + + return writeModelToStream(ostr, mdl, nowrite); +} + +LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite) +{ + U32 bytes = 0; + + std::string::size_type cur_offset = 0; + + LLSD header; + + std::string skin; + + if (mdl.has("skin")) + { //write out skin block + skin = zip_llsd(mdl["skin"]); + + U32 size = skin.size(); + if (size > 0) + { + header["skin"]["offset"] = (LLSD::Integer) cur_offset; + header["skin"]["size"] = (LLSD::Integer) size; + cur_offset += size; + bytes += size; + } + else + { + llerrs << "WTF?" << llendl; + } + } + + std::string decomposition; + + if (mdl.has("decomposition")) + { //write out convex decomposition + decomposition = zip_llsd(mdl["decomposition"]); + + U32 size = decomposition.size(); + if (size > 0) + { + header["decomposition"]["offset"] = (LLSD::Integer) cur_offset; + header["decomposition"]["size"] = (LLSD::Integer) size; + cur_offset += size; + bytes += size; + } + } + + std::string out[MODEL_NAMES_LENGTH]; + + for (S32 i = 0; i < MODEL_NAMES_LENGTH; i++) + { + if (mdl.has(model_names[i])) + { + out[i] = zip_llsd(mdl[model_names[i]]); + + U32 size = out[i].size(); + + header[model_names[i]]["offset"] = (LLSD::Integer) cur_offset; + header[model_names[i]]["size"] = (LLSD::Integer) size; + cur_offset += size; + bytes += size; + } + else + { + header[model_names[i]]["offset"] = -1; + header[model_names[i]]["size"] = 0; + } + } + + if (!nowrite) + { + LLSDSerialize::serialize(header, ostr, LLSDSerialize::LLSD_BINARY); + + if (!skin.empty()) + { //write skin block + ostr.write((const char*) skin.data(), header["skin"]["size"].asInteger()); + } + + if (!decomposition.empty()) + { //write decomposition block + ostr.write((const char*) decomposition.data(), header["decomposition"]["size"].asInteger()); + } + + for (S32 i = 0; i < MODEL_NAMES_LENGTH; i++) + { + if (!out[i].empty()) + { + ostr.write((const char*) out[i].data(), header[model_names[i]]["size"].asInteger()); + } + } + } + + return header; +} + +//static +LLModel* LLModel::loadModelFromAsset(std::string filename, S32 lod) +{ + return NULL; +} + +LLModel::weight_list& LLModel::getJointInfluences(const LLVector3& pos) +{ + weight_map::iterator iter = mSkinWeights.find(pos); + + if (iter != mSkinWeights.end()) + { + if ((iter->first - pos).magVec() > 0.1f) + { + llerrs << "WTF?" << llendl; + } + + return iter->second; + } + else + { //no exact match found, get closest point + iter = mSkinWeights.begin(); + weight_map::iterator best = iter; + + F32 min_dist = (iter->first - pos).magVecSquared(); + + while (++iter != mSkinWeights.end()) + { + F32 dist = (iter->first - pos).magVecSquared(); + if (dist < min_dist) + { + best = iter; + min_dist = dist; + } + } + + return best->second; + } +} + +#endif + diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h new file mode 100644 index 0000000000..a91c80d5b7 --- /dev/null +++ b/indra/llprimitive/llmodel.h @@ -0,0 +1,179 @@ +/** + * @file llmodel.h + * @brief Model handling class definitions + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLMODEL_H +#define LL_LLMODEL_H + +#include "llvolume.h" +#include "v4math.h" +#include "m4math.h" + +#if LL_MESH_ENABLED + +class daeElement; +class domMesh; + +#define MAX_MODEL_FACES 8 + +class LLModel : public LLVolume +{ +public: + + enum + { + LOD_IMPOSTOR = 0, + LOD_LOW, + LOD_MEDIUM, + LOD_HIGH, + LOD_PHYSICS, + NUM_LODS + }; + + //physics shape is a vector of convex hulls + //each convex hull is a set of points + typedef std::vector > physics_shape; + + LLModel(LLVolumeParams& params, F32 detail); + static LLSD writeModel(std::string filename, LLModel* physics, LLModel* high, LLModel* medium, LLModel* low, LLModel* imposotr, LLModel::physics_shape& physics_shape, BOOL nowrite = FALSE); + static LLSD writeModel(std::ostream& ostr, LLModel* physics, LLModel* high, LLModel* medium, LLModel* low, LLModel* imposotr, LLModel::physics_shape& physics_shape, BOOL nowrite = FALSE); + static LLSD writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite = FALSE); + static LLModel* loadModelFromAsset(std::string filename, S32 lod); + static LLModel* loadModelFromDae(std::string filename); + static LLModel* loadModelFromDomMesh(domMesh* mesh); + static std::string getElementLabel(daeElement* element); + + void appendFaces(LLModel* model, LLMatrix4& transform, LLMatrix4& normal_transform); + void appendFace(const LLVolumeFace& src_face, std::string src_material, LLMatrix4& mat, LLMatrix4& norm_mat); + + void setNumVolumeFaces(S32 count); + void setVolumeFaceData(S32 f, + LLStrider pos, + LLStrider norm, + LLStrider tc, + LLStrider ind, + U32 num_verts, + U32 num_indices); + + void smoothNormals(F32 angle_cutoff); + + void addFace(const LLVolumeFace& face); + + void normalizeVolumeFaces(); + void optimizeVolumeFaces(); + + + U32 getResourceCost(); + void getNormalizedScaleTranslation(LLVector3& scale_out, LLVector3& translation_out); + std::vector mMaterialList; + + //data used for skin weights + class JointWeight + { + public: + S32 mJointIdx; + F32 mWeight; + + JointWeight() + { + mJointIdx = 0; + mWeight = 0.f; + } + + JointWeight(S32 idx, F32 weight) + : mJointIdx(idx), mWeight(weight) + { + } + + bool operator<(const JointWeight& rhs) const + { + if (mWeight == rhs.mWeight) + { + return mJointIdx < rhs.mJointIdx; + } + + return mWeight < rhs.mWeight; + } + + }; + + struct CompareWeightGreater + { + bool operator()(const JointWeight& lhs, const JointWeight& rhs) + { + return rhs < lhs; // strongest = first + } + }; + + //copy of position array for this model -- mPosition[idx].mV[X,Y,Z] + std::vector mPosition; + + //map of positions to skin weights --- mSkinWeights[pos].mV[0..4] == . + //joint_index corresponds to mJointList + typedef std::vector weight_list; + typedef std::map weight_map; + weight_map mSkinWeights; + + //get list of weight influences closest to given position + weight_list& getJointInfluences(const LLVector3& pos); + + //should always be true that mJointList[mJointMap["foo"]] == "foo" + + //map of joint names to joint index + std::map mJointMap; + + //list of joint names + std::vector mJointList; + + LLMatrix4 mBindShapeMatrix; + std::vector mInvBindMatrix; + + std::string mLabel; + + LLVector3 mNormalizedScale; + LLVector3 mNormalizedTranslation; + + //physics shape + physics_shape mPhysicsShape; + + LLVector3 mPhysicsCenter; + std::vector mHullCenter; + U32 mPhysicsPoints; + +protected: + void addVolumeFacesFromDomMesh(domMesh* mesh); + virtual BOOL createVolumeFacesFromFile(const std::string& file_name); + virtual BOOL createVolumeFacesFromDomMesh(domMesh *mesh); +}; + + +#endif + +#endif //LL_LLMODEL_H diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl new file mode 100644 index 0000000000..eef6556fba --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl @@ -0,0 +1,30 @@ +/** + * @file objectSkinV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#version 120 + +attribute vec4 object_weight; + +uniform mat4 matrixPalette[64]; + +mat4 getObjectSkinnedTransform() +{ + int i; + + vec4 w = fract(object_weight); + vec4 index = floor(object_weight); + + float scale = 1.0/(w.x+w.y+w.z+w.w); + w *= scale; + + mat4 mat = matrixPalette[int(index.x)]*w.x; + mat += matrixPalette[int(index.y)]*w.y; + mat += matrixPalette[int(index.z)]*w.z; + mat += matrixPalette[int(index.w)]*w.w; + + return mat; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl new file mode 100644 index 0000000000..fde0e97713 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl @@ -0,0 +1,75 @@ +/** + * @file alphaSkinnedV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); +mat4 getObjectSkinnedTransform(); +void calcAtmospherics(vec3 inPositionEye); + +float calcDirectionalLight(vec3 n, vec3 l); +float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight); + +vec3 atmosAmbient(vec3 light); +vec3 atmosAffectDirectionalLight(float lightIntensity); +vec3 scaleDownLight(vec3 light); +vec3 scaleUpLight(vec3 light); + +varying vec3 vary_position; +varying vec3 vary_ambient; +varying vec3 vary_directional; +varying vec3 vary_normal; +varying vec3 vary_light; + +void main() +{ + gl_TexCoord[0] = gl_MultiTexCoord0; + + vec4 pos; + vec3 norm; + + mat4 trans = getObjectSkinnedTransform(); + trans = gl_ModelViewMatrix * trans; + + pos = trans * gl_Vertex; + + norm = gl_Vertex.xyz + gl_Normal.xyz; + norm = normalize(( trans*vec4(norm, 1.0) ).xyz-pos.xyz); + + gl_Position = gl_ProjectionMatrix * pos; + + vary_position = pos.xyz; + vary_normal = norm; + + calcAtmospherics(pos.xyz); + + vec4 col = vec4(0.0, 0.0, 0.0, gl_Color.a); + + // Collect normal lights (need to be divided by two, as we later multiply by 2) + col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].spotDirection.xyz, gl_LightSource[2].linearAttenuation, gl_LightSource[2].specular.a); + col.rgb += gl_LightSource[3].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[3].position, gl_LightSource[3].spotDirection.xyz, gl_LightSource[3].linearAttenuation, gl_LightSource[3].specular.a); + col.rgb += gl_LightSource[4].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[4].position, gl_LightSource[4].spotDirection.xyz, gl_LightSource[4].linearAttenuation, gl_LightSource[4].specular.a); + col.rgb += gl_LightSource[5].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[5].position, gl_LightSource[5].spotDirection.xyz, gl_LightSource[5].linearAttenuation, gl_LightSource[5].specular.a); + col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].spotDirection.xyz, gl_LightSource[6].linearAttenuation, gl_LightSource[6].specular.a); + col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].spotDirection.xyz, gl_LightSource[7].linearAttenuation, gl_LightSource[7].specular.a); + col.rgb += gl_LightSource[1].diffuse.rgb*calcDirectionalLight(norm, gl_LightSource[1].position.xyz); + col.rgb = scaleDownLight(col.rgb); + + // Add windlight lights + col.rgb += atmosAmbient(vec3(0.)); + + vary_light = gl_LightSource[0].position.xyz; + + vary_ambient = col.rgb*gl_Color.rgb; + vary_directional = gl_Color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-gl_Color.a)*(1.0-gl_Color.a))); + + col.rgb = min(col.rgb*gl_Color.rgb, 1.0); + + gl_FrontColor = col; + + gl_FogFragCoord = pos.z; +} + + diff --git a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl new file mode 100644 index 0000000000..085ffddeec --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl @@ -0,0 +1,16 @@ +/** + * @file avatarShadowF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +uniform sampler2D diffuseMap; + + +void main() +{ + //gl_FragColor = vec4(1,1,1,gl_Color.a * texture2D(diffuseMap, gl_TexCoord[0].xy).a); + gl_FragColor = vec4(1,1,1,1); +} + diff --git a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl new file mode 100644 index 0000000000..1626e21cd8 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl @@ -0,0 +1,25 @@ +/** + * @file diffuseSkinnedV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#version 120 + +mat4 getObjectSkinnedTransform(); + +void main() +{ + //transform vertex + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + + mat4 mat = getObjectSkinnedTransform(); + + mat = gl_ModelViewMatrix * mat; + vec3 pos = (mat*gl_Vertex).xyz; + + gl_FrontColor = gl_Color; + + gl_Position = gl_ProjectionMatrix*vec4(pos, 1.0); +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl new file mode 100644 index 0000000000..d884f2e4a5 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl @@ -0,0 +1,37 @@ +/** + * @file bumpV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#version 120 + +varying vec3 vary_mat0; +varying vec3 vary_mat1; +varying vec3 vary_mat2; + +mat4 getObjectSkinnedTransform(); + +void main() +{ + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + + mat4 mat = getObjectSkinnedTransform(); + + mat = gl_ModelViewMatrix * mat; + + vec3 pos = (mat*gl_Vertex).xyz; + + + vec3 n = normalize((mat * vec4(gl_Normal.xyz+gl_Vertex.xyz, 1.0)).xyz-pos.xyz); + vec3 b = normalize((mat * vec4(gl_MultiTexCoord2.xyz+gl_Vertex.xyz, 1.0)).xyz-pos.xyz); + vec3 t = cross(b, n); + + vary_mat0 = vec3(t.x, b.x, n.x); + vary_mat1 = vec3(t.y, b.y, n.y); + vary_mat2 = vec3(t.z, b.z, n.z); + + gl_Position = gl_ProjectionMatrix*vec4(pos, 1.0); + gl_FrontColor = gl_Color; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl new file mode 100644 index 0000000000..9a45c03237 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl @@ -0,0 +1,33 @@ +/** + * @file diffuseSkinnedV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#version 120 + +varying vec3 vary_normal; + +mat4 getObjectSkinnedTransform(); + +void main() +{ + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + + mat4 mat = getObjectSkinnedTransform(); + + mat = gl_ModelViewMatrix * mat; + vec3 pos = (mat*gl_Vertex).xyz; + + vec4 norm = gl_Vertex; + norm.xyz += gl_Normal.xyz; + norm.xyz = (mat*norm).xyz; + norm.xyz = normalize(norm.xyz-pos.xyz); + + vary_normal = norm.xyz; + + gl_FrontColor = gl_Color; + + gl_Position = gl_ProjectionMatrix*vec4(pos, 1.0); +} diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl new file mode 100644 index 0000000000..4cde013eef --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl @@ -0,0 +1,15 @@ +/** + * @file lightFullbrightShinyWaterF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + + +uniform sampler2D diffuseMap; +uniform samplerCube environmentMap; + +void fullbright_shiny_lighting_water() +{ + gl_FragColor = texture2D(diffuseMap, gl_TexCoord[0].xy); +} diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl new file mode 100644 index 0000000000..f0baeeeee5 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl @@ -0,0 +1,39 @@ +/** + * @file shinySimpleSkinnedV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#version 120 + +void calcAtmospherics(vec3 inPositionEye); +mat4 getObjectSkinnedTransform(); + +attribute vec4 object_weight; + +void main() +{ + mat4 mat = getObjectSkinnedTransform(); + + mat = gl_ModelViewMatrix * mat; + vec3 pos = (mat*gl_Vertex).xyz; + + vec4 norm = gl_Vertex; + norm.xyz += gl_Normal.xyz; + norm.xyz = (mat*norm).xyz; + norm.xyz = normalize(norm.xyz-pos.xyz); + + vec3 ref = reflect(pos.xyz, -norm.xyz); + + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + gl_TexCoord[1] = gl_TextureMatrix[1]*vec4(ref,1.0); + + calcAtmospherics(pos.xyz); + + gl_FrontColor = gl_Color; + + gl_Position = gl_ProjectionMatrix*vec4(pos, 1.0); + + gl_FogFragCoord = pos.z; +} diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl new file mode 100644 index 0000000000..5e6e4c16b7 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl @@ -0,0 +1,13 @@ +/** + * @file fullbrightShinyWaterF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +void fullbright_shiny_lighting_water(); + +void main() +{ + fullbright_shiny_lighting_water(); +} diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl new file mode 100644 index 0000000000..02ff3cc2a9 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl @@ -0,0 +1,37 @@ +/** + * @file fullbrightSkinnedV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#version 120 + +void calcAtmospherics(vec3 inPositionEye); +mat4 getObjectSkinnedTransform(); + +attribute vec4 object_weight; + +void main() +{ + //transform vertex + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + + mat4 mat = getObjectSkinnedTransform(); + + mat = gl_ModelViewMatrix * mat; + vec3 pos = (mat*gl_Vertex).xyz; + + vec4 norm = gl_Vertex; + norm.xyz += gl_Normal.xyz; + norm.xyz = (mat*norm).xyz; + norm.xyz = normalize(norm.xyz-pos.xyz); + + calcAtmospherics(pos.xyz); + + gl_FrontColor = gl_Color; + + gl_Position = gl_ProjectionMatrix*vec4(pos, 1.0); + + gl_FogFragCoord = pos.z; +} diff --git a/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl new file mode 100644 index 0000000000..4146646058 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl @@ -0,0 +1,39 @@ +/** + * @file shinySimpleSkinnedV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#version 120 + +vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); +void calcAtmospherics(vec3 inPositionEye); +mat4 getObjectSkinnedTransform(); + +attribute vec4 object_weight; + +void main() +{ + mat4 mat = getObjectSkinnedTransform(); + + mat = gl_ModelViewMatrix * mat; + vec3 pos = (mat*gl_Vertex).xyz; + + vec4 norm = gl_Vertex; + norm.xyz += gl_Normal.xyz; + norm.xyz = (mat*norm).xyz; + norm.xyz = normalize(norm.xyz-pos.xyz); + + vec3 ref = reflect(pos.xyz, -norm.xyz); + + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + gl_TexCoord[1] = gl_TextureMatrix[1]*vec4(ref,1.0); + + calcAtmospherics(pos.xyz); + + vec4 color = calcLighting(pos.xyz, norm.xyz, gl_Color, vec4(0.)); + gl_FrontColor = color; + + gl_Position = gl_ProjectionMatrix*vec4(pos, 1.0); +} diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl new file mode 100644 index 0000000000..59944b8861 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl @@ -0,0 +1,39 @@ +/** + * @file simpleV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#version 120 + +vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); +void calcAtmospherics(vec3 inPositionEye); +mat4 getObjectSkinnedTransform(); + +attribute vec4 object_weight; + +void main() +{ + //transform vertex + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + + mat4 mat = getObjectSkinnedTransform(); + + mat = gl_ModelViewMatrix * mat; + vec3 pos = (mat*gl_Vertex).xyz; + + vec4 norm = gl_Vertex; + norm.xyz += gl_Normal.xyz; + norm.xyz = (mat*norm).xyz; + norm.xyz = normalize(norm.xyz-pos.xyz); + + calcAtmospherics(pos.xyz); + + vec4 color = calcLighting(pos.xyz, norm.xyz, gl_Color, vec4(0.)); + gl_FrontColor = color; + + gl_Position = gl_ProjectionMatrix*vec4(pos, 1.0); + + gl_FogFragCoord = pos.z; +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl new file mode 100644 index 0000000000..dc4663677b --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl @@ -0,0 +1,84 @@ +/** + * @file alphaSkinnedV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); +void calcAtmospherics(vec3 inPositionEye); + +float calcDirectionalLight(vec3 n, vec3 l); +float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight); +mat4 getObjectSkinnedTransform(); +vec3 atmosAmbient(vec3 light); +vec3 atmosAffectDirectionalLight(float lightIntensity); +vec3 scaleDownLight(vec3 light); +vec3 scaleUpLight(vec3 light); + +varying vec3 vary_ambient; +varying vec3 vary_directional; +varying vec3 vary_fragcoord; +varying vec3 vary_position; +varying vec3 vary_light; + +uniform float near_clip; +uniform float shadow_offset; +uniform float shadow_bias; + +void main() +{ + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + + mat4 mat = getObjectSkinnedTransform(); + + mat = gl_ModelViewMatrix * mat; + + vec3 pos = (mat*gl_Vertex).xyz; + + gl_Position = gl_ProjectionMatrix * vec4(pos, 1.0); + + vec4 n = gl_Vertex; + n.xyz += gl_Normal.xyz; + n.xyz = (mat*n).xyz; + n.xyz = normalize(n.xyz-pos.xyz); + + vec3 norm = n.xyz; + + float dp_directional_light = max(0.0, dot(norm, gl_LightSource[0].position.xyz)); + vary_position = pos.xyz + gl_LightSource[0].position.xyz * (1.0-dp_directional_light)*shadow_offset; + + calcAtmospherics(pos.xyz); + + //vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0.)); + vec4 col = vec4(0.0, 0.0, 0.0, gl_Color.a); + + // Collect normal lights (need to be divided by two, as we later multiply by 2) + col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].spotDirection.xyz, gl_LightSource[2].linearAttenuation, gl_LightSource[2].specular.a); + col.rgb += gl_LightSource[3].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[3].position, gl_LightSource[3].spotDirection.xyz, gl_LightSource[3].linearAttenuation, gl_LightSource[3].specular.a); + col.rgb += gl_LightSource[4].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[4].position, gl_LightSource[4].spotDirection.xyz, gl_LightSource[4].linearAttenuation, gl_LightSource[4].specular.a); + col.rgb += gl_LightSource[5].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[5].position, gl_LightSource[5].spotDirection.xyz, gl_LightSource[5].linearAttenuation, gl_LightSource[5].specular.a); + col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].spotDirection.xyz, gl_LightSource[6].linearAttenuation, gl_LightSource[6].specular.a); + col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].spotDirection.xyz, gl_LightSource[7].linearAttenuation, gl_LightSource[7].specular.a); + col.rgb += gl_LightSource[1].diffuse.rgb*calcDirectionalLight(norm, gl_LightSource[1].position.xyz); + col.rgb = scaleDownLight(col.rgb); + + // Add windlight lights + col.rgb += atmosAmbient(vec3(0.)); + + vary_light = gl_LightSource[0].position.xyz; + + vary_ambient = col.rgb*gl_Color.rgb; + vary_directional.rgb = gl_Color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-gl_Color.a)*(1.0-gl_Color.a))); + + col.rgb = min(col.rgb*gl_Color.rgb, 1.0); + + gl_FrontColor = col; + + gl_FogFragCoord = pos.z; + + pos.xyz = (gl_ModelViewProjectionMatrix * gl_Vertex).xyz; + vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip); + +} + diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl new file mode 100644 index 0000000000..eca9a567f6 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl @@ -0,0 +1,29 @@ +/** + * @file lightFullbrightShinyWaterF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +uniform sampler2D diffuseMap; +uniform samplerCube environmentMap; + +vec3 fullbrightShinyAtmosTransport(vec3 light); +vec3 fullbrightScaleSoftClip(vec3 light); +vec4 applyWaterFog(vec4 color); + +void fullbright_shiny_lighting_water() +{ + vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy); + color.rgb *= gl_Color.rgb; + + vec3 envColor = textureCube(environmentMap, gl_TexCoord[1].xyz).rgb; + color.rgb = mix(color.rgb, envColor.rgb, gl_Color.a); + + color.rgb = fullbrightShinyAtmosTransport(color.rgb); + color.rgb = fullbrightScaleSoftClip(color.rgb); + color.a = max(color.a, gl_Color.a); + + gl_FragColor = applyWaterFog(color); +} + diff --git a/indra/newview/llfloaterimportcollada.cpp b/indra/newview/llfloaterimportcollada.cpp new file mode 100644 index 0000000000..476c02cd46 --- /dev/null +++ b/indra/newview/llfloaterimportcollada.cpp @@ -0,0 +1,1116 @@ +/** + * @file llfloaterimportcollada.cpp + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llfloaterimportcollada.h" + +#include "dae.h" +//#include "dom.h" +#include "dom/domAsset.h" +#include "dom/domBind_material.h" +#include "dom/domConstants.h" +#include "dom/domEffect.h" +#include "dom/domGeometry.h" +#include "dom/domInstance_geometry.h" +#include "dom/domInstance_material.h" +#include "dom/domInstance_node.h" +#include "dom/domInstance_effect.h" +#include "dom/domMaterial.h" +#include "dom/domMatrix.h" +#include "dom/domNode.h" +#include "dom/domProfile_COMMON.h" +#include "dom/domRotate.h" +#include "dom/domScale.h" +#include "dom/domTranslate.h" +#include "dom/domVisual_scene.h" + +#include "llagent.h" +#include "llassetuploadresponders.h" +#include "lleconomy.h" +#include "llfloaterperms.h" +#include "llfloaterreg.h" +#include "llsdutil.h" +#include "llsdutil_math.h" +#include "llselectmgr.h" +#include "llvfile.h" +#include "llvfs.h" +#include "llviewermenufile.h" +#include "llviewerregion.h" +#include "llvolumemessage.h" +#include "llmodel.h" +#include "llmeshreduction.h" +#include "material_codes.h" + +// +// floater +// + +#if LL_MESH_ENABLED + +LLFloaterImportCollada::LLFloaterImportCollada(const LLSD& key) + : LLFloater(key) +{ +} + + +BOOL LLFloaterImportCollada::postBuild() +{ + if (!LLFloater::postBuild()) + { + return FALSE; + } + + childSetCommitCallback("ok", LLImportCollada::onCommitOK, this); + childSetCommitCallback("cancel", LLImportCollada::onCommitCancel, this); + + setStatusIdle(); + setAssetCount(0,0); + enableOK(TRUE); + + return TRUE; +} + + +void LLFloaterImportCollada::setAssetCount(S32 mesh_count, S32 texture_count) +{ + childSetTextArg("mesh count", "[COUNT]", llformat("%d", mesh_count)); + childSetTextArg("texture count", "[COUNT]", llformat("%d", texture_count)); +} + +void LLFloaterImportCollada::setStatusAssetUploading(std::string asset_name) +{ + LLUIString uploading = getString("status_uploading"); + uploading.setArg("[NAME]", asset_name); + childSetTextArg("status", "[STATUS]", uploading.getString()); +} + +void LLFloaterImportCollada::setStatusCreatingPrim(std::string prim_name) +{ + LLUIString creating = getString("status_creating"); + creating.setArg("[NAME]", prim_name); + childSetTextArg("status", "[STATUS]", creating.getString()); +} + +void LLFloaterImportCollada::setStatusIdle() +{ + childSetTextArg("status", "[STATUS]", getString("status_idle")); +} + +void LLFloaterImportCollada::enableOK(BOOL enable) +{ + childSetEnabled("ok", enable); +} + + +// +// misc helpers +// + + +// why oh why do forbid matrix multiplication in our llmath library? +LLMatrix4 matrix_multiply(LLMatrix4 a, LLMatrix4 b) +{ + a *= b; + + return a; +} + +// why oh why does colladadom not provide such things? +daeElement* getFirstChild(daeElement* parent) +{ + daeTArray< daeSmartRef > children = parent->getChildren(); + + if (children.getCount() > 0) + { + return children[0]; + } + else + { + return NULL; + } +} + +// why oh why does colladadom not provide such things? +daeElement* getNextSibling(daeElement* child) +{ + daeElement* parent = child->getParent(); + + if (parent == NULL) + { + // must be root, root has no siblings + return NULL; + } + + daeElement* sibling = NULL; + + daeTArray< daeSmartRef > children = parent->getChildren(); + for (S32 i = 0; i < children.getCount(); i++) + { + if (child == children[i]) + { + if ((i+1) < children.getCount()) + { + sibling = children[i+1]; + } + } + } + + return sibling; +} + +// try to get a decent label for this element +std::string getElementLabel(daeElement *element) +{ + // if we have a name attribute, use it + std::string name = element->getAttribute("name"); + if (name.length()) + { + return name; + } + + // if we have an ID attribute, use it + if (element->getID()) + { + return std::string(element->getID()); + } + + // if we have a parent, use it + daeElement* parent = element->getParent(); + if (parent) + { + // if parent has a name, use it + std::string name = parent->getAttribute("name"); + if (name.length()) + { + return name; + } + + // if parent has an ID, use it + if (parent->getID()) + { + return std::string(parent->getID()); + } + } + + // try to use our type + daeString element_name = element->getElementName(); + if (element_name) + { + return std::string(element_name); + } + + // if all else fails, use "object" + return std::string("object"); +} + +LLColor4 getDaeColor(daeElement* element) +{ + LLColor4 value; + domCommon_color_or_texture_type_complexType::domColor* color = + daeSafeCast(element->getDescendant("color")); + if (color) + { + domFx_color_common domfx_color = color->getValue(); + value = LLColor4(domfx_color[0], domfx_color[1], domfx_color[2], domfx_color[3]); + } + + return value; +} + +LLTextureEntry profileToTextureEntry(domProfile_COMMON* material) +{ + LLTextureEntry te; + + te.setID(LLUUID("5748decc-f629-461c-9a36-a35a221fe21f")); // blank texture + daeElement* diffuse = material->getDescendant("diffuse"); + if (diffuse) + { + te.setColor(LLColor3(0.1f, 0.9f, 1.0f)); + + domCommon_color_or_texture_type_complexType::domTexture* texture = + daeSafeCast(diffuse->getDescendant("texture")); + if (texture) + { + domCommon_newparam_type_Array newparams = material->getNewparam_array(); + for (S32 i = 0; i < newparams.getCount(); i++) + { + domFx_surface_common* surface = newparams[i]->getSurface(); + if (surface) + { + domFx_surface_init_common* init = surface->getFx_surface_init_common(); + if (init) + { + domFx_surface_init_from_common_Array init_from = init->getInit_from_array(); + + if (init_from.getCount() > 0) + { + daeElement* image = init_from[0]->getValue().getElement(); + if (image) + { + LLUUID texture_asset = LLImportColladaAssetCache::getInstance()->getAssetForDaeElement(image); + + if (texture_asset.notNull()) + { + te.setID(texture_asset); + te.setColor(LLColor3(1,1,1)); + } + } + } + } + } + } + } + + domCommon_color_or_texture_type_complexType::domColor* color = + daeSafeCast(diffuse->getDescendant("color")); + if (color) + { + domFx_color_common domfx_color = color->getValue(); + LLColor4 value = LLColor4(domfx_color[0], domfx_color[1], domfx_color[2], domfx_color[3]); + te.setColor(value); + } + } + + daeElement* emission = material->getDescendant("emission"); + if (emission) + { + LLColor4 emission_color = getDaeColor(emission); + if (((emission_color[0] + emission_color[1] + emission_color[2]) / 3.0) > 0.25) + { + te.setFullbright(TRUE); + } + } + + return te; +} + +std::vector getMaterials(LLModel* model, domInstance_geometry* instance_geo) +{ + std::vector texture_entries; + for (int i = 0; i < model->mMaterialList.size(); i++) + { + LLTextureEntry texture_entry; + + domInstance_material* instance_mat = NULL; + + domBind_material::domTechnique_common* technique = + daeSafeCast(instance_geo->getDescendant(daeElement::matchType(domBind_material::domTechnique_common::ID()))); + + if (technique) + { + daeTArray< daeSmartRef > inst_materials = technique->getChildrenByType(); + for (int j = 0; j < inst_materials.getCount(); j++) + { + std::string symbol(inst_materials[j]->getSymbol()); + + if (symbol == model->mMaterialList[i]) // found the binding + { + instance_mat = inst_materials[j]; + } + } + } + + if (instance_mat) + { + domMaterial* material = daeSafeCast(instance_mat->getTarget().getElement()); + if (material) + { + domInstance_effect* instance_effect = + daeSafeCast(material->getDescendant(daeElement::matchType(domInstance_effect::ID()))); + if (instance_effect) + { + domEffect* effect = daeSafeCast(instance_effect->getUrl().getElement()); + if (effect) + { + domProfile_COMMON* profile = + daeSafeCast(effect->getDescendant(daeElement::matchType(domProfile_COMMON::ID()))); + if (profile) + { + texture_entry = profileToTextureEntry(profile); + } + } + } + } + } + + texture_entries.push_back(texture_entry); + } + + return texture_entries; +} + +LLTextureEntry instanceGeoToTextureEntry(domInstance_geometry* instance_geo) +{ + LLTextureEntry te; + domInstance_material* instance_mat = + daeSafeCast(instance_geo->getDescendant(daeElement::matchType(domInstance_material::ID()))); + if (instance_mat) + { + } + + return te; +} + + + +// responder for asset uploads +// does all the normal stuff followed by a notification to continue importing +// WARNING - currently unused - TODO +class LLColladaNewAgentInventoryResponder : public LLNewAgentInventoryResponder +{ + LLColladaNewAgentInventoryResponder(const LLSD& post_data, + const LLUUID& vfile_id, + LLAssetType::EType asset_type) + : LLNewAgentInventoryResponder(post_data, vfile_id, asset_type) + { + } + LLColladaNewAgentInventoryResponder(const LLSD& post_data, + const std::string& file_name, + LLAssetType::EType asset_type) + : LLNewAgentInventoryResponder(post_data, file_name, asset_type) + { + } + + virtual void uploadComplete(const LLSD& content) + { + LLNewAgentInventoryResponder::uploadComplete(content); + } + +}; + +BOOL LLImportColladaAssetCache::uploadImageAsset(domImage* image) +{ + // we only support init_from now - embedded data will come later + domImage::domInit_from* init = image->getInit_from(); + if (!init) + { + return FALSE; + } + + std::string filename = cdom::uriToNativePath(init->getValue().str()); + + std::string name = getElementLabel(image); + + LLUUID transaction_id = upload_new_resource(filename, name, std::string(), + 0, LLFolderType::FT_TEXTURE, LLInventoryType::IT_TEXTURE, + LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), + LLFloaterPerms::getEveryonePerms(), + name, NULL, + LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(), NULL); + + if (transaction_id.isNull()) + { + llwarns << "cannot upload " << filename << llendl; + + return FALSE; + } + + mTransactionMap[transaction_id] = image; + + LLFloaterReg::findTypedInstance("import_collada")->setStatusAssetUploading(name); + + return TRUE; +} + + + +// +// asset cache - +// uploads assets and provides a map from collada element to asset +// + + + +BOOL LLImportColladaAssetCache::uploadMeshAsset(domMesh* mesh) +{ + LLPointer model = LLModel::loadModelFromDomMesh(mesh); + + if (model->getNumVolumeFaces() == 0) + { + return FALSE; + } + + // generate LODs + + + std::vector > lods; + lods.push_back(model); + S32 triangle_count = model->getNumTriangles(); + + for (S32 i = 0; i < 4; i++) + { + LLPointer last_model = lods.back(); + + S32 triangle_target = (S32)(triangle_count / pow(3.f, i + 1)); + if (triangle_target > 16) + { + LLMeshReduction reduction; + LLPointer new_model = reduction.reduce(model, triangle_target, LLMeshReduction::TRIANGLE_BUDGET); + lods.push_back(new_model); + } + else + { + lods.push_back(last_model); + } + } + + // write model to temp file + + std::string filename = gDirUtilp->getTempFilename(); + LLModel::writeModel(filename, + lods[4], + lods[0], + lods[1], + lods[2], + lods[3], + lods[4]->mPhysicsShape); + + + // copy file to VFS + + LLTransactionID tid; + tid.generate(); + LLAssetID uuid = tid.makeAssetID(gAgent.getSecureSessionID()); // create asset uuid + + S32 file_size; + LLAPRFile infile ; + infile.open(filename, LL_APR_RB, NULL, &file_size); + + if (infile.getFileHandle()) + { + LLVFile file(gVFS, uuid, LLAssetType::AT_MESH, LLVFile::WRITE); + + file.setMaxSize(file_size); + + const S32 buf_size = 65536; + U8 copy_buf[buf_size]; + while ((file_size = infile.read(copy_buf, buf_size))) + { + file.write(copy_buf, file_size); + } + } + + + std::string name = getElementLabel(mesh); + + upload_new_resource(tid, LLAssetType::AT_MESH, name, std::string(), 0,LLFolderType::FT_MESH, LLInventoryType::IT_MESH, + LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(), + name, NULL, + LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(), NULL); + + LLFile::remove(filename); + + mTransactionMap[uuid] = mesh; + + LLFloaterReg::findTypedInstance("import_collada")->setStatusAssetUploading(name); + + return TRUE; +} + + +// called by the mesh asset upload responder to indicate the mesh asset has been uploaded +void LLImportColladaAssetCache::assetUploaded(LLUUID transaction_uuid, LLUUID asset_uuid, BOOL success) +{ + std::map::iterator i = mTransactionMap.find(transaction_uuid); + + if (i != mTransactionMap.end()) + { + daeElement* element = i->second; + + + if (success) + { + mAssetMap[element] = asset_uuid; + } + else // failure + { + // if failed, put back on end of queue + mUploadsPending.push_back(element); + } + + mUploads--; + uploadNextAsset(); + } +} + +const S32 MAX_CONCURRENT_UPLOADS = 5; + +void LLImportColladaAssetCache::uploadNextAsset() +{ + while ((mUploadsPending.size() > 0) && (mUploads < MAX_CONCURRENT_UPLOADS)) + { + BOOL upload_started = FALSE; + + daeElement* element = mUploadsPending.back(); + mUploadsPending.pop_back(); + + domImage* image = daeSafeCast(element); + if (image) + { + upload_started = uploadImageAsset(image); + } + + domMesh* mesh = daeSafeCast(element); + if (mesh) + { + upload_started = uploadMeshAsset(mesh); + } + + if (upload_started) + { + mUploads++; + } + + } + + if ((mUploadsPending.size() == 0) && (mUploads == 0)) + { + // we're done! notify the importer + LLImportCollada::getInstance()->assetsUploaded(); + } + + updateCount(); +} + + +void LLImportColladaAssetCache::clear() +{ + mDAE = NULL; + mTransactionMap.clear(); + mAssetMap.clear(); + mUploadsPending.clear(); + mUploads = 0; +} + +void LLImportColladaAssetCache::endImport() +{ + clear(); +} + +void LLImportColladaAssetCache::updateCount() +{ + S32 mesh_count = 0; + S32 image_count = 0; + + for (S32 i = 0; i < mUploadsPending.size(); i++) + { + daeElement* element = mUploadsPending[i]; + + if (daeSafeCast(element)) + { + mesh_count++; + } + + if (daeSafeCast(element)) + { + image_count++; + } + } + + LLFloaterReg::findTypedInstance("import_collada")->setAssetCount(mesh_count, image_count); +} + +void LLImportColladaAssetCache::prepareForUpload(DAE* dae) +{ + clear(); + mDAE = dae; + + daeDatabase* db = mDAE->getDatabase(); + + S32 mesh_count = db->getElementCount(NULL, COLLADA_TYPE_MESH); + for (S32 i = 0; i < mesh_count; i++) + { + domMesh* mesh = NULL; + + db->getElement((daeElement**) &mesh, i, NULL, COLLADA_TYPE_MESH); + + mUploadsPending.push_back(mesh); + } + + + S32 image_count = db->getElementCount(NULL, COLLADA_TYPE_IMAGE); + for (S32 i = 0; i < image_count; i++) + { + domImage* image = NULL; + db->getElement((daeElement**) &image, i, NULL, COLLADA_TYPE_IMAGE); + + mUploadsPending.push_back(image); + } + + updateCount(); +} + + +void LLImportColladaAssetCache::uploadAssets() +{ + uploadNextAsset(); +} + + +LLUUID LLImportColladaAssetCache::getAssetForDaeElement(daeElement* element) +{ + LLUUID id; + + std::map::iterator i = mAssetMap.find(element); + if (i != mAssetMap.end()) + { + id = i->second; + } + + return id; +} + + +// +// importer +// + + + +LLImportCollada::LLImportCollada() +{ + mIsImporting = FALSE; +} + + + + +void LLImportCollada::appendObjectAsset(domInstance_geometry* instance_geo) +{ + domGeometry* geo = daeSafeCast(instance_geo->getUrl().getElement()); + if (!geo) + { + llwarns << "cannot find geometry" << llendl; + return; + } + + domMesh* mesh = daeSafeCast(geo->getDescendant(daeElement::matchType(domMesh::ID()))); + if (!mesh) + { + llwarns << "could not find mesh" << llendl; + return; + } + + LLUUID mesh_asset = LLImportColladaAssetCache::getInstance()->getAssetForDaeElement(mesh); + if (mesh_asset.isNull()) + { + llwarns << "no mesh asset, skipping" << llendl; + return; + } + + // load the model + LLModel* model = LLModel::loadModelFromDomMesh(mesh); + + + + + // get our local transformation + LLMatrix4 transformation = mStack.front().transformation; + + // adjust the transformation to compensate for mesh normalization + LLVector3 mesh_scale_vector; + LLVector3 mesh_translation_vector; + model->getNormalizedScaleTranslation(mesh_scale_vector, mesh_translation_vector); + LLMatrix4 mesh_translation; + mesh_translation.setTranslation(mesh_translation_vector); + transformation = matrix_multiply(mesh_translation, transformation); + LLMatrix4 mesh_scale; + mesh_scale.initScale(mesh_scale_vector); + transformation = matrix_multiply(mesh_scale, transformation); + + // check for reflection + BOOL reflected = (transformation.determinant() < 0); + + // compute position + LLVector3 position = LLVector3(0, 0, 0) * transformation; + + // compute scale + LLVector3 x_transformed = LLVector3(1, 0, 0) * transformation - position; + LLVector3 y_transformed = LLVector3(0, 1, 0) * transformation - position; + LLVector3 z_transformed = LLVector3(0, 0, 1) * transformation - position; + F32 x_length = x_transformed.normalize(); + F32 y_length = y_transformed.normalize(); + F32 z_length = z_transformed.normalize(); + LLVector3 scale = LLVector3(x_length, y_length, z_length); + + // adjust for "reflected" geometry + LLVector3 x_transformed_reflected = x_transformed; + if (reflected) + { + x_transformed_reflected *= -1.0; + } + + // compute rotation + LLMatrix3 rotation_matrix; + rotation_matrix.setRows(x_transformed_reflected, y_transformed, z_transformed); + LLQuaternion quat_rotation = rotation_matrix.quaternion(); + quat_rotation.normalize(); // the rotation_matrix might not have been orthoginal. make it so here. + LLVector3 euler_rotation; + quat_rotation.getEulerAngles(&euler_rotation.mV[VX], &euler_rotation.mV[VY], &euler_rotation.mV[VZ]); + + + // + // build parameter block to construct this prim + // + + LLSD object_params; + + // create prim + + // set volume params + LLVolumeParams volume_params; + volume_params.setType( LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE ); + volume_params.setBeginAndEndS( 0.f, 1.f ); + volume_params.setBeginAndEndT( 0.f, 1.f ); + volume_params.setRatio ( 1, 1 ); + volume_params.setShear ( 0, 0 ); + U8 sculpt_type = LL_SCULPT_TYPE_MESH; + if (reflected) + { + sculpt_type |= LL_SCULPT_FLAG_MIRROR; + } + volume_params.setSculptID(mesh_asset, sculpt_type); + object_params["shape"] = volume_params.asLLSD(); + + object_params["material"] = LL_MCODE_WOOD; + + object_params["group-id"] = gAgent.getGroupID(); + object_params["pos"] = ll_sd_from_vector3(position); + object_params["rotation"] = ll_sd_from_quaternion(quat_rotation); + object_params["scale"] = ll_sd_from_vector3(scale); + object_params["name"] = mStack.front().name; + + // load material from dae file + std::vector texture_entries = getMaterials(model, instance_geo); + object_params["facelist"] = LLSD::emptyArray(); + for (int i = 0; i < texture_entries.size(); i++) + { + object_params["facelist"][i] = texture_entries[i].asLLSD(); + } + + // set extra parameters + LLSculptParams sculpt_params; + sculpt_params.setSculptTexture(mesh_asset); + sculpt_params.setSculptType(sculpt_type); + U8 buffer[MAX_OBJECT_PARAMS_SIZE+1]; + LLDataPackerBinaryBuffer dp(buffer, MAX_OBJECT_PARAMS_SIZE); + sculpt_params.pack(dp); + std::vector v(dp.getCurrentSize()); + memcpy(&v[0], buffer, dp.getCurrentSize()); + LLSD extra_parameter; + extra_parameter["extra_parameter"] = sculpt_params.mType; + extra_parameter["param_data"] = v; + object_params["extra_parameters"].append(extra_parameter); + + mObjectList.append(object_params); + + delete model; + + LLFloaterReg::findTypedInstance("import_collada")->setStatusCreatingPrim(mStack.front().name); + + return; +} + +void LLImportCollada::uploadObjectAsset() +{ + LLSD request; + request["objects"] = mObjectList; + + std::string url = gAgent.getRegion()->getCapability("UploadObjectAsset"); + LLHTTPClient::post(url, request, new LLHTTPClient::Responder()); +} + + + +void LLImportCollada::importFile(std::string filename) +{ + if (mIsImporting) + { + llwarns << "Importer already running, import command for " << filename << " ignored" << llendl; + return; + } + + LLFloaterReg::showInstance("import_collada"); + LLFloaterReg::findTypedInstance("import_collada")->enableOK(TRUE); + + + mIsImporting = TRUE; + mDAE = new DAE; + mImportOrigin = gAgent.getPositionAgent() + LLVector3(0, 0, 2); + mSceneTransformation = LLMatrix4(); // identity + mFilename = filename; + mCreates = 0; + mObjectList = LLSD::emptyArray(); + + if (mDAE->open(mFilename) == NULL) + { + llwarns << "cannot open file " << mFilename << llendl; + endImport(); + return; + } + + LLImportColladaAssetCache::getInstance()->prepareForUpload(mDAE); + + return; +} + + +void LLImportCollada::assetsUploaded() +{ + if (!mIsImporting) + { + // weird, we got a callback while not importing. + return; + } + + daeDocument* doc = mDAE->getDoc(mFilename); + if (!doc) + { + llwarns << "can't find internal doc" << llendl; + endImport(); + } + + daeElement* root = doc->getDomRoot(); + if (!root) + { + llwarns << "document has no root" << llendl; + endImport(); + } + + domAsset::domUnit* unit = daeSafeCast(root->getDescendant(daeElement::matchType(domAsset::domUnit::ID()))); + if (unit) + { + mSceneTransformation *= unit->getMeter(); + } + + domUpAxisType up = UPAXISTYPE_Y_UP; // default is Y_UP + domAsset::domUp_axis* up_axis = + daeSafeCast(root->getDescendant(daeElement::matchType(domAsset::domUp_axis::ID()))); + if (up_axis) + { + up = up_axis->getValue(); + } + + if (up == UPAXISTYPE_X_UP) + { + LLMatrix4 rotation; + rotation.initRotation(0.0f, 90.0f * DEG_TO_RAD, 0.0f); + + mSceneTransformation = matrix_multiply(rotation, mSceneTransformation); + } + else if (up == UPAXISTYPE_Y_UP) + { + LLMatrix4 rotation; + rotation.initRotation(90.0f * DEG_TO_RAD, 0.0f, 0.0f); + + mSceneTransformation = matrix_multiply(rotation, mSceneTransformation); + } + // else Z_UP, which is our behavior + + + + daeElement* scene = root->getDescendant("visual_scene"); + if (!scene) + { + llwarns << "document has no visual_scene" << llendl; + endImport(); + } + + processElement(scene); + processNextElement(); +} + +void LLImportCollada::pushStack(daeElement* next_element, std::string name, LLMatrix4 transformation) +{ + struct StackState new_state; + + new_state.next_element = next_element; + new_state.name = name; + new_state.transformation = transformation; + + mStack.push_front(new_state); +} + + + +void LLImportCollada::popStack() +{ + mStack.pop_front(); +} + + + +BOOL LLImportCollada::processElement(daeElement* element) +{ + if (mStack.size() > 0) + { + mStack.front().next_element = getNextSibling(element); + } + + domTranslate* translate = daeSafeCast(element); + if (translate) + { + domFloat3 dom_value = translate->getValue(); + + LLMatrix4 translation; + translation.setTranslation(LLVector3(dom_value[0], dom_value[1], dom_value[2])); + + mStack.front().transformation = matrix_multiply(translation, mStack.front().transformation); + } + + domRotate* rotate = daeSafeCast(element); + if (rotate) + { + domFloat4 dom_value = rotate->getValue(); + + LLMatrix4 rotation; + rotation.initRotTrans(dom_value[3] * DEG_TO_RAD, LLVector3(dom_value[0], dom_value[1], dom_value[2]), LLVector3(0, 0, 0)); + + mStack.front().transformation = matrix_multiply(rotation, mStack.front().transformation); + } + + domScale* scale = daeSafeCast(element); + if (scale) + { + domFloat3 dom_value = scale->getValue(); + + LLMatrix4 scaling; + scaling.initScale(LLVector3(dom_value[0], dom_value[1], dom_value[2])); + + mStack.front().transformation = matrix_multiply(scaling, mStack.front().transformation); + } + + domMatrix* matrix = daeSafeCast(element); + if (matrix) + { + domFloat4x4 dom_value = matrix->getValue(); + + LLMatrix4 matrix_transform; + + for (int i = 0; i < 4; i++) + for(int j = 0; j < 4; j++) + { + matrix_transform.mMatrix[i][j] = dom_value[i + j*4]; + } + + mStack.front().transformation = matrix_multiply(matrix_transform, mStack.front().transformation); + } + + domInstance_geometry* instance_geo = daeSafeCast(element); + if (instance_geo) + { + appendObjectAsset(instance_geo); + } + + domNode* node = daeSafeCast(element); + if (node) + { + pushStack(getFirstChild(element), getElementLabel(element), mStack.front().transformation); + } + + domInstance_node* instance_node = daeSafeCast(element); + if (instance_node) + { + daeElement* instance = instance_node->getUrl().getElement(); + if (instance) + { + pushStack(getFirstChild(instance), getElementLabel(instance), mStack.front().transformation); + } + } + + domVisual_scene* scene = daeSafeCast(element); + if (scene) + { + pushStack(getFirstChild(element), std::string("scene"), mSceneTransformation); + } + + return FALSE; +} + + +void LLImportCollada::processNextElement() +{ + while(1) + { + if (mStack.size() == 0) + { + uploadObjectAsset(); + endImport(); + return; + } + + daeElement *element = mStack.front().next_element; + + if (element == NULL) + { + popStack(); + } + else + { + processElement(element); + } + } +} + + +void LLImportCollada::endImport() +{ + LLFloaterReg::hideInstance("import_collada"); + + LLImportColladaAssetCache::getInstance()->endImport(); + + if (mDAE) + { + delete mDAE; + mDAE = NULL; + } + + mIsImporting = FALSE; +} + + +/* static */ +void LLImportCollada::onCommitOK(LLUICtrl*, void*) +{ + LLFloaterReg::findTypedInstance("import_collada")->enableOK(FALSE); + + LLImportColladaAssetCache::getInstance()->uploadAssets(); +} + + +/* static */ +void LLImportCollada::onCommitCancel(LLUICtrl*, void*) +{ + getInstance()->endImport(); +} + +#endif diff --git a/indra/newview/llfloaterimportcollada.h b/indra/newview/llfloaterimportcollada.h new file mode 100644 index 0000000000..818b19e403 --- /dev/null +++ b/indra/newview/llfloaterimportcollada.h @@ -0,0 +1,143 @@ +/** + * @file llfloaterimportcollada.h + * @brief The about box from Help -> About + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLFLOATERIMPORTCOLLADA_H +#define LL_LLFLOATERIMPORTCOLLADA_H + +#include "llfloater.h" +#include "llvolume.h" //for LL_MESH_ENABLED + +#if LL_MESH_ENABLED + +class LLFloaterImportCollada : public LLFloater +{ +public: + LLFloaterImportCollada(const LLSD& key); + /* virtual */ BOOL postBuild(); + + void setAssetCount(S32 mesh_count, S32 texture_count); + void setStatusAssetUploading(std::string asset_name); + void setStatusCreatingPrim(std::string prim_name); + void setStatusIdle(); + void enableOK(BOOL enable); +}; + +class LLViewerObject; +class DAE; +class daeElement; +class domMesh; +class domImage; +class domInstance_geometry; +class LLModel; +class LLImportCollada; + +class LLImportColladaAssetCache : public LLSingleton +{ +public: + // called first to initialize + void prepareForUpload(DAE* dae); + + // upload the assets in this collada file + void uploadAssets(); + + // get the uploaded assets which corresponds to this element + LLUUID getAssetForDaeElement(daeElement* element); + + // stop the upload + void endImport(); + + // reset + void clear(); + + // callback for notification when an asset has been uploaded + void assetUploaded(LLUUID transaction_uuid, LLUUID asset_uuid, BOOL success); + +private: + void uploadNextAsset(); + BOOL uploadMeshAsset(domMesh* mesh); + BOOL uploadImageAsset(domImage* image); + void updateCount(); + + std::vector mUploadsPending; + std::map mTransactionMap; + std::map mAssetMap; + + DAE* mDAE; + S32 mUploads; +}; + + +class LLImportCollada +: public LLSingleton +{ +public: + LLImportCollada(); + void importFile(std::string filename); + + // callback when all assets have been uploaded + void assetsUploaded(); + + // callback when buttons pressed + static void onCommitOK(LLUICtrl*, void*); + static void onCommitCancel(LLUICtrl*, void*); + + +private: + void endImport(); + void processNextElement(); + BOOL processElement(daeElement* element); + void pushStack(daeElement* next_element, std::string name, LLMatrix4 transformation); + void popStack(); + void appendObjectAsset(domInstance_geometry* instance_geo); + void uploadObjectAsset(); + + struct StackState + { + daeElement* next_element; + std::string name; + LLMatrix4 transformation; + }; + + std::list mStack; + S32 mCreates; + LLVector3 mImportOrigin; + std::string mFilename; + BOOL mIsImporting; + DAE *mDAE; + LLSD mObjectList; + + LLMatrix4 mSceneTransformation; +}; + +#endif + +#endif // LL_LLFLOATERIMPORTCOLLADA_H diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp new file mode 100644 index 0000000000..5dd983d818 --- /dev/null +++ b/indra/newview/llfloatermodelpreview.cpp @@ -0,0 +1,3382 @@ +/** + * @file llfloatermodelpreview.cpp + * @brief LLFloaterModelPreview class implementation + * + * $LicenseInfo:firstyear=2004&license=viewergpl$ + * + * Copyright (c) 2004-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "dae.h" +//#include "dom.h" +#include "dom/domAsset.h" +#include "dom/domBind_material.h" +#include "dom/domCOLLADA.h" +#include "dom/domConstants.h" +#include "dom/domController.h" +#include "dom/domEffect.h" +#include "dom/domGeometry.h" +#include "dom/domInstance_geometry.h" +#include "dom/domInstance_material.h" +#include "dom/domInstance_node.h" +#include "dom/domInstance_effect.h" +#include "dom/domMaterial.h" +#include "dom/domMatrix.h" +#include "dom/domNode.h" +#include "dom/domProfile_COMMON.h" +#include "dom/domRotate.h" +#include "dom/domScale.h" +#include "dom/domTranslate.h" +#include "dom/domVisual_scene.h" + +#include "llfloatermodelpreview.h" + +#include "llfilepicker.h" +#include "llimagebmp.h" +#include "llimagetga.h" +#include "llimagejpeg.h" +#include "llimagepng.h" + +#include "llagent.h" +#include "llbutton.h" +#include "llcombobox.h" +#include "lldatapacker.h" +#include "lldrawable.h" +#include "lldrawpoolavatar.h" +#include "llrender.h" +#include "llface.h" +#include "lleconomy.h" +#include "llfocusmgr.h" +#include "llfloaterperms.h" +#include "llmatrix4a.h" +#include "llmeshrepository.h" +#include "llsdutil_math.h" +#include "lltextbox.h" +#include "lltoolmgr.h" +#include "llui.h" +#include "llvector4a.h" +#include "llviewercamera.h" +#include "llviewerwindow.h" +#include "llvoavatar.h" +#include "llvoavatarself.h" +#include "pipeline.h" +#include "lluictrlfactory.h" +#include "llviewermenufile.h" +#include "llviewerregion.h" +#include "llstring.h" +#include "llbutton.h" +#include "llcheckboxctrl.h" +#include "llsliderctrl.h" +#include "llspinctrl.h" +#include "llvfile.h" +#include "llvfs.h" + + +#include "glod/glod.h" + + +#if LL_MESH_ENABLED + +//static +S32 LLFloaterModelPreview::sUploadAmount = 10; +LLFloaterModelPreview* LLFloaterModelPreview::sInstance = NULL; + +const S32 PREVIEW_BORDER_WIDTH = 2; +const S32 PREVIEW_RESIZE_HANDLE_SIZE = S32(RESIZE_HANDLE_WIDTH * OO_SQRT2) + PREVIEW_BORDER_WIDTH; +const S32 PREVIEW_HPAD = PREVIEW_RESIZE_HANDLE_SIZE; +const S32 PREF_BUTTON_HEIGHT = 16 + 7 + 16; +const S32 PREVIEW_TEXTURE_HEIGHT = 300; + +void drawBoxOutline(const LLVector3& pos, const LLVector3& size); + +std::string limit_name[] = +{ + "lowest limit", + "low limit", + "medium limit", + "high limit", + "physics limit", + + "I went off the end of the limit_name array. Me so smart." +}; + +std::string info_name[] = +{ + "lowest info", + "low info", + "medium info", + "high info", + "physics info", + + "I went off the end of the info_name array. Me so smart." +}; + +bool validate_face(const LLVolumeFace& face) +{ + for (U32 i = 0; i < face.mNumIndices; ++i) + { + if (face.mIndices[i] >= face.mNumVertices) + { + llwarns << "Face has invalid index." << llendl; + return false; + } + } + + return true; +} + +bool validate_model(const LLModel* mdl) +{ + if (mdl->getNumVolumeFaces() == 0) + { + llwarns << "Model has no faces!" << llendl; + return false; + } + + for (S32 i = 0; i < mdl->getNumVolumeFaces(); ++i) + { + if (mdl->getVolumeFace(i).mNumVertices == 0) + { + llwarns << "Face has no vertices." << llendl; + return false; + } + + if (mdl->getVolumeFace(i).mNumIndices == 0) + { + llwarns << "Face has no indices." << llendl; + return false; + } + + if (!validate_face(mdl->getVolumeFace(i))) + { + return false; + } + } + + return true; +} + +BOOL stop_gloderror() +{ + GLuint error = glodGetError(); + + if (error != GLOD_NO_ERROR) + { + llwarns << "GLOD error detected, cannot generate LOD: " << std::hex << error << llendl; + return TRUE; + } + + return FALSE; +} + +LLPhysicsDecompFloater::LLPhysicsDecompFloater(LLSD& key) +: LLFloater(key) +{ + +} + +LLPhysicsDecompFloater::~LLPhysicsDecompFloater() +{ + if (LLFloaterModelPreview::sInstance && LLFloaterModelPreview::sInstance->mDecompFloater) + { + LLFloaterModelPreview::sInstance->mDecompFloater = NULL; + } +} + +class LLMeshFilePicker : public LLFilePickerThread +{ +public: + LLFloaterModelPreview* mFMP; + S32 mLOD; + + LLMeshFilePicker(LLFloaterModelPreview* fmp, S32 lod) + : LLFilePickerThread(LLFilePicker::FFLOAD_COLLADA) + { + mFMP = fmp; + mLOD = lod; + } + + virtual void notify(const std::string& filename) + { + mFMP->mModelPreview->loadModel(mFile, mLOD); + } +}; + + +//----------------------------------------------------------------------------- +// LLFloaterModelPreview() +//----------------------------------------------------------------------------- +LLFloaterModelPreview::LLFloaterModelPreview(const LLSD& key) : + LLFloater(key) +{ + sInstance = this; + mLastMouseX = 0; + mLastMouseY = 0; + mGLName = 0; + mLoading = FALSE; + mDecompFloater = NULL; +} + +//----------------------------------------------------------------------------- +// postBuild() +//----------------------------------------------------------------------------- +BOOL LLFloaterModelPreview::postBuild() +{ + if (!LLFloater::postBuild()) + { + return FALSE; + } + + childSetCommitCallback("high detail combo", onHighLODCommit, this); + childSetCommitCallback("medium detail combo", onMediumLODCommit, this); + childSetCommitCallback("low detail combo", onLowLODCommit, this); + childSetCommitCallback("lowest detail combo", onLowestLODCommit, this); + childSetCommitCallback("physics detail combo", onPhysicsLODCommit, this); + + + childSetCommitCallback("high limit", onHighLimitCommit, this); + childSetCommitCallback("medium limit", onMediumLimitCommit, this); + childSetCommitCallback("low limit", onLowLimitCommit, this); + childSetCommitCallback("lowest limit", onLowestLimitCommit, this); + childSetCommitCallback("physics limit", onPhysicsLimitCommit, this); + + childSetCommitCallback("smooth normals", onSmoothNormalsCommit, this); + + childSetCommitCallback("show edges", onShowEdgesCommit, this); + childSetCommitCallback("auto fill", onAutoFillCommit, this); + + childSetCommitCallback("explode", onExplodeCommit, this); + + childSetTextArg("status", "[STATUS]", getString("status_idle")); + + for (S32 lod = 0; lod < LLModel::NUM_LODS; ++lod) + { + if (lod == LLModel::LOD_PHYSICS) + { + childSetTextArg(info_name[lod], "[HULLS]", std::string("0")); + childSetTextArg(info_name[lod], "[POINTS]", std::string("0")); + } + else + { + childSetTextArg(info_name[lod], "[TRIANGLES]", std::string("0")); + childSetTextArg(info_name[lod], "[VERTICES]", std::string("0")); + childSetTextArg(info_name[lod], "[SUBMESHES]", std::string("0")); + std::string msg = getString("required"); + childSetTextArg(info_name[lod], "[MESSAGE]", msg); + } + + childSetVisible(limit_name[lod], FALSE); + } + + //childSetLabelArg("ok_btn", "[AMOUNT]", llformat("%d",sUploadAmount)); + childSetAction("ok_btn", onUpload, this); + + childSetAction("consolidate", onConsolidate, this); + childSetAction("scrub materials", onScrubMaterials, this); + + childSetAction("decompose_btn", onDecompose, this); + + childSetCommitCallback("preview_lod_combo", onPreviewLODCommit, this); + + const U32 width = 512; + const U32 height = 512; + + mPreviewRect.set(getRect().getWidth()-PREVIEW_HPAD-width, + PREVIEW_HPAD+height, + getRect().getWidth()-PREVIEW_HPAD, + PREVIEW_HPAD); + + mModelPreview = new LLModelPreview(512, 512, this); + mModelPreview->setPreviewTarget(16.f); + + return TRUE; +} + +//----------------------------------------------------------------------------- +// LLFloaterModelPreview() +//----------------------------------------------------------------------------- +LLFloaterModelPreview::~LLFloaterModelPreview() +{ + sInstance = NULL; + + delete mModelPreview; + + if (mGLName) + { + LLImageGL::deleteTextures(1, &mGLName ); + } + + if (mDecompFloater) + { + mDecompFloater->closeFloater(); + mDecompFloater = NULL; + } +} + +void LLFloaterModelPreview::loadModel(S32 lod) +{ + mLoading = TRUE; + + (new LLMeshFilePicker(this, lod))->getFile(); +} + +void LLFloaterModelPreview::setLODMode(S32 lod, S32 mode) +{ + if (mode == 0) + { + loadModel(lod); + } + else if (mode != mModelPreview->mLODMode[lod]) + { + mModelPreview->mLODMode[lod] = mode; + mModelPreview->genLODs(lod); + } + + mModelPreview->setPreviewLOD(lod); + + + LLSpinCtrl* lim = getChild(limit_name[lod], TRUE); + + if (mode == 1) //triangle count + { + U32 tri_count = 0; + for (LLModelLoader::model_list::iterator iter = mModelPreview->mBaseModel.begin(); + iter != mModelPreview->mBaseModel.end(); ++iter) + { + tri_count += (*iter)->getNumTriangles(); + } + + lim->setMaxValue(tri_count); + lim->setVisible(TRUE); + } + else + { + lim->setVisible(FALSE); + } +} + +void LLFloaterModelPreview::setLimit(S32 lod, S32 limit) +{ + if (limit != mModelPreview->mLimit[lod]) + { + mModelPreview->mLimit[lod] = limit; + mModelPreview->genLODs(lod); + mModelPreview->setPreviewLOD(lod); + } +} + +void LLFloaterModelPreview::onPreviewLODCommit(LLUICtrl* ctrl, void* userdata) +{ + LLFloaterModelPreview *fp =(LLFloaterModelPreview *)userdata; + + if (!fp->mModelPreview) + { + return; + } + + S32 which_mode = 0; + + LLCtrlSelectionInterface* iface = fp->childGetSelectionInterface("preview_lod_combo"); + if (iface) + { + which_mode = iface->getFirstSelectedIndex(); + } + fp->mModelPreview->setPreviewLOD(which_mode); +} + +//static +void LLFloaterModelPreview::setLODMode(S32 lod, void* userdata) +{ + LLFloaterModelPreview *fp =(LLFloaterModelPreview *)userdata; + + if (!fp->mModelPreview) + { + return; + } + + S32 which_mode = 0; + + std::string combo_name[] = + { + "lowest detail combo", + "low detail combo", + "medium detail combo", + "high detail combo", + "physics detail combo", + + "I went off the end of the combo_name array. Me so smart." + }; + + LLCtrlSelectionInterface* iface = fp->childGetSelectionInterface(combo_name[lod]); + if (iface) + { + which_mode = iface->getFirstSelectedIndex(); + } + + fp->setLODMode(lod, which_mode); +} + +//static +void LLFloaterModelPreview::onHighLODCommit(LLUICtrl* ctrl, void* userdata) +{ + LLFloaterModelPreview::setLODMode(3, userdata); +} + +//static +void LLFloaterModelPreview::onMediumLODCommit(LLUICtrl* ctrl, void* userdata) +{ + LLFloaterModelPreview::setLODMode(2, userdata); +} + +//static +void LLFloaterModelPreview::onLowLODCommit(LLUICtrl* ctrl, void* userdata) +{ + LLFloaterModelPreview::setLODMode(1, userdata); +} + +//static +void LLFloaterModelPreview::onLowestLODCommit(LLUICtrl* ctrl, void* userdata) +{ + LLFloaterModelPreview::setLODMode(0, userdata); +} + +//static +void LLFloaterModelPreview::onPhysicsLODCommit(LLUICtrl* ctrl, void* userdata) +{ + LLFloaterModelPreview::setLODMode(4, userdata); +} + +//static +void LLFloaterModelPreview::setLimit(S32 lod, void* userdata) +{ + LLFloaterModelPreview *fp =(LLFloaterModelPreview *)userdata; + + if (!fp->mModelPreview) + { + return; + } + + S32 limit = fp->childGetValue(limit_name[lod]).asInteger(); + + + fp->setLimit(lod, limit); +} + +//static +void LLFloaterModelPreview::onHighLimitCommit(LLUICtrl* ctrl, void* userdata) +{ + LLFloaterModelPreview::setLimit(3, userdata); +} + +//static +void LLFloaterModelPreview::onMediumLimitCommit(LLUICtrl* ctrl, void* userdata) +{ + LLFloaterModelPreview::setLimit(2, userdata); +} + +//static +void LLFloaterModelPreview::onLowLimitCommit(LLUICtrl* ctrl, void* userdata) +{ + LLFloaterModelPreview::setLimit(1, userdata); +} + +//static +void LLFloaterModelPreview::onLowestLimitCommit(LLUICtrl* ctrl, void* userdata) +{ + LLFloaterModelPreview::setLimit(0, userdata); +} + +//static +void LLFloaterModelPreview::onPhysicsLimitCommit(LLUICtrl* ctrl, void* userdata) +{ + LLFloaterModelPreview::setLimit(4, userdata); +} + +//static +void LLFloaterModelPreview::onSmoothNormalsCommit(LLUICtrl* ctrl, void* userdata) +{ + LLFloaterModelPreview* fp = (LLFloaterModelPreview*) userdata; + + fp->mModelPreview->smoothNormals(); +} + +//static +void LLFloaterModelPreview::onShowEdgesCommit(LLUICtrl* ctrl, void* userdata) +{ + LLFloaterModelPreview* fp = (LLFloaterModelPreview*) userdata; + + fp->mModelPreview->refresh(); +} + +//static +void LLFloaterModelPreview::onExplodeCommit(LLUICtrl* ctrl, void* userdata) +{ + LLFloaterModelPreview* fp = (LLFloaterModelPreview*) userdata; + + fp->mModelPreview->refresh(); +} + +//static +void LLFloaterModelPreview::onAutoFillCommit(LLUICtrl* ctrl, void* userdata) +{ + LLFloaterModelPreview* fp = (LLFloaterModelPreview*) userdata; + + fp->mModelPreview->genLODs(); +} + + +//----------------------------------------------------------------------------- +// draw() +//----------------------------------------------------------------------------- +void LLFloaterModelPreview::draw() +{ + LLFloater::draw(); + LLRect r = getRect(); + + if (!mLoading) + { + childSetTextArg("status", "[STATUS]", getString("status_idle")); + } + + childSetTextArg("description_label", "[PRIM_COST]", llformat("%d", mModelPreview->mResourceCost)); + childSetTextArg("description_label", "[TEXTURES]", llformat("%d", mModelPreview->mTextureSet.size())); + + if (mDecompFloater) + { + mDecompFloater->childSetText("status", gMeshRepo.mDecompThread->mStatus); + } + + U32 resource_cost = mModelPreview->mResourceCost*10; + + if (childGetValue("upload_textures").asBoolean()) + { + resource_cost += mModelPreview->mTextureSet.size()*10; + } + + childSetLabelArg("ok_btn", "[AMOUNT]", llformat("%d", resource_cost)); + + if (mModelPreview) + { + gGL.color3f(1.f, 1.f, 1.f); + + gGL.getTexUnit(0)->bind(mModelPreview); + + gGL.begin( LLRender::QUADS ); + { + gGL.texCoord2f(0.f, 1.f); + gGL.vertex2i(mPreviewRect.mLeft, mPreviewRect.mTop); + gGL.texCoord2f(0.f, 0.f); + gGL.vertex2i(mPreviewRect.mLeft, mPreviewRect.mBottom); + gGL.texCoord2f(1.f, 0.f); + gGL.vertex2i(mPreviewRect.mRight, mPreviewRect.mBottom); + gGL.texCoord2f(1.f, 1.f); + gGL.vertex2i(mPreviewRect.mRight, mPreviewRect.mTop); + } + gGL.end(); + + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + } +} + +//----------------------------------------------------------------------------- +// handleMouseDown() +//----------------------------------------------------------------------------- +BOOL LLFloaterModelPreview::handleMouseDown(S32 x, S32 y, MASK mask) +{ + if (mPreviewRect.pointInRect(x, y)) + { + bringToFront( x, y ); + gFocusMgr.setMouseCapture(this); + gViewerWindow->hideCursor(); + mLastMouseX = x; + mLastMouseY = y; + return TRUE; + } + + return LLFloater::handleMouseDown(x, y, mask); +} + +//----------------------------------------------------------------------------- +// handleMouseUp() +//----------------------------------------------------------------------------- +BOOL LLFloaterModelPreview::handleMouseUp(S32 x, S32 y, MASK mask) +{ + gFocusMgr.setMouseCapture(FALSE); + gViewerWindow->showCursor(); + return LLFloater::handleMouseUp(x, y, mask); +} + +//----------------------------------------------------------------------------- +// handleHover() +//----------------------------------------------------------------------------- +BOOL LLFloaterModelPreview::handleHover (S32 x, S32 y, MASK mask) +{ + MASK local_mask = mask & ~MASK_ALT; + + if (mModelPreview && hasMouseCapture()) + { + if (local_mask == MASK_PAN) + { + // pan here + mModelPreview->pan((F32)(x - mLastMouseX) * -0.005f, (F32)(y - mLastMouseY) * -0.005f); + } + else if (local_mask == MASK_ORBIT) + { + F32 yaw_radians = (F32)(x - mLastMouseX) * -0.01f; + F32 pitch_radians = (F32)(y - mLastMouseY) * 0.02f; + + mModelPreview->rotate(yaw_radians, pitch_radians); + } + else + { + + F32 yaw_radians = (F32)(x - mLastMouseX) * -0.01f; + F32 zoom_amt = (F32)(y - mLastMouseY) * 0.02f; + + mModelPreview->rotate(yaw_radians, 0.f); + mModelPreview->zoom(zoom_amt); + } + + + mModelPreview->refresh(); + + LLUI::setMousePositionLocal(this, mLastMouseX, mLastMouseY); + } + + if (!mPreviewRect.pointInRect(x, y) || !mModelPreview) + { + return LLFloater::handleHover(x, y, mask); + } + else if (local_mask == MASK_ORBIT) + { + gViewerWindow->setCursor(UI_CURSOR_TOOLCAMERA); + } + else if (local_mask == MASK_PAN) + { + gViewerWindow->setCursor(UI_CURSOR_TOOLPAN); + } + else + { + gViewerWindow->setCursor(UI_CURSOR_TOOLZOOMIN); + } + + return TRUE; +} + +//----------------------------------------------------------------------------- +// handleScrollWheel() +//----------------------------------------------------------------------------- +BOOL LLFloaterModelPreview::handleScrollWheel(S32 x, S32 y, S32 clicks) +{ + if (mPreviewRect.pointInRect(x, y) && mModelPreview) + { + mModelPreview->zoom((F32)clicks * -0.2f); + mModelPreview->refresh(); + } + + return TRUE; +} + +//static +void LLFloaterModelPreview::onPhysicsParamCommit(LLUICtrl* ctrl, void* data) +{ + LLCDParam* param = (LLCDParam*) data; + + LLCDResult ret = LLCD_OK; + + if (LLConvexDecomposition::getInstance() == NULL) + { + llinfos << "convex decomposition tool is a stub on this platform. cannot get decomp." << llendl; + return; + } + + if (param->mType == LLCDParam::LLCD_FLOAT) + { + ret = LLConvexDecomposition::getInstance()->setParam(param->mName, (F32) ctrl->getValue().asReal()); + } + else if (param->mType == LLCDParam::LLCD_INTEGER || + param->mType == LLCDParam::LLCD_ENUM) + { + ret = LLConvexDecomposition::getInstance()->setParam(param->mName, ctrl->getValue().asInteger()); + } + else if (param->mType == LLCDParam::LLCD_BOOLEAN) + { + ret = LLConvexDecomposition::getInstance()->setParam(param->mName, ctrl->getValue().asBoolean()); + } + + if (ret) + { + llerrs << "WTF?" << llendl; + } +} + +//static +void LLFloaterModelPreview::onPhysicsStageExecute(LLUICtrl* ctrl, void* data) +{ + LLCDStageData* stage = (LLCDStageData*) data; + + LLModel* mdl = NULL; + + if (sInstance) + { + if (sInstance->mModelPreview) + { + if (sInstance->mDecompFloater) + { + S32 idx = sInstance->mDecompFloater->childGetValue("model").asInteger(); + if (idx >= 0 && idx < sInstance->mModelPreview->mModel[LLModel::LOD_PHYSICS].size()) + { + mdl = sInstance->mModelPreview->mModel[LLModel::LOD_PHYSICS][idx]; + } + } + } + } + + if (mdl) + { + gMeshRepo.mDecompThread->execute(stage->mName, mdl); + } +} + +//static +void LLFloaterModelPreview::onPhysicsStageCancel(LLUICtrl* ctrl, void*data) +{ + gMeshRepo.mDecompThread->cancel(); +} + +void LLFloaterModelPreview::showDecompFloater() +{ + if (!mDecompFloater) + { + LLSD key; + mDecompFloater = new LLPhysicsDecompFloater(key); + + S32 left = 20; + S32 right = 270; + + S32 cur_y = 30; + + { + //add status text + LLTextBox::Params p; + p.name("status"); + p.rect(LLRect(left, cur_y, right-80, cur_y-20)); + mDecompFloater->addChild(LLUICtrlFactory::create(p)); + } + + + { //add cancel button + LLButton::Params p; + p.name("Cancel"); + p.label("Cancel"); + p.rect(LLRect(right-80, cur_y, right, cur_y-20)); + LLButton* button = LLUICtrlFactory::create(p); + button->setCommitCallback(onPhysicsStageCancel, NULL); + mDecompFloater->addChild(button); + } + + cur_y += 30; + + + const LLCDStageData* stage; + S32 stage_count = 0; + if (LLConvexDecomposition::getInstance() != NULL) + { + stage_count = LLConvexDecomposition::getInstance()->getStages(&stage); + } + + const LLCDParam* param; + S32 param_count = 0; + if (LLConvexDecomposition::getInstance() != NULL) + { + param_count = LLConvexDecomposition::getInstance()->getParameters(¶m); + } + + for (S32 j = stage_count-1; j >= 0; --j) + { + LLButton::Params p; + p.name(stage[j].mName); + p.label(stage[j].mName); + p.rect(LLRect(left, cur_y, right, cur_y-20)); + LLButton* button = LLUICtrlFactory::create(p); + button->setCommitCallback(onPhysicsStageExecute, (void*) &stage[j]); + mDecompFloater->addChild(button); + gMeshRepo.mDecompThread->mStageID[stage[j].mName] = j; + cur_y += 30; + // protected against stub by stage_count being 0 for stub above + LLConvexDecomposition::getInstance()->registerCallback(j, LLPhysicsDecomp::llcdCallback); + + for (S32 i = 0; i < param_count; ++i) + { + if (param[i].mStage != j) + { + continue; + } + + if (param[i].mType == LLCDParam::LLCD_FLOAT) + { + LLSliderCtrl::Params p; + p.name(param[i].mName); + p.label(param[i].mName); + p.rect(LLRect(left, cur_y, right, cur_y-20)); + p.min_value(param[i].mDetails.mRange.mLow.mFloat); + p.max_value(param[i].mDetails.mRange.mHigh.mFloat); + p.increment(param[i].mDetails.mRange.mDelta.mFloat); + p.decimal_digits(3); + p.initial_value(param[i].mDefault.mFloat); + LLSliderCtrl* slider = LLUICtrlFactory::create(p); + slider->setCommitCallback(onPhysicsParamCommit, (void*) ¶m[i]); + mDecompFloater->addChild(slider); + cur_y += 30; + } + else if (param[i].mType == LLCDParam::LLCD_INTEGER) + { + LLSliderCtrl::Params p; + p.name(param[i].mName); + p.label(param[i].mName); + p.rect(LLRect(left, cur_y, right, cur_y-20)); + p.min_value(param[i].mDetails.mRange.mLow.mIntOrEnumValue); + p.max_value(param[i].mDetails.mRange.mHigh.mIntOrEnumValue); + p.increment(param[i].mDetails.mRange.mDelta.mIntOrEnumValue); + p.initial_value(param[i].mDefault.mIntOrEnumValue); + LLSliderCtrl* slider = LLUICtrlFactory::create(p); + slider->setCommitCallback(onPhysicsParamCommit, (void*) ¶m[i]); + mDecompFloater->addChild(slider); + cur_y += 30; + } + else if (param[i].mType == LLCDParam::LLCD_BOOLEAN) + { + LLCheckBoxCtrl::Params p; + p.rect(LLRect(left, cur_y, right, cur_y-20)); + p.name(param[i].mName); + p.label(param[i].mName); + p.initial_value(param[i].mDefault.mBool); + LLCheckBoxCtrl* check_box = LLUICtrlFactory::create(p); + check_box->setCommitCallback(onPhysicsParamCommit, (void*) ¶m[i]); + mDecompFloater->addChild(check_box); + cur_y += 30; + } + else if (param[i].mType == LLCDParam::LLCD_ENUM) + { + LLComboBox::Params p; + p.rect(LLRect(left, cur_y, right/3, cur_y-20)); + p.name(param[i].mName); + p.label(param[i].mName); + LLComboBox* combo_box = LLUICtrlFactory::create(p); + for (S32 k = 0; k < param[i].mDetails.mEnumValues.mNumEnums; ++k) + { + combo_box->add(param[i].mDetails.mEnumValues.mEnumsArray[k].mName, + LLSD::Integer(param[i].mDetails.mEnumValues.mEnumsArray[k].mValue)); + } + combo_box->setValue(param[i].mDefault.mIntOrEnumValue); + combo_box->setCommitCallback(onPhysicsParamCommit, (void*) ¶m[i]); + mDecompFloater->addChild(combo_box); + cur_y += 30; + } + } + } + + //mesh render checkbox + { + LLCheckBoxCtrl::Params p; + p.label("Mesh: "); + p.name("render_mesh"); + p.rect(LLRect(left, cur_y, right/4, cur_y-20)); + LLCheckBoxCtrl* check = LLUICtrlFactory::create(p); + check->setValue(true); + mDecompFloater->addChild(check); + } + + //hull render checkbox + { + LLCheckBoxCtrl::Params p; + p.label("Hull: "); + p.name("render_hull"); + p.rect(LLRect(right/4, cur_y, right/2, cur_y-20)); + LLCheckBoxCtrl* check = LLUICtrlFactory::create(p); + check->setValue(true); + mDecompFloater->addChild(check); + } + + { //submesh combo box label + LLTextBox::Params p; + p.label("Model"); + p.name("model label"); + p.rect(LLRect(right/3, cur_y, right/2, cur_y-20)); + LLTextBox* text_box = LLUICtrlFactory::create(p); + text_box->setValue("Model"); + mDecompFloater->addChild(text_box); + } + { + //add submesh combo box + LLComboBox::Params p; + p.rect(LLRect(right/2, cur_y, right, cur_y-20)); + p.name("model"); + LLComboBox* combo_box = LLUICtrlFactory::create(p); + for (S32 i = 0; i < mModelPreview->mBaseModel.size(); ++i) + { + LLModel* mdl = mModelPreview->mBaseModel[i]; + combo_box->add(mdl->mLabel, i); + } + combo_box->setValue(0); + mDecompFloater->addChild(combo_box); + cur_y += 30; + } + + mDecompFloater->childSetCommitCallback("model", LLFloaterModelPreview::refresh, LLFloaterModelPreview::sInstance); + mDecompFloater->childSetCommitCallback("render_mesh", LLFloaterModelPreview::refresh, LLFloaterModelPreview::sInstance); + mDecompFloater->childSetCommitCallback("render_hull", LLFloaterModelPreview::refresh, LLFloaterModelPreview::sInstance); + + mDecompFloater->setRect(LLRect(10, cur_y+20, right+20, 10)); + } + + mDecompFloater->openFloater(); +} + +//----------------------------------------------------------------------------- +// onMouseCaptureLost() +//----------------------------------------------------------------------------- +// static +void LLFloaterModelPreview::onMouseCaptureLostModelPreview(LLMouseHandler* handler) +{ + gViewerWindow->showCursor(); +} + +//----------------------------------------------------------------------------- +// LLModelLoader +//----------------------------------------------------------------------------- +LLModelLoader::LLModelLoader(std::string filename, S32 lod, LLModelPreview* preview) +: LLThread("Model Loader"), mFilename(filename), mLod(lod), mPreview(preview), mState(STARTING), mFirstTransform(TRUE) +{ + mJointMap["mPelvis"] = "mPelvis"; + mJointMap["mTorso"] = "mTorso"; + mJointMap["mChest"] = "mChest"; + mJointMap["mNeck"] = "mNeck"; + mJointMap["mHead"] = "mHead"; + mJointMap["mSkull"] = "mSkull"; + mJointMap["mEyeRight"] = "mEyeRight"; + mJointMap["mEyeLeft"] = "mEyeLeft"; + mJointMap["mCollarLeft"] = "mCollarLeft"; + mJointMap["mShoulderLeft"] = "mShoulderLeft"; + mJointMap["mElbowLeft"] = "mElbowLeft"; + mJointMap["mWristLeft"] = "mWristLeft"; + mJointMap["mCollarRight"] = "mCollarRight"; + mJointMap["mShoulderRight"] = "mShoulderRight"; + mJointMap["mElbowRight"] = "mElbowRight"; + mJointMap["mWristRight"] = "mWristRight"; + mJointMap["mHipRight"] = "mHipRight"; + mJointMap["mKneeRight"] = "mKneeRight"; + mJointMap["mAnkleRight"] = "mAnkleRight"; + mJointMap["mFootRight"] = "mFootRight"; + mJointMap["mToeRight"] = "mToeRight"; + mJointMap["mHipLeft"] = "mHipLeft"; + mJointMap["mKneeLeft"] = "mKneeLeft"; + mJointMap["mAnkleLeft"] = "mAnkleLeft"; + mJointMap["mFootLeft"] = "mFootLeft"; + mJointMap["mToeLeft"] = "mToeLeft"; + + mJointMap["avatar_mPelvis"] = "mPelvis"; + mJointMap["avatar_mTorso"] = "mTorso"; + mJointMap["avatar_mChest"] = "mChest"; + mJointMap["avatar_mNeck"] = "mNeck"; + mJointMap["avatar_mHead"] = "mHead"; + mJointMap["avatar_mSkull"] = "mSkull"; + mJointMap["avatar_mEyeRight"] = "mEyeRight"; + mJointMap["avatar_mEyeLeft"] = "mEyeLeft"; + mJointMap["avatar_mCollarLeft"] = "mCollarLeft"; + mJointMap["avatar_mShoulderLeft"] = "mShoulderLeft"; + mJointMap["avatar_mElbowLeft"] = "mElbowLeft"; + mJointMap["avatar_mWristLeft"] = "mWristLeft"; + mJointMap["avatar_mCollarRight"] = "mCollarRight"; + mJointMap["avatar_mShoulderRight"] = "mShoulderRight"; + mJointMap["avatar_mElbowRight"] = "mElbowRight"; + mJointMap["avatar_mWristRight"] = "mWristRight"; + mJointMap["avatar_mHipRight"] = "mHipRight"; + mJointMap["avatar_mKneeRight"] = "mKneeRight"; + mJointMap["avatar_mAnkleRight"] = "mAnkleRight"; + mJointMap["avatar_mFootRight"] = "mFootRight"; + mJointMap["avatar_mToeRight"] = "mToeRight"; + mJointMap["avatar_mHipLeft"] = "mHipLeft"; + mJointMap["avatar_mKneeLeft"] = "mKneeLeft"; + mJointMap["avatar_mAnkleLeft"] = "mAnkleLeft"; + mJointMap["avatar_mFootLeft"] = "mFootLeft"; + mJointMap["avatar_mToeLeft"] = "mToeLeft"; + + + mJointMap["hip"] = "mPelvis"; + mJointMap["abdomen"] = "mTorso"; + mJointMap["chest"] = "mChest"; + mJointMap["neck"] = "mNeck"; + mJointMap["head"] = "mHead"; + mJointMap["figureHair"] = "mSkull"; + mJointMap["lCollar"] = "mCollarLeft"; + mJointMap["lShldr"] = "mShoulderLeft"; + mJointMap["lForeArm"] = "mElbowLeft"; + mJointMap["lHand"] = "mWristLeft"; + mJointMap["rCollar"] = "mCollarRight"; + mJointMap["rShldr"] = "mShoulderRight"; + mJointMap["rForeArm"] = "mElbowRight"; + mJointMap["rHand"] = "mWristRight"; + mJointMap["rThigh"] = "mHipRight"; + mJointMap["rShin"] = "mKneeRight"; + mJointMap["rFoot"] = "mFootRight"; + mJointMap["lThigh"] = "mHipLeft"; + mJointMap["lShin"] = "mKneeLeft"; + mJointMap["lFoot"] = "mFootLeft"; +} + +void stretch_extents(LLModel* model, LLMatrix4a& mat, LLVector4a& min, LLVector4a& max, BOOL& first_transform) +{ + LLVector4a box[] = + { + LLVector4a(-1, 1,-1), + LLVector4a(-1, 1, 1), + LLVector4a(-1,-1,-1), + LLVector4a(-1,-1, 1), + LLVector4a( 1, 1,-1), + LLVector4a( 1, 1, 1), + LLVector4a( 1,-1,-1), + LLVector4a( 1,-1, 1), + }; + + for (S32 j = 0; j < model->getNumVolumeFaces(); ++j) + { + const LLVolumeFace& face = model->getVolumeFace(j); + + LLVector4a center; + center.setAdd(face.mExtents[0], face.mExtents[1]); + center.mul(0.5f); + LLVector4a size; + size.setSub(face.mExtents[1],face.mExtents[0]); + size.mul(0.5f); + + for (U32 i = 0; i < 8; i++) + { + LLVector4a t; + t.setMul(size, box[i]); + t.add(center); + + LLVector4a v; + + mat.affineTransform(t, v); + + if (first_transform) + { + first_transform = FALSE; + min = max = v; + } + else + { + update_min_max(min, max, v); + } + } + } +} + +void stretch_extents(LLModel* model, LLMatrix4& mat, LLVector3& min, LLVector3& max, BOOL& first_transform) +{ + LLVector4a mina, maxa; + LLMatrix4a mata; + + mata.loadu(mat); + mina.load3(min.mV); + maxa.load3(max.mV); + + stretch_extents(model, mata, mina, maxa, first_transform); + + min.set(mina.getF32ptr()); + max.set(maxa.getF32ptr()); +} + +void LLModelLoader::run() +{ + DAE dae; + domCOLLADA* dom = dae.open(mFilename); + + if (dom) + { + daeDatabase* db = dae.getDatabase(); + + daeInt count = db->getElementCount(NULL, COLLADA_TYPE_MESH); + + daeDocument* doc = dae.getDoc(mFilename); + if (!doc) + { + llwarns << "can't find internal doc" << llendl; + return; + } + + daeElement* root = doc->getDomRoot(); + if (!root) + { + llwarns << "document has no root" << llendl; + return; + } + + //get unit scale + mTransform.setIdentity(); + + domAsset::domUnit* unit = daeSafeCast(root->getDescendant(daeElement::matchType(domAsset::domUnit::ID()))); + + if (unit) + { + F32 meter = unit->getMeter(); + mTransform.mMatrix[0][0] = meter; + mTransform.mMatrix[1][1] = meter; + mTransform.mMatrix[2][2] = meter; + } + + //get up axis rotation + LLMatrix4 rotation; + + domUpAxisType up = UPAXISTYPE_Y_UP; // default is Y_UP + domAsset::domUp_axis* up_axis = + daeSafeCast(root->getDescendant(daeElement::matchType(domAsset::domUp_axis::ID()))); + + if (up_axis) + { + up = up_axis->getValue(); + } + + if (up == UPAXISTYPE_X_UP) + { + rotation.initRotation(0.0f, 90.0f * DEG_TO_RAD, 0.0f); + } + else if (up == UPAXISTYPE_Y_UP) + { + rotation.initRotation(90.0f * DEG_TO_RAD, 0.0f, 0.0f); + } + + rotation *= mTransform; + mTransform = rotation; + + + for (daeInt idx = 0; idx < count; ++idx) + { //build map of domEntities to LLModel + domMesh* mesh = NULL; + db->getElement((daeElement**) &mesh, idx, NULL, COLLADA_TYPE_MESH); + + if (mesh) + { + LLPointer model = LLModel::loadModelFromDomMesh(mesh); + + if (model.notNull() && validate_model(model)) + { + mModelList.push_back(model); + mModel[mesh] = model; + } + } + } + + count = db->getElementCount(NULL, COLLADA_TYPE_SKIN); + for (daeInt idx = 0; idx < count; ++idx) + { //add skinned meshes as instances + domSkin* skin = NULL; + db->getElement((daeElement**) &skin, idx, NULL, COLLADA_TYPE_SKIN); + + if (skin) + { + domGeometry* geom = daeSafeCast(skin->getSource().getElement()); + + if (geom) + { + domMesh* mesh = geom->getMesh(); + if (mesh) + { + LLModel* model = mModel[mesh]; + if (model) + { + LLVector3 mesh_scale_vector; + LLVector3 mesh_translation_vector; + model->getNormalizedScaleTranslation(mesh_scale_vector, mesh_translation_vector); + + LLMatrix4 normalized_transformation; + normalized_transformation.setTranslation(mesh_translation_vector); + + LLMatrix4 mesh_scale; + mesh_scale.initScale(mesh_scale_vector); + mesh_scale *= normalized_transformation; + normalized_transformation = mesh_scale; + + glh::matrix4f inv_mat((F32*) normalized_transformation.mMatrix); + inv_mat = inv_mat.inverse(); + LLMatrix4 inverse_normalized_transformation(inv_mat.m); + + domSkin::domBind_shape_matrix* bind_mat = skin->getBind_shape_matrix(); + + if (bind_mat) + { //get bind shape matrix + domFloat4x4& dom_value = bind_mat->getValue(); + + for (int i = 0; i < 4; i++) + { + for(int j = 0; j < 4; j++) + { + model->mBindShapeMatrix.mMatrix[i][j] = dom_value[i + j*4]; + } + } + + LLMatrix4 trans = normalized_transformation; + trans *= model->mBindShapeMatrix; + model->mBindShapeMatrix = trans; + + } + + /*{ + LLMatrix4 rotation; + if (up == UPAXISTYPE_X_UP) + { + rotation.initRotation(0.0f, 90.0f * DEG_TO_RAD, 0.0f); + } + else if (up == UPAXISTYPE_Z_UP) + { + rotation.initRotation(90.0f * DEG_TO_RAD, 90.0f * DEG_TO_RAD, 0.0f); + } + + rotation *= model->mBindShapeMatrix; + model->mBindShapeMatrix = rotation; + }*/ + + + domSkin::domJoints* joints = skin->getJoints(); + + domInputLocal_Array& joint_input = joints->getInput_array(); + + for (size_t i = 0; i < joint_input.getCount(); ++i) + { + domInputLocal* input = joint_input.get(i); + xsNMTOKEN semantic = input->getSemantic(); + + if (strcmp(semantic, COMMON_PROFILE_INPUT_JOINT) == 0) + { //found joint source, fill model->mJointMap and model->mJointList + daeElement* elem = input->getSource().getElement(); + + domSource* source = daeSafeCast(elem); + if (source) + { + + + domName_array* names_source = source->getName_array(); + + if (names_source) + { + domListOfNames &names = names_source->getValue(); + + for (size_t j = 0; j < names.getCount(); ++j) + { + std::string name(names.get(j)); + if (mJointMap.find(name) != mJointMap.end()) + { + name = mJointMap[name]; + } + model->mJointList.push_back(name); + model->mJointMap[name] = j; + } + } + else + { + domIDREF_array* names_source = source->getIDREF_array(); + if (names_source) + { + xsIDREFS& names = names_source->getValue(); + + for (size_t j = 0; j < names.getCount(); ++j) + { + std::string name(names.get(j).getID()); + if (mJointMap.find(name) != mJointMap.end()) + { + name = mJointMap[name]; + } + model->mJointList.push_back(name); + model->mJointMap[name] = j; + } + } + } + } + } + else if (strcmp(semantic, COMMON_PROFILE_INPUT_INV_BIND_MATRIX) == 0) + { //found inv_bind_matrix array, fill model->mInvBindMatrix + domSource* source = daeSafeCast(input->getSource().getElement()); + if (source) + { + domFloat_array* t = source->getFloat_array(); + if (t) + { + domListOfFloats& transform = t->getValue(); + S32 count = transform.getCount()/16; + + for (S32 k = 0; k < count; ++k) + { + LLMatrix4 mat; + + for (int i = 0; i < 4; i++) + { + for(int j = 0; j < 4; j++) + { + mat.mMatrix[i][j] = transform[k*16 + i + j*4]; + } + } + + model->mInvBindMatrix.push_back(mat); + } + } + } + } + } + + + //grab raw position array + + domVertices* verts = mesh->getVertices(); + if (verts) + { + domInputLocal_Array& inputs = verts->getInput_array(); + for (size_t i = 0; i < inputs.getCount() && model->mPosition.empty(); ++i) + { + if (strcmp(inputs[i]->getSemantic(), COMMON_PROFILE_INPUT_POSITION) == 0) + { + domSource* pos_source = daeSafeCast(inputs[i]->getSource().getElement()); + if (pos_source) + { + domFloat_array* pos_array = pos_source->getFloat_array(); + if (pos_array) + { + domListOfFloats& pos = pos_array->getValue(); + + for (size_t j = 0; j < pos.getCount(); j += 3) + { + if (pos.getCount() <= j+2) + { + llerrs << "WTF?" << llendl; + } + + LLVector3 v(pos[j], pos[j+1], pos[j+2]); + + //transform from COLLADA space to volume space + v = v * inverse_normalized_transformation; + + model->mPosition.push_back(v); + } + } + } + } + } + } + + //grab skin weights array + domSkin::domVertex_weights* weights = skin->getVertex_weights(); + if (weights) + { + domInputLocalOffset_Array& inputs = weights->getInput_array(); + domFloat_array* vertex_weights = NULL; + for (size_t i = 0; i < inputs.getCount(); ++i) + { + if (strcmp(inputs[i]->getSemantic(), COMMON_PROFILE_INPUT_WEIGHT) == 0) + { + domSource* weight_source = daeSafeCast(inputs[i]->getSource().getElement()); + if (weight_source) + { + vertex_weights = weight_source->getFloat_array(); + } + } + } + + if (vertex_weights) + { + domListOfFloats& w = vertex_weights->getValue(); + domListOfUInts& vcount = weights->getVcount()->getValue(); + domListOfInts& v = weights->getV()->getValue(); + + U32 c_idx = 0; + for (size_t vc_idx = 0; vc_idx < vcount.getCount(); ++vc_idx) + { //for each vertex + daeUInt count = vcount[vc_idx]; + + //create list of weights that influence this vertex + LLModel::weight_list weight_list; + + for (daeUInt i = 0; i < count; ++i) + { //for each weight + daeInt joint_idx = v[c_idx++]; + daeInt weight_idx = v[c_idx++]; + + if (joint_idx == -1) + { + //ignore bindings to bind_shape_matrix + continue; + } + + F32 weight_value = w[weight_idx]; + + weight_list.push_back(LLModel::JointWeight(joint_idx, weight_value)); + } + + //sort by joint weight + std::sort(weight_list.begin(), weight_list.end(), LLModel::CompareWeightGreater()); + + std::vector wght; + + F32 total = 0.f; + + for (U32 i = 0; i < llmin((U32) 4, (U32) weight_list.size()); ++i) + { //take up to 4 most significant weights + if (weight_list[i].mWeight > 0.f) + { + wght.push_back( weight_list[i] ); + total += weight_list[i].mWeight; + } + } + + F32 scale = 1.f/total; + if (scale != 1.f) + { //normalize weights + for (U32 i = 0; i < wght.size(); ++i) + { + wght[i].mWeight *= scale; + } + } + + model->mSkinWeights[model->mPosition[vc_idx]] = wght; + } + + //add instance to scene for this model + + LLMatrix4 transform; + std::vector materials; + materials.resize(model->getNumVolumeFaces()); + mScene[transform].push_back(LLModelInstance(model, transform, materials)); + stretch_extents(model, transform, mExtents[0], mExtents[1], mFirstTransform); + } + } + } + } + } + } + } + + daeElement* scene = root->getDescendant("visual_scene"); + if (!scene) + { + llwarns << "document has no visual_scene" << llendl; + return; + } + + processElement(scene); + + mPreview->loadModelCallback(mLod); + } +} + +void LLModelLoader::processElement(daeElement* element) +{ + LLMatrix4 saved_transform = mTransform; + + domTranslate* translate = daeSafeCast(element); + if (translate) + { + domFloat3 dom_value = translate->getValue(); + + LLMatrix4 translation; + translation.setTranslation(LLVector3(dom_value[0], dom_value[1], dom_value[2])); + + translation *= mTransform; + mTransform = translation; + } + + domRotate* rotate = daeSafeCast(element); + if (rotate) + { + domFloat4 dom_value = rotate->getValue(); + + LLMatrix4 rotation; + rotation.initRotTrans(dom_value[3] * DEG_TO_RAD, LLVector3(dom_value[0], dom_value[1], dom_value[2]), LLVector3(0, 0, 0)); + + rotation *= mTransform; + mTransform = rotation; + } + + domScale* scale = daeSafeCast(element); + if (scale) + { + domFloat3 dom_value = scale->getValue(); + + LLMatrix4 scaling; + scaling.initScale(LLVector3(dom_value[0], dom_value[1], dom_value[2])); + + scaling *= mTransform; + mTransform = scaling; + } + + domMatrix* matrix = daeSafeCast(element); + if (matrix) + { + domFloat4x4 dom_value = matrix->getValue(); + + LLMatrix4 matrix_transform; + + for (int i = 0; i < 4; i++) + { + for(int j = 0; j < 4; j++) + { + matrix_transform.mMatrix[i][j] = dom_value[i + j*4]; + } + } + + matrix_transform *= mTransform; + mTransform = matrix_transform; + } + + domInstance_geometry* instance_geo = daeSafeCast(element); + if (instance_geo) + { + domGeometry* geo = daeSafeCast(instance_geo->getUrl().getElement()); + if (geo) + { + domMesh* mesh = daeSafeCast(geo->getDescendant(daeElement::matchType(domMesh::ID()))); + if (mesh) + { + LLModel* model = mModel[mesh]; + if (model) + { + LLMatrix4 transformation = mTransform; + + std::vector materials = getMaterials(model, instance_geo); + + // adjust the transformation to compensate for mesh normalization + LLVector3 mesh_scale_vector; + LLVector3 mesh_translation_vector; + model->getNormalizedScaleTranslation(mesh_scale_vector, mesh_translation_vector); + + LLMatrix4 mesh_translation; + mesh_translation.setTranslation(mesh_translation_vector); + mesh_translation *= transformation; + transformation = mesh_translation; + + LLMatrix4 mesh_scale; + mesh_scale.initScale(mesh_scale_vector); + mesh_scale *= transformation; + transformation = mesh_scale; + + mScene[transformation].push_back(LLModelInstance(model, transformation, materials)); + + stretch_extents(model, transformation, mExtents[0], mExtents[1], mFirstTransform); + } + } + } + } + + domInstance_node* instance_node = daeSafeCast(element); + if (instance_node) + { + daeElement* instance = instance_node->getUrl().getElement(); + if (instance) + { + processElement(instance); + } + } + + //process children + daeTArray< daeSmartRef > children = element->getChildren(); + for (S32 i = 0; i < children.getCount(); i++) + { + processElement(children[i]); + } + + domNode* node = daeSafeCast(element); + if (node) + { //this element was a node, restore transform before processiing siblings + mTransform = saved_transform; + } +} + +std::vector LLModelLoader::getMaterials(LLModel* model, domInstance_geometry* instance_geo) +{ + std::vector materials; + for (int i = 0; i < model->mMaterialList.size(); i++) + { + LLImportMaterial import_material; + + domInstance_material* instance_mat = NULL; + + domBind_material::domTechnique_common* technique = + daeSafeCast(instance_geo->getDescendant(daeElement::matchType(domBind_material::domTechnique_common::ID()))); + + if (technique) + { + daeTArray< daeSmartRef > inst_materials = technique->getChildrenByType(); + for (int j = 0; j < inst_materials.getCount(); j++) + { + std::string symbol(inst_materials[j]->getSymbol()); + + if (symbol == model->mMaterialList[i]) // found the binding + { + instance_mat = inst_materials[j]; + } + } + } + + if (instance_mat) + { + domMaterial* material = daeSafeCast(instance_mat->getTarget().getElement()); + if (material) + { + domInstance_effect* instance_effect = + daeSafeCast(material->getDescendant(daeElement::matchType(domInstance_effect::ID()))); + if (instance_effect) + { + domEffect* effect = daeSafeCast(instance_effect->getUrl().getElement()); + if (effect) + { + domProfile_COMMON* profile = + daeSafeCast(effect->getDescendant(daeElement::matchType(domProfile_COMMON::ID()))); + if (profile) + { + import_material = profileToMaterial(profile); + } + } + } + } + } + + materials.push_back(import_material); + } + + return materials; +} + +LLImportMaterial LLModelLoader::profileToMaterial(domProfile_COMMON* material) +{ + LLImportMaterial mat; + mat.mFullbright = FALSE; + + daeElement* diffuse = material->getDescendant("diffuse"); + if (diffuse) + { + domCommon_color_or_texture_type_complexType::domTexture* texture = + daeSafeCast(diffuse->getDescendant("texture")); + if (texture) + { + domCommon_newparam_type_Array newparams = material->getNewparam_array(); + for (S32 i = 0; i < newparams.getCount(); i++) + { + domFx_surface_common* surface = newparams[i]->getSurface(); + if (surface) + { + domFx_surface_init_common* init = surface->getFx_surface_init_common(); + if (init) + { + domFx_surface_init_from_common_Array init_from = init->getInit_from_array(); + + if (init_from.getCount() > i) + { + domImage* image = daeSafeCast(init_from[i]->getValue().getElement()); + if (image) + { + // we only support init_from now - embedded data will come later + domImage::domInit_from* init = image->getInit_from(); + if (init) + { + std::string filename = cdom::uriToNativePath(init->getValue().str()); + + mat.mDiffuseMap = LLViewerTextureManager::getFetchedTextureFromUrl("file://" + filename, TRUE, LLViewerTexture::BOOST_PREVIEW); + mat.mDiffuseMap->setLoadedCallback(LLModelPreview::textureLoadedCallback, 0, TRUE, FALSE, this->mPreview, NULL, NULL); + + mat.mDiffuseMap->forceToSaveRawImage(); + mat.mDiffuseMapFilename = filename; + mat.mDiffuseMapLabel = getElementLabel(material); + } + } + } + } + } + } + } + + domCommon_color_or_texture_type_complexType::domColor* color = + daeSafeCast(diffuse->getDescendant("color")); + if (color) + { + domFx_color_common domfx_color = color->getValue(); + LLColor4 value = LLColor4(domfx_color[0], domfx_color[1], domfx_color[2], domfx_color[3]); + mat.mDiffuseColor = value; + } + } + + daeElement* emission = material->getDescendant("emission"); + if (emission) + { + LLColor4 emission_color = getDaeColor(emission); + if (((emission_color[0] + emission_color[1] + emission_color[2]) / 3.0) > 0.25) + { + mat.mFullbright = TRUE; + } + } + + return mat; +} + +// try to get a decent label for this element +std::string LLModelLoader::getElementLabel(daeElement *element) +{ + // if we have a name attribute, use it + std::string name = element->getAttribute("name"); + if (name.length()) + { + return name; + } + + // if we have an ID attribute, use it + if (element->getID()) + { + return std::string(element->getID()); + } + + // if we have a parent, use it + daeElement* parent = element->getParent(); + if (parent) + { + // if parent has a name, use it + std::string name = parent->getAttribute("name"); + if (name.length()) + { + return name; + } + + // if parent has an ID, use it + if (parent->getID()) + { + return std::string(parent->getID()); + } + } + + // try to use our type + daeString element_name = element->getElementName(); + if (element_name) + { + return std::string(element_name); + } + + // if all else fails, use "object" + return std::string("object"); +} + +LLColor4 LLModelLoader::getDaeColor(daeElement* element) +{ + LLColor4 value; + domCommon_color_or_texture_type_complexType::domColor* color = + daeSafeCast(element->getDescendant("color")); + if (color) + { + domFx_color_common domfx_color = color->getValue(); + value = LLColor4(domfx_color[0], domfx_color[1], domfx_color[2], domfx_color[3]); + } + + return value; +} + +//----------------------------------------------------------------------------- +// LLModelPreview +//----------------------------------------------------------------------------- + +LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloaterModelPreview* fmp) +: LLViewerDynamicTexture(width, height, 3, ORDER_MIDDLE, FALSE), LLMutex(NULL) +{ + mNeedsUpdate = TRUE; + mCameraDistance = 0.f; + mCameraYaw = 0.f; + mCameraPitch = 0.f; + mCameraZoom = 1.f; + mTextureName = 0; + mPreviewLOD = 3; + mModelLoader = NULL; + + mLODMode[0] = 0; + + for (U32 i = 1; i < LLModel::NUM_LODS; i++) + { + mLODMode[i] = 1; + mLimit[i] = 0; + } + + mFMP = fmp; + + glodInit(); +} + +LLModelPreview::~LLModelPreview() +{ + if (mModelLoader) + { + delete mModelLoader; + mModelLoader = NULL; + } + + //*HACK : *TODO : turn this back on when we understand why this crashes + //glodShutdown(); +} + +U32 LLModelPreview::calcResourceCost() +{ + rebuildUploadData(); + + U32 cost = 0; + std::set accounted; + U32 num_points = 0; + U32 num_hulls = 0; + + for (U32 i = 0; i < mUploadData.size(); ++i) + { + LLModelInstance& instance = mUploadData[i]; + + if (accounted.find(instance.mModel) == accounted.end()) + { + accounted.insert(instance.mModel); + + LLModel::physics_shape& physics_shape = instance.mLOD[LLModel::LOD_PHYSICS] ? instance.mLOD[LLModel::LOD_PHYSICS]->mPhysicsShape : instance.mModel->mPhysicsShape; + + LLSD ret = LLModel::writeModel("", + instance.mLOD[4], + instance.mLOD[3], + instance.mLOD[2], + instance.mLOD[1], + instance.mLOD[0], + physics_shape, + TRUE); + cost += gMeshRepo.calcResourceCost(ret); + + + num_hulls += physics_shape.size(); + for (U32 i = 0; i < physics_shape.size(); ++i) + { + num_points += physics_shape[i].size(); + } + } + } + + mFMP->childSetTextArg(info_name[LLModel::LOD_PHYSICS], "[HULLS]", llformat("%d",num_hulls)); + mFMP->childSetTextArg(info_name[LLModel::LOD_PHYSICS], "[POINTS]", llformat("%d",num_points)); + + updateStatusMessages(); + + return cost; +} + +void LLModelPreview::rebuildUploadData() +{ + mUploadData.clear(); + mTextureSet.clear(); + + //fill uploaddata instance vectors from scene data + + for (LLModelLoader::scene::iterator iter = mBaseScene.begin(); iter != mBaseScene.end(); ++iter) + { //for each transform in scene + for (LLModelLoader::model_instance_list::iterator model_iter = iter->second.begin(); model_iter != iter->second.end(); ++model_iter) + { //for each instance with said transform applied + LLModelInstance& instance = *model_iter; + + LLModel* base_model = instance.mModel; + + S32 idx = 0; + for (idx = 0; idx < mBaseModel.size(); ++idx) + { //find reference instance for this model + if (mBaseModel[idx] == base_model) + { + break; + } + } + + for (U32 i = 0; i < LLModel::NUM_LODS; i++) + { //fill LOD slots based on reference model index + if (!mModel[i].empty()) + { + instance.mLOD[i] = mModel[i][idx]; + } + else + { + instance.mLOD[i] = NULL; + } + } + + mUploadData.push_back(instance); + } + } +} + + +void LLModelPreview::loadModel(std::string filename, S32 lod) +{ + LLMutexLock lock(this); + + if (mModelLoader) + { + delete mModelLoader; + mModelLoader = NULL; + } + + if (filename.empty() && mBaseModel.empty()) + { + mFMP->closeFloater(false); + return; + } + + if (lod == 3 && !mGroup.empty()) + { + for (std::map::iterator iter = mGroup.begin(); iter != mGroup.end(); ++iter) + { + glodDeleteGroup(iter->second); + stop_gloderror(); + } + + for (std::map::iterator iter = mObject.begin(); iter != mObject.end(); ++iter) + { + glodDeleteObject(iter->second); + stop_gloderror(); + } + + mGroup.clear(); + mObject.clear(); + } + + mModelLoader = new LLModelLoader(filename, lod, this); + + mModelLoader->start(); + + mFMP->childSetTextArg("status", "[STATUS]", mFMP->getString("status_reading_file")); + + if (mFMP->childGetValue("description_form").asString().empty()) + { + std::string name = gDirUtilp->getBaseFileName(filename, true); + mFMP->childSetValue("description_form", name); + } + + mFMP->openFloater(); +} + +void LLModelPreview::clearIncompatible(S32 lod) +{ + for (U32 i = 0; i <= LLModel::LOD_HIGH; i++) + { //clear out any entries that aren't compatible with this model + if (i != lod) + { + if (mModel[i].size() != mModel[lod].size()) + { + mModel[i].clear(); + mScene[i].clear(); + mVertexBuffer[i].clear(); + + if (i == LLModel::LOD_HIGH) + { + mBaseModel = mModel[lod]; + mBaseScene = mScene[lod]; + mVertexBuffer[5].clear(); + } + } + } + } +} + +void LLModelPreview::loadModelCallback(S32 lod) +{ //NOT the main thread + LLMutexLock lock(this); + if (!mModelLoader) + { + return; + } + + mModel[lod] = mModelLoader->mModelList; + mScene[lod] = mModelLoader->mScene; + mVertexBuffer[lod].clear(); + + setPreviewLOD(lod); + + + if (lod == LLModel::LOD_HIGH) + { //save a copy of the highest LOD for automatic LOD manipulation + mBaseModel = mModel[lod]; + mBaseScene = mScene[lod]; + mVertexBuffer[5].clear(); + //mModel[lod] = NULL; + } + + clearIncompatible(lod); + + mResourceCost = calcResourceCost(); + + mPreviewTarget = (mModelLoader->mExtents[0] + mModelLoader->mExtents[1]) * 0.5f; + mPreviewScale = (mModelLoader->mExtents[1] - mModelLoader->mExtents[0]) * 0.5f; + setPreviewTarget(mPreviewScale.magVec()*2.f); + + mFMP->mLoading = FALSE; + refresh(); +} + +void LLModelPreview::smoothNormals() +{ + S32 which_lod = mPreviewLOD; + + + if (which_lod > 4 || which_lod < 0 || + mModel[which_lod].empty()) + { + return; + } + + F32 angle_cutoff = mFMP->childGetValue("edge threshold").asReal(); + + angle_cutoff *= DEG_TO_RAD; + + if (which_lod == 3 && !mBaseModel.empty()) + { + for (LLModelLoader::model_list::iterator iter = mBaseModel.begin(); iter != mBaseModel.end(); ++iter) + { + (*iter)->smoothNormals(angle_cutoff); + } + + mVertexBuffer[5].clear(); + } + + for (LLModelLoader::model_list::iterator iter = mModel[which_lod].begin(); iter != mModel[which_lod].end(); ++iter) + { + (*iter)->smoothNormals(angle_cutoff); + } + + mVertexBuffer[which_lod].clear(); + refresh(); + +} + +void LLModelPreview::consolidate() +{ + std::map > composite; + + LLMatrix4 identity; + + //bake out each node in current scene to composite + for (LLModelLoader::scene::iterator iter = mScene[mPreviewLOD].begin(); iter != mScene[mPreviewLOD].end(); ++iter) + { //for each transform in current scene + LLMatrix4 mat = iter->first; + glh::matrix4f inv_trans = glh::matrix4f((F32*) mat.mMatrix).inverse().transpose(); + LLMatrix4 norm_mat(inv_trans.m); + + for (LLModelLoader::model_instance_list::iterator model_iter = iter->second.begin(); model_iter != iter->second.end(); ++model_iter) + { //for each instance with that transform + LLModelInstance& source_instance = *model_iter; + LLModel* source = source_instance.mModel; + + if (!validate_model(source)) + { + llerrs << "Invalid model found!" << llendl; + } + + for (S32 i = 0; i < source->getNumVolumeFaces(); ++i) + { //for each face in instance + const LLVolumeFace& src_face = source->getVolumeFace(i); + LLImportMaterial& source_material = source_instance.mMaterial[i]; + + //get model in composite that is composite for this material + LLModel* model = NULL; + + if (composite.find(source_material) != composite.end()) + { + model = composite[source_material].rbegin()->mModel; + if (model->getVolumeFace(0).mNumVertices + src_face.mNumVertices > 65535) + { + model = NULL; + } + } + + if (model == NULL) + { //no model found, make new model + std::vector materials; + materials.push_back(source_material); + LLVolumeParams volume_params; + volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE); + model = new LLModel(volume_params, 0.f); + model->mLabel = source->mLabel; + model->setNumVolumeFaces(0); + composite[source_material].push_back(LLModelInstance(model, identity, materials)); + } + + model->appendFace(src_face, source->mMaterialList[i], mat, norm_mat); + } + } + } + + + //condense composite into as few LLModel instances as possible + LLModelLoader::model_list new_model; + std::vector instance_list; + + LLVolumeParams volume_params; + volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE); + + std::vector empty_material; + LLModelInstance cur_instance(new LLModel(volume_params, 0.f), identity, empty_material); + cur_instance.mModel->setNumVolumeFaces(0); + + BOOL first_transform = TRUE; + + LLModelLoader::scene new_scene; + LLVector3 min,max; + + for (std::map >::iterator iter = composite.begin(); + iter != composite.end(); + ++iter) + { + std::map >::iterator next_iter = iter; ++next_iter; + + for (std::vector::iterator instance_iter = iter->second.begin(); + instance_iter != iter->second.end(); + ++instance_iter) + { + LLModel* source = instance_iter->mModel; + + if (instance_iter->mMaterial.size() != 1) + { + llerrs << "WTF?" << llendl; + } + + if (source->getNumVolumeFaces() != 1) + { + llerrs << "WTF?" << llendl; + } + + if (source->mMaterialList.size() != 1) + { + llerrs << "WTF?" << llendl; + } + + cur_instance.mModel->addFace(source->getVolumeFace(0)); + cur_instance.mMaterial.push_back(instance_iter->mMaterial[0]); + cur_instance.mModel->mMaterialList.push_back(source->mMaterialList[0]); + + BOOL last_model = FALSE; + + std::vector::iterator next_instance = instance_iter; ++next_instance; + + if (next_iter == composite.end() && + next_instance == iter->second.end()) + { + last_model = TRUE; + } + + if (last_model || cur_instance.mModel->getNumVolumeFaces() >= MAX_MODEL_FACES) + { + cur_instance.mModel->mLabel = source->mLabel; + + cur_instance.mModel->optimizeVolumeFaces(); + cur_instance.mModel->normalizeVolumeFaces(); + + if (!validate_model(cur_instance.mModel)) + { + llerrs << "Invalid model detected." << llendl; + } + + new_model.push_back(cur_instance.mModel); + + LLMatrix4 transformation = LLMatrix4(); + + // adjust the transformation to compensate for mesh normalization + LLVector3 mesh_scale_vector; + LLVector3 mesh_translation_vector; + cur_instance.mModel->getNormalizedScaleTranslation(mesh_scale_vector, mesh_translation_vector); + + LLMatrix4 mesh_translation; + mesh_translation.setTranslation(mesh_translation_vector); + mesh_translation *= transformation; + transformation = mesh_translation; + + LLMatrix4 mesh_scale; + mesh_scale.initScale(mesh_scale_vector); + mesh_scale *= transformation; + transformation = mesh_scale; + + cur_instance.mTransform = transformation; + + new_scene[transformation].push_back(cur_instance); + stretch_extents(cur_instance.mModel, transformation, min, max, first_transform); + + if (!last_model) + { + cur_instance = LLModelInstance(new LLModel(volume_params, 0.f), identity, empty_material); + cur_instance.mModel->setNumVolumeFaces(0); + } + } + } + } + + mScene[mPreviewLOD] = new_scene; + mModel[mPreviewLOD] = new_model; + mVertexBuffer[mPreviewLOD].clear(); + + if (mPreviewLOD == LLModel::LOD_HIGH) + { + mBaseScene = new_scene; + mBaseModel = new_model; + mVertexBuffer[5].clear(); + } + + mPreviewTarget = (min+max)*0.5f; + mPreviewScale = (max-min)*0.5f; + setPreviewTarget(mPreviewScale.magVec()*2.f); + + clearIncompatible(mPreviewLOD); + + mResourceCost = calcResourceCost(); + refresh(); +} + +void LLModelPreview::scrubMaterials() +{ + for (LLModelLoader::scene::iterator iter = mScene[mPreviewLOD].begin(); iter != mScene[mPreviewLOD].end(); ++iter) + { //for each transform in current scene + for (LLModelLoader::model_instance_list::iterator model_iter = iter->second.begin(); model_iter != iter->second.end(); ++model_iter) + { //for each instance with that transform + LLModelInstance& source_instance = *model_iter; + LLModel* source = source_instance.mModel; + + for (S32 i = 0; i < source->getNumVolumeFaces(); ++i) + { //for each face in instance + LLImportMaterial& source_material = source_instance.mMaterial[i]; + + //clear material info + source_material.mDiffuseColor = LLColor4(1,1,1,1); + source_material.mDiffuseMap = NULL; + source_material.mDiffuseMapFilename.clear(); + source_material.mDiffuseMapLabel.clear(); + source_material.mFullbright = false; + } + } + } + + + mVertexBuffer[mPreviewLOD].clear(); + + if (mPreviewLOD == LLModel::LOD_HIGH) + { + mBaseScene = mScene[mPreviewLOD]; + mBaseModel = mModel[mPreviewLOD]; + mVertexBuffer[5].clear(); + } + + mResourceCost = calcResourceCost(); + refresh(); +} + +void LLModelPreview::genLODs(S32 which_lod) +{ + if (mBaseModel.empty()) + { + return; + } + + LLVertexBuffer::unbind(); + + stop_gloderror(); + static U32 cur_name = 1; + + S32 limit = -1; + + if (which_lod != -1) + { + limit = mLimit[which_lod]; + } + + U32 triangle_count = 0; + + for (LLModelLoader::model_list::iterator iter = mBaseModel.begin(); iter != mBaseModel.end(); ++iter) + { + LLModel* mdl = *iter; + for (S32 i = 0; i < mdl->getNumVolumeFaces(); ++i) + { + triangle_count += mdl->getVolumeFace(i).mNumIndices/3; + } + } + + U32 base_triangle_count = triangle_count; + + U32 type_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0; + + for (LLModelLoader::model_list::iterator iter = mBaseModel.begin(); iter != mBaseModel.end(); ++iter) + { //build GLOD objects for each model in base model list + LLModel* mdl = *iter; + if (mGroup[mdl] == 0) + { + mGroup[mdl] = cur_name++; + mObject[mdl] = cur_name++; + + glodNewGroup(mGroup[mdl]); + stop_gloderror(); + + glodGroupParameteri(mGroup[mdl], GLOD_ADAPT_MODE, GLOD_TRIANGLE_BUDGET); + stop_gloderror(); + + glodGroupParameteri(mGroup[mdl], GLOD_ERROR_MODE, GLOD_OBJECT_SPACE_ERROR); + stop_gloderror(); + + glodGroupParameterf(mGroup[mdl], GLOD_OBJECT_SPACE_ERROR_THRESHOLD, 0.025f); + stop_gloderror(); + + glodNewObject(mObject[mdl], mGroup[mdl], GLOD_DISCRETE); + stop_gloderror(); + + if (iter == mBaseModel.begin() && !mdl->mSkinWeights.empty()) + { //regenerate vertex buffer for skinned models to prevent animation feedback during LOD generation + mVertexBuffer[5].clear(); + } + + if (mVertexBuffer[5].empty()) + { + genBuffers(5); + } + + U32 tri_count = 0; + for (U32 i = 0; i < mVertexBuffer[5][mdl].size(); ++i) + { + mVertexBuffer[5][mdl][i]->setBuffer(type_mask); + U32 num_indices = mVertexBuffer[5][mdl][i]->getNumIndices(); + if (num_indices > 2) + { + glodInsertElements(mObject[mdl], i, GL_TRIANGLES, num_indices, GL_UNSIGNED_SHORT, mVertexBuffer[5][mdl][i]->getIndicesPointer(), 0, 0.f); + } + tri_count += num_indices/3; + stop_gloderror(); + } + + //store what percentage of total model (in terms of triangle count) this model makes up + mPercentage[mdl] = (F32) tri_count / (F32) base_triangle_count; + + //build glodobject + glodBuildObject(mObject[mdl]); + if (stop_gloderror()) + { + glodDeleteGroup(mGroup[mdl]); + stop_gloderror(); + glodDeleteObject(mObject[mdl]); + stop_gloderror(); + + mGroup[mdl] = 0; + mObject[mdl] = 0; + + if (which_lod == -1) + { + mModel[LLModel::LOD_HIGH] = mBaseModel; + } + + return; + } + + } + + if (which_lod == -1 || mLODMode[which_lod] == 1) + { + //generating LODs for all entries, or this entry has a triangle budget + glodGroupParameteri(mGroup[mdl], GLOD_ADAPT_MODE, GLOD_TRIANGLE_BUDGET); + stop_gloderror(); + } + else + { + //this entry uses error mode + glodGroupParameteri(mGroup[mdl], GLOD_ADAPT_MODE, GLOD_OBJECT_SPACE_ERROR); + stop_gloderror(); + } + + if (which_lod != -1 && mLODMode[which_lod] == 2) + { + glodGroupParameterf(mGroup[mdl], GLOD_OBJECT_SPACE_ERROR_THRESHOLD, llmax(limit/100.f, 0.01f)); + stop_gloderror(); + } + else + { + glodGroupParameterf(mGroup[mdl], GLOD_OBJECT_SPACE_ERROR_THRESHOLD, 0.025f); + stop_gloderror(); + } + } + + + S32 start = LLModel::LOD_HIGH; + S32 end = 0; + + BOOL error_mode = FALSE; + + if (which_lod != -1) + { + start = end = which_lod; + + if (mLODMode[which_lod] == 2) + { + error_mode = TRUE; + } + } + + + for (S32 lod = start; lod >= end; --lod) + { + if (!error_mode) + { + if (which_lod == -1) + { + if (lod < start) + { + triangle_count /= 3; + } + } + else + { + triangle_count = limit; + } + } + + mModel[lod].clear(); + mModel[lod].resize(mBaseModel.size()); + mVertexBuffer[lod].clear(); + + U32 actual_tris = 0; + U32 actual_verts = 0; + U32 submeshes = 0; + + for (U32 mdl_idx = 0; mdl_idx < mBaseModel.size(); ++mdl_idx) + { + LLModel* base = mBaseModel[mdl_idx]; + + U32 target_count = U32(mPercentage[base]*triangle_count); + + if (error_mode) + { + target_count = base->getNumTriangles(); + } + + if (target_count < 4) + { + target_count = 4; + } + + if (which_lod == -1 || mLODMode[which_lod] == 1) + { + glodGroupParameteri(mGroup[base], GLOD_MAX_TRIANGLES, target_count); + stop_gloderror(); + } + + glodAdaptGroup(mGroup[base]); + stop_gloderror(); + + GLint patch_count = 0; + glodGetObjectParameteriv(mObject[base], GLOD_NUM_PATCHES, &patch_count); + stop_gloderror(); + + LLVolumeParams volume_params; + volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE); + mModel[lod][mdl_idx] = new LLModel(volume_params, 0.f); + + GLint* sizes = new GLint[patch_count*2]; + glodGetObjectParameteriv(mObject[base], GLOD_PATCH_SIZES, sizes); + stop_gloderror(); + + GLint* names = new GLint[patch_count]; + glodGetObjectParameteriv(mObject[base], GLOD_PATCH_NAMES, names); + stop_gloderror(); + + mModel[lod][mdl_idx]->setNumVolumeFaces(patch_count); + + LLModel* target_model = mModel[lod][mdl_idx]; + + for (GLint i = 0; i < patch_count; ++i) + { + LLPointer buff = new LLVertexBuffer(type_mask, 0); + + if (sizes[i*2+1] > 0 && sizes[i*2] > 0) + { + buff->allocateBuffer(sizes[i*2+1], sizes[i*2], true); + buff->setBuffer(type_mask); + glodFillElements(mObject[base], names[i], GL_UNSIGNED_SHORT, buff->getIndicesPointer()); + stop_gloderror(); + } + else + { //this face was eliminated, create a dummy triangle (one vertex, 3 indices, all 0) + buff->allocateBuffer(1, 3, true); + memset(buff->getMappedData(), 0, buff->getSize()); + memset(buff->getIndicesPointer(), 0, buff->getIndicesSize()); + } + + buff->validateRange(0, buff->getNumVerts()-1, buff->getNumIndices(), 0); + + LLStrider pos; + LLStrider norm; + LLStrider tc; + LLStrider index; + + buff->getVertexStrider(pos); + buff->getNormalStrider(norm); + buff->getTexCoord0Strider(tc); + buff->getIndexStrider(index); + + + target_model->setVolumeFaceData(names[i], pos, norm, tc, index, buff->getNumVerts(), buff->getNumIndices()); + actual_tris += buff->getNumIndices()/3; + actual_verts += buff->getNumVerts(); + ++submeshes; + + if (!validate_face(target_model->getVolumeFace(names[i]))) + { + llerrs << "Invalid face generated during LOD generation." << llendl; + } + } + + //blind copy skin weights and just take closest skin weight to point on + //decimated mesh for now (auto-generating LODs with skin weights is still a bit + //of an open problem). + target_model->mPosition = base->mPosition; + target_model->mSkinWeights = base->mSkinWeights; + target_model->mJointMap = base->mJointMap; + target_model->mJointList = base->mJointList; + target_model->mInvBindMatrix = base->mInvBindMatrix; + target_model->mBindShapeMatrix = base->mBindShapeMatrix; + + if (!validate_model(target_model)) + { + llerrs << "Invalid model generated when creating LODs" << llendl; + } + + delete [] sizes; + delete [] names; + } + + //rebuild scene based on mBaseScene + mScene[lod].clear(); + mScene[lod] = mBaseScene; + + for (U32 i = 0; i < mBaseModel.size(); ++i) + { + LLModel* mdl = mBaseModel[i]; + LLModel* target = mModel[lod][i]; + if (target) + { + for (LLModelLoader::scene::iterator iter = mScene[lod].begin(); iter != mScene[lod].end(); ++iter) + { + for (U32 j = 0; j < iter->second.size(); ++j) + { + if (iter->second[j].mModel == mdl) + { + iter->second[j].mModel = target; + } + } + } + } + } + + mResourceCost = calcResourceCost(); + } +} + +void LLModelPreview::updateStatusMessages() +{ + //triangle/vertex/submesh count for each mesh asset for each lod + std::vector tris[LLModel::NUM_LODS]; + std::vector verts[LLModel::NUM_LODS]; + std::vector submeshes[LLModel::NUM_LODS]; + + //total triangle/vertex/submesh count for each lod + S32 total_tris[LLModel::NUM_LODS]; + S32 total_verts[LLModel::NUM_LODS]; + S32 total_submeshes[LLModel::NUM_LODS]; + + for (S32 lod = 0; lod <= LLModel::LOD_HIGH; ++lod) + { + //initialize total for this lod to 0 + total_tris[lod] = total_verts[lod] = total_submeshes[lod] = 0; + + for (U32 i = 0; i < mModel[lod].size(); ++i) + { //for each model in the lod + S32 cur_tris = 0; + S32 cur_verts = 0; + S32 cur_submeshes = mModel[lod][i]->getNumVolumeFaces(); + + for (S32 j = 0; j < cur_submeshes; ++j) + { //for each submesh (face), add triangles and vertices to current total + const LLVolumeFace& face = mModel[lod][i]->getVolumeFace(j); + cur_tris += face.mNumIndices/3; + cur_verts += face.mNumVertices; + } + + //add this model to the lod total + total_tris[lod] += cur_tris; + total_verts[lod] += cur_verts; + total_submeshes[lod] += cur_submeshes; + + //store this model's counts to asset data + tris[lod].push_back(cur_tris); + verts[lod].push_back(cur_verts); + submeshes[lod].push_back(cur_submeshes); + } + } + + + std::string upload_message; + + for (S32 lod = 0; lod <= LLModel::LOD_HIGH; ++lod) + { + mFMP->childSetTextArg(info_name[lod], "[TRIANGLES]", llformat("%d", total_tris[lod])); + mFMP->childSetTextArg(info_name[lod], "[VERTICES]", llformat("%d", total_verts[lod])); + mFMP->childSetTextArg(info_name[lod], "[SUBMESHES]", llformat("%d", total_submeshes[lod])); + + std::string message = "good"; + + const U32 lod_high = LLModel::LOD_HIGH; + + if (lod != lod_high) + { + if (total_submeshes[lod] == 0) + { //no model loaded for this lod, see if one is required + for (U32 i = 0; i < verts[lod_high].size(); ++i) + { + const F32 ratio = 0.5f; + const S32 required_verts = 128; + + F32 scaler = powf(0.5f, lod_high-lod); + S32 max_verts = verts[lod_high][i]*scaler; + + if (max_verts > required_verts) + { //some model in this slot might have more than 128 vertices + + //if any model higher up the chain has more than 128 vertices, + // lod is required here + for (S32 j = lod+1; j <= LLModel::LOD_HIGH; ++j) + { + if (verts[j].size() > i && verts[j][i] > 128) + { + message = "required"; + upload_message = "missing_lod"; + } + } + } + } + } + else if (total_submeshes[lod] != total_submeshes[lod_high]) + { + message = "mesh_mismatch"; + upload_message = "bad_lod"; + } + else if (tris[lod].size() != tris[lod_high].size()) + { + message = "model_mismatch"; + upload_message = "bad_lod"; + } + else + { + for (U32 i = 0; i < verts[lod].size(); ++i) + { + const F32 ratio = 0.5f; + + F32 scaler = powf(0.5f, lod_high-lod); + S32 max_verts = verts[lod_high][i]*scaler; + + if (verts[lod][i] > max_verts) + { + message = "too_heavy"; + upload_message = "bad_lod"; + } + } + } + } + + mFMP->childSetTextArg(info_name[lod], "[MESSAGE]", mFMP->getString(message)); + } + + if (upload_message.empty()) + { + mFMP->childSetTextArg("upload_message", "[MESSAGE]", std::string("")); + mFMP->childEnable("ok_btn"); + } + else + { + mFMP->childSetTextArg("upload_message", "[MESSAGE]", mFMP->getString(upload_message)); + mFMP->childDisable("ok_btn"); + } +} + +void LLModelPreview::setPreviewTarget(F32 distance) +{ + mCameraDistance = distance; + mCameraZoom = 1.f; + mCameraPitch = 0.f; + mCameraYaw = 0.f; + mCameraOffset.clearVec(); +} + +void LLModelPreview::genBuffers(S32 lod) +{ + U32 tri_count = 0; + U32 vertex_count = 0; + U32 mesh_count = 0; + + LLModelLoader::model_list* model = NULL; + + if (lod < 0 || lod > 4) + { + model = &mBaseModel; + lod = 5; + } + else + { + model = &(mModel[lod]); + } + + if (!mVertexBuffer[lod].empty()) + { + mVertexBuffer[lod].clear(); + } + + mVertexBuffer[lod].clear(); + + LLModelLoader::model_list::iterator base_iter = mBaseModel.begin(); + + for (LLModelLoader::model_list::iterator iter = model->begin(); iter != model->end(); ++iter) + { + LLModel* mdl = *iter; + if (!mdl) + { + continue; + } + + LLModel* base_mdl = *base_iter; + base_iter++; + + for (S32 i = 0; i < mdl->getNumVolumeFaces(); ++i) + { + const LLVolumeFace &vf = mdl->getVolumeFace(i); + U32 num_vertices = vf.mNumVertices; + U32 num_indices = vf.mNumIndices; + + if (!num_vertices || ! num_indices) + { + continue; + } + + LLVertexBuffer* vb = NULL; + + bool skinned = !mdl->mSkinWeights.empty(); + + U32 mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0; + + if (skinned) + { + mask |= LLVertexBuffer::MAP_WEIGHT4; + } + + vb = new LLVertexBuffer(mask, 0); + + vb->allocateBuffer(num_vertices, num_indices, TRUE); + + LLStrider vertex_strider; + LLStrider normal_strider; + LLStrider tc_strider; + LLStrider index_strider; + LLStrider weights_strider; + + vb->getVertexStrider(vertex_strider); + vb->getNormalStrider(normal_strider); + vb->getTexCoord0Strider(tc_strider); + vb->getIndexStrider(index_strider); + + if (skinned) + { + vb->getWeight4Strider(weights_strider); + } + + LLVector4a::memcpyNonAliased16((F32*) vertex_strider.get(), (F32*) vf.mPositions, num_vertices*4*sizeof(F32)); + LLVector4a::memcpyNonAliased16((F32*) tc_strider.get(), (F32*) vf.mTexCoords, num_vertices*2*sizeof(F32)); + LLVector4a::memcpyNonAliased16((F32*) normal_strider.get(), (F32*) vf.mNormals, num_vertices*4*sizeof(F32)); + + if (skinned) + { + // build vertices and normals + for (U32 i = 0; i < num_vertices; i++) + { + //find closest weight to vf.mVertices[i].mPosition + LLVector3 pos(vf.mPositions[i].getF32ptr()); + + LLModel::weight_list weight_list = base_mdl->getJointInfluences(pos); + + LLVector4 w(0,0,0,0); + if (weight_list.size() > 4) + { + llerrs << "WTF?" << llendl; + } + + for (U32 i = 0; i < weight_list.size(); ++i) + { + F32 wght = llmin(weight_list[i].mWeight, 0.999999f); + F32 joint = (F32) weight_list[i].mJointIdx; + w.mV[i] = joint + wght; + } + + *(weights_strider++) = w; + } + } + + // build indices + for (U32 i = 0; i < num_indices; i++) + { + *(index_strider++) = vf.mIndices[i]; + } + + mVertexBuffer[lod][mdl].push_back(vb); + + vertex_count += num_vertices; + tri_count += num_indices/3; + ++mesh_count; + + } + } + + if (lod == 4) + { + for (U32 i = 0; i < 4; i++) + { + LLSpinCtrl* lim = mFMP->getChild(limit_name[i], TRUE); + + lim->setMaxValue(tri_count); + } + } +} + +//----------------------------------------------------------------------------- +// render() +//----------------------------------------------------------------------------- +BOOL LLModelPreview::render() +{ + LLMutexLock lock(this); + mNeedsUpdate = FALSE; + + S32 width = getWidth(); + S32 height = getHeight(); + + LLGLSUIDefault def; + LLGLDisable no_blend(GL_BLEND); + LLGLEnable cull(GL_CULL_FACE); + LLGLDepthTest depth(GL_TRUE); + LLGLDisable fog(GL_FOG); + + glMatrixMode(GL_PROJECTION); + gGL.pushMatrix(); + glLoadIdentity(); + glOrtho(0.0f, width, 0.0f, height, -1.0f, 1.0f); + + glMatrixMode(GL_MODELVIEW); + gGL.pushMatrix(); + glLoadIdentity(); + + gGL.color4f(0.15f, 0.2f, 0.3f, 1.f); + + gl_rect_2d_simple( width, height ); + + bool avatar_preview = false; + for (LLModelLoader::scene::iterator iter = mScene[mPreviewLOD].begin(); iter != mScene[mPreviewLOD].end(); ++iter) + { + for (LLModelLoader::model_instance_list::iterator model_iter = iter->second.begin(); model_iter != iter->second.end(); ++model_iter) + { + LLModelInstance& instance = *model_iter; + LLModel* model = instance.mModel; + if (!model->mSkinWeights.empty()) + { + avatar_preview = true; + } + } + } + + mFMP->childSetEnabled("consolidate", !avatar_preview); + + F32 explode = mFMP->childGetValue("explode").asReal(); + + glMatrixMode(GL_PROJECTION); + gGL.popMatrix(); + + glMatrixMode(GL_MODELVIEW); + gGL.popMatrix(); + + glClear(GL_DEPTH_BUFFER_BIT); + + LLViewerCamera::getInstance()->setAspect((F32) width / height ); + LLViewerCamera::getInstance()->setView(LLViewerCamera::getInstance()->getDefaultFOV() / mCameraZoom); + + LLVector3 target_pos = mPreviewTarget; + LLVector3 offset = mCameraOffset; + + F32 z_near = llmax(mCameraDistance-mPreviewScale.magVec(), 0.001f); + F32 z_far = mCameraDistance+mPreviewScale.magVec(); + + if (avatar_preview) + { + target_pos = gAgentAvatarp->getPositionAgent(); + z_near = 0.01f; + z_far = 1024.f; + mCameraDistance = 16.f; + + //render avatar previews every frame + refresh(); + } + + LLQuaternion camera_rot = LLQuaternion(mCameraPitch, LLVector3::y_axis) * + LLQuaternion(mCameraYaw, LLVector3::z_axis); + + LLQuaternion av_rot = camera_rot; + LLViewerCamera::getInstance()->setOriginAndLookAt( + target_pos + ((LLVector3(mCameraDistance, 0.f, 0.f) + offset) * av_rot), // camera + LLVector3::z_axis, // up + target_pos); // point of interest + + + LLViewerCamera::getInstance()->setPerspective(FALSE, mOrigin.mX, mOrigin.mY, width, height, FALSE, z_near, z_far); + + stop_glerror(); + + gPipeline.enableLightsAvatar(); + + gGL.pushMatrix(); + const F32 BRIGHTNESS = 0.9f; + gGL.color3f(BRIGHTNESS, BRIGHTNESS, BRIGHTNESS); + + LLGLEnable normalize(GL_NORMALIZE); + + if (!mBaseModel.empty() && mVertexBuffer[5].empty()) + { + genBuffers(-1); + genBuffers(3); + //genLODs(); + } + + bool physics = (mPreviewLOD == LLModel::LOD_PHYSICS); + + S32 physics_idx = -1; + + bool render_mesh = true; + bool render_hull = false; + + if (physics && mFMP->mDecompFloater) + { + physics_idx = mFMP->mDecompFloater->childGetValue("model").asInteger(); + render_mesh = mFMP->mDecompFloater->childGetValue("render_mesh").asBoolean(); + render_hull = mFMP->mDecompFloater->childGetValue("render_hull").asBoolean(); + } + + if (!mModel[mPreviewLOD].empty()) + { + if (mVertexBuffer[mPreviewLOD].empty()) + { + genBuffers(mPreviewLOD); + } + + if (!avatar_preview) + { + for (LLModelLoader::scene::iterator iter = mScene[mPreviewLOD].begin(); iter != mScene[mPreviewLOD].end(); ++iter) + { + gGL.pushMatrix(); + LLMatrix4 mat = iter->first; + + glMultMatrixf((GLfloat*) mat.mMatrix); + + for (LLModelLoader::model_instance_list::iterator model_iter = iter->second.begin(); model_iter != iter->second.end(); ++model_iter) + { + LLModelInstance& instance = *model_iter; + LLModel* model = instance.mModel; + + if (instance.mTransform != mat) + { + llerrs << "WTF?" << llendl; + } + + if (render_mesh) + { + for (U32 i = 0; i < mVertexBuffer[mPreviewLOD][model].size(); ++i) + { + LLVertexBuffer* buffer = mVertexBuffer[mPreviewLOD][model][i]; + + buffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0); + if (physics) + { + if (physics_idx > -1 && model == mModel[mPreviewLOD][physics_idx]) + { + glColor4f(1,0,0,1); + } + else + { + glColor4f(0.75f, 0.75f, 0.75f, 1.f); + } + } + else + { + glColor4fv(instance.mMaterial[i].mDiffuseColor.mV); + if (i < instance.mMaterial.size() && instance.mMaterial[i].mDiffuseMap.notNull()) + { + gGL.getTexUnit(0)->bind(instance.mMaterial[i].mDiffuseMap, true); + if (instance.mMaterial[i].mDiffuseMap->getDiscardLevel() > -1) + { + mTextureSet.insert(instance.mMaterial[i].mDiffuseMap); + } + } + } + + buffer->drawRange(LLRender::TRIANGLES, 0, buffer->getNumVerts()-1, buffer->getNumIndices(), 0); + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + glColor3f(0.4f, 0.4f, 0.4f); + + if (mFMP->childGetValue("show edges").asBoolean()) + { + glLineWidth(3.f); + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + buffer->drawRange(LLRender::TRIANGLES, 0, buffer->getNumVerts()-1, buffer->getNumIndices(), 0); + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + glLineWidth(1.f); + } + } + } + + if (render_hull) + { + LLPhysicsDecomp* decomp = gMeshRepo.mDecompThread; + if (decomp) + { + LLMutexLock(decomp->mMutex); + + std::map > >::iterator iter = + mPhysicsMesh.find(model); + if (iter != mPhysicsMesh.end()) + { + for (U32 i = 0; i < iter->second.size(); ++i) + { + if (explode > 0.f) + { + gGL.pushMatrix(); + + LLVector3 offset = model->mHullCenter[i]-model->mPhysicsCenter; + offset *= explode; + + gGL.translatef(offset.mV[0], offset.mV[1], offset.mV[2]); + } + + static std::vector hull_colors; + + if (i+1 >= hull_colors.size()) + { + hull_colors.push_back(LLColor4U(rand()%128+127, rand()%128+127, rand()%128+127, 255)); + } + + LLVertexBuffer* buff = iter->second[i]; + if (buff) + { + buff->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL); + + glColor4ubv(hull_colors[i].mV); + buff->drawArrays(LLRender::TRIANGLES, 0, buff->getNumVerts()); + + if (mFMP->childGetValue("show edges").asBoolean()) + { + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + glLineWidth(3.f); + glColor4ub(hull_colors[i].mV[0]/2, hull_colors[i].mV[1]/2, hull_colors[i].mV[2]/2, 255); + buff->drawArrays(LLRender::TRIANGLES, 0, buff->getNumVerts()); + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + glLineWidth(1.f); + } + } + + if (explode > 0.f) + { + gGL.popMatrix(); + } + } + } + } + + //mFMP->childSetTextArg(info_name[LLModel::LOD_PHYSICS], "[HULLS]", llformat("%d",decomp->mHulls.size())); + //mFMP->childSetTextArg(info_name[LLModel::LOD_PHYSICS], "[POINTS]", llformat("%d",decomp->mTotalPoints)); + } + } + + gGL.popMatrix(); + } + + if (physics) + { + mPreviewLOD = LLModel::LOD_PHYSICS; + } + } + else + { + LLVOAvatarSelf* avatar = gAgentAvatarp; + target_pos = avatar->getPositionAgent(); + + LLViewerCamera::getInstance()->setOriginAndLookAt( + target_pos + ((LLVector3(mCameraDistance, 0.f, 0.f) + offset) * av_rot), // camera + LLVector3::z_axis, // up + target_pos); // point of interest + + avatar->renderCollisionVolumes(); + + for (LLModelLoader::scene::iterator iter = mScene[mPreviewLOD].begin(); iter != mScene[mPreviewLOD].end(); ++iter) + { + for (LLModelLoader::model_instance_list::iterator model_iter = iter->second.begin(); model_iter != iter->second.end(); ++model_iter) + { + LLModelInstance& instance = *model_iter; + LLModel* model = instance.mModel; + + if (!model->mSkinWeights.empty()) + { + for (U32 i = 0; i < mVertexBuffer[mPreviewLOD][model].size(); ++i) + { + LLVertexBuffer* buffer = mVertexBuffer[mPreviewLOD][model][i]; + + const LLVolumeFace& face = model->getVolumeFace(i); + + LLStrider position; + buffer->getVertexStrider(position); + + LLStrider weight; + buffer->getWeight4Strider(weight); + + //quick 'n dirty software vertex skinning + + //build matrix palette + LLMatrix4 mat[64]; + for (U32 j = 0; j < model->mJointList.size(); ++j) + { + LLJoint* joint = avatar->getJoint(model->mJointList[j]); + if (joint) + { + mat[j] = model->mInvBindMatrix[j]; + mat[j] *= joint->getWorldMatrix(); + } + } + + for (U32 j = 0; j < buffer->getRequestedVerts(); ++j) + { + LLMatrix4 final_mat; + final_mat.mMatrix[0][0] = final_mat.mMatrix[1][1] = final_mat.mMatrix[2][2] = final_mat.mMatrix[3][3] = 0.f; + + LLVector4 wght; + S32 idx[4]; + + F32 scale = 0.f; + for (U32 k = 0; k < 4; k++) + { + F32 w = weight[j].mV[k]; + + idx[k] = (S32) floorf(w); + wght.mV[k] = w - floorf(w); + scale += wght.mV[k]; + } + + wght *= 1.f/scale; + + for (U32 k = 0; k < 4; k++) + { + F32* src = (F32*) mat[idx[k]].mMatrix; + F32* dst = (F32*) final_mat.mMatrix; + + F32 w = wght.mV[k]; + + for (U32 l = 0; l < 16; l++) + { + dst[l] += src[l]*w; + } + } + + //VECTORIZE THIS + LLVector3 v(face.mPositions[j].getF32ptr()); + + v = v * model->mBindShapeMatrix; + v = v * final_mat; + + position[j] = v; + } + + buffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0); + glColor4fv(instance.mMaterial[i].mDiffuseColor.mV); + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + buffer->draw(LLRender::TRIANGLES, buffer->getNumIndices(), 0); + glColor3f(0.4f, 0.4f, 0.4f); + + if (mFMP->childGetValue("show edges").asBoolean()) + { + glLineWidth(3.f); + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + buffer->draw(LLRender::TRIANGLES, buffer->getNumIndices(), 0); + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + glLineWidth(1.f); + } + } + } + } + } + } + } + + gGL.popMatrix(); + + return TRUE; +} + +//----------------------------------------------------------------------------- +// refresh() +//----------------------------------------------------------------------------- +void LLModelPreview::refresh() +{ + mNeedsUpdate = TRUE; +} + +//----------------------------------------------------------------------------- +// rotate() +//----------------------------------------------------------------------------- +void LLModelPreview::rotate(F32 yaw_radians, F32 pitch_radians) +{ + mCameraYaw = mCameraYaw + yaw_radians; + + mCameraPitch = llclamp(mCameraPitch + pitch_radians, F_PI_BY_TWO * -0.8f, F_PI_BY_TWO * 0.8f); +} + +//----------------------------------------------------------------------------- +// zoom() +//----------------------------------------------------------------------------- +void LLModelPreview::zoom(F32 zoom_amt) +{ + F32 new_zoom = mCameraZoom+zoom_amt; + + mCameraZoom = llclamp(new_zoom, 1.f, 10.f); +} + +void LLModelPreview::pan(F32 right, F32 up) +{ + mCameraOffset.mV[VY] = llclamp(mCameraOffset.mV[VY] + right * mCameraDistance / mCameraZoom, -1.f, 1.f); + mCameraOffset.mV[VZ] = llclamp(mCameraOffset.mV[VZ] + up * mCameraDistance / mCameraZoom, -1.f, 1.f); +} + +void LLModelPreview::setPreviewLOD(S32 lod) +{ + mPreviewLOD = llclamp(lod, 0, 4); + refresh(); +} + +//static +void LLFloaterModelPreview::onBrowseHighLOD(void* data) +{ + LLFloaterModelPreview* mp = (LLFloaterModelPreview*) data; + mp->loadModel(3); +} + +//static +void LLFloaterModelPreview::onBrowseMediumLOD(void* data) +{ + LLFloaterModelPreview* mp = (LLFloaterModelPreview*) data; + mp->loadModel(2); +} + +//static +void LLFloaterModelPreview::onBrowseLowLOD(void* data) +{ + LLFloaterModelPreview* mp = (LLFloaterModelPreview*) data; + mp->loadModel(1); +} + +//static +void LLFloaterModelPreview::onBrowseLowestLOD(void* data) +{ + LLFloaterModelPreview* mp = (LLFloaterModelPreview*) data; + mp->loadModel(0); +} + +//static +void LLFloaterModelPreview::onUpload(void* user_data) +{ + LLFloaterModelPreview* mp = (LLFloaterModelPreview*) user_data; + + if (mp->mDecompFloater) + { + mp->mDecompFloater->closeFloater(); + } + + mp->mModelPreview->rebuildUploadData(); + + gMeshRepo.uploadModel(mp->mModelPreview->mUploadData, mp->mModelPreview->mPreviewScale, mp->childGetValue("upload_textures").asBoolean()); + + mp->closeFloater(false); +} + +//static +void LLFloaterModelPreview::onConsolidate(void* user_data) +{ + LLFloaterModelPreview* mp = (LLFloaterModelPreview*) user_data; + mp->mModelPreview->consolidate(); +} + +//static +void LLFloaterModelPreview::onScrubMaterials(void* user_data) +{ + LLFloaterModelPreview* mp = (LLFloaterModelPreview*) user_data; + mp->mModelPreview->scrubMaterials(); +} + +//static +void LLFloaterModelPreview::onDecompose(void* user_data) +{ + LLFloaterModelPreview* mp = (LLFloaterModelPreview*) user_data; + mp->showDecompFloater(); +} + +//static +void LLFloaterModelPreview::onModelDecompositionComplete(LLModel* model, std::vector >& physics_mesh) +{ + if (sInstance && sInstance->mModelPreview) + { + sInstance->mModelPreview->mPhysicsMesh[model] = physics_mesh; + + sInstance->mModelPreview->mResourceCost = sInstance->mModelPreview->calcResourceCost(); + } +} + + +//static +void LLFloaterModelPreview::refresh(LLUICtrl* ctrl, void* user_data) +{ + LLFloaterModelPreview* mp = (LLFloaterModelPreview*) user_data; + mp->mModelPreview->refresh(); +} + +void LLFloaterModelPreview::updateResourceCost() +{ + U32 cost = mModelPreview->mResourceCost; + childSetLabelArg("ok_btn", "[AMOUNT]", llformat("%d",cost)); +} + +//static +void LLModelPreview::textureLoadedCallback( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* userdata ) +{ + LLModelPreview* preview = (LLModelPreview*) userdata; + preview->refresh(); +} + +#endif + diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h new file mode 100644 index 0000000000..1f9de2e2b9 --- /dev/null +++ b/indra/newview/llfloatermodelpreview.h @@ -0,0 +1,275 @@ +/** + * @file llfloatermodelpreview.h + * @brief LLFloaterModelPreview class definition + * + * $LicenseInfo:firstyear=2004&license=viewergpl$ + * + * Copyright (c) 2004-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLFLOATERMODELPREVIEW_H +#define LL_LLFLOATERMODELPREVIEW_H + +#include "llfloaternamedesc.h" + +#include "lldynamictexture.h" +#include "llquaternion.h" +#include "llmeshrepository.h" +#include "llmodel.h" +#include "llthread.h" + +#if LL_MESH_ENABLED +class LLComboBox; +class LLJoint; +class LLViewerJointMesh; +class LLVOAvatar; +class LLTextBox; +class LLVertexBuffer; +class LLModelPreview; +class LLFloaterModelPreview; +class daeElement; +class domProfile_COMMON; +class domInstance_geometry; + +class LLPhysicsDecompFloater : public LLFloater +{ +public: + + LLPhysicsDecompFloater(LLSD& key); + ~LLPhysicsDecompFloater(); +}; + +class LLModelLoader : public LLThread +{ +public: + typedef enum + { + STARTING = 0, + READING_FILE, + CREATING_FACES, + GENERATING_VERTEX_BUFFERS, + GENERATING_LOD, + DONE, + } eLoadState; + + U32 mState; + std::string mFilename; + S32 mLod; + LLModelPreview* mPreview; + LLMatrix4 mTransform; + BOOL mFirstTransform; + LLVector3 mExtents[2]; + + std::map > mModel; + + typedef std::vector > model_list; + model_list mModelList; + + typedef std::vector model_instance_list; + + typedef std::map scene; + + scene mScene; + + LLModelLoader(std::string filename, S32 lod, LLModelPreview* preview); + + virtual void run(); + + void processElement(daeElement* element); + std::vector getMaterials(LLModel* model, domInstance_geometry* instance_geo); + LLImportMaterial profileToMaterial(domProfile_COMMON* material); + std::string getElementLabel(daeElement *element); + LLColor4 getDaeColor(daeElement* element); + + //map of avatar joints as named in COLLADA assets to internal joint names + std::map mJointMap; +}; + +class LLModelPreview : public LLViewerDynamicTexture, public LLMutex +{ + public: + + LLModelPreview(S32 width, S32 height, LLFloaterModelPreview* fmp); + virtual ~LLModelPreview(); + + void setPreviewTarget(F32 distance); + void setTexture(U32 name) { mTextureName = name; } + + BOOL render(); + void genBuffers(S32 lod); + void refresh(); + void rotate(F32 yaw_radians, F32 pitch_radians); + void zoom(F32 zoom_amt); + void pan(F32 right, F32 up); + virtual BOOL needsRender() { return mNeedsUpdate; } + void setPreviewLOD(S32 lod); + void loadModel(std::string filename, S32 lod); + void loadModelCallback(S32 lod); + void genLODs(S32 which_lod = -1); + void smoothNormals(); + void consolidate(); + void scrubMaterials(); + U32 calcResourceCost(); + void rebuildUploadData(); + void clearIncompatible(S32 lod); + void updateStatusMessages(); + + static void textureLoadedCallback( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* userdata ); + + protected: + friend class LLFloaterModelPreview; + friend class LLPhysicsDecomp; + + LLFloaterModelPreview* mFMP; + + BOOL mNeedsUpdate; + U32 mTextureName; + F32 mCameraDistance; + F32 mCameraYaw; + F32 mCameraPitch; + F32 mCameraZoom; + LLVector3 mCameraOffset; + LLVector3 mPreviewTarget; + LLVector3 mPreviewScale; + S32 mPreviewLOD; + U32 mResourceCost; + S32 mLODMode[LLModel::NUM_LODS]; + S32 mLimit[LLModel::NUM_LODS]; + + LLModelLoader* mModelLoader; + + + LLModelLoader::scene mScene[LLModel::NUM_LODS]; + LLModelLoader::scene mBaseScene; + + LLModelLoader::model_list mModel[LLModel::NUM_LODS]; + LLModelLoader::model_list mBaseModel; + + std::map mGroup; + std::map mObject; + std::map > mPatch; + + std::map mPercentage; + std::map > > mPhysicsMesh; + + LLMeshUploadThread::instance_list mUploadData; + std::set > mTextureSet; + + //map of vertex buffers to models (one vertex buffer in vector per face in model + std::map > > mVertexBuffer[6]; +}; + +class LLFloaterModelPreview : public LLFloater +{ +public: + static LLFloaterModelPreview* sInstance; + + LLFloaterModelPreview(const LLSD& key); + virtual ~LLFloaterModelPreview(); + + virtual BOOL postBuild(); + + BOOL handleMouseDown(S32 x, S32 y, MASK mask); + BOOL handleMouseUp(S32 x, S32 y, MASK mask); + BOOL handleHover(S32 x, S32 y, MASK mask); + BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); + + static void onMouseCaptureLostModelPreview(LLMouseHandler*); + static void setUploadAmount(S32 amount) { sUploadAmount = amount; } + + static void onBrowseHighLOD(void* data); + static void onBrowseMediumLOD(void* data); + static void onBrowseLowLOD(void* data); + static void onBrowseLowestLOD(void* data); + + static void onUpload(void* data); + + static void onConsolidate(void* data); + static void onScrubMaterials(void* data); + static void onDecompose(void* data); + static void onModelDecompositionComplete(LLModel* model, std::vector >& physics_mesh); + + static void refresh(LLUICtrl* ctrl, void* data); + + void updateResourceCost(); + + void loadModel(S32 lod); + +protected: + friend class LLModelPreview; + friend class LLMeshFilePicker; + friend class LLPhysicsDecomp; + friend class LLPhysicsDecompFloater; + + static void onPreviewLODCommit(LLUICtrl*,void*); + + static void onHighLODCommit(LLUICtrl*,void*); + static void onMediumLODCommit(LLUICtrl*,void*); + static void onLowLODCommit(LLUICtrl*,void*); + static void onLowestLODCommit(LLUICtrl*,void*); + static void onPhysicsLODCommit(LLUICtrl*,void*); + + static void onHighLimitCommit(LLUICtrl*,void*); + static void onMediumLimitCommit(LLUICtrl*,void*); + static void onLowLimitCommit(LLUICtrl*,void*); + static void onLowestLimitCommit(LLUICtrl*,void*); + static void onPhysicsLimitCommit(LLUICtrl*,void*); + + static void onSmoothNormalsCommit(LLUICtrl*,void*); + + static void onAutoFillCommit(LLUICtrl*,void*); + static void onShowEdgesCommit(LLUICtrl*,void*); + + static void onExplodeCommit(LLUICtrl*, void*); + + static void onPhysicsParamCommit(LLUICtrl* ctrl, void* userdata); + static void onPhysicsStageExecute(LLUICtrl* ctrl, void* userdata); + static void onPhysicsStageCancel(LLUICtrl* ctrl, void* userdata); + static void onClosePhysicsFloater(LLUICtrl* ctrl, void* userdata); + + void draw(); + static void setLODMode(S32 lod, void* userdata); + void setLODMode(S32 lod, S32 which_mode); + + static void setLimit(S32 lod, void* userdata); + void setLimit(S32 lod, S32 limit); + + void showDecompFloater(); + + LLModelPreview* mModelPreview; + + LLFloater* mDecompFloater; + + S32 mLastMouseX; + S32 mLastMouseY; + LLRect mPreviewRect; + U32 mGLName; + BOOL mLoading; + static S32 sUploadAmount; +}; + +#endif + +#endif // LL_LLFLOATERMODELPREVIEW_H diff --git a/indra/newview/llmeshreduction.cpp b/indra/newview/llmeshreduction.cpp new file mode 100644 index 0000000000..e785784a32 --- /dev/null +++ b/indra/newview/llmeshreduction.cpp @@ -0,0 +1,291 @@ +/** + * @file llmeshreduction.cpp + * @brief LLMeshReduction class implementation + * + * $LicenseInfo:firstyear=2004&license=viewergpl$ + * + * Copyright (c) 2004-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llmeshreduction.h" +#include "llgl.h" +#include "llvertexbuffer.h" + +#include "glod/glod.h" + +#if LL_MESH_ENABLED + +static BOOL stop_gloderror() +{ + GLuint error = glodGetError(); + + if (error != GLOD_NO_ERROR) + { + llwarns << "GLOD error detected: " << std::hex << error << llendl; + return TRUE; + } + + return FALSE; +} + + +void create_vertex_buffers_from_model(LLModel* model, std::vector >& vertex_buffers) +{ +#if 0 //VECTORIZE THIS ? + vertex_buffers.clear(); + + for (S32 i = 0; i < model->getNumVolumeFaces(); ++i) + { + const LLVolumeFace &vf = model->getVolumeFace(i); + U32 num_vertices = vf.mNumVertices; + U32 num_indices = vf.mNumIndices; + + if (!num_vertices || ! num_indices) + { + continue; + } + + LLVertexBuffer* vb = + new LLVertexBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0, 0); + + vb->allocateBuffer(num_vertices, num_indices, TRUE); + + LLStrider vertex_strider; + LLStrider normal_strider; + LLStrider tc_strider; + LLStrider index_strider; + + vb->getVertexStrider(vertex_strider); + vb->getNormalStrider(normal_strider); + vb->getTexCoord0Strider(tc_strider); + + vb->getIndexStrider(index_strider); + + // build vertices and normals + for (U32 i = 0; (S32)i < num_vertices; i++) + { + *(vertex_strider++) = vf.mVertices[i].mPosition; + *(tc_strider++) = vf.mVertices[i].mTexCoord; + LLVector3 normal = vf.mVertices[i].mNormal; + normal.normalize(); + *(normal_strider++) = normal; + } + + // build indices + for (U32 i = 0; i < num_indices; i++) + { + *(index_strider++) = vf.mIndices[i]; + } + + + vertex_buffers.push_back(vb); + } +#endif +} + +void create_glod_object_from_vertex_buffers(S32 object, S32 group, std::vector >& vertex_buffers) +{ + glodNewGroup(group); + stop_gloderror(); + glodNewObject(object, group, GLOD_DISCRETE); + stop_gloderror(); + + for (U32 i = 0; i < vertex_buffers.size(); ++i) + { + vertex_buffers[i]->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0); + + U32 num_indices = vertex_buffers[i]->getNumIndices(); + + if (num_indices > 2) + { + glodInsertElements(object, i, GL_TRIANGLES, num_indices, GL_UNSIGNED_SHORT, + vertex_buffers[i]->getIndicesPointer(), 0, 0.f); + } + stop_gloderror(); + } + + glodBuildObject(object); + stop_gloderror(); +} + +// extract the GLOD data into vertex buffers +void create_vertex_buffers_from_glod_object(S32 object, S32 group, std::vector >& vertex_buffers) +{ + vertex_buffers.clear(); + + GLint patch_count = 0; + glodGetObjectParameteriv(object, GLOD_NUM_PATCHES, &patch_count); + stop_gloderror(); + + GLint* sizes = new GLint[patch_count*2]; + glodGetObjectParameteriv(object, GLOD_PATCH_SIZES, sizes); + stop_gloderror(); + + GLint* names = new GLint[patch_count]; + glodGetObjectParameteriv(object, GLOD_PATCH_NAMES, names); + stop_gloderror(); + + for (S32 i = 0; i < patch_count; i++) + { + LLPointer buff = + new LLVertexBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0, 0); + + if (sizes[i*2+1] > 0 && sizes[i*2] > 0) + { + buff->allocateBuffer(sizes[i*2+1], sizes[i*2], true); + buff->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0); + glodFillElements(object, names[i], GL_UNSIGNED_SHORT, buff->getIndicesPointer()); + stop_gloderror(); + } + else + { + // this face was eliminated, create a dummy triangle (one vertex, 3 indices, all 0) + buff->allocateBuffer(1, 3, true); + } + + vertex_buffers.push_back(buff); + } + + glodDeleteObject(object); + stop_gloderror(); + glodDeleteGroup(group); + stop_gloderror(); + + delete [] sizes; + delete [] names; +} + + +LLPointer create_model_from_vertex_buffers(std::vector >& vertex_buffers) +{ + // extract the newly reduced mesh + + // create our output model + LLVolumeParams volume_params; + volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE); + LLPointer out_model = new LLModel(volume_params, 0.f); + + out_model->setNumVolumeFaces(vertex_buffers.size()); + + // build new faces from each vertex buffer + for (GLint i = 0; i < vertex_buffers.size(); ++i) + { + LLStrider pos; + LLStrider norm; + LLStrider tc; + LLStrider index; + + vertex_buffers[i]->getVertexStrider(pos); + vertex_buffers[i]->getNormalStrider(norm); + vertex_buffers[i]->getTexCoord0Strider(tc); + vertex_buffers[i]->getIndexStrider(index); + + out_model->setVolumeFaceData(i, pos, norm, tc, index, + vertex_buffers[i]->getNumVerts(), vertex_buffers[i]->getNumIndices()); + } + + return out_model; +} + + + +LLMeshReduction::LLMeshReduction() +{ + mCounter = 1; + + glodInit(); +} + +LLMeshReduction::~LLMeshReduction() +{ + glodShutdown(); +} + + +LLPointer LLMeshReduction::reduce(LLModel* in_model, F32 limit, S32 mode) +{ + LLVertexBuffer::unbind(); + + // create vertex buffers from model + std::vector > in_vertex_buffers; + create_vertex_buffers_from_model(in_model, in_vertex_buffers); + + // create glod object from vertex buffers + stop_gloderror(); + S32 glod_group = mCounter++; + S32 glod_object = mCounter++; + create_glod_object_from_vertex_buffers(glod_object, glod_group, in_vertex_buffers); + + + // set reduction parameters + stop_gloderror(); + + if (mode == TRIANGLE_BUDGET) + { + // triangle budget mode + glodGroupParameteri(glod_group, GLOD_ADAPT_MODE, GLOD_TRIANGLE_BUDGET); + stop_gloderror(); + glodGroupParameteri(glod_group, GLOD_ERROR_MODE, GLOD_OBJECT_SPACE_ERROR); + stop_gloderror(); + S32 triangle_count = (S32)limit; + glodGroupParameteri(glod_group, GLOD_MAX_TRIANGLES, triangle_count); + stop_gloderror(); + } + else if (mode == ERROR_THRESHOLD) + { + // error threshold mode + glodGroupParameteri(glod_group, GLOD_ADAPT_MODE, GLOD_ERROR_THRESHOLD); + glodGroupParameteri(glod_group, GLOD_ERROR_MODE, GLOD_OBJECT_SPACE_ERROR); + F32 error_threshold = limit; + glodGroupParameterf(glod_group, GLOD_OBJECT_SPACE_ERROR_THRESHOLD, error_threshold); + stop_gloderror(); + } + + else + { + // not a legal mode + return NULL; + } + + + // do the reduction + glodAdaptGroup(glod_group); + stop_gloderror(); + + // convert glod object into vertex buffers + std::vector > out_vertex_buffers; + create_vertex_buffers_from_glod_object(glod_object, glod_group, out_vertex_buffers); + + // convert vertex buffers into a model + LLPointer out_model = create_model_from_vertex_buffers(out_vertex_buffers); + + + return out_model; +} + +#endif + diff --git a/indra/newview/llmeshreduction.h b/indra/newview/llmeshreduction.h new file mode 100644 index 0000000000..d86696978d --- /dev/null +++ b/indra/newview/llmeshreduction.h @@ -0,0 +1,59 @@ +/** + * @file llmeshreduction.h + * @brief LLMeshReduction class definition + * + * $LicenseInfo:firstyear=2004&license=viewergpl$ + * + * Copyright (c) 2004-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLMESHREDUCTION_H +#define LL_LLMESHREDUCTION_H + +#include "llmodel.h" + +#if LL_MESH_ENABLED + +class LLMeshReduction +{ + public: + enum EReductionMode + { + TRIANGLE_BUDGET, + ERROR_THRESHOLD + }; + + LLMeshReduction(); + ~LLMeshReduction(); + + LLPointer reduce(LLModel* in_model, F32 limit, S32 mode); + +private: + U32 mCounter; +}; + +#endif + +#endif // LL_LLMESHREDUCTION_H diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp new file mode 100644 index 0000000000..96a170ef07 --- /dev/null +++ b/indra/newview/llmeshrepository.cpp @@ -0,0 +1,2676 @@ +/** + * @file llmeshrepository.cpp + * @brief Mesh repository implementation. + * + * $LicenseInfo:firstyear=2005&license=viewergpl$ + * + * Copyright (c) 2005-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "apr_pools.h" +#include "apr_dso.h" + +#include "llmeshrepository.h" + +#include "llagent.h" +#include "llappviewer.h" +#include "llbufferstream.h" +#include "llcurl.h" +#include "llfasttimer.h" +#include "llfloatermodelpreview.h" +#include "llfloaterperms.h" +#include "lleconomy.h" +#include "llimagej2c.h" +#include "llhost.h" +#include "llnotificationsutil.h" +#include "llsd.h" +#include "llsdutil_math.h" +#include "llsdserialize.h" +#include "llthread.h" +#include "llvfile.h" +#include "llviewercontrol.h" +#include "llviewermenufile.h" +#include "llviewerobjectlist.h" +#include "llviewerregion.h" +#include "llviewertexturelist.h" +#include "llvolume.h" +#include "llvolumemgr.h" +#include "llvovolume.h" +#include "llworld.h" +#include "material_codes.h" +#include "pipeline.h" + + +#include + +#if LL_MESH_ENABLED + +LLFastTimer::DeclareTimer FTM_MESH_UPDATE("Mesh Update"); +LLFastTimer::DeclareTimer FTM_LOAD_MESH("Load Mesh"); + +LLMeshRepository gMeshRepo; + +const U32 MAX_MESH_REQUESTS_PER_SECOND = 100; + +U32 LLMeshRepository::sBytesReceived = 0; +U32 LLMeshRepository::sHTTPRequestCount = 0; +U32 LLMeshRepository::sHTTPRetryCount = 0; +U32 LLMeshRepository::sCacheBytesRead = 0; +U32 LLMeshRepository::sCacheBytesWritten = 0; +U32 LLMeshRepository::sPeakKbps = 0; + + +std::string header_lod[] = +{ + "lowest_lod", + "low_lod", + "medium_lod", + "high_lod" +}; + + +//get the number of bytes resident in memory for given volume +U32 get_volume_memory_size(const LLVolume* volume) +{ + U32 indices = 0; + U32 vertices = 0; + + for (U32 i = 0; i < volume->getNumVolumeFaces(); ++i) + { + const LLVolumeFace& face = volume->getVolumeFace(i); + indices += face.mNumIndices; + vertices += face.mNumVertices; + } + + + return indices*2+vertices*11+sizeof(LLVolume)+sizeof(LLVolumeFace)*volume->getNumVolumeFaces(); +} + +std::string scrub_host_name(std::string http_url, const LLHost& host) +{ //curl loves to abuse the DNS cache, so scrub host names out of urls where trivial to prevent DNS timeouts + std::string ip_string = host.getIPString(); + std::string host_string = host.getHostName(); + + std::string::size_type idx = http_url.find(host_string); + + if (!ip_string.empty() && !host_string.empty() && idx != std::string::npos) + { + http_url.replace(idx, host_string.length(), ip_string); + } + + return http_url; +} + +LLVertexBuffer* get_vertex_buffer_from_mesh(LLCDMeshData& mesh, F32 scale = 1.f) +{ + LLVertexBuffer* buff = new LLVertexBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL, 0); + buff->allocateBuffer(mesh.mNumTriangles*3, 0, true); + + LLStrider pos; + LLStrider norm; + + buff->getVertexStrider(pos); + buff->getNormalStrider(norm); + + const F32* v = mesh.mVertexBase; + + if (mesh.mIndexType == LLCDMeshData::INT_16) + { + U16* idx = (U16*) mesh.mIndexBase; + for (S32 j = 0; j < mesh.mNumTriangles; ++j) + { + F32* mp0 = (F32*) ((U8*)v+idx[0]*mesh.mVertexStrideBytes); + F32* mp1 = (F32*) ((U8*)v+idx[1]*mesh.mVertexStrideBytes); + F32* mp2 = (F32*) ((U8*)v+idx[2]*mesh.mVertexStrideBytes); + + idx = (U16*) (((U8*)idx)+mesh.mIndexStrideBytes); + + LLVector3 v0(mp0); + LLVector3 v1(mp1); + LLVector3 v2(mp2); + + LLVector3 n = (v1-v0)%(v2-v0); + n.normalize(); + + *pos++ = v0*scale; + *pos++ = v1*scale; + *pos++ = v2*scale; + + *norm++ = n; + *norm++ = n; + *norm++ = n; + } + } + else + { + U32* idx = (U32*) mesh.mIndexBase; + for (S32 j = 0; j < mesh.mNumTriangles; ++j) + { + F32* mp0 = (F32*) ((U8*)v+idx[0]*mesh.mVertexStrideBytes); + F32* mp1 = (F32*) ((U8*)v+idx[1]*mesh.mVertexStrideBytes); + F32* mp2 = (F32*) ((U8*)v+idx[2]*mesh.mVertexStrideBytes); + + idx = (U32*) (((U8*)idx)+mesh.mIndexStrideBytes); + + LLVector3 v0(mp0); + LLVector3 v1(mp1); + LLVector3 v2(mp2); + + LLVector3 n = (v1-v0)%(v2-v0); + n.normalize(); + + *(pos++) = v0*scale; + *(pos++) = v1*scale; + *(pos++) = v2*scale; + + *(norm++) = n; + *(norm++) = n; + *(norm++) = n; + } + } + + return buff; +} + +S32 LLMeshRepoThread::sActiveHeaderRequests = 0; +S32 LLMeshRepoThread::sActiveLODRequests = 0; +U32 LLMeshRepoThread::sMaxConcurrentRequests = 1; + + +class LLTextureCostResponder : public LLCurl::Responder +{ +public: + LLTextureUploadData mData; + LLMeshUploadThread* mThread; + + LLTextureCostResponder(LLTextureUploadData data, LLMeshUploadThread* thread) + : mData(data), mThread(thread) + { + + } + + virtual void completed(U32 status, const std::string& reason, const LLSD& content) + { + mThread->mPendingConfirmations--; + if (isGoodStatus(status)) + { + mThread->priceResult(mData, content); + } + else + { + llwarns << status << ": " << reason << llendl; + llwarns << "Retrying. (" << ++mData.mRetries << ")" << llendl; + + if (status == 499) + { + mThread->uploadTexture(mData); + } + else + { + llerrs << "Unhandled status " << status << llendl; + } + } + } +}; + +class LLTextureUploadResponder : public LLCurl::Responder +{ +public: + LLTextureUploadData mData; + LLMeshUploadThread* mThread; + + LLTextureUploadResponder(LLTextureUploadData data, LLMeshUploadThread* thread) + : mData(data), mThread(thread) + { + } + + virtual void completed(U32 status, const std::string& reason, const LLSD& content) + { + mThread->mPendingUploads--; + if (isGoodStatus(status)) + { + mData.mUUID = content["new_asset"].asUUID(); + gMeshRepo.updateInventory(LLMeshRepository::inventory_data(mData.mPostData, content)); + mThread->onTextureUploaded(mData); + } + else + { + llwarns << status << ": " << reason << llendl; + llwarns << "Retrying. (" << ++mData.mRetries << ")" << llendl; + + if (status == 404) + { + mThread->uploadTexture(mData); + } + else if (status == 499) + { + mThread->mConfirmedTextureQ.push(mData); + } + else + { + llerrs << "Unhandled status " << status << llendl; + } + } + } +}; + +class LLMeshCostResponder : public LLCurl::Responder +{ +public: + LLMeshUploadData mData; + LLMeshUploadThread* mThread; + + LLMeshCostResponder(LLMeshUploadData data, LLMeshUploadThread* thread) + : mData(data), mThread(thread) + { + + } + + virtual void completed(U32 status, const std::string& reason, const LLSD& content) + { + mThread->mPendingConfirmations--; + + if (isGoodStatus(status)) + { + mThread->priceResult(mData, content); + } + else + { + llwarns << status << ": " << reason << llendl; + llwarns << "Retrying. (" << ++mData.mRetries << ")" << llendl; + + if (status == 499) + { + mThread->uploadModel(mData); + } + else if (status == 400) + { + llwarns << "Status 400 received from server, giving up." << llendl; + } + else + { + llerrs << "Unhandled status " << status << llendl; + } + } + } +}; + +class LLMeshUploadResponder : public LLCurl::Responder +{ +public: + LLMeshUploadData mData; + LLMeshUploadThread* mThread; + + LLMeshUploadResponder(LLMeshUploadData data, LLMeshUploadThread* thread) + : mData(data), mThread(thread) + { + } + + virtual void completed(U32 status, const std::string& reason, const LLSD& content) + { + mThread->mPendingUploads--; + if (isGoodStatus(status)) + { + mData.mUUID = content["new_asset"].asUUID(); + if (mData.mUUID.isNull()) + { + LLSD args; + std::string message = content["error"]["message"]; + std::string identifier = content["error"]["identifier"]; + std::string invalidity_identifier = content["error"]["invalidity_identifier"]; + + args["MESSAGE"] = message; + args["IDENTIFIER"] = identifier; + args["INVALIDITY_IDENTIFIER"] = invalidity_identifier; + args["LABEL"] = mData.mBaseModel->mLabel; + + gMeshRepo.uploadError(args); + } + else + { + gMeshRepo.updateInventory(LLMeshRepository::inventory_data(mData.mPostData, content)); + mThread->onModelUploaded(mData); + } + } + else + { + llwarns << status << ": " << reason << llendl; + llwarns << "Retrying. (" << ++mData.mRetries << ")" << llendl; + + if (status == 404) + { + mThread->uploadModel(mData); + } + else if (status == 499) + { + mThread->mConfirmedQ.push(mData); + } + else if (status != 500) + { //drop internal server errors on the floor, otherwise grab + llerrs << "Unhandled status " << status << llendl; + } + } + } +}; + + +class LLMeshHeaderResponder : public LLCurl::Responder +{ +public: + LLVolumeParams mMeshParams; + + LLMeshHeaderResponder(const LLVolumeParams& mesh_params) + : mMeshParams(mesh_params) + { + } + + virtual void completedRaw(U32 status, const std::string& reason, + const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer); + +}; + +class LLMeshLODResponder : public LLCurl::Responder +{ +public: + LLVolumeParams mMeshParams; + S32 mLOD; + U32 mRequestedBytes; + U32 mOffset; + + LLMeshLODResponder(const LLVolumeParams& mesh_params, S32 lod, U32 offset, U32 requested_bytes) + : mMeshParams(mesh_params), mLOD(lod), mOffset(offset), mRequestedBytes(requested_bytes) + { + } + + virtual void completedRaw(U32 status, const std::string& reason, + const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer); + +}; + +class LLMeshSkinInfoResponder : public LLCurl::Responder +{ +public: + LLUUID mMeshID; + U32 mRequestedBytes; + U32 mOffset; + + LLMeshSkinInfoResponder(const LLUUID& id, U32 offset, U32 size) + : mMeshID(id), mRequestedBytes(size), mOffset(offset) + { + } + + virtual void completedRaw(U32 status, const std::string& reason, + const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer); + +}; + +class LLMeshDecompositionResponder : public LLCurl::Responder +{ +public: + LLUUID mMeshID; + U32 mRequestedBytes; + U32 mOffset; + + LLMeshDecompositionResponder(const LLUUID& id, U32 offset, U32 size) + : mMeshID(id), mRequestedBytes(size), mOffset(offset) + { + } + + virtual void completedRaw(U32 status, const std::string& reason, + const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer); + +}; + + +LLMeshRepoThread::LLMeshRepoThread() +: LLThread("mesh repo", NULL) +{ + mWaiting = false; + mMutex = new LLMutex(NULL); + mHeaderMutex = new LLMutex(NULL); + mSignal = new LLCondition(NULL); +} + +LLMeshRepoThread::~LLMeshRepoThread() +{ + +} + +void LLMeshRepoThread::run() +{ + mCurlRequest = new LLCurlRequest(); + LLCDResult res = LLConvexDecomposition::initThread(); + if (res != LLCD_OK) + { + llwarns << "convex decomposition unable to be loaded" << llendl; + } + + while (!LLApp::isQuitting()) + { + mWaiting = true; + mSignal->wait(); + mWaiting = false; + + if (!LLApp::isQuitting()) + { + static U32 count = 0; + + static F32 last_hundred = gFrameTimeSeconds; + + if (gFrameTimeSeconds - last_hundred > 1.f) + { //a second has gone by, clear count + last_hundred = gFrameTimeSeconds; + count = 0; + } + + // NOTE: throttling intentionally favors LOD requests over header requests + + while (!mLODReqQ.empty() && count < MAX_MESH_REQUESTS_PER_SECOND && sActiveLODRequests < sMaxConcurrentRequests) + { + { + LLMutexLock lock(mMutex); + LODRequest req = mLODReqQ.front(); + mLODReqQ.pop(); + if (fetchMeshLOD(req.mMeshParams, req.mLOD)) + { + count++; + } + } + } + + while (!mHeaderReqQ.empty() && count < MAX_MESH_REQUESTS_PER_SECOND && sActiveHeaderRequests < sMaxConcurrentRequests) + { + { + LLMutexLock lock(mMutex); + HeaderRequest req = mHeaderReqQ.front(); + mHeaderReqQ.pop(); + if (fetchMeshHeader(req.mMeshParams)) + { + count++; + } + } + } + + { + std::set incomplete; + for (std::set::iterator iter = mSkinRequests.begin(); iter != mSkinRequests.end(); ++iter) + { + LLUUID mesh_id = *iter; + if (!fetchMeshSkinInfo(mesh_id)) + { + incomplete.insert(mesh_id); + } + } + mSkinRequests = incomplete; + } + + { + std::set incomplete; + for (std::set::iterator iter = mDecompositionRequests.begin(); iter != mDecompositionRequests.end(); ++iter) + { + LLUUID mesh_id = *iter; + if (!fetchMeshDecomposition(mesh_id)) + { + incomplete.insert(mesh_id); + } + } + mDecompositionRequests = incomplete; + } + + + } + + mCurlRequest->process(); + } + + res = LLConvexDecomposition::quitThread(); + if (res != LLCD_OK) + { + llwarns << "convex decomposition unable to be quit" << llendl; + } + + delete mCurlRequest; + delete mMutex; +} + +void LLMeshRepoThread::loadMeshSkinInfo(const LLUUID& mesh_id) +{ //protected by mSignal, no locking needed here + mSkinRequests.insert(mesh_id); +} + +void LLMeshRepoThread::loadMeshDecomposition(const LLUUID& mesh_id) +{ //protected by mSignal, no locking needed here + mDecompositionRequests.insert(mesh_id); +} + +void LLMeshRepoThread::loadMeshLOD(const LLVolumeParams& mesh_params, S32 lod) +{ //protected by mSignal, no locking needed here + + mesh_header_map::iterator iter = mMeshHeader.find(mesh_params.getSculptID()); + if (iter != mMeshHeader.end()) + { //if we have the header, request LOD byte range + LODRequest req(mesh_params, lod); + mLODReqQ.push(req); + } + else + { + HeaderRequest req(mesh_params); + + pending_lod_map::iterator pending = mPendingLOD.find(mesh_params); + + if (pending != mPendingLOD.end()) + { //append this lod request to existing header request + pending->second.push_back(lod); + if (pending->second.size() > 4) + { + llerrs << "WTF?" << llendl; + } + } + else + { //if no header request is pending, fetch header + mHeaderReqQ.push(req); + mPendingLOD[mesh_params].push_back(lod); + } + } +} + +//static +std::string LLMeshRepoThread::constructUrl(LLUUID mesh_id) +{ + std::string http_url; + + if (gAgent.getRegion()) + { + http_url = gAgent.getRegion()->getCapability("GetMesh"); + scrub_host_name(http_url, gAgent.getRegionHost()); + } + + if (!http_url.empty()) + { + http_url += "/?mesh_id="; + http_url += mesh_id.asString().c_str(); + } + else + { + llwarns << "Current region does not have GetMesh capability! Cannot load " << mesh_id << ".mesh" << llendl; + } + + return http_url; +} + +bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id) +{ //protected by mMutex + mHeaderMutex->lock(); + + if (mMeshHeader.find(mesh_id) == mMeshHeader.end()) + { //we have no header info for this mesh, do nothing + mHeaderMutex->unlock(); + return false; + } + + U32 header_size = mMeshHeaderSize[mesh_id]; + + if (header_size > 0) + { + S32 offset = header_size + mMeshHeader[mesh_id]["skin"]["offset"].asInteger(); + S32 size = mMeshHeader[mesh_id]["skin"]["size"].asInteger(); + + mHeaderMutex->unlock(); + + if (offset >= 0 && size > 0) + { + //check VFS for mesh skin info + LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH); + if (file.getSize() >= offset+size) + { + LLMeshRepository::sCacheBytesRead += size; + file.seek(offset); + U8* buffer = new U8[size]; + file.read(buffer, size); + + //make sure buffer isn't all 0's (reserved block but not written) + bool zero = true; + for (S32 i = 0; i < llmin(size, 1024) && zero; ++i) + { + zero = buffer[i] > 0 ? false : true; + } + + if (!zero) + { //attempt to parse + if (skinInfoReceived(mesh_id, buffer, size)) + { + delete[] buffer; + return true; + } + } + + delete[] buffer; + } + + //reading from VFS failed for whatever reason, fetch from sim + std::vector headers; + headers.push_back("Accept: application/octet-stream"); + + std::string http_url = constructUrl(mesh_id); + if (!http_url.empty()) + { + ++sActiveLODRequests; + LLMeshRepository::sHTTPRequestCount++; + mCurlRequest->getByteRange(constructUrl(mesh_id), headers, offset, size, + new LLMeshSkinInfoResponder(mesh_id, offset, size)); + } + } + } + else + { + mHeaderMutex->unlock(); + } + + //early out was not hit, effectively fetched + return true; +} + +bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id) +{ //protected by mMutex + mHeaderMutex->lock(); + + if (mMeshHeader.find(mesh_id) == mMeshHeader.end()) + { //we have no header info for this mesh, do nothing + mHeaderMutex->unlock(); + return false; + } + + U32 header_size = mMeshHeaderSize[mesh_id]; + + if (header_size > 0) + { + S32 offset = header_size + mMeshHeader[mesh_id]["decomposition"]["offset"].asInteger(); + S32 size = mMeshHeader[mesh_id]["decomposition"]["size"].asInteger(); + + mHeaderMutex->unlock(); + + if (offset >= 0 && size > 0) + { + //check VFS for mesh skin info + LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH); + if (file.getSize() >= offset+size) + { + LLMeshRepository::sCacheBytesRead += size; + file.seek(offset); + U8* buffer = new U8[size]; + file.read(buffer, size); + + //make sure buffer isn't all 0's (reserved block but not written) + bool zero = true; + for (S32 i = 0; i < llmin(size, 1024) && zero; ++i) + { + zero = buffer[i] > 0 ? false : true; + } + + if (!zero) + { //attempt to parse + if (decompositionReceived(mesh_id, buffer, size)) + { + delete[] buffer; + return true; + } + } + + delete[] buffer; + } + + //reading from VFS failed for whatever reason, fetch from sim + std::vector headers; + headers.push_back("Accept: application/octet-stream"); + + std::string http_url = constructUrl(mesh_id); + if (!http_url.empty()) + { + ++sActiveLODRequests; + LLMeshRepository::sHTTPRequestCount++; + mCurlRequest->getByteRange(constructUrl(mesh_id), headers, offset, size, + new LLMeshDecompositionResponder(mesh_id, offset, size)); + } + } + } + else + { + mHeaderMutex->unlock(); + } + + //early out was not hit, effectively fetched + return true; +} + +bool LLMeshRepoThread::fetchMeshHeader(const LLVolumeParams& mesh_params) +{ + bool retval = false; + + { + //look for mesh in asset in vfs + LLVFile file(gVFS, mesh_params.getSculptID(), LLAssetType::AT_MESH); + + S32 size = file.getSize(); + + if (size > 0) + { + U8 buffer[1024]; + S32 bytes = llmin(size, 1024); + LLMeshRepository::sCacheBytesRead += bytes; + file.read(buffer, bytes); + if (headerReceived(mesh_params, buffer, bytes)) + { //did not do an HTTP request, return false + return false; + } + } + } + + //either cache entry doesn't exist or is corrupt, request header from simulator + + std::vector headers; + headers.push_back("Accept: application/octet-stream"); + + std::string http_url = constructUrl(mesh_params.getSculptID()); + if (!http_url.empty()) + { + ++sActiveHeaderRequests; + retval = true; + //grab first 4KB if we're going to bother with a fetch. Cache will prevent future fetches if a full mesh fits + //within the first 4KB + LLMeshRepository::sHTTPRequestCount++; + mCurlRequest->getByteRange(http_url, headers, 0, 4096, new LLMeshHeaderResponder(mesh_params)); + } + + return retval; +} + +bool LLMeshRepoThread::fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod) +{ //protected by mMutex + mHeaderMutex->lock(); + + bool retval = false; + + LLUUID mesh_id = mesh_params.getSculptID(); + + U32 header_size = mMeshHeaderSize[mesh_id]; + + if (header_size > 0) + { + S32 offset = header_size + mMeshHeader[mesh_id][header_lod[lod]]["offset"].asInteger(); + S32 size = mMeshHeader[mesh_id][header_lod[lod]]["size"].asInteger(); + mHeaderMutex->unlock(); + if (offset >= 0 && size > 0) + { + + //check VFS for mesh asset + LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH); + if (file.getSize() >= offset+size) + { + LLMeshRepository::sCacheBytesRead += size; + file.seek(offset); + U8* buffer = new U8[size]; + file.read(buffer, size); + + //make sure buffer isn't all 0's (reserved block but not written) + bool zero = true; + for (S32 i = 0; i < llmin(size, 1024) && zero; ++i) + { + zero = buffer[i] > 0 ? false : true; + } + + if (!zero) + { //attempt to parse + if (lodReceived(mesh_params, lod, buffer, size)) + { + delete[] buffer; + return false; + } + } + + delete[] buffer; + } + + //reading from VFS failed for whatever reason, fetch from sim + std::vector headers; + headers.push_back("Accept: application/octet-stream"); + + std::string http_url = constructUrl(mesh_id); + if (!http_url.empty()) + { + ++sActiveLODRequests; + retval = true; + LLMeshRepository::sHTTPRequestCount++; + mCurlRequest->getByteRange(constructUrl(mesh_id), headers, offset, size, + new LLMeshLODResponder(mesh_params, lod, offset, size)); + } + else + { + mUnavailableQ.push(LODRequest(mesh_params, lod)); + } + } + else + { + mUnavailableQ.push(LODRequest(mesh_params, lod)); + } + } + else + { + mHeaderMutex->unlock(); + } + + return retval; +} + +bool LLMeshRepoThread::headerReceived(const LLVolumeParams& mesh_params, U8* data, S32 data_size) +{ + LLSD header; + + U32 header_size = 0; + if (data_size > 0) + { + std::string res_str((char*) data, data_size); + + std::istringstream stream(res_str); + + if (!LLSDSerialize::deserialize(header, stream, data_size)) + { + llwarns << "Mesh header parse error. Not a valid mesh asset!" << llendl; + return false; + } + + header_size = stream.tellg(); + } + else + { + header["404"] = 1; + } + + { + U32 cost = gMeshRepo.calcResourceCost(header); + + LLUUID mesh_id = mesh_params.getSculptID(); + + mHeaderMutex->lock(); + mMeshHeaderSize[mesh_id] = header_size; + mMeshHeader[mesh_id] = header; + mMeshResourceCost[mesh_id] = cost; + mHeaderMutex->unlock(); + + //check for pending requests + pending_lod_map::iterator iter = mPendingLOD.find(mesh_params); + if (iter != mPendingLOD.end()) + { + for (U32 i = 0; i < iter->second.size(); ++i) + { + LODRequest req(mesh_params, iter->second[i]); + mLODReqQ.push(req); + } + } + mPendingLOD.erase(iter); + } + + return true; +} + +bool LLMeshRepoThread::lodReceived(const LLVolumeParams& mesh_params, S32 lod, U8* data, S32 data_size) +{ + LLVolume* volume = new LLVolume(mesh_params, LLVolumeLODGroup::getVolumeScaleFromDetail(lod)); + std::string mesh_string((char*) data, data_size); + std::istringstream stream(mesh_string); + + if (volume->unpackVolumeFaces(stream, data_size)) + { + LoadedMesh mesh(volume, mesh_params, lod); + if (volume->getNumFaces() > 0) + { + LLMutexLock lock(mMutex); + mLoadedQ.push(mesh); + return true; + } + } + + return false; +} + +bool LLMeshRepoThread::skinInfoReceived(const LLUUID& mesh_id, U8* data, S32 data_size) +{ + LLSD skin; + + if (data_size > 0) + { + std::string res_str((char*) data, data_size); + + std::istringstream stream(res_str); + + if (!unzip_llsd(skin, stream, data_size)) + { + llwarns << "Mesh skin info parse error. Not a valid mesh asset!" << llendl; + return false; + } + } + + { + LLMeshSkinInfo info; + info.mMeshID = mesh_id; + + if (skin.has("joint_names")) + { + for (U32 i = 0; i < skin["joint_names"].size(); ++i) + { + info.mJointNames.push_back(skin["joint_names"][i]); + } + } + + if (skin.has("inverse_bind_matrix")) + { + for (U32 i = 0; i < skin["inverse_bind_matrix"].size(); ++i) + { + LLMatrix4 mat; + for (U32 j = 0; j < 4; j++) + { + for (U32 k = 0; k < 4; k++) + { + mat.mMatrix[j][k] = skin["inverse_bind_matrix"][i][j*4+k].asReal(); + } + } + + info.mInvBindMatrix.push_back(mat); + } + } + + if (skin.has("bind_shape_matrix")) + { + for (U32 j = 0; j < 4; j++) + { + for (U32 k = 0; k < 4; k++) + { + info.mBindShapeMatrix.mMatrix[j][k] = skin["bind_shape_matrix"][j*4+k].asReal(); + } + } + } + + mSkinInfoQ.push(info); + } + + return true; +} + +bool LLMeshRepoThread::decompositionReceived(const LLUUID& mesh_id, U8* data, S32 data_size) +{ + LLSD decomp; + + if (data_size > 0) + { + std::string res_str((char*) data, data_size); + + std::istringstream stream(res_str); + + if (!unzip_llsd(decomp, stream, data_size)) + { + llwarns << "Mesh decomposition parse error. Not a valid mesh asset!" << llendl; + return false; + } + } + + { + LLMeshDecomposition* d = new LLMeshDecomposition(); + d->mMeshID = mesh_id; + + // 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(); + + U16* p = (U16*) &position[0]; + + d->mHull.resize(hulls.size()); + + LLVector3 min; + LLVector3 max; + LLVector3 range; + + min.setValue(decomp["Min"]); + max.setValue(decomp["Max"]); + range = max-min; + + for (U32 i = 0; i < hulls.size(); ++i) + { + U8 count = hulls[i]; + + for (U32 j = 0; j < count; ++j) + { + d->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], + (F32) p[2]/65535.f*range.mV[2]+min.mV[2])); + p += 3; + } + + } + + //get mesh for decomposition + for (U32 i = 0; i < d->mHull.size(); ++i) + { + LLCDHull hull; + hull.mNumVertices = d->mHull[i].size(); + hull.mVertexBase = d->mHull[i][0].mV; + hull.mVertexStrideBytes = 12; + + LLCDMeshData mesh; + LLCDResult res = LLCD_OK; + if (LLConvexDecomposition::getInstance() != NULL) + { + res = LLConvexDecomposition::getInstance()->getMeshFromHull(&hull, &mesh); + } + if (res != LLCD_OK) + { + llwarns << "could not get mesh from hull from convex decomposition lib." << llendl; + return false; + } + + + d->mMesh.push_back(get_vertex_buffer_from_mesh(mesh)); + } + + mDecompositionQ.push(d); + } + + return true; +} + +LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data, LLVector3& scale, bool upload_textures) +: LLThread("mesh upload") +{ + mInstanceList = data; + mUploadTextures = upload_textures; + mMutex = new LLMutex(NULL); + mCurlRequest = NULL; + mPendingConfirmations = 0; + mPendingUploads = 0; + mPendingCost = 0; + mFinished = false; + mOrigin = gAgent.getPositionAgent(); + mHost = gAgent.getRegionHost(); + mUploadObjectAssetCapability = gAgent.getRegion()->getCapability("UploadObjectAsset"); + mNewInventoryCapability = gAgent.getRegion()->getCapability("NewFileAgentInventoryVariablePrice"); + + mOrigin += gAgent.getAtAxis() * scale.magVec(); + + scrub_host_name(mUploadObjectAssetCapability, mHost); + scrub_host_name(mNewInventoryCapability, mHost); +} + +LLMeshUploadThread::~LLMeshUploadThread() +{ + +} + +void LLMeshUploadThread::run() +{ + mCurlRequest = new LLCurlRequest(); + + //build map of LLModel refs to instances for callbacks + for (instance_list::iterator iter = mInstanceList.begin(); iter != mInstanceList.end(); ++iter) + { + mInstance[iter->mModel].push_back(*iter); + } + + std::set > textures; + + //populate upload queue with relevant models + for (instance_map::iterator iter = mInstance.begin(); iter != mInstance.end(); ++iter) + { + LLMeshUploadData data; + data.mBaseModel = iter->first; + + LLModelInstance& instance = *(iter->second.begin()); + + for (S32 i = 0; i < 5; i++) + { + data.mModel[i] = instance.mLOD[i]; + } + + uploadModel(data); + + if (mUploadTextures) + { + for (std::vector::iterator material_iter = instance.mMaterial.begin(); + material_iter != instance.mMaterial.end(); ++material_iter) + { + + if (textures.find(material_iter->mDiffuseMap) == textures.end()) + { + textures.insert(material_iter->mDiffuseMap); + + LLTextureUploadData data(material_iter->mDiffuseMap, material_iter->mDiffuseMapLabel); + uploadTexture(data); + } + } + } + } + + + //upload textures + bool done = false; + do + { + if (!mTextureQ.empty()) + { + sendCostRequest(mTextureQ.front()); + mTextureQ.pop(); + } + + if (!mConfirmedTextureQ.empty()) + { + doUploadTexture(mConfirmedTextureQ.front()); + mConfirmedTextureQ.pop(); + } + + mCurlRequest->process(); + + done = mTextureQ.empty() && mConfirmedTextureQ.empty(); + } + while (!done || mCurlRequest->getQueued() > 0); + + LLSD object_asset; + object_asset["objects"] = LLSD::emptyArray(); + + done = false; + do + { + static S32 count = 0; + static F32 last_hundred = gFrameTimeSeconds; + if (gFrameTimeSeconds - last_hundred > 1.f) + { + last_hundred = gFrameTimeSeconds; + count = 0; + } + + //how many requests to push before calling process + const S32 PUSH_PER_PROCESS = 32; + + S32 tcount = llmin(count+PUSH_PER_PROCESS, 100); + + while (!mUploadQ.empty() && count < tcount) + { //send any pending upload requests + mMutex->lock(); + LLMeshUploadData data = mUploadQ.front(); + mUploadQ.pop(); + mMutex->unlock(); + sendCostRequest(data); + count++; + } + + tcount = llmin(count+PUSH_PER_PROCESS, 100); + + while (!mConfirmedQ.empty() && count < tcount) + { //process any meshes that have been confirmed for upload + LLMeshUploadData& data = mConfirmedQ.front(); + doUploadModel(data); + mConfirmedQ.pop(); + count++; + } + + tcount = llmin(count+PUSH_PER_PROCESS, 100); + + while (!mInstanceQ.empty() && count < tcount) + { //create any objects waiting for upload + count++; + object_asset["objects"].append(createObject(mInstanceQ.front())); + mInstanceQ.pop(); + } + + mCurlRequest->process(); + + done = mInstanceQ.empty() && mConfirmedQ.empty() && mUploadQ.empty(); + } + while (!done || mCurlRequest->getQueued() > 0); + + delete mCurlRequest; + mCurlRequest = NULL; + + // now upload the object asset + std::string url = mUploadObjectAssetCapability; + LLHTTPClient::post(url, object_asset, new LLHTTPClient::Responder()); + + mFinished = true; +} + +void LLMeshUploadThread::uploadModel(LLMeshUploadData& data) +{ //called from arbitrary thread + { + LLMutexLock lock(mMutex); + mUploadQ.push(data); + } +} + +void LLMeshUploadThread::uploadTexture(LLTextureUploadData& data) +{ //called from mesh upload thread + mTextureQ.push(data); +} + + +static LLFastTimer::DeclareTimer FTM_NOTIFY_MESH_LOADED("Notify Loaded"); +static LLFastTimer::DeclareTimer FTM_NOTIFY_MESH_UNAVAILABLE("Notify Unavailable"); + +void LLMeshRepoThread::notifyLoadedMeshes() +{ + while (!mLoadedQ.empty()) + { + mMutex->lock(); + LoadedMesh mesh = mLoadedQ.front(); + mLoadedQ.pop(); + mMutex->unlock(); + + if (mesh.mVolume && mesh.mVolume->getNumVolumeFaces() > 0) + { + gMeshRepo.notifyMeshLoaded(mesh.mMeshParams, mesh.mVolume); + } + else + { + gMeshRepo.notifyMeshUnavailable(mesh.mMeshParams, + LLVolumeLODGroup::getVolumeDetailFromScale(mesh.mVolume->getDetail())); + } + } + + while (!mUnavailableQ.empty()) + { + mMutex->lock(); + LODRequest req = mUnavailableQ.front(); + mUnavailableQ.pop(); + mMutex->unlock(); + + gMeshRepo.notifyMeshUnavailable(req.mMeshParams, req.mLOD); + } + + while (!mSkinInfoQ.empty()) + { + gMeshRepo.notifySkinInfoReceived(mSkinInfoQ.front()); + mSkinInfoQ.pop(); + } + + while (!mDecompositionQ.empty()) + { + gMeshRepo.notifyDecompositionReceived(mDecompositionQ.front()); + mDecompositionQ.pop(); + } +} + +S32 LLMeshRepoThread::getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lod) +{ //only ever called from main thread + lod = llclamp(lod, 0, 3); + + LLMutexLock lock(mHeaderMutex); + mesh_header_map::iterator iter = mMeshHeader.find(mesh_params.getSculptID()); + + if (iter != mMeshHeader.end()) + { + LLSD& header = iter->second; + + if (header.has("404")) + { + return -1; + } + + if (header[header_lod[lod]]["size"].asInteger() > 0) + { + return lod; + } + + //search down to find the next available lower lod + for (S32 i = lod-1; i >= 0; --i) + { + if (header[header_lod[i]]["size"].asInteger() > 0) + { + return i; + } + } + + //search up to find then ext available higher lod + for (S32 i = lod+1; i < 4; ++i) + { + if (header[header_lod[i]]["size"].asInteger() > 0) + { + return i; + } + } + + //header exists and no good lod found, treat as 404 + header["404"] = 1; + return -1; + } + + return lod; +} + +U32 LLMeshRepoThread::getResourceCost(const LLUUID& mesh_id) +{ + LLMutexLock lock(mHeaderMutex); + + std::map::iterator iter = mMeshResourceCost.find(mesh_id); + if (iter != mMeshResourceCost.end()) + { + return iter->second; + } + + return 0; +} + +void LLMeshRepository::cacheOutgoingMesh(LLMeshUploadData& data, LLSD& header) +{ + mThread->mMeshHeader[data.mUUID] = header; + + // we cache the mesh for default parameters + LLVolumeParams volume_params; + volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE); + volume_params.setSculptID(data.mUUID, LL_SCULPT_TYPE_MESH); + + for (U32 i = 0; i < 4; i++) + { + if (data.mModel[i].notNull()) + { + LLPointer volume = new LLVolume(volume_params, LLVolumeLODGroup::getVolumeScaleFromDetail(i)); + volume->copyVolumeFaces(data.mModel[i]); + } + } + +} + +void LLMeshLODResponder::completedRaw(U32 status, const std::string& reason, + const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer) +{ + + LLMeshRepoThread::sActiveLODRequests--; + S32 data_size = buffer->countAfter(channels.in(), NULL); + + if (status < 200 || status > 400) + { + llwarns << status << ": " << reason << llendl; + } + + if (data_size < mRequestedBytes) + { + if (status == 499 || status == 503) + { //timeout or service unavailable, try again + LLMeshRepository::sHTTPRetryCount++; + gMeshRepo.mThread->loadMeshLOD(mMeshParams, mLOD); + } + else + { + llwarns << "Unhandled status " << status << llendl; + } + return; + } + + LLMeshRepository::sBytesReceived += mRequestedBytes; + + U8* data = NULL; + + if (data_size > 0) + { + data = new U8[data_size]; + buffer->readAfter(channels.in(), NULL, data, data_size); + } + + if (gMeshRepo.mThread->lodReceived(mMeshParams, mLOD, data, data_size)) + { + //good fetch from sim, write to VFS for caching + LLVFile file(gVFS, mMeshParams.getSculptID(), LLAssetType::AT_MESH, LLVFile::WRITE); + + S32 offset = mOffset; + S32 size = mRequestedBytes; + + if (file.getSize() >= offset+size) + { + file.seek(offset); + file.write(data, size); + LLMeshRepository::sCacheBytesWritten += size; + } + } + + delete [] data; +} + +void LLMeshSkinInfoResponder::completedRaw(U32 status, const std::string& reason, + const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer) +{ + S32 data_size = buffer->countAfter(channels.in(), NULL); + + if (status < 200 || status > 400) + { + llwarns << status << ": " << reason << llendl; + } + + if (data_size < mRequestedBytes) + { + if (status == 499 || status == 503) + { //timeout or service unavailable, try again + LLMeshRepository::sHTTPRetryCount++; + gMeshRepo.mThread->loadMeshSkinInfo(mMeshID); + } + else + { + llwarns << "Unhandled status " << status << llendl; + } + return; + } + + LLMeshRepository::sBytesReceived += mRequestedBytes; + + U8* data = NULL; + + if (data_size > 0) + { + data = new U8[data_size]; + buffer->readAfter(channels.in(), NULL, data, data_size); + } + + if (gMeshRepo.mThread->skinInfoReceived(mMeshID, data, data_size)) + { + //good fetch from sim, write to VFS for caching + LLVFile file(gVFS, mMeshID, LLAssetType::AT_MESH, LLVFile::WRITE); + + S32 offset = mOffset; + S32 size = mRequestedBytes; + + if (file.getSize() >= offset+size) + { + LLMeshRepository::sCacheBytesWritten += size; + file.seek(offset); + file.write(data, size); + } + } + + delete [] data; +} + +void LLMeshDecompositionResponder::completedRaw(U32 status, const std::string& reason, + const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer) +{ + S32 data_size = buffer->countAfter(channels.in(), NULL); + + if (status < 200 || status > 400) + { + llwarns << status << ": " << reason << llendl; + } + + if (data_size < mRequestedBytes) + { + if (status == 499 || status == 503) + { //timeout or service unavailable, try again + LLMeshRepository::sHTTPRetryCount++; + gMeshRepo.mThread->loadMeshDecomposition(mMeshID); + } + else + { + llwarns << "Unhandled status " << status << llendl; + } + return; + } + + LLMeshRepository::sBytesReceived += mRequestedBytes; + + U8* data = NULL; + + if (data_size > 0) + { + data = new U8[data_size]; + buffer->readAfter(channels.in(), NULL, data, data_size); + } + + if (gMeshRepo.mThread->decompositionReceived(mMeshID, data, data_size)) + { + //good fetch from sim, write to VFS for caching + LLVFile file(gVFS, mMeshID, LLAssetType::AT_MESH, LLVFile::WRITE); + + S32 offset = mOffset; + S32 size = mRequestedBytes; + + if (file.getSize() >= offset+size) + { + LLMeshRepository::sCacheBytesWritten += size; + file.seek(offset); + file.write(data, size); + } + } + + delete [] data; +} + +void LLMeshHeaderResponder::completedRaw(U32 status, const std::string& reason, + const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer) +{ + LLMeshRepoThread::sActiveHeaderRequests--; + if (status < 200 || status > 400) + { + llwarns << status << ": " << reason << llendl; + } + + S32 data_size = buffer->countAfter(channels.in(), NULL); + + U8* data = NULL; + + if (data_size > 0) + { + data = new U8[data_size]; + buffer->readAfter(channels.in(), NULL, data, data_size); + } + + LLMeshRepository::sBytesReceived += llmin(data_size, 4096); + + if (!gMeshRepo.mThread->headerReceived(mMeshParams, data, data_size)) + { + llwarns << "Header responder failed with status: " << status << ": " << reason << llendl; + if (status == 503 || status == 499) + { //retry + LLMeshRepository::sHTTPRetryCount++; + LLMeshRepoThread::HeaderRequest req(mMeshParams); + gMeshRepo.mThread->mHeaderReqQ.push(req); + } + } + else if (data && data_size > 0) + { + //header was successfully retrieved from sim, cache in vfs + LLUUID mesh_id = mMeshParams.getSculptID(); + LLSD header = gMeshRepo.mThread->mMeshHeader[mesh_id]; + + std::stringstream str; + + S32 lod_bytes = 0; + + for (U32 i = 0; i < LLModel::LOD_PHYSICS; ++i) + { //figure out how many bytes we'll need to reserve in the file + std::string lod_name = header_lod[i]; + lod_bytes = llmax(lod_bytes, header[lod_name]["offset"].asInteger()+header[lod_name]["size"].asInteger()); + } + + //just in case skin info or decomposition is at the end of the file (which it shouldn't be) + lod_bytes = llmax(lod_bytes, header["skin"]["offset"].asInteger() + header["skin"]["size"].asInteger()); + lod_bytes = llmax(lod_bytes, header["decomposition"]["offset"].asInteger() + header["decomposition"]["size"].asInteger()); + + S32 header_bytes = (S32) gMeshRepo.mThread->mMeshHeaderSize[mesh_id]; + S32 bytes = lod_bytes + header_bytes; + + + //it's possible for the remote asset to have more data than is needed for the local cache + //only allocate as much space in the VFS as is needed for the local cache + data_size = llmin(data_size, bytes); + + LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH, LLVFile::WRITE); + if (file.getMaxSize() >= bytes || file.setMaxSize(bytes)) + { + LLMeshRepository::sCacheBytesWritten += data_size; + + file.write((const U8*) data, data_size); + + //zero out the rest of the file + U8 block[4096]; + memset(block, 0, 4096); + + while (bytes-file.tell() > 4096) + { + file.write(block, 4096); + } + + S32 remaining = bytes-file.tell(); + + if (remaining < 0 || remaining > 4096) + { + llerrs << "Bad padding of mesh asset cache entry." << llendl; + } + + if (remaining > 0) + { + file.write(block, remaining); + } + } + } + + delete [] data; +} + + +LLMeshRepository::LLMeshRepository() +: mMeshMutex(NULL), + mMeshThreadCount(0), + mThread(NULL) +{ + +} + +void LLMeshRepository::init() +{ + mMeshMutex = new LLMutex(NULL); + + mDecompThread = new LLPhysicsDecomp(); + mDecompThread->start(); + + while (!mDecompThread->mInited) + { //wait for physics decomp thread to init + apr_sleep(100); + } + + mThread = new LLMeshRepoThread(); + mThread->start(); +} + +void LLMeshRepository::shutdown() +{ + mThread->mSignal->signal(); + + delete mThread; + mThread = NULL; + + for (U32 i = 0; i < mUploads.size(); ++i) + { + delete mUploads[i]; + } + + mUploads.clear(); + + delete mMeshMutex; + mMeshMutex = NULL; + + if (mDecompThread) + { + mDecompThread->shutdown(); + delete mDecompThread; + mDecompThread = NULL; + } +} + + +S32 LLMeshRepository::loadMesh(LLVOVolume* vobj, const LLVolumeParams& mesh_params, S32 detail) +{ + if (detail < 0 || detail > 4) + { + return detail; + } + + LLFastTimer t(FTM_LOAD_MESH); + + { + LLMutexLock lock(mMeshMutex); + //add volume to list of loading meshes + mesh_load_map::iterator iter = mLoadingMeshes[detail].find(mesh_params); + if (iter != mLoadingMeshes[detail].end()) + { //request pending for this mesh, append volume id to list + iter->second.insert(vobj->getID()); + } + else + { + //first request for this mesh + mLoadingMeshes[detail][mesh_params].insert(vobj->getID()); + mPendingRequests.push_back(LLMeshRepoThread::LODRequest(mesh_params, detail)); + } + } + + //do a quick search to see if we can't display something while we wait for this mesh to load + LLVolume* volume = vobj->getVolume(); + + if (volume) + { + if (volume->getNumVolumeFaces() == 0 && !volume->isTetrahedron()) + { + volume->makeTetrahedron(); + } + + LLVolumeParams params = volume->getParams(); + + LLVolumeLODGroup* group = LLPrimitive::getVolumeManager()->getGroup(params); + + if (group) + { + //first see what the next lowest LOD available might be + for (S32 i = detail-1; i >= 0; --i) + { + LLVolume* lod = group->refLOD(i); + if (lod && !lod->isTetrahedron() && lod->getNumVolumeFaces() > 0) + { + group->derefLOD(lod); + return i; + } + + group->derefLOD(lod); + } + + //no lower LOD is a available, is a higher lod available? + for (S32 i = detail+1; i < 4; ++i) + { + LLVolume* lod = group->refLOD(i); + if (lod && !lod->isTetrahedron() && lod->getNumVolumeFaces() > 0) + { + group->derefLOD(lod); + return i; + } + + group->derefLOD(lod); + } + } + else + { + llerrs << "WTF?" << llendl; + } + } + + return detail; +} + +static LLFastTimer::DeclareTimer FTM_START_MESH_THREAD("Start Thread"); +static LLFastTimer::DeclareTimer FTM_LOAD_MESH_LOD("Load LOD"); +static LLFastTimer::DeclareTimer FTM_MESH_LOCK1("Lock 1"); +static LLFastTimer::DeclareTimer FTM_MESH_LOCK2("Lock 2"); + +void LLMeshRepository::notifyLoadedMeshes() +{ //called from main thread + + LLMeshRepoThread::sMaxConcurrentRequests = gSavedSettings.getU32("MeshMaxConcurrentRequests"); + + //clean up completed upload threads + for (std::vector::iterator iter = mUploads.begin(); iter != mUploads.end(); ) + { + LLMeshUploadThread* thread = *iter; + + if (thread->isStopped() && thread->finished()) + { + iter = mUploads.erase(iter); + delete thread; + } + else + { + ++iter; + } + } + + //update inventory + if (!mInventoryQ.empty()) + { + LLMutexLock lock(mMeshMutex); + while (!mInventoryQ.empty()) + { + inventory_data& data = mInventoryQ.front(); + + LLAssetType::EType asset_type = LLAssetType::lookup(data.mPostData["asset_type"].asString()); + LLInventoryType::EType inventory_type = LLInventoryType::lookup(data.mPostData["inventory_type"].asString()); + + on_new_single_inventory_upload_complete( + asset_type, + inventory_type, + data.mPostData["asset_type"].asString(), + data.mPostData["folder_id"].asUUID(), + data.mPostData["name"], + data.mPostData["description"], + data.mResponse, + 0); + + mInventoryQ.pop(); + } + } + + if (!mThread->mWaiting) + { //curl thread is churning, wait for it to go idle + return; + } + + LLFastTimer t(FTM_MESH_UPDATE); + + { + LLFastTimer t(FTM_MESH_LOCK1); + mMeshMutex->lock(); + } + + { + LLFastTimer t(FTM_MESH_LOCK2); + mThread->mMutex->lock(); + } + + //popup queued error messages from background threads + while (!mUploadErrorQ.empty()) + { + LLNotificationsUtil::add("MeshUploadError", mUploadErrorQ.front()); + mUploadErrorQ.pop(); + } + + S32 push_count = LLMeshRepoThread::sMaxConcurrentRequests-(LLMeshRepoThread::sActiveHeaderRequests+LLMeshRepoThread::sActiveLODRequests); + + if (push_count > 0) + { + //calculate "score" for pending requests + + //create score map + std::map score_map; + + for (U32 i = 0; i < 4; ++i) + { + for (mesh_load_map::iterator iter = mLoadingMeshes[i].begin(); iter != mLoadingMeshes[i].end(); ++iter) + { + F32 max_score = 0.f; + for (std::set::iterator obj_iter = iter->second.begin(); obj_iter != iter->second.end(); ++obj_iter) + { + LLViewerObject* object = gObjectList.findObject(*obj_iter); + + if (object) + { + LLDrawable* drawable = object->mDrawable; + if (drawable) + { + F32 cur_score = drawable->getRadius()/llmax(drawable->mDistanceWRTCamera, 1.f); + max_score = llmax(max_score, cur_score); + } + } + } + + score_map[iter->first.getSculptID()] = max_score; + } + } + + //set "score" for pending requests + for (std::vector::iterator iter = mPendingRequests.begin(); iter != mPendingRequests.end(); ++iter) + { + iter->mScore = score_map[iter->mMeshParams.getSculptID()]; + } + + //sort by "score" + std::sort(mPendingRequests.begin(), mPendingRequests.end(), LLMeshRepoThread::CompareScoreGreater()); + + while (!mPendingRequests.empty() && push_count > 0) + { + LLFastTimer t(FTM_LOAD_MESH_LOD); + LLMeshRepoThread::LODRequest& request = mPendingRequests.front(); + mThread->loadMeshLOD(request.mMeshParams, request.mLOD); + mPendingRequests.erase(mPendingRequests.begin()); + push_count--; + } + } + + //send skin info requests + while (!mPendingSkinRequests.empty()) + { + mThread->loadMeshSkinInfo(mPendingSkinRequests.front()); + mPendingSkinRequests.pop(); + } + + //send decomposition requests + while (!mPendingDecompositionRequests.empty()) + { + mThread->loadMeshDecomposition(mPendingDecompositionRequests.front()); + mPendingDecompositionRequests.pop(); + } + + mThread->notifyLoadedMeshes(); + + mThread->mMutex->unlock(); + mMeshMutex->unlock(); + + mThread->mSignal->signal(); +} + +void LLMeshRepository::notifySkinInfoReceived(LLMeshSkinInfo& info) +{ + mSkinMap[info.mMeshID] = info; + mLoadingSkins.erase(info.mMeshID); +} + +void LLMeshRepository::notifyDecompositionReceived(LLMeshDecomposition* decomp) +{ + mDecompositionMap[decomp->mMeshID] = decomp; + mLoadingDecompositions.erase(decomp->mMeshID); +} + +void LLMeshRepository::notifyMeshLoaded(const LLVolumeParams& mesh_params, LLVolume* volume) +{ + S32 detail = LLVolumeLODGroup::getVolumeDetailFromScale(volume->getDetail()); + + //get list of objects waiting to be notified this mesh is loaded + mesh_load_map::iterator obj_iter = mLoadingMeshes[detail].find(mesh_params); + + if (volume && obj_iter != mLoadingMeshes[detail].end()) + { + //make sure target volume is still valid + if (volume->getNumVolumeFaces() <= 0) + { + llwarns << "Mesh loading returned empty volume." << llendl; + volume->makeTetrahedron(); + } + + { //update system volume + LLVolume* sys_volume = LLPrimitive::getVolumeManager()->refVolume(mesh_params, detail); + if (sys_volume) + { + sys_volume->copyVolumeFaces(volume); + LLPrimitive::getVolumeManager()->unrefVolume(sys_volume); + } + else + { + llwarns << "Couldn't find system volume for given mesh." << llendl; + } + } + + //notify waiting LLVOVolume instances that their requested mesh is available + for (std::set::iterator vobj_iter = obj_iter->second.begin(); vobj_iter != obj_iter->second.end(); ++vobj_iter) + { + LLVOVolume* vobj = (LLVOVolume*) gObjectList.findObject(*vobj_iter); + if (vobj) + { + vobj->notifyMeshLoaded(); + } + } + + mLoadingMeshes[detail].erase(mesh_params); + } +} + +void LLMeshRepository::notifyMeshUnavailable(const LLVolumeParams& mesh_params, S32 lod) +{ + //get list of objects waiting to be notified this mesh is loaded + mesh_load_map::iterator obj_iter = mLoadingMeshes[lod].find(mesh_params); + + F32 detail = LLVolumeLODGroup::getVolumeScaleFromDetail(lod); + + if (obj_iter != mLoadingMeshes[lod].end()) + { + for (std::set::iterator vobj_iter = obj_iter->second.begin(); vobj_iter != obj_iter->second.end(); ++vobj_iter) + { + LLVOVolume* vobj = (LLVOVolume*) gObjectList.findObject(*vobj_iter); + if (vobj) + { + LLVolume* obj_volume = vobj->getVolume(); + + if (obj_volume && + obj_volume->getDetail() == detail && + obj_volume->getParams() == mesh_params) + { //should force volume to find most appropriate LOD + vobj->setVolume(obj_volume->getParams(), lod); + } + } + } + + mLoadingMeshes[lod].erase(mesh_params); + } +} + +S32 LLMeshRepository::getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lod) +{ + return mThread->getActualMeshLOD(mesh_params, lod); +} + +U32 LLMeshRepository::calcResourceCost(LLSD& header) +{ + U32 bytes = 0; + + for (U32 i = 0; i < 4; i++) + { + bytes += header[header_lod[i]]["size"].asInteger(); + } + + bytes += header["skin"]["size"].asInteger(); + + return bytes/4096 + 1; +} + +U32 LLMeshRepository::getResourceCost(const LLUUID& mesh_id) +{ + return mThread->getResourceCost(mesh_id); +} + +const LLMeshSkinInfo* LLMeshRepository::getSkinInfo(const LLUUID& mesh_id) +{ + if (mesh_id.notNull()) + { + skin_map::iterator iter = mSkinMap.find(mesh_id); + if (iter != mSkinMap.end()) + { + return &(iter->second); + } + + //no skin info known about given mesh, try to fetch it + { + LLMutexLock lock(mMeshMutex); + //add volume to list of loading meshes + std::set::iterator iter = mLoadingSkins.find(mesh_id); + if (iter == mLoadingSkins.end()) + { //no request pending for this skin info + mLoadingSkins.insert(mesh_id); + mPendingSkinRequests.push(mesh_id); + } + } + } + + return NULL; +} + +const LLMeshDecomposition* LLMeshRepository::getDecomposition(const LLUUID& mesh_id) +{ + if (mesh_id.notNull()) + { + decomposition_map::iterator iter = mDecompositionMap.find(mesh_id); + if (iter != mDecompositionMap.end()) + { + return iter->second; + } + + //no skin info known about given mesh, try to fetch it + { + LLMutexLock lock(mMeshMutex); + //add volume to list of loading meshes + std::set::iterator iter = mLoadingDecompositions.find(mesh_id); + if (iter == mLoadingDecompositions.end()) + { //no request pending for this skin info + mLoadingDecompositions.insert(mesh_id); + mPendingDecompositionRequests.push(mesh_id); + } + } + } + + return NULL; +} + +void LLMeshRepository::uploadModel(std::vector& data, LLVector3& scale, bool upload_textures) +{ + LLMeshUploadThread* thread = new LLMeshUploadThread(data, scale, upload_textures); + mUploads.push_back(thread); + thread->start(); +} + +void LLMeshUploadThread::sendCostRequest(LLMeshUploadData& data) +{ + //write model file to memory buffer + std::stringstream ostr; + + LLModel::physics_shape& phys_shape = data.mModel[LLModel::LOD_PHYSICS].notNull() ? + data.mModel[LLModel::LOD_PHYSICS]->mPhysicsShape : + data.mBaseModel->mPhysicsShape; + + LLSD header = LLModel::writeModel(ostr, + data.mModel[LLModel::LOD_PHYSICS], + data.mModel[LLModel::LOD_HIGH], + data.mModel[LLModel::LOD_MEDIUM], + data.mModel[LLModel::LOD_LOW], + data.mModel[LLModel::LOD_IMPOSTOR], + phys_shape, + true); + + std::string desc = data.mBaseModel->mLabel; + + // Grab the total vertex count of the model + // along with other information for the "asset_resources" map + // to send to the server. + LLSD asset_resources = LLSD::emptyMap(); + + + std::string url = mNewInventoryCapability; + + if (!url.empty()) + { + LLSD body = generate_new_resource_upload_capability_body( + LLAssetType::AT_MESH, + desc, + desc, + LLFolderType::FT_MESH, + LLInventoryType::IT_MESH, + LLFloaterPerms::getNextOwnerPerms(), + LLFloaterPerms::getGroupPerms(), + LLFloaterPerms::getEveryonePerms()); + + body["asset_resources"] = asset_resources; + + mPendingConfirmations++; + LLCurlRequest::headers_t headers; + + data.mPostData = body; + + mCurlRequest->post(url, headers, body, new LLMeshCostResponder(data, this)); + } +} + +void LLMeshUploadThread::sendCostRequest(LLTextureUploadData& data) +{ + if (data.mTexture.notNull() && data.mTexture->getDiscardLevel() >= 0) + { + LLSD asset_resources = LLSD::emptyMap(); + + std::string url = mNewInventoryCapability; + + if (!url.empty()) + { + LLSD body = generate_new_resource_upload_capability_body( + LLAssetType::AT_TEXTURE, + data.mLabel, + data.mLabel, + LLFolderType::FT_TEXTURE, + LLInventoryType::IT_TEXTURE, + LLFloaterPerms::getNextOwnerPerms(), + LLFloaterPerms::getGroupPerms(), + LLFloaterPerms::getEveryonePerms()); + + body["asset_resources"] = asset_resources; + + mPendingConfirmations++; + LLCurlRequest::headers_t headers; + + data.mPostData = body; + mCurlRequest->post(url, headers, body, new LLTextureCostResponder(data, this)); + } + } +} + + +void LLMeshUploadThread::doUploadModel(LLMeshUploadData& data) +{ + if (!data.mRSVP.empty()) + { + std::stringstream ostr; + + LLModel::physics_shape& phys_shape = data.mModel[LLModel::LOD_PHYSICS].notNull() ? + data.mModel[LLModel::LOD_PHYSICS]->mPhysicsShape : + data.mBaseModel->mPhysicsShape; + + LLModel::writeModel(ostr, + data.mModel[LLModel::LOD_PHYSICS], + data.mModel[LLModel::LOD_HIGH], + data.mModel[LLModel::LOD_MEDIUM], + data.mModel[LLModel::LOD_LOW], + data.mModel[LLModel::LOD_IMPOSTOR], + phys_shape); + + data.mAssetData = ostr.str(); + + LLCurlRequest::headers_t headers; + mPendingUploads++; + + mCurlRequest->post(data.mRSVP, headers, data.mAssetData, new LLMeshUploadResponder(data, this)); + } +} + +void LLMeshUploadThread::doUploadTexture(LLTextureUploadData& data) +{ + if (!data.mRSVP.empty()) + { + std::stringstream ostr; + + if (!data.mTexture->isRawImageValid()) + { + data.mTexture->reloadRawImage(data.mTexture->getDiscardLevel()); + } + + LLPointer upload_file = LLViewerTextureList::convertToUploadFile(data.mTexture->getRawImage()); + + ostr.write((const char*) upload_file->getData(), upload_file->getDataSize()); + + data.mAssetData = ostr.str(); + + LLCurlRequest::headers_t headers; + mPendingUploads++; + + mCurlRequest->post(data.mRSVP, headers, data.mAssetData, new LLTextureUploadResponder(data, this)); + } +} + + +void LLMeshUploadThread::onModelUploaded(LLMeshUploadData& data) +{ + createObjects(data); +} + +void LLMeshUploadThread::onTextureUploaded(LLTextureUploadData& data) +{ + mTextureMap[data.mTexture] = data; +} + + +void LLMeshUploadThread::createObjects(LLMeshUploadData& data) +{ + instance_list& instances = mInstance[data.mBaseModel]; + + for (instance_list::iterator iter = instances.begin(); iter != instances.end(); ++iter) + { //create prims that reference given mesh + LLModelInstance& instance = *iter; + instance.mMeshID = data.mUUID; + mInstanceQ.push(instance); + } +} + +LLSD LLMeshUploadThread::createObject(LLModelInstance& instance) +{ + LLMatrix4 transformation = instance.mTransform; + + if (instance.mMeshID.isNull()) + { + llerrs << "WTF?" << llendl; + } + + // check for reflection + BOOL reflected = (transformation.determinant() < 0); + + // compute position + LLVector3 position = LLVector3(0, 0, 0) * transformation; + + // compute scale + LLVector3 x_transformed = LLVector3(1, 0, 0) * transformation - position; + LLVector3 y_transformed = LLVector3(0, 1, 0) * transformation - position; + LLVector3 z_transformed = LLVector3(0, 0, 1) * transformation - position; + F32 x_length = x_transformed.normalize(); + F32 y_length = y_transformed.normalize(); + F32 z_length = z_transformed.normalize(); + LLVector3 scale = LLVector3(x_length, y_length, z_length); + + // adjust for "reflected" geometry + LLVector3 x_transformed_reflected = x_transformed; + if (reflected) + { + x_transformed_reflected *= -1.0; + } + + // compute rotation + LLMatrix3 rotation_matrix; + rotation_matrix.setRows(x_transformed_reflected, y_transformed, z_transformed); + LLQuaternion quat_rotation = rotation_matrix.quaternion(); + quat_rotation.normalize(); // the rotation_matrix might not have been orthoginal. make it so here. + LLVector3 euler_rotation; + quat_rotation.getEulerAngles(&euler_rotation.mV[VX], &euler_rotation.mV[VY], &euler_rotation.mV[VZ]); + + // + // build parameter block to construct this prim + // + + LLSD object_params; + + // create prim + + // set volume params + U8 sculpt_type = LL_SCULPT_TYPE_MESH; + if (reflected) + { + sculpt_type |= LL_SCULPT_FLAG_MIRROR; + } + LLVolumeParams volume_params; + volume_params.setType( LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE ); + volume_params.setBeginAndEndS( 0.f, 1.f ); + volume_params.setBeginAndEndT( 0.f, 1.f ); + volume_params.setRatio ( 1, 1 ); + volume_params.setShear ( 0, 0 ); + volume_params.setSculptID(instance.mMeshID, sculpt_type); + object_params["shape"] = volume_params.asLLSD(); + + object_params["material"] = LL_MCODE_WOOD; + + object_params["group-id"] = gAgent.getGroupID(); + object_params["pos"] = ll_sd_from_vector3(position + mOrigin); + object_params["rotation"] = ll_sd_from_quaternion(quat_rotation); + object_params["scale"] = ll_sd_from_vector3(scale); + object_params["name"] = instance.mModel->mLabel; + + // load material from dae file + object_params["facelist"] = LLSD::emptyArray(); + for (S32 i = 0; i < instance.mMaterial.size(); i++) + { + LLTextureEntry te; + LLImportMaterial& mat = instance.mMaterial[i]; + + te.setColor(mat.mDiffuseColor); + + LLUUID diffuse_id = mTextureMap[mat.mDiffuseMap].mUUID; + + if (diffuse_id.notNull()) + { + te.setID(diffuse_id); + } + else + { + te.setID(LLUUID("5748decc-f629-461c-9a36-a35a221fe21f")); // blank texture + } + + te.setFullbright(mat.mFullbright); + + object_params["facelist"][i] = te.asLLSD(); + } + + // set extra parameters + LLSculptParams sculpt_params; + sculpt_params.setSculptTexture(instance.mMeshID); + sculpt_params.setSculptType(sculpt_type); + U8 buffer[MAX_OBJECT_PARAMS_SIZE+1]; + LLDataPackerBinaryBuffer dp(buffer, MAX_OBJECT_PARAMS_SIZE); + sculpt_params.pack(dp); + std::vector v(dp.getCurrentSize()); + memcpy(&v[0], buffer, dp.getCurrentSize()); + LLSD extra_parameter; + extra_parameter["extra_parameter"] = sculpt_params.mType; + extra_parameter["param_data"] = v; + object_params["extra_parameters"].append(extra_parameter); + + return object_params; +} + +void LLMeshUploadThread::priceResult(LLMeshUploadData& data, const LLSD& content) +{ + mPendingCost += content["upload_price"].asInteger(); + data.mRSVP = content["rsvp"].asString(); + data.mRSVP = scrub_host_name(data.mRSVP, mHost); + + mConfirmedQ.push(data); +} + +void LLMeshUploadThread::priceResult(LLTextureUploadData& data, const LLSD& content) +{ + mPendingCost += content["upload_price"].asInteger(); + data.mRSVP = content["rsvp"].asString(); + data.mRSVP = scrub_host_name(data.mRSVP, mHost); + + mConfirmedTextureQ.push(data); +} + + +bool LLImportMaterial::operator<(const LLImportMaterial &rhs) const +{ + if (mDiffuseMap != rhs.mDiffuseMap) + { + return mDiffuseMap < rhs.mDiffuseMap; + } + + if (mDiffuseMapFilename != rhs.mDiffuseMapFilename) + { + return mDiffuseMapFilename < rhs.mDiffuseMapFilename; + } + + if (mDiffuseMapLabel != rhs.mDiffuseMapLabel) + { + return mDiffuseMapLabel < rhs.mDiffuseMapLabel; + } + + if (mDiffuseColor != rhs.mDiffuseColor) + { + return mDiffuseColor < rhs.mDiffuseColor; + } + + return mFullbright < rhs.mFullbright; +} + + +void LLMeshRepository::updateInventory(inventory_data data) +{ + LLMutexLock lock(mMeshMutex); + mInventoryQ.push(data); +} + +void LLMeshRepository::uploadError(LLSD& args) +{ + LLMutexLock lock(mMeshMutex); + mUploadErrorQ.push(args); +} + + +LLPhysicsDecomp::LLPhysicsDecomp() +: LLThread("Physics Decomp") +{ + mInited = false; + mQuitting = false; + mDone = false; + mStage = -1; + mContinue = 1; + + mSignal = new LLCondition(NULL); + mMutex = new LLMutex(NULL); + + setStatusMessage("Idle"); +} + +LLPhysicsDecomp::~LLPhysicsDecomp() +{ + shutdown(); +} + +void LLPhysicsDecomp::shutdown() +{ + if (mSignal) + { + mQuitting = true; + mContinue = 0; + mSignal->signal(); + + while (!mDone) + { + apr_sleep(100); + } + } +} + +void LLPhysicsDecomp::setStatusMessage(std::string msg) +{ + LLMutexLock lock(mMutex); + mStatus = msg; +} + +void LLPhysicsDecomp::execute(const char* stage, LLModel* mdl) +{ + LLMutexLock lock(mMutex); + + if (mModel.notNull()) + { + llwarns << "Not done processing previous model." << llendl; + return; + } + + mModel = mdl; + //load model into LLCD + if (mdl) + { + mStage = mStageID[stage]; + + U16 index_offset = 0; + + if (mStage == 0) + { + mPositions.clear(); + mIndices.clear(); + + //queue up vertex positions and indices + for (S32 i = 0; i < mdl->getNumVolumeFaces(); ++i) + { + const LLVolumeFace& face = mdl->getVolumeFace(i); + if (mPositions.size() + face.mNumVertices > 65535) + { + continue; + } + + for (U32 j = 0; j < face.mNumVertices; ++j) + { + mPositions.push_back(LLVector3(face.mPositions[j].getF32ptr())); + } + + for (U32 j = 0; j < face.mNumIndices; ++j) + { + mIndices.push_back(face.mIndices[j]+index_offset); + } + + index_offset += face.mNumVertices; + } + } + + //signal decomposition thread + mSignal->signal(); + } +} + +//static +S32 LLPhysicsDecomp::llcdCallback(const char* status, S32 p1, S32 p2) +{ + LLPhysicsDecomp* comp = gMeshRepo.mDecompThread; + comp->setStatusMessage(llformat("%s: %d/%d", status, p1, p2)); + return comp->mContinue; +} + +void LLPhysicsDecomp::cancel() +{ + mContinue = 0; +} + +void LLPhysicsDecomp::run() +{ + LLConvexDecomposition::initSystem(); + mInited = true; + + while (!mQuitting) + { + mSignal->wait(); + if (!mQuitting) + { + //load data intoLLCD + if (mStage == 0) + { + mMesh.mVertexBase = mPositions[0].mV; + mMesh.mVertexStrideBytes = 12; + mMesh.mNumVertices = mPositions.size(); + + mMesh.mIndexType = LLCDMeshData::INT_16; + mMesh.mIndexBase = &(mIndices[0]); + mMesh.mIndexStrideBytes = 6; + + mMesh.mNumTriangles = mIndices.size()/3; + + LLCDResult ret = LLCD_OK; + if (LLConvexDecomposition::getInstance() != NULL) + { + ret = LLConvexDecomposition::getInstance()->setMeshData(&mMesh); + } + + if (ret) + { + llerrs << "Convex Decomposition thread valid but could not set mesh data" << llendl; + } + } + + setStatusMessage("Executing."); + + mContinue = 1; + LLCDResult ret = LLCD_OK; + if (LLConvexDecomposition::getInstance() != NULL) + { + ret = LLConvexDecomposition::getInstance()->executeStage(mStage); + } + + mContinue = 0; + if (ret) + { + llerrs << "Convex Decomposition thread valid but could not execute stage " << mStage << llendl; + } + + + setStatusMessage("Reading results"); + + S32 num_hulls =0; + if (LLConvexDecomposition::getInstance() != NULL) + { + num_hulls = LLConvexDecomposition::getInstance()->getNumHullsFromStage(mStage); + } + + if (mModel.isNull()) + { + llerrs << "mModel should never be null here!" << llendl; + } + + mMutex->lock(); + mModel->mPhysicsShape.clear(); + mModel->mPhysicsShape.resize(num_hulls); + mModel->mHullCenter.clear(); + mModel->mHullCenter.resize(num_hulls); + std::vector > mesh_buffer; + mesh_buffer.resize(num_hulls); + mModel->mPhysicsCenter.clearVec(); + mModel->mPhysicsPoints = 0; + mMutex->unlock(); + + for (S32 i = 0; i < num_hulls; ++i) + { + std::vector p; + LLCDHull hull; + // if LLConvexDecomposition is a stub, num_hulls should have been set to 0 above, and we should not reach this code + LLConvexDecomposition::getInstance()->getHullFromStage(mStage, i, &hull); + + const F32* v = hull.mVertexBase; + + LLVector3 hull_center; + + for (S32 j = 0; j < hull.mNumVertices; ++j) + { + LLVector3 vert(v[0], v[1], v[2]); + p.push_back(vert); + hull_center += vert; + v = (F32*) (((U8*) v) + hull.mVertexStrideBytes); + } + + + hull_center *= 1.f/hull.mNumVertices; + + LLCDMeshData mesh; + // if LLConvexDecomposition is a stub, num_hulls should have been set to 0 above, and we should not reach this code + LLConvexDecomposition::getInstance()->getMeshFromStage(mStage, i, &mesh); + + mesh_buffer[i] = get_vertex_buffer_from_mesh(mesh); + + mMutex->lock(); + mModel->mPhysicsShape[i] = p; + mModel->mHullCenter[i] = hull_center; + mModel->mPhysicsPoints += hull.mNumVertices; + mModel->mPhysicsCenter += hull_center; + + mMutex->unlock(); + } + + { + LLMutexLock lock(mMutex); + mModel->mPhysicsCenter *= 1.f/mModel->mPhysicsPoints; + + LLFloaterModelPreview::onModelDecompositionComplete(mModel, mesh_buffer); + //done updating model + mModel = NULL; + } + + setStatusMessage("Done."); + LLFloaterModelPreview::sInstance->mModelPreview->refresh(); + } + } + + LLConvexDecomposition::quitSystem(); + + //delete mSignal; + delete mMutex; + mSignal = NULL; + mMutex = NULL; + mDone = true; +} + +#endif + diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h new file mode 100644 index 0000000000..d5e21c35cc --- /dev/null +++ b/indra/newview/llmeshrepository.h @@ -0,0 +1,471 @@ +/** + * @file llmeshrepository.h + * @brief Client-side repository of mesh assets. + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_MESH_REPOSITORY_H +#define LL_MESH_REPOSITORY_H + +#include "llassettype.h" +#include "llmodel.h" +#include "lluuid.h" +#include "llviewertexture.h" +#include "llvolume.h" + +#if LL_MESH_ENABLED + +#define LLCONVEXDECOMPINTER_STATIC 1 + +#include "llconvexdecomposition.h" + +class LLVOVolume; +class LLMeshResponder; +class LLCurlRequest; +class LLMutex; +class LLCondition; +class LLVFS; +class LLMeshRepository; + +class LLMeshUploadData +{ +public: + LLPointer mBaseModel; + LLPointer mModel[5]; + LLUUID mUUID; + U32 mRetries; + std::string mRSVP; + std::string mAssetData; + LLSD mPostData; + + LLMeshUploadData() + { + mRetries = 0; + } +}; + +class LLTextureUploadData +{ +public: + LLPointer mTexture; + LLUUID mUUID; + std::string mRSVP; + std::string mLabel; + U32 mRetries; + std::string mAssetData; + LLSD mPostData; + + LLTextureUploadData() + { + mRetries = 0; + } + + LLTextureUploadData(LLViewerFetchedTexture* texture, std::string& label) + : mTexture(texture), mLabel(label) + { + mRetries = 0; + } +}; + +class LLImportMaterial +{ +public: + LLPointer mDiffuseMap; + std::string mDiffuseMapFilename; + std::string mDiffuseMapLabel; + LLColor4 mDiffuseColor; + bool mFullbright; + + bool operator<(const LLImportMaterial ¶ms) const; + + LLImportMaterial() + : mFullbright(false) + { + mDiffuseColor.set(1,1,1,1); + } +}; + +class LLModelInstance +{ +public: + LLPointer mModel; + LLPointer mLOD[5]; + + LLUUID mMeshID; + + LLMatrix4 mTransform; + std::vector mMaterial; + + LLModelInstance(LLModel* model, LLMatrix4& transform, std::vector& materials) + : mModel(model), mTransform(transform), mMaterial(materials) + { + } +}; + +class LLMeshSkinInfo +{ +public: + LLUUID mMeshID; + std::vector mJointNames; + std::vector mInvBindMatrix; + LLMatrix4 mBindShapeMatrix; +}; + +class LLMeshDecomposition +{ +public: + LLMeshDecomposition() { } + + LLUUID mMeshID; + LLModel::physics_shape mHull; + + std::vector > mMesh; +}; + +class LLPhysicsDecomp : public LLThread +{ +public: + LLCondition* mSignal; + LLMutex* mMutex; + + LLCDMeshData mMesh; + + bool mInited; + bool mQuitting; + bool mDone; + + S32 mContinue; + std::string mStatus; + + std::vector mPositions; + std::vector mIndices; + + S32 mStage; + + LLPhysicsDecomp(); + ~LLPhysicsDecomp(); + + void shutdown(); + void setStatusMessage(std::string msg); + + void execute(const char* stage, LLModel* mdl); + static S32 llcdCallback(const char*, S32, S32); + void cancel(); + + virtual void run(); + + std::map mStageID; + LLPointer mModel; +}; + +class LLMeshRepoThread : public LLThread +{ +public: + + static S32 sActiveHeaderRequests; + static S32 sActiveLODRequests; + static U32 sMaxConcurrentRequests; + + LLCurlRequest* mCurlRequest; + LLMutex* mMutex; + LLMutex* mHeaderMutex; + LLCondition* mSignal; + + bool mWaiting; + + //map of known mesh headers + typedef std::map mesh_header_map; + mesh_header_map mMeshHeader; + + std::map mMeshHeaderSize; + std::map mMeshResourceCost; + + class HeaderRequest + { + public: + const LLVolumeParams mMeshParams; + + HeaderRequest(const LLVolumeParams& mesh_params) + : mMeshParams(mesh_params) + { + } + + bool operator<(const HeaderRequest& rhs) const + { + return mMeshParams < rhs.mMeshParams; + } + }; + + class LODRequest + { + public: + LLVolumeParams mMeshParams; + S32 mLOD; + F32 mScore; + + LODRequest(const LLVolumeParams& mesh_params, S32 lod) + : mMeshParams(mesh_params), mLOD(lod), mScore(0.f) + { + } + }; + + struct CompareScoreGreater + { + bool operator()(const LODRequest& lhs, const LODRequest& rhs) + { + return lhs.mScore > rhs.mScore; // greatest = first + } + }; + + + class LoadedMesh + { + public: + LLPointer mVolume; + LLVolumeParams mMeshParams; + S32 mLOD; + + LoadedMesh(LLVolume* volume, const LLVolumeParams& mesh_params, S32 lod) + : mVolume(volume), mMeshParams(mesh_params), mLOD(lod) + { + } + + }; + + //set of requested skin info + std::set mSkinRequests; + + //queue of completed skin info requests + std::queue mSkinInfoQ; + + //set of requested decompositions + std::set mDecompositionRequests; + + //queue of completed Decomposition info requests + std::queue mDecompositionQ; + + //queue of requested headers + std::queue mHeaderReqQ; + + //queue of requested LODs + std::queue mLODReqQ; + + //queue of unavailable LODs (either asset doesn't exist or asset doesn't have desired LOD) + std::queue mUnavailableQ; + + //queue of successfully loaded meshes + std::queue mLoadedQ; + + //map of pending header requests and currently desired LODs + typedef std::map > pending_lod_map; + pending_lod_map mPendingLOD; + + static std::string constructUrl(LLUUID mesh_id); + + LLMeshRepoThread(); + ~LLMeshRepoThread(); + + virtual void run(); + + void loadMeshLOD(const LLVolumeParams& mesh_params, S32 lod); + bool fetchMeshHeader(const LLVolumeParams& mesh_params); + bool fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod); + bool headerReceived(const LLVolumeParams& mesh_params, U8* data, S32 data_size); + bool lodReceived(const LLVolumeParams& mesh_params, S32 lod, U8* data, S32 data_size); + bool skinInfoReceived(const LLUUID& mesh_id, U8* data, S32 data_size); + bool decompositionReceived(const LLUUID& mesh_id, U8* data, S32 data_size); + + void notifyLoadedMeshes(); + S32 getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lod); + U32 getResourceCost(const LLUUID& mesh_params); + + void loadMeshSkinInfo(const LLUUID& mesh_id); + void loadMeshDecomposition(const LLUUID& mesh_id); + + //send request for skin info, returns true if header info exists + // (should hold onto mesh_id and try again later if header info does not exist) + bool fetchMeshSkinInfo(const LLUUID& mesh_id); + + //send request for decomposition, returns true if header info exists + // (should hold onto mesh_id and try again later if header info does not exist) + bool fetchMeshDecomposition(const LLUUID& mesh_id); +}; + +class LLMeshUploadThread : public LLThread +{ +public: + typedef std::vector instance_list; + instance_list mInstanceList; + + typedef std::map, instance_list> instance_map; + instance_map mInstance; + + LLMutex* mMutex; + LLCurlRequest* mCurlRequest; + S32 mPendingConfirmations; + S32 mPendingUploads; + S32 mPendingCost; + bool mFinished; + LLVector3 mOrigin; + bool mUploadTextures; + + LLHost mHost; + std::string mUploadObjectAssetCapability; + std::string mNewInventoryCapability; + + std::queue mUploadQ; + std::queue mConfirmedQ; + std::queue mInstanceQ; + + std::queue mTextureQ; + std::queue mConfirmedTextureQ; + + std::map, LLTextureUploadData> mTextureMap; + + LLMeshUploadThread(instance_list& data, LLVector3& scale, bool upload_textures); + ~LLMeshUploadThread(); + + void uploadTexture(LLTextureUploadData& data); + void doUploadTexture(LLTextureUploadData& data); + void sendCostRequest(LLTextureUploadData& data); + void priceResult(LLTextureUploadData& data, const LLSD& content); + void onTextureUploaded(LLTextureUploadData& data); + + void uploadModel(LLMeshUploadData& data); + void sendCostRequest(LLMeshUploadData& data); + void doUploadModel(LLMeshUploadData& data); + void onModelUploaded(LLMeshUploadData& data); + void createObjects(LLMeshUploadData& data); + LLSD createObject(LLModelInstance& instance); + void priceResult(LLMeshUploadData& data, const LLSD& content); + + bool finished() { return mFinished; } + virtual void run(); + +}; + +class LLMeshRepository +{ +public: + + //metrics + static U32 sBytesReceived; + static U32 sHTTPRequestCount; + static U32 sHTTPRetryCount; + static U32 sCacheBytesRead; + static U32 sCacheBytesWritten; + static U32 sPeakKbps; + + + LLMeshRepository(); + + void init(); + void shutdown(); + + //mesh management functions + S32 loadMesh(LLVOVolume* volume, const LLVolumeParams& mesh_params, S32 detail = 0); + + void notifyLoadedMeshes(); + void notifyMeshLoaded(const LLVolumeParams& mesh_params, LLVolume* volume); + void notifyMeshUnavailable(const LLVolumeParams& mesh_params, S32 lod); + void notifySkinInfoReceived(LLMeshSkinInfo& info); + void notifyDecompositionReceived(LLMeshDecomposition* info); + + S32 getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lod); + U32 calcResourceCost(LLSD& header); + U32 getResourceCost(const LLUUID& mesh_params); + const LLMeshSkinInfo* getSkinInfo(const LLUUID& mesh_id); + const LLMeshDecomposition* getDecomposition(const LLUUID& mesh_id); + + void uploadModel(std::vector& data, LLVector3& scale, bool upload_textures); + + + + + typedef std::map > mesh_load_map; + mesh_load_map mLoadingMeshes[4]; + + typedef std::map skin_map; + skin_map mSkinMap; + + typedef std::map decomposition_map; + decomposition_map mDecompositionMap; + + LLMutex* mMeshMutex; + + std::vector mPendingRequests; + + //list of mesh ids awaiting skin info + std::set mLoadingSkins; + + //list of mesh ids that need to send skin info fetch requests + std::queue mPendingSkinRequests; + + //list of mesh ids awaiting decompositions + std::set mLoadingDecompositions; + + //list of mesh ids that need to send decomposition fetch requests + std::queue mPendingDecompositionRequests; + + U32 mMeshThreadCount; + + void cacheOutgoingMesh(LLMeshUploadData& data, LLSD& header); + + LLMeshRepoThread* mThread; + std::vector mUploads; + + LLPhysicsDecomp* mDecompThread; + + class inventory_data + { + public: + LLSD mPostData; + LLSD mResponse; + + inventory_data(const LLSD& data, const LLSD& content) + : mPostData(data), mResponse(content) + { + } + }; + + std::queue mInventoryQ; + + std::queue mUploadErrorQ; + + void uploadError(LLSD& args); + void updateInventory(inventory_data data); + +}; + +extern LLMeshRepository gMeshRepo; + +#endif + +#endif + -- cgit v1.3 From 054e8fbde325c03bc8f9a7c10aa8bb9319d501ba Mon Sep 17 00:00:00 2001 From: "Nyx (Neal Orman)" Date: Thu, 26 Aug 2010 16:52:32 -0400 Subject: buildfix: fixing linux build to handle new SSE2 architecture code reviewed by davep and falcon --- indra/cmake/00-Common.cmake | 6 ++---- indra/llmath/lloctree.h | 2 +- indra/llmath/llvector4a.h | 3 ++- indra/llmath/tests/llquaternion_test.cpp | 2 +- indra/llmath/tests/v3dmath_test.cpp | 2 +- indra/llmath/tests/v3math_test.cpp | 4 ++-- indra/llmath/tests/v4math_test.cpp | 2 +- indra/newview/llfloatermodelpreview.cpp | 8 ++++---- 8 files changed, 14 insertions(+), 15 deletions(-) (limited to 'indra/llmath') diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index 8262462ced..20573c9495 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -144,6 +144,8 @@ if (LINUX) -fno-strict-aliasing -fsigned-char -g + -msse2 + -mfpmath=sse -pthread ) @@ -163,10 +165,6 @@ if (LINUX) link_directories(/usr/lib/mysql4/mysql) endif (EXISTS /usr/lib/mysql4/mysql) - add_definitions( - -msse2 - -mfpmath=sse - ) endif (SERVER) if (VIEWER) diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index 432e9fbcd8..73910ef98d 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -206,7 +206,7 @@ public: { const LLVector4a& pos = data->getPositionGroup(); - LLVector4a gt = pos.greaterThan(center); + LLVector4Logical gt = pos.greaterThan(center); LLVector4a up; up = _mm_and_ps(size, gt); diff --git a/indra/llmath/llvector4a.h b/indra/llmath/llvector4a.h index 76a3e999ce..a80e9b49dd 100644 --- a/indra/llmath/llvector4a.h +++ b/indra/llmath/llvector4a.h @@ -153,7 +153,6 @@ public: // Prefer this method for read-only access to a single element. Prefer the templated version if the elem is known at compile time. template LL_FORCE_INLINE LLSimdScalar getScalarAt() const; - template <> LL_FORCE_INLINE LLSimdScalar getScalarAt<0>() const; // Set to an x, y, z and optional w provided inline void set(F32 x, F32 y, F32 z, F32 w = 0.f); @@ -322,6 +321,8 @@ private: LLQuad mQ; }; +template <> LL_FORCE_INLINE LLSimdScalar LLVector4a::getScalarAt<0>() const; + inline void update_min_max(LLVector4a& min, LLVector4a& max, const LLVector4a& p) { min.setMin(min, p); diff --git a/indra/llmath/tests/llquaternion_test.cpp b/indra/llmath/tests/llquaternion_test.cpp index 2d27d1eb32..451b0ecc60 100644 --- a/indra/llmath/tests/llquaternion_test.cpp +++ b/indra/llmath/tests/llquaternion_test.cpp @@ -35,12 +35,12 @@ #include "linden_common.h" #include "../test/lltut.h" -#include "../llquaternion.h" #include "../v4math.h" #include "../v3math.h" #include "../v3dmath.h" #include "../m4math.h" #include "../m3math.h" +#include "../llquaternion.h" namespace tut { diff --git a/indra/llmath/tests/v3dmath_test.cpp b/indra/llmath/tests/v3dmath_test.cpp index 894b6200f5..734b8f8b80 100644 --- a/indra/llmath/tests/v3dmath_test.cpp +++ b/indra/llmath/tests/v3dmath_test.cpp @@ -36,11 +36,11 @@ #include "llsd.h" #include "../test/lltut.h" -#include "../llquaternion.h" #include "../m3math.h" #include "../v4math.h" #include "../v3dmath.h" #include "../v3dmath.h" +#include "../llquaternion.h" namespace tut { diff --git a/indra/llmath/tests/v3math_test.cpp b/indra/llmath/tests/v3math_test.cpp index d5c8dd2f9c..e6354c2b86 100644 --- a/indra/llmath/tests/v3math_test.cpp +++ b/indra/llmath/tests/v3math_test.cpp @@ -36,12 +36,12 @@ #include "../test/lltut.h" #include "llsd.h" -#include "../llquaternion.h" -#include "../llquantize.h" #include "../v3dmath.h" #include "../m3math.h" #include "../v4math.h" #include "../v3math.h" +#include "../llquaternion.h" +#include "../llquantize.h" namespace tut diff --git a/indra/llmath/tests/v4math_test.cpp b/indra/llmath/tests/v4math_test.cpp index e919c90efa..61fc108488 100644 --- a/indra/llmath/tests/v4math_test.cpp +++ b/indra/llmath/tests/v4math_test.cpp @@ -36,9 +36,9 @@ #include "../test/lltut.h" #include "llsd.h" -#include "../llquaternion.h" #include "../m4math.h" #include "../v4math.h" +#include "../llquaternion.h" namespace tut { diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 5dd983d818..91dfb9fc1c 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -2656,8 +2656,8 @@ void LLModelPreview::updateStatusMessages() const F32 ratio = 0.5f; const S32 required_verts = 128; - F32 scaler = powf(0.5f, lod_high-lod); - S32 max_verts = verts[lod_high][i]*scaler; + F32 scaler = powf(ratio, lod_high-lod); + S32 max_verts = (S32)(verts[lod_high][i]*scaler); if (max_verts > required_verts) { //some model in this slot might have more than 128 vertices @@ -2691,8 +2691,8 @@ void LLModelPreview::updateStatusMessages() { const F32 ratio = 0.5f; - F32 scaler = powf(0.5f, lod_high-lod); - S32 max_verts = verts[lod_high][i]*scaler; + F32 scaler = powf(ratio, lod_high-lod); + S32 max_verts = (S32)(verts[lod_high][i]*scaler); if (verts[lod][i] > max_verts) { -- cgit v1.3 From 0d305552003d8378f692cddf87caebb7c47d8ab3 Mon Sep 17 00:00:00 2001 From: "Nyx (Neal Orman)" Date: Thu, 26 Aug 2010 16:57:24 -0400 Subject: buildfix removing unnecessary line in llvector4a.h upon further review, falcon determined this fix was unnecessary. --- indra/llmath/llvector4a.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvector4a.h b/indra/llmath/llvector4a.h index a80e9b49dd..1e0b3bc854 100644 --- a/indra/llmath/llvector4a.h +++ b/indra/llmath/llvector4a.h @@ -321,8 +321,6 @@ private: LLQuad mQ; }; -template <> LL_FORCE_INLINE LLSimdScalar LLVector4a::getScalarAt<0>() const; - inline void update_min_max(LLVector4a& min, LLVector4a& max, const LLVector4a& p) { min.setMin(min, p); -- cgit v1.3 From 3cda7606380109beb3f331b8b53d38914f8ba8f5 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Fri, 10 Sep 2010 14:08:12 -0500 Subject: Added test code for volume raycast octree and fixed a crash in render cost calculation when selecting trees/grass. Reviewed by jwolk. --- indra/llmath/llvolume.cpp | 61 ++++++++++++++++++++++-------------- indra/llmath/llvolumeoctree.cpp | 61 ++++++++++++++++++++++++++++++++++-- indra/llmath/llvolumeoctree.h | 6 ++-- indra/newview/llfloatertools.cpp | 8 +++-- indra/newview/llspatialpartition.cpp | 47 ++++++++++++++++++++++----- 5 files changed, 145 insertions(+), 38 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index ab9f8c4c24..4798197921 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -94,6 +94,8 @@ const F32 SKEW_MAX = 0.95f; const F32 SCULPT_MIN_AREA = 0.002f; const S32 SCULPT_MIN_AREA_DETAIL = 1; +extern BOOL gDebugGL; + BOOL check_same_clock_dir( const LLVector3& pt1, const LLVector3& pt2, const LLVector3& pt3, const LLVector3& norm) { LLVector3 test = (pt2-pt1)%(pt3-pt2); @@ -308,22 +310,26 @@ public: } virtual void visit(const LLOctreeNode* branch) - { + { //this is a depth first traversal, so it's safe to assum all children have complete + //bounding data + LLVolumeOctreeListener* node = (LLVolumeOctreeListener*) branch->getListener(0); LLVector4a& min = node->mExtents[0]; LLVector4a& max = node->mExtents[1]; - if (branch->getElementCount() != 0) - { + if (!branch->getData().empty()) + { //node has data, find AABB that binds data set const LLVolumeTriangle* tri = *(branch->getData().begin()); - + + //initialize min/max to first available vertex min = *(tri->mV[0]); max = *(tri->mV[0]); for (LLOctreeNode::const_element_iter iter = branch->getData().begin(); iter != branch->getData().end(); ++iter) - { + { //for each triangle in node + //stretch by triangles in node tri = *iter; @@ -335,33 +341,27 @@ public: max.setMax(max, *tri->mV[1]); max.setMax(max, *tri->mV[2]); } - - for (S32 i = 0; i < branch->getChildCount(); ++i) - { //stretch by child extents - LLVolumeOctreeListener* child = (LLVolumeOctreeListener*) branch->getChild(i)->getListener(0); - min.setMin(min, child->mExtents[0]); - max.setMax(min, child->mExtents[1]); - } } - else if (branch->getChildCount() != 0) - { + else if (!branch->getChildren().empty()) + { //no data, but child nodes exist LLVolumeOctreeListener* child = (LLVolumeOctreeListener*) branch->getChild(0)->getListener(0); + //initialize min/max to extents of first child min = child->mExtents[0]; max = child->mExtents[1]; - - for (S32 i = 1; i < branch->getChildCount(); ++i) - { //stretch by child extents - child = (LLVolumeOctreeListener*) branch->getChild(i)->getListener(0); - min.setMin(min, child->mExtents[0]); - max.setMax(max, child->mExtents[1]); - } } else { llerrs << "WTF? Empty leaf" << llendl; } - + + for (S32 i = 0; i < branch->getChildCount(); ++i) + { //stretch by child extents + LLVolumeOctreeListener* child = (LLVolumeOctreeListener*) branch->getChild(i)->getListener(0); + min.setMin(min, child->mExtents[0]); + max.setMax(max, child->mExtents[1]); + } + node->mBounds[0].setAdd(min, max); node->mBounds[0].mul(0.5f); @@ -370,7 +370,6 @@ public: } }; - //------------------------------------------------------------------- // statics //------------------------------------------------------------------- @@ -5474,45 +5473,59 @@ void LLVolumeFace::createOctree() new LLVolumeOctreeListener(mOctree); for (U32 i = 0; i < mNumIndices; i+= 3) - { + { //for each triangle LLPointer tri = new LLVolumeTriangle(); const LLVector4a& v0 = mPositions[mIndices[i]]; const LLVector4a& v1 = mPositions[mIndices[i+1]]; const LLVector4a& v2 = mPositions[mIndices[i+2]]; + //store pointers to vertex data tri->mV[0] = &v0; tri->mV[1] = &v1; tri->mV[2] = &v2; + //store indices tri->mIndex[0] = mIndices[i]; tri->mIndex[1] = mIndices[i+1]; tri->mIndex[2] = mIndices[i+2]; + //get minimum point LLVector4a min = v0; min.setMin(min, v1); min.setMin(min, v2); + //get maximum point LLVector4a max = v0; max.setMax(max, v1); max.setMax(max, v2); + //compute center LLVector4a center; center.setAdd(min, max); center.mul(0.5f); *tri->mPositionGroup = center; + //compute "radius" LLVector4a size; size.setSub(max,min); tri->mRadius = size.getLength3().getF32() * 0.5f; + //insert mOctree->insert(tri); } + //calculate AABB for each node LLVolumeOctreeRebound rebound(this); rebound.traverse(mOctree); + + if (gDebugGL) + { + LLVolumeOctreeValidate validate; + validate.traverse(mOctree); + } } diff --git a/indra/llmath/llvolumeoctree.cpp b/indra/llmath/llvolumeoctree.cpp index 194b1faf81..12fe90f35d 100644 --- a/indra/llmath/llvolumeoctree.cpp +++ b/indra/llmath/llvolumeoctree.cpp @@ -126,8 +126,8 @@ void LLOctreeTriangleRayIntersect::traverse(const LLOctreeNode const F32* center = vl->mBounds[0].getF32(); const F32* size = vl->mBounds[1].getF32();*/ - //if (LLLineSegmentBoxIntersect(mStart.getF32(), mEnd.getF32(), vl->mBounds[0].getF32(), vl->mBounds[1].getF32())) - if (LLLineSegmentBoxIntersect(mStart, mEnd, vl->mBounds[0], vl->mBounds[1])) + //if (LLLineSegmentBoxIntersect(mStart, mEnd, vl->mBounds[0], vl->mBounds[1])) + if (LLLineSegmentBoxIntersect(mStart.getF32ptr(), mEnd.getF32ptr(), vl->mBounds[0].getF32ptr(), vl->mBounds[1].getF32ptr())) { node->accept(this); for (S32 i = 0; i < node->getChildCount(); ++i) @@ -206,3 +206,60 @@ const F32& LLVolumeTriangle::getBinRadius() const } +//TEST CODE + +void LLVolumeOctreeValidate::visit(const LLOctreeNode* branch) +{ + LLVolumeOctreeListener* node = (LLVolumeOctreeListener*) branch->getListener(0); + + //make sure bounds matches extents + LLVector4a& min = node->mExtents[0]; + LLVector4a& max = node->mExtents[1]; + + LLVector4a& center = node->mBounds[0]; + LLVector4a& size = node->mBounds[1]; + + LLVector4a test_min, test_max; + test_min.setSub(center, size); + test_max.setAdd(center, size); + + if (!test_min.equals3(min) || + !test_max.equals3(max)) + { + llerrs << "Bad bounding box data found." << llendl; + } + + test_min.sub(LLVector4a::getEpsilon()); + test_max.add(LLVector4a::getEpsilon()); + + for (U32 i = 0; i < branch->getChildCount(); ++i) + { + LLVolumeOctreeListener* child = (LLVolumeOctreeListener*) branch->getChild(i)->getListener(0); + + //make sure all children fit inside this node + if (child->mExtents[0].lessThan(test_min).areAnySet(LLVector4Logical::MASK_XYZ) || + child->mExtents[1].greaterThan(test_max).areAnySet(LLVector4Logical::MASK_XYZ)) + { + llerrs << "Child protrudes from bounding box." << llendl; + } + } + + //children fit, check data + for (LLOctreeNode::const_element_iter iter = branch->getData().begin(); + iter != branch->getData().end(); ++iter) + { + const LLVolumeTriangle* tri = *iter; + + //validate triangle + for (U32 i = 0; i < 3; i++) + { + if (tri->mV[i]->greaterThan(test_max).areAnySet(LLVector4Logical::MASK_XYZ) || + tri->mV[i]->lessThan(test_min).areAnySet(LLVector4Logical::MASK_XYZ)) + { + llerrs << "Triangle protrudes from node." << llendl; + } + } + } +} + + diff --git a/indra/llmath/llvolumeoctree.h b/indra/llmath/llvolumeoctree.h index 0031626498..0a02a2c597 100644 --- a/indra/llmath/llvolumeoctree.h +++ b/indra/llmath/llvolumeoctree.h @@ -88,8 +88,6 @@ public: F32* mClosestT; bool mHitFace; - LLOctreeTriangleRayIntersect() { }; - LLOctreeTriangleRayIntersect(const LLVector4a& start, const LLVector4a& dir, const LLVolumeFace* face, F32* closest_t, LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal); @@ -134,5 +132,9 @@ public: virtual const F32& getBinRadius() const; }; +class LLVolumeOctreeValidate : public LLOctreeTraveler +{ + virtual void visit(const LLOctreeNode* branch); +}; #endif diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index fa5d9b0892..653f838779 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -1016,10 +1016,12 @@ S32 LLFloaterTools::calcRenderCost() LLSelectNode *select_node = *selection_iter; if (select_node) { - LLVOVolume *viewer_volume = (LLVOVolume*)select_node->getObject(); - if (viewer_volume) + LLViewerObject *vobj = select_node->getObject(); + if (vobj->getVolume()) { - cost += viewer_volume->getRenderCost(textures); + LLVOVolume* volume = (LLVOVolume*) vobj; + + cost += volume->getRenderCost(textures); for (LLVOVolume::texture_cost_t::iterator iter = textures.begin(); iter != textures.end(); ++iter) { // add the cost of each individual texture in the linkset diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 425fa42339..2f0641489d 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -3035,11 +3035,11 @@ class LLRenderOctreeRaycast : public LLOctreeTriangleRayIntersect { public: - LLRenderOctreeRaycast(const LLVector3& start, const LLVector3& end) + + LLRenderOctreeRaycast(const LLVector4a& start, const LLVector4a& dir, F32* closest_t) + : LLOctreeTriangleRayIntersect(start, dir, NULL, closest_t, NULL, NULL, NULL, NULL) { - mStart.load3(start.mV); - mEnd.load3(end.mV); - mDir.setSub(mEnd, mStart); + } void visit(const LLOctreeNode* branch) @@ -3050,6 +3050,17 @@ public: center.set(vl->mBounds[0].getF32ptr()); size.set(vl->mBounds[1].getF32ptr()); + if (branch->getData().empty()) + { + gGL.color3f(1.f,0.2f,0.f); + } + else + { + gGL.color3f(0.75f, 1.f, 0.f); + } + + drawBoxOutline(center, size); + for (U32 i = 0; i < 2; i++) { LLGLDepthTest depth(GL_TRUE, GL_FALSE, i == 1 ? GL_LEQUAL : GL_GREATER); @@ -3061,9 +3072,17 @@ public: else { gGL.color4f(0,0.5f,0.5f, 0.25f); + if (!branch->getData().empty()) + { + drawBoxOutline(center, size); + } + } + + if (i == 1) + { + gGL.flush(); + glLineWidth(3.f); } - - drawBoxOutline(center, size); gGL.begin(LLRender::TRIANGLES); for (LLOctreeNode::const_element_iter iter = branch->getData().begin(); @@ -3077,6 +3096,12 @@ public: gGL.vertex3fv(tri->mV[2]->getF32ptr()); } gGL.end(); + + if (i == 1) + { + gGL.flush(); + glLineWidth(1.f); + } } } }; @@ -3110,7 +3135,15 @@ void renderRaycast(LLDrawable* drawablep) start = vobj->agentPositionToVolume(gDebugRaycastStart); end = vobj->agentPositionToVolume(gDebugRaycastEnd); - LLRenderOctreeRaycast render(start, end); + LLVector4a starta, enda; + starta.load3(start.mV); + enda.load3(end.mV); + LLVector4a dir; + dir.setSub(enda, starta); + + F32 t = 1.f; + + LLRenderOctreeRaycast render(starta, dir, &t); gGL.flush(); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); render.traverse(face.mOctree); -- cgit v1.3 From 90da6d6fdc33343be72252101aed1be641e822b5 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Sun, 19 Sep 2010 23:07:15 -0500 Subject: Raycasting for rigged attachments now works for your own attachments while in edit mode. --- indra/llmath/llvolume.cpp | 17 ++- indra/llmath/llvolume.h | 4 +- indra/llmath/llvolumeoctree.cpp | 8 +- indra/newview/lldrawable.cpp | 14 +++ indra/newview/lldrawable.h | 56 +++++---- indra/newview/llface.cpp | 2 +- indra/newview/llspatialpartition.cpp | 80 +++++++----- indra/newview/llviewerobject.cpp | 14 +++ indra/newview/llvovolume.cpp | 230 ++++++++++++++++++++++++++++++++++- indra/newview/llvovolume.h | 22 ++++ 10 files changed, 372 insertions(+), 75 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 4798197921..07339f7526 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2569,14 +2569,13 @@ void LLVolume::makeTetrahedron() mIsTetrahedron = TRUE; } -void LLVolume::copyVolumeFaces(LLVolume* volume) +void LLVolume::copyVolumeFaces(const LLVolume* volume) { mVolumeFaces = volume->mVolumeFaces; mSculptLevel = 0; mIsTetrahedron = FALSE; } - S32 LLVolume::getNumFaces() const { #if LL_MESH_ENABLED @@ -5462,12 +5461,17 @@ void LLVolumeFace::optimize(F32 angle_cutoff) } -void LLVolumeFace::createOctree() +void LLVolumeFace::createOctree(F32 scaler) { + if (mOctree) + { + return; + } + LLVector4a center; LLVector4a size; center.splat(0.f); - size.splat(1.f); + size.splat(0.5f); mOctree = new LLOctreeRoot(center, size, NULL); new LLVolumeOctreeListener(mOctree); @@ -5511,12 +5515,15 @@ void LLVolumeFace::createOctree() LLVector4a size; size.setSub(max,min); - tri->mRadius = size.getLength3().getF32() * 0.5f; + tri->mRadius = size.getLength3().getF32() * scaler; //insert mOctree->insert(tri); } + //remove unneeded octree layers + while (!mOctree->balance()) { } + //calculate AABB for each node LLVolumeOctreeRebound rebound(this); rebound.traverse(mOctree); diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index af28337f57..ff5e3d9dfa 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -882,7 +882,7 @@ public: }; void optimize(F32 angle_cutoff = 2.f); - void createOctree(); + void createOctree(F32 scaler = 0.25f); enum { @@ -1044,7 +1044,7 @@ public: LLVector3 mLODScaleBias; // vector for biasing LOD based on scale void sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, S32 sculpt_level); - void copyVolumeFaces(LLVolume* volume); + void copyVolumeFaces(const LLVolume* volume); private: void sculptGenerateMapVertices(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, U8 sculpt_type); diff --git a/indra/llmath/llvolumeoctree.cpp b/indra/llmath/llvolumeoctree.cpp index 12fe90f35d..cb6211f63c 100644 --- a/indra/llmath/llvolumeoctree.cpp +++ b/indra/llmath/llvolumeoctree.cpp @@ -223,14 +223,14 @@ void LLVolumeOctreeValidate::visit(const LLOctreeNode* branch) test_min.setSub(center, size); test_max.setAdd(center, size); - if (!test_min.equals3(min) || - !test_max.equals3(max)) + if (!test_min.equals3(min, 0.001f) || + !test_max.equals3(max, 0.001f)) { llerrs << "Bad bounding box data found." << llendl; } - test_min.sub(LLVector4a::getEpsilon()); - test_max.add(LLVector4a::getEpsilon()); + test_min.sub(LLVector4a(0.001f)); + test_max.add(LLVector4a(0.001f)); for (U32 i = 0; i < branch->getChildCount(); ++i) { diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index 68f52e04bc..5949a373ae 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -189,6 +189,20 @@ LLVOVolume* LLDrawable::getVOVolume() const } } +const LLMatrix4& LLDrawable::getRenderMatrix() const +{ + if (LLDrawable::isState(LLDrawable::RIGGED)) + { + LLVOAvatar* avatar = mVObjp->getAvatar(); + if (avatar) + { + return avatar->mDrawable->getWorldMatrix(); + } + } + + return isRoot() ? getWorldMatrix() : getParent()->getWorldMatrix(); +} + BOOL LLDrawable::isLight() const { LLViewerObject* objectp = mVObjp; diff --git a/indra/newview/lldrawable.h b/indra/newview/lldrawable.h index fc90bc57c4..a17e2172aa 100644 --- a/indra/newview/lldrawable.h +++ b/indra/newview/lldrawable.h @@ -101,7 +101,7 @@ public: LLVOVolume* getVOVolume() const; // cast mVObjp tp LLVOVolume if OK const LLMatrix4& getWorldMatrix() const { return mXform.getWorldMatrix(); } - const LLMatrix4& getRenderMatrix() const { return isRoot() ? getWorldMatrix() : getParent()->getWorldMatrix(); } + const LLMatrix4& getRenderMatrix() const; void setPosition(LLVector3 v) const { } const LLVector3& getPosition() const { return mXform.getPosition(); } const LLVector3& getWorldPosition() const { return mXform.getPositionW(); } @@ -250,35 +250,37 @@ public: typedef enum e_drawable_flags { - IN_REBUILD_Q1 = 0x00000002, - IN_REBUILD_Q2 = 0x00000004, - IN_LIGHT_Q = 0x00000008, - EARLY_MOVE = 0x00000010, - MOVE_UNDAMPED = 0x00000020, - ON_MOVE_LIST = 0x00000040, - USE_BACKLIGHT = 0x00000080, - UV = 0x00000100, - UNLIT = 0x00000200, - LIGHT = 0x00000400, - LIGHTING_BUILT = 0x00000800, - REBUILD_VOLUME = 0x00001000, //volume changed LOD or parameters, or vertex buffer changed - REBUILD_TCOORD = 0x00002000, //texture coordinates changed - REBUILD_COLOR = 0x00004000, //color changed - REBUILD_POSITION= 0x00010000, //vertex positions/normals changed + IN_REBUILD_Q1 = 0x00000001, + IN_REBUILD_Q2 = 0x00000002, + IN_LIGHT_Q = 0x00000004, + EARLY_MOVE = 0x00000008, + MOVE_UNDAMPED = 0x00000010, + ON_MOVE_LIST = 0x00000020, + USE_BACKLIGHT = 0x00000040, + UV = 0x00000080, + UNLIT = 0x00000100, + LIGHT = 0x00000200, + LIGHTING_BUILT = 0x00000400, + REBUILD_VOLUME = 0x00000800, //volume changed LOD or parameters, or vertex buffer changed + REBUILD_TCOORD = 0x00001000, //texture coordinates changed + REBUILD_COLOR = 0x00002000, //color changed + REBUILD_POSITION= 0x00004000, //vertex positions/normals changed REBUILD_GEOMETRY= REBUILD_POSITION|REBUILD_TCOORD|REBUILD_COLOR, REBUILD_MATERIAL= REBUILD_TCOORD|REBUILD_COLOR, REBUILD_ALL = REBUILD_GEOMETRY|REBUILD_VOLUME, - ON_SHIFT_LIST = 0x00100000, - BLOCKER = 0x00400000, - ACTIVE = 0x00800000, - DEAD = 0x01000000, - INVISIBLE = 0x02000000, // stay invisible until flag is cleared - NEARBY_LIGHT = 0x04000000, // In gPipeline.mNearbyLightSet - BUILT = 0x08000000, - FORCE_INVISIBLE = 0x10000000, // stay invis until CLEAR_INVISIBLE is set (set of orphaned) - CLEAR_INVISIBLE = 0x20000000, // clear FORCE_INVISIBLE next draw frame - REBUILD_SHADOW = 0x40000000, - HAS_ALPHA = 0x80000000, + REBUILD_RIGGED = 0x00008000, + ON_SHIFT_LIST = 0x00010000, + BLOCKER = 0x00020000, + ACTIVE = 0x00040000, + DEAD = 0x00080000, + INVISIBLE = 0x00100000, // stay invisible until flag is cleared + NEARBY_LIGHT = 0x00200000, // In gPipeline.mNearbyLightSet + BUILT = 0x00400000, + FORCE_INVISIBLE = 0x00800000, // stay invis until CLEAR_INVISIBLE is set (set of orphaned) + CLEAR_INVISIBLE = 0x01000000, // clear FORCE_INVISIBLE next draw frame + REBUILD_SHADOW = 0x02000000, + HAS_ALPHA = 0x04000000, + RIGGED = 0x08000000, } EDrawableFlags; LLXformMatrix mXform; diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 7c24eb77cd..9a178985cf 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -720,7 +720,7 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f, LLMemType mt1(LLMemType::MTYPE_DRAWABLE); //get bounding box - if (mDrawablep->isState(LLDrawable::REBUILD_VOLUME | LLDrawable::REBUILD_POSITION)) + if (mDrawablep->isState(LLDrawable::REBUILD_VOLUME | LLDrawable::REBUILD_POSITION | LLDrawable::REBUILD_RIGGED)) { //VECTORIZE THIS LLMatrix4a mat_vert; diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 2f0641489d..191cdac981 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -3047,19 +3047,21 @@ public: LLVolumeOctreeListener* vl = (LLVolumeOctreeListener*) branch->getListener(0); LLVector3 center, size; - center.set(vl->mBounds[0].getF32ptr()); - size.set(vl->mBounds[1].getF32ptr()); - + if (branch->getData().empty()) { gGL.color3f(1.f,0.2f,0.f); + center.set(branch->getCenter().getF32ptr()); + size.set(branch->getSize().getF32ptr()); } else { gGL.color3f(0.75f, 1.f, 0.f); + center.set(vl->mBounds[0].getF32ptr()); + size.set(vl->mBounds[1].getF32ptr()); } - - drawBoxOutline(center, size); + + drawBoxOutline(center, size); for (U32 i = 0; i < 2; i++) { @@ -3072,10 +3074,7 @@ public: else { gGL.color4f(0,0.5f,0.5f, 0.25f); - if (!branch->getData().empty()) - { - drawBoxOutline(center, size); - } + drawBoxOutline(center, size); } if (i == 1) @@ -3121,34 +3120,53 @@ void renderRaycast(LLDrawable* drawablep) LLVOVolume* vobj = drawablep->getVOVolume(); LLVolume* volume = vobj->getVolume(); - for (S32 i = 0; i < volume->getNumVolumeFaces(); ++i) + + if (drawablep->isState(LLDrawable::RIGGED)) + { + volume = NULL; + } + + if (volume) { - const LLVolumeFace& face = volume->getVolumeFace(i); - if (!face.mOctree) + for (S32 i = 0; i < volume->getNumVolumeFaces(); ++i) { - ((LLVolumeFace*) &face)->createOctree(); - } + const LLVolumeFace& face = volume->getVolumeFace(i); + if (!face.mOctree) + { + ((LLVolumeFace*) &face)->createOctree(); + } - gGL.pushMatrix(); - glMultMatrixf((F32*) vobj->getRelativeXform().mMatrix); - LLVector3 start, end; - start = vobj->agentPositionToVolume(gDebugRaycastStart); - end = vobj->agentPositionToVolume(gDebugRaycastEnd); + gGL.pushMatrix(); + glMultMatrixf((F32*) vobj->getRelativeXform().mMatrix); - LLVector4a starta, enda; - starta.load3(start.mV); - enda.load3(end.mV); - LLVector4a dir; - dir.setSub(enda, starta); + LLVector3 start, end; + start = vobj->agentPositionToVolume(gDebugRaycastStart); + end = vobj->agentPositionToVolume(gDebugRaycastEnd); - F32 t = 1.f; + LLVector4a starta, enda; + starta.load3(start.mV); + enda.load3(end.mV); + LLVector4a dir; + dir.setSub(enda, starta); - LLRenderOctreeRaycast render(starta, dir, &t); - gGL.flush(); - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - render.traverse(face.mOctree); - gGL.popMatrix(); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + F32 t = 1.f; + + LLRenderOctreeRaycast render(starta, dir, &t); + gGL.flush(); + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + + { + //render face positions + LLVertexBuffer::unbind(); + glColor4f(0,1,1,0.5f); + glVertexPointer(3, GL_FLOAT, sizeof(LLVector4a), face.mPositions); + glDrawElements(GL_TRIANGLES, face.mNumIndices, GL_UNSIGNED_SHORT, face.mIndices); + } + + render.traverse(face.mOctree); + gGL.popMatrix(); + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + } } } else if (drawablep->isAvatar()) diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index fd2212f25d..4c1a1958e8 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -3279,6 +3279,15 @@ const LLVector3 LLViewerObject::getPositionEdit() const const LLVector3 LLViewerObject::getRenderPosition() const { + if (mDrawable.notNull() && mDrawable->isState(LLDrawable::RIGGED)) + { + LLVOAvatar* avatar = getAvatar(); + if (avatar) + { + return avatar->getPositionAgent(); + } + } + if (mDrawable.isNull() || mDrawable->getGeneration() < 0) { return getPositionAgent(); @@ -3297,6 +3306,11 @@ const LLVector3 LLViewerObject::getPivotPositionAgent() const const LLQuaternion LLViewerObject::getRenderRotation() const { LLQuaternion ret; + if (mDrawable.notNull() && mDrawable->isState(LLDrawable::RIGGED)) + { + return ret; + } + if (mDrawable.isNull() || mDrawable->isStatic()) { ret = getRotationEdit(); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 5448e7dcd9..60bdfc24b9 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -41,9 +41,11 @@ #include "llviewercontrol.h" #include "lldir.h" #include "llflexibleobject.h" +#include "llfloatertools.h" #include "llmaterialtable.h" #include "llprimitive.h" #include "llvolume.h" +#include "llvolumeoctree.h" #include "llvolumemgr.h" #include "llvolumemessage.h" #include "material_codes.h" @@ -70,6 +72,7 @@ #include "llselectmgr.h" #include "pipeline.h" #include "llsdutil.h" +#include "llmatrix4a.h" #include "llmediaentry.h" #include "llmediadataclient.h" #include "llmeshrepository.h" @@ -1355,7 +1358,13 @@ BOOL LLVOVolume::genBBoxes(BOOL force_global) LLVector4a min,max; - BOOL rebuild = mDrawable->isState(LLDrawable::REBUILD_VOLUME | LLDrawable::REBUILD_POSITION); + BOOL rebuild = mDrawable->isState(LLDrawable::REBUILD_VOLUME | LLDrawable::REBUILD_POSITION) || mRiggedVolume.notNull(); + + LLVolume* volume = mRiggedVolume; + if (!volume) + { + volume = getVolume(); + } for (S32 i = 0; i < getVolume()->getNumVolumeFaces(); i++) { @@ -1364,7 +1373,7 @@ BOOL LLVOVolume::genBBoxes(BOOL force_global) { continue; } - res &= face->genVolumeBBoxes(*getVolume(), i, + res &= face->genVolumeBBoxes(*volume, i, mRelativeXform, mRelativeXformInvTrans, (mVolumeImpl && mVolumeImpl->isVolumeGlobal()) || force_global); @@ -1415,7 +1424,12 @@ void LLVOVolume::updateRelativeXform() LLDrawable* drawable = mDrawable; - if (drawable->isActive()) + if (drawable->isState(LLDrawable::RIGGED)) + { + mRelativeXform.setIdentity(); + mRelativeXformInvTrans.setIdentity(); + } + else if (drawable->isActive()) { // setup relative transforms LLQuaternion delta_rot; @@ -1497,11 +1511,22 @@ void LLVOVolume::updateRelativeXform() static LLFastTimer::DeclareTimer FTM_GEN_FLEX("Generate Flexies"); static LLFastTimer::DeclareTimer FTM_UPDATE_PRIMITIVES("Update Primitives"); +static LLFastTimer::DeclareTimer FTM_UPDATE_RIGGED_VOLUME("Update Rigged"); BOOL LLVOVolume::updateGeometry(LLDrawable *drawable) { LLFastTimer t(FTM_UPDATE_PRIMITIVES); + if (mDrawable->isState(LLDrawable::REBUILD_RIGGED)) + { + { + LLFastTimer t(FTM_UPDATE_RIGGED_VOLUME); + updateRiggedVolume(); + } + genBBoxes(FALSE); + mDrawable->clearState(LLDrawable::REBUILD_RIGGED); + } + if (mVolumeImpl != NULL) { BOOL res; @@ -1597,7 +1622,7 @@ BOOL LLVOVolume::updateGeometry(LLDrawable *drawable) { LLPipeline::sCompiles++; } - + mVolumeChanged = FALSE; mLODChanged = FALSE; mSculptChanged = FALSE; @@ -2724,6 +2749,11 @@ BOOL LLVOVolume::isVolumeGlobal() const { return mVolumeImpl->isVolumeGlobal() ? TRUE : FALSE; } + else if (mRiggedVolume.notNull()) + { + return TRUE; + } + return FALSE; } @@ -3390,6 +3420,20 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e BOOL ret = FALSE; LLVolume* volume = getVolume(); + + if (mDrawable->isState(LLDrawable::RIGGED)) + { + if (LLFloater::isVisible(gFloaterTools) && getAvatar()->isSelf()) + { + gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_RIGGED, TRUE); + volume = mRiggedVolume; + } + else + { //cannot pick rigged attachments on other avatars or when not in build mode + return FALSE; + } + } + if (volume) { LLVector3 v_start, v_end, v_dir; @@ -3484,6 +3528,170 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e return ret; } +void LLVOVolume::updateRiggedVolume() +{ + //Update mRiggedVolume to match current animation frame of avatar. + //Also update position/size in octree. + + LLVolume* volume = getVolume(); + + const LLMeshSkinInfo* skin = gMeshRepo.getSkinInfo(volume->getParams().getSculptID()); + + if (!skin) + { + mRiggedVolume = NULL; + return; + } + + LLVOAvatar* avatar = getAvatar(); + + if (!avatar) + { + mRiggedVolume = NULL; + return; + } + + if (!mRiggedVolume) + { + LLVolumeParams p; + mRiggedVolume = new LLRiggedVolume(p); + } + + mRiggedVolume->update(skin, avatar, volume); + +} + +static LLFastTimer::DeclareTimer FTM_SKIN_RIGGED("Skin"); +static LLFastTimer::DeclareTimer FTM_RIGGED_OCTREE("Octree"); + +void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, const LLVolume* volume) +{ + bool copy = false; + if (volume->getNumVolumeFaces() != getNumVolumeFaces()) + { + copy = true; + } + + for (S32 i = 0; i < volume->getNumVolumeFaces() && !copy; ++i) + { + const LLVolumeFace& src_face = volume->getVolumeFace(i); + const LLVolumeFace& dst_face = getVolumeFace(i); + + if (src_face.mNumIndices != dst_face.mNumIndices || + src_face.mNumVertices != dst_face.mNumVertices) + { + copy = true; + } + } + + if (copy) + { + copyVolumeFaces(volume); + } + + //build matrix palette + LLMatrix4a mp[64]; + LLMatrix4* mat = (LLMatrix4*) mp; + + LLMatrix4 agent_to_root; + + LLVector4a origin; + origin.load3(avatar->getPositionAgent().mV); + + for (U32 j = 0; j < skin->mJointNames.size(); ++j) + { + LLJoint* joint = avatar->getJoint(skin->mJointNames[j]); + if (joint) + { + mat[j] = skin->mInvBindMatrix[j]; + mat[j] *= joint->getWorldMatrix(); + } + } + + for (S32 i = 0; i < volume->getNumVolumeFaces(); ++i) + { + const LLVolumeFace& vol_face = volume->getVolumeFace(i); + + LLVolumeFace& dst_face = mVolumeFaces[i]; + + LLVector4a* weight = vol_face.mWeights; + + LLMatrix4a bind_shape_matrix; + bind_shape_matrix.loadu(skin->mBindShapeMatrix); + + LLVector4a* pos = dst_face.mPositions; + + { + LLFastTimer t(FTM_SKIN_RIGGED); + + for (U32 j = 0; j < dst_face.mNumVertices; ++j) + { + LLMatrix4a final_mat; + final_mat.clear(); + + S32 idx[4]; + + LLVector4 wght; + + F32 scale = 0.f; + for (U32 k = 0; k < 4; k++) + { + F32 w = weight[j][k]; + + idx[k] = (S32) floorf(w); + wght[k] = w - floorf(w); + scale += wght[k]; + } + + wght *= 1.f/scale; + + for (U32 k = 0; k < 4; k++) + { + F32 w = wght[k]; + + LLMatrix4a src; + src.setMul(mp[idx[k]], w); + + final_mat.add(src); + } + + + LLVector4a& v = vol_face.mPositions[j]; + LLVector4a t; + LLVector4a dst; + bind_shape_matrix.affineTransform(v, t); + final_mat.affineTransform(t, dst); + dst.sub(origin); + pos[j] = dst; + } + + //update bounding box + LLVector4a& min = dst_face.mExtents[0]; + LLVector4a& max = dst_face.mExtents[1]; + + min = pos[0]; + max = pos[1]; + + for (U32 j = 1; j < dst_face.mNumVertices; ++j) + { + min.setMin(min, pos[j]); + max.setMax(max, pos[j]); + } + + dst_face.mCenter->setAdd(dst_face.mExtents[0], dst_face.mExtents[1]); + dst_face.mCenter->mul(0.5f); + + } + + { + LLFastTimer t(FTM_RIGGED_OCTREE); + delete dst_face.mOctree; + dst_face.mOctree = NULL; + dst_face.createOctree(2.f); + } + } +} + U32 LLVOVolume::getPartitionType() const { if (isHUDAttachment()) @@ -3732,6 +3940,8 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) bool bake_sunlight = LLPipeline::sBakeSunlight && drawablep->isStatic(); + bool is_rigged = false; + //for each face for (S32 i = 0; i < drawablep->getNumFaces(); i++) { @@ -3747,8 +3957,9 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) facep->mVertexBuffer = NULL; facep->mLastVertexBuffer = NULL; } - + facep->setState(LLFace::RIGGED); + is_rigged = true; //get drawpool of avatar with rigged face LLDrawPoolAvatar* pool = get_avatar_drawpool(vobj); @@ -3958,6 +4169,15 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) facep->mLastVertexBuffer = NULL; } } + + if (is_rigged) + { + drawablep->setState(LLDrawable::RIGGED); + } + else + { + drawablep->clearState(LLDrawable::RIGGED); + } } group->mBufferUsage = useage; diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index eeb98726c9..d868099eeb 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -46,6 +46,8 @@ class LLDrawPool; class LLSelectNode; class LLObjectMediaDataClient; class LLObjectMediaNavigateClient; +class LLVOAvatar; +class LLMeshSkinInfo; typedef std::vector media_list_t; @@ -54,6 +56,18 @@ enum LLVolumeInterfaceType INTERFACE_FLEXIBLE = 1, }; + +class LLRiggedVolume : public LLVolume +{ +public: + LLRiggedVolume(const LLVolumeParams& params) + : LLVolume(params, 0.f) + { + } + + void update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, const LLVolume* src_volume); +}; + // Base class for implementations of the volume - Primitive, Flexible Object, etc. class LLVolumeInterface { @@ -289,6 +303,11 @@ public: void removeMDCImpl() { --mMDCImplCount; } S32 getMDCImplCount() { return mMDCImplCount; } + + //rigged volume update (for raycasting) + void updateRiggedVolume(); + LLRiggedVolume* getRiggedVolume() { return mRiggedVolume; } + protected: S32 computeLODDetail(F32 distance, F32 radius); BOOL calcLOD(); @@ -322,6 +341,9 @@ private: S32 mLastFetchedMediaVersion; // as fetched from the server, starts as -1 S32 mIndexInTex; S32 mMDCImplCount; + + LLPointer mRiggedVolume; + // statics public: static F32 sLODSlopDistanceFactor;// Changing this to zero, effectively disables the LOD transition slop -- cgit v1.3 From 2c4c1c47bce3db7420f0eb27bdaa7598fbbbb65a Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Sun, 19 Sep 2010 23:08:12 -0500 Subject: Take advantage of automagical tcmalloc alignment. --- indra/llmath/lloctree.h | 127 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 86 insertions(+), 41 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index 73910ef98d..63adfa85b2 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -95,22 +95,30 @@ public: typedef LLOctreeNode oct_node; typedef LLOctreeListener oct_listener; + /*void* operator new(size_t size) + { + return ll_aligned_malloc_16(size); + } + + void operator delete(void* ptr) + { + ll_aligned_free_16(ptr); + }*/ + LLOctreeNode( const LLVector4a& center, const LLVector4a& size, BaseType* parent, - S32 octant = -1) + U8 octant = 255) : mParent((oct_node*)parent), mOctant(octant) { - mD = (LLVector4a*) ll_aligned_malloc_16(sizeof(LLVector4a)*4); - - mD[CENTER] = center; - mD[SIZE] = size; + mCenter = center; + mSize = size; updateMinMax(); - if ((mOctant == -1) && mParent) + if ((mOctant == 255) && mParent) { - mOctant = ((oct_node*) mParent)->getOctant(mD[CENTER]); + mOctant = ((oct_node*) mParent)->getOctant(mCenter); } clearChildren(); @@ -124,30 +132,27 @@ public: { delete getChild(i); } - - ll_aligned_free_16(mD); } inline const BaseType* getParent() const { return mParent; } inline void setParent(BaseType* parent) { mParent = (oct_node*) parent; } - inline const LLVector4a& getCenter() const { return mD[CENTER]; } - inline const LLVector4a& getSize() const { return mD[SIZE]; } - inline void setCenter(const LLVector4a& center) { mD[CENTER] = center; } - inline void setSize(const LLVector4a& size) { mD[SIZE] = size; } + inline const LLVector4a& getCenter() const { return mCenter; } + inline const LLVector4a& getSize() const { return mSize; } + inline void setCenter(const LLVector4a& center) { mCenter = center; } + inline void setSize(const LLVector4a& size) { mSize = size; } inline oct_node* getNodeAt(T* data) { return getNodeAt(data->getPositionGroup(), data->getBinRadius()); } - inline S32 getOctant() const { return mOctant; } - inline void setOctant(S32 octant) { mOctant = octant; } + inline U8 getOctant() const { return mOctant; } inline const oct_node* getOctParent() const { return (const oct_node*) getParent(); } inline oct_node* getOctParent() { return (oct_node*) getParent(); } - S32 getOctant(const LLVector4a& pos) const //get the octant pos is in + U8 getOctant(const LLVector4a& pos) const //get the octant pos is in { - return pos.greaterThan(mD[CENTER]).getGatheredBits() & 0x7; + return (U8) (pos.greaterThan(mCenter).getGatheredBits() & 0x7); } inline bool isInside(const LLVector4a& pos, const F32& rad) const { - return rad <= mD[SIZE][0]*2.f && isInside(pos); + return rad <= mSize[0]*2.f && isInside(pos); } inline bool isInside(T* data) const @@ -157,13 +162,13 @@ public: bool isInside(const LLVector4a& pos) const { - S32 gt = pos.greaterThan(mD[MAX]).getGatheredBits() & 0x7; + S32 gt = pos.greaterThan(mMax).getGatheredBits() & 0x7; if (gt) { return false; } - S32 lt = pos.lessEqual(mD[MIN]).getGatheredBits() & 0x7; + S32 lt = pos.lessEqual(mMin).getGatheredBits() & 0x7; if (lt) { return false; @@ -174,8 +179,8 @@ public: void updateMinMax() { - mD[MAX].setAdd(mD[CENTER], mD[SIZE]); - mD[MIN].setSub(mD[CENTER], mD[SIZE]); + mMax.setAdd(mCenter, mSize); + mMin.setSub(mCenter, mSize); } inline oct_listener* getOctListener(U32 index) @@ -195,7 +200,7 @@ public: return false; } - F32 size = mD[SIZE][0]; + F32 size = mSize[0]; F32 p_size = size * 2.f; return (radius <= 0.001f && size <= 0.001f) || @@ -234,6 +239,29 @@ public: void accept(tree_traveler* visitor) const { visitor->visit(this); } void accept(oct_traveler* visitor) const { visitor->visit(this); } + void validateChildMap() + { + for (U32 i = 0; i < 8; i++) + { + U8 idx = mChildMap[i]; + if (idx != 255) + { + LLOctreeNode* child = mChild[idx]; + + if (child->getOctant() != i) + { + llerrs << "Invalid child map, bad octant data." << llendl; + } + + if (getOctant(child->getCenter()) != child->getOctant()) + { + llerrs << "Invalid child octant compared to position data." << llendl; + } + } + } + } + + oct_node* getNodeAt(const LLVector4a& pos, const F32& rad) { LLOctreeNode* node = this; @@ -241,25 +269,19 @@ public: if (node->isInside(pos, rad)) { //do a quick search by octant - S32 octant = node->getOctant(pos); - BOOL keep_going = TRUE; - + U8 octant = node->getOctant(pos); + //traverse the tree until we find a node that has no node //at the appropriate octant or is smaller than the object. //by definition, that node is the smallest node that contains // the data - while (keep_going && node->getSize()[0] >= rad) + U8 next_node = node->mChildMap[octant]; + + while (next_node != 255 && node->getSize()[0] >= rad) { - keep_going = FALSE; - for (U32 i = 0; i < node->getChildCount() && !keep_going; i++) - { - if (node->getChild(i)->getOctant() == octant) - { - node = node->getChild(i); - octant = node->getOctant(pos); - keep_going = TRUE; - } - } + node = node->getChild(next_node); + octant = node->getOctant(pos); + next_node = node->mChildMap[octant]; } } else if (!node->contains(rad) && node->getParent()) @@ -439,6 +461,9 @@ public: void clearChildren() { mChild.clear(); + + U32* foo = (U32*) mChildMap; + foo[0] = foo[1] = 0xFFFFFFFF; } void validate() @@ -496,6 +521,8 @@ public: } #endif + mChildMap[child->getOctant()] = (U8) mChild.size(); + mChild.push_back(child); child->setParent(this); @@ -517,6 +544,8 @@ public: listener->handleChildRemoval(this, getChild(index)); } + + if (destroy) { mChild[index]->destroy(); @@ -524,6 +553,15 @@ public: } mChild.erase(mChild.begin() + index); + //rebuild child map + U32* foo = (U32*) mChildMap; + foo[0] = foo[1] = 0xFFFFFFFF; + + for (U32 i = 0; i < mChild.size(); ++i) + { + mChildMap[mChild[i]->getOctant()] = i; + } + checkAlive(); } @@ -562,15 +600,20 @@ protected: MIN = 3 } eDName; - LLVector4a* mD; + LLVector4a mCenter; + LLVector4a mSize; + LLVector4a mMax; + LLVector4a mMin; oct_node* mParent; - S32 mOctant; + U8 mOctant; child_list mChild; + U8 mChildMap[8]; + element_list mData; -}; +}; //just like a regular node, except it might expand on insert and compress on balance template @@ -613,6 +656,8 @@ public: //destroy child child->clearChildren(); delete child; + + return false; } return true; @@ -639,7 +684,7 @@ public: const LLVector4a& v = data->getPositionGroup(); LLVector4a val; - val.setSub(v, BaseType::mD[BaseType::CENTER]); + val.setSub(v, BaseType::mCenter); val.setAbs(val); S32 lt = val.lessThan(MAX_MAG).getGatheredBits() & 0x7; -- cgit v1.3 From c42ed54b0a532cb4e0ad30a1b0b5038cef9938f2 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Mon, 20 Sep 2010 18:45:56 -0500 Subject: Stop using ll_aligned_malloc/free in llvolume. Fix for garbage data in vertex weight array crashing software skinning. Proper integration of picking for rigged attachhments. Optimization in LLDrawable::updateDistance (don't call updateRelativeXform, just use spatial group position). --- indra/llmath/llvolume.cpp | 108 ++++++++++++++++----------------- indra/llmath/llvolume.h | 2 +- indra/newview/lldrawable.cpp | 12 +--- indra/newview/lldrawpoolavatar.cpp | 10 ++- indra/newview/llface.cpp | 32 +++++++++- indra/newview/llselectmgr.cpp | 50 +++++++++++---- indra/newview/llspatialpartition.cpp | 16 ++++- indra/newview/llvovolume.cpp | 114 +++++++++++++++++++++++++++++------ indra/newview/llvovolume.h | 12 +++- 9 files changed, 247 insertions(+), 109 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 07339f7526..24528a8ce9 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1990,7 +1990,7 @@ void LLVolumeFace::VertexData::init() { if (!mData) { - mData = (LLVector4a*) ll_aligned_malloc_16(32); + mData = new LLVector4a[2]; } } @@ -2019,7 +2019,7 @@ const LLVolumeFace::VertexData& LLVolumeFace::VertexData::operator=(const LLVolu LLVolumeFace::VertexData::~VertexData() { - ll_aligned_free_16(mData); + delete [] mData; } LLVector4a& LLVolumeFace::VertexData::getPosition() @@ -2257,12 +2257,12 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) U32 cur_influence = 0; LLVector4 wght(0,0,0,0); - while (joint != END_INFLUENCES) + while (joint != END_INFLUENCES && idx < weights.size()) { U16 influence = weights[idx++]; influence |= ((U16) weights[idx++] << 8); - F32 w = llmin((F32) influence / 65535.f, 0.99999f); + F32 w = llclamp((F32) influence / 65535.f, 0.f, 0.99999f); wght.mV[cur_influence++] = (F32) joint + w; if (cur_influence >= 4) @@ -5230,7 +5230,7 @@ LLVolumeFace::LLVolumeFace() : mWeights(NULL), mOctree(NULL) { - mExtents = (LLVector4a*) ll_aligned_malloc_16(48); + mExtents = new LLVector4a[3]; mCenter = mExtents+2; } @@ -5251,7 +5251,7 @@ LLVolumeFace::LLVolumeFace(const LLVolumeFace& src) mWeights(NULL), mOctree(NULL) { - mExtents = (LLVector4a*) ll_aligned_malloc_16(48); + mExtents = new LLVector4a[3]; mCenter = mExtents+2; *this = src; } @@ -5286,7 +5286,7 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) if (mNumVertices) { - S32 vert_size = mNumVertices*4*sizeof(F32); + S32 vert_size = mNumVertices*sizeof(LLVector4a); S32 tc_size = (mNumVertices*8+0xF) & ~0xF; LLVector4a::memcpyNonAliased16((F32*) mPositions, (F32*) src.mPositions, vert_size); @@ -5301,7 +5301,7 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) } else { - ll_aligned_free_16(mBinormals); + delete [] mBinormals; mBinormals = NULL; } @@ -5312,7 +5312,7 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) } else { - ll_aligned_free_16(mWeights); + delete [] mWeights; mWeights = NULL; } } @@ -5330,7 +5330,7 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) LLVolumeFace::~LLVolumeFace() { - ll_aligned_free_16(mExtents); + delete [] mExtents; mExtents = NULL; freeData(); @@ -5338,17 +5338,17 @@ LLVolumeFace::~LLVolumeFace() void LLVolumeFace::freeData() { - ll_aligned_free_16(mPositions); + delete [] mPositions; mPositions = NULL; - ll_aligned_free_16(mNormals); + delete [] mNormals; mNormals = NULL; - ll_aligned_free_16(mTexCoords); + delete [] mTexCoords; mTexCoords = NULL; - ll_aligned_free_16(mIndices); + delete [] mIndices; mIndices = NULL; - ll_aligned_free_16(mBinormals); + delete [] mBinormals; mBinormals = NULL; - ll_aligned_free_16(mWeights); + delete [] mWeights; mWeights = NULL; delete mOctree; @@ -5461,18 +5461,13 @@ void LLVolumeFace::optimize(F32 angle_cutoff) } -void LLVolumeFace::createOctree(F32 scaler) +void LLVolumeFace::createOctree(F32 scaler, const LLVector4a& center, const LLVector4a& size) { if (mOctree) { return; } - LLVector4a center; - LLVector4a size; - center.splat(0.f); - size.splat(0.5f); - mOctree = new LLOctreeRoot(center, size, NULL); new LLVolumeOctreeListener(mOctree); @@ -6166,21 +6161,21 @@ void LLVolumeFace::createBinormals() void LLVolumeFace::resizeVertices(S32 num_verts) { - ll_aligned_free_16(mPositions); - ll_aligned_free_16(mNormals); - ll_aligned_free_16(mBinormals); - ll_aligned_free_16(mTexCoords); + delete [] mPositions; + delete [] mNormals; + delete [] mBinormals; + delete [] mTexCoords; mBinormals = NULL; if (num_verts) { - mPositions = (LLVector4a*) ll_aligned_malloc_16(num_verts*16); - mNormals = (LLVector4a*) ll_aligned_malloc_16(num_verts*16); + mPositions = new LLVector4a[num_verts]; + mNormals = new LLVector4a[num_verts]; //pad texture coordinate block end to allow for QWORD reads S32 size = ((num_verts*8) + 0xF) & ~0xF; - mTexCoords = (LLVector2*) ll_aligned_malloc_16(size); + mTexCoords = new LLVector2[size/8]; } else { @@ -6204,20 +6199,20 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con S32 old_size = mNumVertices*16; //positions - LLVector4a* dst = (LLVector4a*) ll_aligned_malloc_16(new_size); + LLVector4a* dst = new LLVector4a[new_verts]; if (mPositions) { LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mPositions, old_size); - ll_aligned_free_16(mPositions); + delete [] mPositions; } mPositions = dst; //normals - dst = (LLVector4a*) ll_aligned_malloc_16(new_size); + dst = new LLVector4a[new_verts]; if (mNormals) { LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mNormals, old_size); - ll_aligned_free_16(mNormals); + delete [] mNormals; } mNormals = dst; @@ -6225,19 +6220,18 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con new_size = ((new_verts*8)+0xF) & ~0xF; old_size = ((mNumVertices*8)+0xF) & ~0xF; - dst = (LLVector4a*) ll_aligned_malloc_16(new_size); { - LLVector2* dst = (LLVector2*) ll_aligned_malloc_16(new_size); + LLVector2* dst = new LLVector2[new_size/8]; if (mTexCoords) { LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mTexCoords, old_size); - ll_aligned_free_16(mTexCoords); + delete [] mTexCoords; } + mTexCoords = dst; } - mTexCoords = (LLVector2*) dst; //just clear binormals - ll_aligned_free_16(mBinormals); + delete [] mBinormals; mBinormals = NULL; mPositions[mNumVertices] = pos; @@ -6249,26 +6243,26 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con void LLVolumeFace::allocateBinormals(S32 num_verts) { - ll_aligned_free_16(mBinormals); - mBinormals = (LLVector4a*) ll_aligned_malloc_16(num_verts*16); + delete [] mBinormals; + mBinormals = new LLVector4a[num_verts]; } void LLVolumeFace::allocateWeights(S32 num_verts) { - ll_aligned_free_16(mWeights); - mWeights = (LLVector4a*) ll_aligned_malloc_16(num_verts*16); + delete [] mWeights; + mWeights = new LLVector4a[num_verts]; } void LLVolumeFace::resizeIndices(S32 num_indices) { - ll_aligned_free_16(mIndices); - + delete [] mIndices; + if (num_indices) { //pad index block end to allow for QWORD reads S32 size = ((num_indices*2) + 0xF) & ~0xF; - mIndices = (U16*) ll_aligned_malloc_16(size); + mIndices = new U16[size/2]; } else { @@ -6286,11 +6280,11 @@ void LLVolumeFace::pushIndex(const U16& idx) S32 old_size = ((mNumIndices*2)+0xF) & ~0xF; if (new_size != old_size) { - U16* dst = (U16*) ll_aligned_malloc_16(new_size); + U16* dst = new U16[new_size/2]; if (mIndices) { LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mIndices, old_size); - ll_aligned_free_16(mIndices); + delete [] mIndices; } mIndices = dst; } @@ -6333,9 +6327,9 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat } //allocate new buffer space - LLVector4a* new_pos = (LLVector4a*) ll_aligned_malloc_16(new_count*16); - LLVector4a* new_norm = (LLVector4a*) ll_aligned_malloc_16(new_count*16); - LLVector2* new_tc = (LLVector2*) ll_aligned_malloc_16((new_count*8+0xF) & ~0xF); + LLVector4a* new_pos = new LLVector4a[new_count]; + LLVector4a* new_norm = new LLVector4a[new_count]; + LLVector2* new_tc = new LLVector2[((new_count*8+0xF) & ~0xF)/8]; if (mNumVertices > 0) @@ -6346,10 +6340,10 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat } //free old buffer space - ll_aligned_free_16(mPositions); - ll_aligned_free_16(mNormals); - ll_aligned_free_16(mTexCoords); - + delete [] mPositions; + delete [] mNormals; + delete [] mTexCoords; + //point to new buffers mPositions = new_pos; mNormals = new_norm; @@ -6399,7 +6393,7 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat new_count = mNumIndices + face.mNumIndices; //allocate new index buffer - U16* new_indices = (U16*) ll_aligned_malloc_16((new_count*2+0xF) & ~0xF); + U16* new_indices = new U16[((new_count*2+0xF) & ~0xF)/2]; if (mNumIndices > 0) { //copy old index buffer S32 old_size = (mNumIndices*2+0xF) & ~0xF; @@ -6407,8 +6401,8 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat } //free old index buffer - ll_aligned_free_16(mIndices); - + delete [] mIndices; + //point to new index buffer mIndices = new_indices; diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index ff5e3d9dfa..32364bd4b8 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -882,7 +882,7 @@ public: }; void optimize(F32 angle_cutoff = 2.f); - void createOctree(F32 scaler = 0.25f); + void createOctree(F32 scaler = 0.25f, const LLVector4a& center = LLVector4a(0,0,0), const LLVector4a& size = LLVector4a(0.5f,0.5f,0.5f)); enum { diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index 5949a373ae..efbb62011c 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -191,15 +191,6 @@ LLVOVolume* LLDrawable::getVOVolume() const const LLMatrix4& LLDrawable::getRenderMatrix() const { - if (LLDrawable::isState(LLDrawable::RIGGED)) - { - LLVOAvatar* avatar = mVObjp->getAvatar(); - if (avatar) - { - return avatar->mDrawable->getWorldMatrix(); - } - } - return isRoot() ? getWorldMatrix() : getParent()->getWorldMatrix(); } @@ -727,8 +718,7 @@ void LLDrawable::updateDistance(LLCamera& camera, bool force_update) LLVOVolume* volume = getVOVolume(); if (volume) { - volume->updateRelativeXform(); - pos = volume->getRelativeXform().getTranslation(); + pos.set(getPositionGroup().getF32ptr()); if (isStatic()) { pos += volume->getRegion()->getOriginAgent(); diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index ccc060f3fa..5cf6082f12 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -1325,6 +1325,12 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) #if LL_MESH_ENABLED void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace* face, const LLMeshSkinInfo* skin, LLVolume* volume, const LLVolumeFace& vol_face) { + LLVector4a* weight = vol_face.mWeights; + if (!weight) + { + return; + } + LLVertexBuffer* buffer = face->mVertexBuffer; U32 data_mask = 0; @@ -1403,8 +1409,6 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace* } } - LLVector4a* weight = vol_face.mWeights; - LLMatrix4a bind_shape_matrix; bind_shape_matrix.loadu(skin->mBindShapeMatrix); @@ -1422,7 +1426,7 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace* { F32 w = weight[j][k]; - idx[k] = (S32) floorf(w); + idx[k] = llclamp((S32) floorf(w), 0, 63); wght[k] = w - floorf(w); scale += wght[k]; } diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 9a178985cf..3fa60e9f1e 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -556,8 +556,36 @@ void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color) } glColor4fv(color.mV); - mVertexBuffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0); - mVertexBuffer->draw(LLRender::TRIANGLES, mIndicesCount, mIndicesIndex); + + if (mDrawablep->isState(LLDrawable::RIGGED)) + { + LLVOVolume* volume = mDrawablep->getVOVolume(); + if (volume) + { + LLRiggedVolume* rigged = volume->getRiggedVolume(); + if (rigged) + { + LLGLEnable offset(GL_POLYGON_OFFSET_FILL); + glPolygonOffset(-1.f, -1.f); + glMultMatrixf((F32*) volume->getRelativeXform().mMatrix); + const LLVolumeFace& vol_face = rigged->getVolumeFace(getTEOffset()); + LLVertexBuffer::unbind(); + glVertexPointer(3, GL_FLOAT, 16, vol_face.mPositions); + if (vol_face.mTexCoords) + { + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glTexCoordPointer(2, GL_FLOAT, 8, vol_face.mTexCoords); + } + glDrawElements(GL_TRIANGLES, vol_face.mNumIndices, GL_UNSIGNED_SHORT, vol_face.mIndices); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + } + } + } + else + { + mVertexBuffer->draw(LLRender::TRIANGLES, mIndicesCount, mIndicesIndex); + mVertexBuffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0); + } gGL.popMatrix(); } diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index ff2929695d..21f7e780e2 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -5395,6 +5395,42 @@ BOOL LLSelectNode::allowOperationOnNode(PermissionBit op, U64 group_proxy_power) return (mPermissions->allowOperationBy(op, proxy_agent_id, group_id)); } + +//helper function for pushing relevant vertices from drawable to GL +void pushWireframe(LLDrawable* drawable) +{ + if (drawable->isState(LLDrawable::RIGGED)) + { //render straight from rigged volume if this is a rigged attachment + LLVOVolume* vobj = drawable->getVOVolume(); + if (vobj) + { + vobj->updateRiggedVolume(); + LLRiggedVolume* rigged_volume = vobj->getRiggedVolume(); + if (rigged_volume) + { + LLVertexBuffer::unbind(); + gGL.pushMatrix(); + glMultMatrixf((F32*) vobj->getRelativeXform().mMatrix); + for (S32 i = 0; i < rigged_volume->getNumVolumeFaces(); ++i) + { + const LLVolumeFace& face = rigged_volume->getVolumeFace(i); + glVertexPointer(3, GL_FLOAT, 16, face.mPositions); + glDrawElements(GL_TRIANGLES, face.mNumIndices, GL_UNSIGNED_SHORT, face.mIndices); + } + gGL.popMatrix(); + } + } + } + else + { + for (S32 i = 0; i < drawable->getNumFaces(); ++i) + { + LLFace* face = drawable->getFace(i); + pushVerts(face, LLVertexBuffer::MAP_VERTEX); + } + } +} + void LLSelectNode::renderOneWireframe(const LLColor4& color) { LLViewerObject* objectp = getObject(); @@ -5442,11 +5478,7 @@ void LLSelectNode::renderOneWireframe(const LLColor4& color) gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); { glColor4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.4f); - for (S32 i = 0; i < drawable->getNumFaces(); ++i) - { - LLFace* face = drawable->getFace(i); - pushVerts(face, LLVertexBuffer::MAP_VERTEX); - } + pushWireframe(drawable); } } @@ -5455,13 +5487,9 @@ void LLSelectNode::renderOneWireframe(const LLColor4& color) glColor4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2); LLGLEnable offset(GL_POLYGON_OFFSET_LINE); - glPolygonOffset(3.f, 2.f); + glPolygonOffset(3.f, 3.f); glLineWidth(3.f); - for (S32 i = 0; i < drawable->getNumFaces(); ++i) - { - LLFace* face = drawable->getFace(i); - pushVerts(face, LLVertexBuffer::MAP_VERTEX); - } + pushWireframe(drawable); glLineWidth(1.f); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); gGL.popMatrix(); diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 191cdac981..0f9f35dc57 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -3121,9 +3121,11 @@ void renderRaycast(LLDrawable* drawablep) LLVOVolume* vobj = drawablep->getVOVolume(); LLVolume* volume = vobj->getVolume(); + bool transform = true; if (drawablep->isState(LLDrawable::RIGGED)) { - volume = NULL; + volume = vobj->getRiggedVolume(); + transform = false; } if (volume) @@ -3140,8 +3142,16 @@ void renderRaycast(LLDrawable* drawablep) glMultMatrixf((F32*) vobj->getRelativeXform().mMatrix); LLVector3 start, end; - start = vobj->agentPositionToVolume(gDebugRaycastStart); - end = vobj->agentPositionToVolume(gDebugRaycastEnd); + if (transform) + { + start = vobj->agentPositionToVolume(gDebugRaycastStart); + end = vobj->agentPositionToVolume(gDebugRaycastEnd); + } + else + { + start = gDebugRaycastStart; + end = gDebugRaycastEnd; + } LLVector4a starta, enda; starta.load3(start.mV); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 60bdfc24b9..f09ce5b363 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1358,8 +1358,9 @@ BOOL LLVOVolume::genBBoxes(BOOL force_global) LLVector4a min,max; - BOOL rebuild = mDrawable->isState(LLDrawable::REBUILD_VOLUME | LLDrawable::REBUILD_POSITION) || mRiggedVolume.notNull(); + BOOL rebuild = mDrawable->isState(LLDrawable::REBUILD_VOLUME | LLDrawable::REBUILD_POSITION | LLDrawable::REBUILD_RIGGED); + bool rigged = false; LLVolume* volume = mRiggedVolume; if (!volume) { @@ -1424,10 +1425,19 @@ void LLVOVolume::updateRelativeXform() LLDrawable* drawable = mDrawable; - if (drawable->isState(LLDrawable::RIGGED)) - { - mRelativeXform.setIdentity(); - mRelativeXformInvTrans.setIdentity(); + if (drawable->isState(LLDrawable::RIGGED) && mRiggedVolume.notNull()) + { //rigged volume (which is in agent space) is used for generating bounding boxes etc + //inverse of render matrix should go to partition space + mRelativeXform = getRenderMatrix(); + + F32* dst = (F32*) mRelativeXformInvTrans.mMatrix; + F32* src = (F32*) mRelativeXform.mMatrix; + dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; + dst[3] = src[4]; dst[4] = src[5]; dst[5] = src[6]; + dst[6] = src[8]; dst[7] = src[9]; dst[8] = src[10]; + + mRelativeXform.invert(); + mRelativeXformInvTrans.transpose(); } else if (drawable->isActive()) { @@ -3421,12 +3431,15 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e LLVolume* volume = getVolume(); + bool transform = true; + if (mDrawable->isState(LLDrawable::RIGGED)) { if (LLFloater::isVisible(gFloaterTools) && getAvatar()->isSelf()) { gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_RIGGED, TRUE); volume = mRiggedVolume; + transform = false; } else { //cannot pick rigged attachments on other avatars or when not in build mode @@ -3438,8 +3451,16 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e { LLVector3 v_start, v_end, v_dir; - v_start = agentPositionToVolume(start); - v_end = agentPositionToVolume(end); + if (transform) + { + v_start = agentPositionToVolume(start); + v_end = agentPositionToVolume(end); + } + else + { + v_start = start; + v_end = end; + } LLVector3 p; LLVector3 n; @@ -3499,18 +3520,40 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e if (intersection != NULL) { - *intersection = volumePositionToAgent(p); // must map back to agent space + if (transform) + { + *intersection = volumePositionToAgent(p); // must map back to agent space + } + else + { + *intersection = p; + } } if (normal != NULL) { - *normal = volumeDirectionToAgent(n); + if (transform) + { + *normal = volumeDirectionToAgent(n); + } + else + { + *normal = n; + } + (*normal).normVec(); } if (bi_normal != NULL) { - *bi_normal = volumeDirectionToAgent(bn); + if (transform) + { + *bi_normal = volumeDirectionToAgent(bn); + } + else + { + *bi_normal = bn; + } (*bi_normal).normVec(); } @@ -3528,18 +3571,49 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e return ret; } +bool LLVOVolume::treatAsRigged() +{ + return LLFloater::isVisible(gFloaterTools) && + isAttachment() && + getAvatar() && + getAvatar()->isSelf() && + mDrawable.notNull() && + mDrawable->isState(LLDrawable::RIGGED); +} + +LLRiggedVolume* LLVOVolume::getRiggedVolume() +{ + return mRiggedVolume; +} + +void LLVOVolume::clearRiggedVolume() +{ + if (mRiggedVolume.notNull()) + { + mRiggedVolume = NULL; + updateRelativeXform(); + } +} + void LLVOVolume::updateRiggedVolume() { //Update mRiggedVolume to match current animation frame of avatar. //Also update position/size in octree. + if (!treatAsRigged()) + { + clearRiggedVolume(); + + return; + } + LLVolume* volume = getVolume(); const LLMeshSkinInfo* skin = gMeshRepo.getSkinInfo(volume->getParams().getSculptID()); if (!skin) { - mRiggedVolume = NULL; + clearRiggedVolume(); return; } @@ -3547,7 +3621,7 @@ void LLVOVolume::updateRiggedVolume() if (!avatar) { - mRiggedVolume = NULL; + clearRiggedVolume(); return; } @@ -3555,6 +3629,7 @@ void LLVOVolume::updateRiggedVolume() { LLVolumeParams p; mRiggedVolume = new LLRiggedVolume(p); + updateRelativeXform(); } mRiggedVolume->update(skin, avatar, volume); @@ -3592,12 +3667,7 @@ void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, cons //build matrix palette LLMatrix4a mp[64]; LLMatrix4* mat = (LLMatrix4*) mp; - - LLMatrix4 agent_to_root; - - LLVector4a origin; - origin.load3(avatar->getPositionAgent().mV); - + for (U32 j = 0; j < skin->mJointNames.size(); ++j) { LLJoint* joint = avatar->getJoint(skin->mJointNames[j]); @@ -3661,7 +3731,6 @@ void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, cons LLVector4a dst; bind_shape_matrix.affineTransform(v, t); final_mat.affineTransform(t, dst); - dst.sub(origin); pos[j] = dst; } @@ -3687,7 +3756,12 @@ void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, cons LLFastTimer t(FTM_RIGGED_OCTREE); delete dst_face.mOctree; dst_face.mOctree = NULL; - dst_face.createOctree(2.f); + + LLVector4a size; + size.setSub(dst_face.mExtents[1], dst_face.mExtents[0]); + size.splat(size.getLength3().getF32()*0.5f); + + dst_face.createOctree(1.f); } } } diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index d868099eeb..f058710a27 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -306,7 +306,17 @@ public: //rigged volume update (for raycasting) void updateRiggedVolume(); - LLRiggedVolume* getRiggedVolume() { return mRiggedVolume; } + LLRiggedVolume* getRiggedVolume(); + + //returns true if volume should be treated as a rigged volume + // - Build tools are open + // - object is an attachment + // - object is attached to self + // - object is rendered as rigged + bool treatAsRigged(); + + //clear out rigged volume and revert back to non-rigged state for picking/LOD/distance updates + void clearRiggedVolume(); protected: S32 computeLODDetail(F32 distance, F32 radius); -- cgit v1.3 From 90e3d83a5cb35e98a02a3017dd79ebc272bbfe85 Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" Date: Tue, 21 Sep 2010 13:26:52 -0400 Subject: Fix for build failures - disabling tcmalloc for now --- .hgignore | 0 .hgtags | 0 BuildParams | 0 build.sh | 0 doc/FLOSS-exception.txt | 0 doc/GPL-license.txt | 0 doc/LICENSE-logos.txt | 0 doc/LICENSE-source.txt | 0 doc/contributions.txt | 0 doc/releasenotes-where.txt | 0 etc/message.xml | 0 indra/CMakeLists.txt | 0 indra/cmake/00-Common.cmake | 0 indra/cmake/APR.cmake | 0 indra/cmake/Audio.cmake | 0 indra/cmake/BerkeleyDB.cmake | 0 indra/cmake/Boost.cmake | 0 indra/cmake/BuildVersion.cmake | 0 indra/cmake/CARes.cmake | 0 indra/cmake/CMakeCopyIfDifferent.cmake | 0 indra/cmake/CMakeLists.txt | 0 indra/cmake/CSharpMacros.cmake | 0 indra/cmake/CURL.cmake | 0 indra/cmake/Copy3rdPartyLibs.cmake | 0 indra/cmake/CopyBackToSource.cmake | 0 indra/cmake/DBusGlib.cmake | 0 indra/cmake/DeploySharedLibs.cmake | 0 indra/cmake/DirectX.cmake | 0 indra/cmake/DragDrop.cmake | 0 indra/cmake/ELFIO.cmake | 0 indra/cmake/EXPAT.cmake | 0 indra/cmake/ExamplePlugin.cmake | 0 indra/cmake/Externals.cmake | 0 indra/cmake/FMOD.cmake | 0 indra/cmake/FindAPR.cmake | 0 indra/cmake/FindBerkeleyDB.cmake | 0 indra/cmake/FindCARes.cmake | 0 indra/cmake/FindELFIO.cmake | 0 indra/cmake/FindGooglePerfTools.cmake | 0 indra/cmake/FindMT.cmake | 0 indra/cmake/FindMono.cmake | 0 indra/cmake/FindMySQL.cmake | 0 indra/cmake/FindOpenJPEG.cmake | 0 indra/cmake/FindSCP.cmake | 0 indra/cmake/FindSVN.cmake | 0 indra/cmake/FindXmlRpcEpi.cmake | 0 indra/cmake/FreeType.cmake | 0 indra/cmake/GLOD.cmake | 0 indra/cmake/GStreamer010Plugin.cmake | 0 indra/cmake/GetPrerequisites_2_8.cmake | 0 indra/cmake/Glui.cmake | 0 indra/cmake/Glut.cmake | 0 indra/cmake/GoogleBreakpad.cmake | 0 indra/cmake/GoogleMock.cmake | 0 indra/cmake/GooglePerfTools.cmake | 2 +- indra/cmake/JPEG.cmake | 0 indra/cmake/LLAddBuildTest.cmake | 0 indra/cmake/LLAudio.cmake | 0 indra/cmake/LLCharacter.cmake | 0 indra/cmake/LLCommon.cmake | 0 indra/cmake/LLConvexDecomposition.cmake | 0 indra/cmake/LLCrashLogger.cmake | 0 indra/cmake/LLDatabase.cmake | 0 indra/cmake/LLImage.cmake | 0 indra/cmake/LLImageJ2COJ.cmake | 0 indra/cmake/LLInventory.cmake | 0 indra/cmake/LLKDU.cmake | 0 indra/cmake/LLLogin.cmake | 0 indra/cmake/LLMath.cmake | 0 indra/cmake/LLMessage.cmake | 0 indra/cmake/LLPlugin.cmake | 0 indra/cmake/LLPrimitive.cmake | 0 indra/cmake/LLRender.cmake | 0 indra/cmake/LLScene.cmake | 0 indra/cmake/LLSharedLibs.cmake | 0 indra/cmake/LLTestCommand.cmake | 0 indra/cmake/LLUI.cmake | 0 indra/cmake/LLVFS.cmake | 0 indra/cmake/LLWindow.cmake | 0 indra/cmake/LLXML.cmake | 0 indra/cmake/LLXUIXML.cmake | 0 indra/cmake/LScript.cmake | 0 indra/cmake/Linking.cmake | 0 indra/cmake/MediaPluginBase.cmake | 0 indra/cmake/MonoDeps.cmake | 0 indra/cmake/MonoEmbed.cmake | 0 indra/cmake/MySQL.cmake | 0 indra/cmake/NDOF.cmake | 0 indra/cmake/OPENAL.cmake | 0 indra/cmake/OpenGL.cmake | 0 indra/cmake/OpenJPEG.cmake | 0 indra/cmake/OpenSSL.cmake | 0 indra/cmake/PNG.cmake | 0 indra/cmake/PluginAPI.cmake | 0 indra/cmake/Prebuilt.cmake | 0 indra/cmake/Pth.cmake | 0 indra/cmake/PulseAudio.cmake | 0 indra/cmake/Python.cmake | 0 indra/cmake/QuickTimePlugin.cmake | 0 indra/cmake/TemplateCheck.cmake | 0 indra/cmake/Tut.cmake | 0 indra/cmake/UI.cmake | 0 indra/cmake/UnixInstall.cmake | 0 indra/cmake/Variables.cmake | 0 indra/cmake/ViewerMiscLibs.cmake | 0 indra/cmake/WebKitLibPlugin.cmake | 0 indra/cmake/XmlRpcEpi.cmake | 0 indra/cmake/ZLIB.cmake | 0 indra/cmake/cmake_dummy.cpp | 0 indra/cmake/run_build_test.py | 0 indra/copy_win_scripts/CMakeLists.txt | 0 indra/copy_win_scripts/start-client.py | 0 indra/integration_tests/CMakeLists.txt | 0 indra/integration_tests/llui_libtest/CMakeLists.txt | 0 indra/integration_tests/llui_libtest/llui_libtest.cpp | 0 indra/integration_tests/llui_libtest/llui_libtest.h | 0 indra/integration_tests/llui_libtest/llwidgetreg.cpp | 0 indra/integration_tests/llui_libtest/llwidgetreg.h | 0 indra/lib/python/indra/__init__.py | 0 indra/lib/python/indra/base/__init__.py | 0 indra/lib/python/indra/base/cllsd_test.py | 0 indra/lib/python/indra/base/config.py | 0 indra/lib/python/indra/base/llsd.py | 0 indra/lib/python/indra/base/lluuid.py | 0 indra/lib/python/indra/base/metrics.py | 0 indra/lib/python/indra/ipc/__init__.py | 0 indra/lib/python/indra/ipc/compatibility.py | 0 indra/lib/python/indra/ipc/httputil.py | 0 indra/lib/python/indra/ipc/llmessage.py | 0 indra/lib/python/indra/ipc/llsdhttp.py | 0 indra/lib/python/indra/ipc/mysql_pool.py | 0 indra/lib/python/indra/ipc/russ.py | 0 indra/lib/python/indra/ipc/servicebuilder.py | 0 indra/lib/python/indra/ipc/siesta.py | 0 indra/lib/python/indra/ipc/siesta_test.py | 0 indra/lib/python/indra/ipc/tokenstream.py | 0 indra/lib/python/indra/ipc/webdav.py | 0 indra/lib/python/indra/ipc/xml_rpc.py | 0 indra/lib/python/indra/util/__init__.py | 0 indra/lib/python/indra/util/fastest_elementtree.py | 0 indra/lib/python/indra/util/helpformatter.py | 0 indra/lib/python/indra/util/iterators.py | 0 indra/lib/python/indra/util/llmanifest.py | 0 indra/lib/python/indra/util/llsubprocess.py | 0 indra/lib/python/indra/util/llversion.py | 0 indra/lib/python/indra/util/named_query.py | 0 indra/lib/python/indra/util/shutil2.py | 0 indra/lib/python/indra/util/term.py | 0 indra/lib/python/indra/util/test_win32_manifest.py | 0 indra/lib/python/uuid.py | 0 indra/linux_crash_logger/CMakeLists.txt | 0 indra/linux_crash_logger/linux_crash_logger.cpp | 0 indra/linux_crash_logger/llcrashloggerlinux.cpp | 0 indra/linux_crash_logger/llcrashloggerlinux.h | 0 indra/linux_updater/CMakeLists.txt | 0 indra/linux_updater/linux_updater.cpp | 0 indra/llaudio/CMakeLists.txt | 0 indra/llaudio/llaudiodecodemgr.cpp | 0 indra/llaudio/llaudiodecodemgr.h | 0 indra/llaudio/llaudioengine.cpp | 0 indra/llaudio/llaudioengine.h | 0 indra/llaudio/llaudioengine_fmod.cpp | 0 indra/llaudio/llaudioengine_fmod.h | 0 indra/llaudio/llaudioengine_openal.cpp | 0 indra/llaudio/llaudioengine_openal.h | 0 indra/llaudio/lllistener.cpp | 0 indra/llaudio/lllistener.h | 0 indra/llaudio/lllistener_ds3d.h | 0 indra/llaudio/lllistener_fmod.cpp | 0 indra/llaudio/lllistener_fmod.h | 0 indra/llaudio/lllistener_openal.cpp | 0 indra/llaudio/lllistener_openal.h | 0 indra/llaudio/llstreamingaudio.h | 0 indra/llaudio/llstreamingaudio_fmod.cpp | 0 indra/llaudio/llstreamingaudio_fmod.h | 0 indra/llaudio/llvorbisencode.cpp | 0 indra/llaudio/llvorbisencode.h | 0 indra/llaudio/llwindgen.h | 0 indra/llcharacter/CMakeLists.txt | 0 indra/llcharacter/llanimationstates.cpp | 0 indra/llcharacter/llanimationstates.h | 0 indra/llcharacter/llbvhconsts.h | 0 indra/llcharacter/llbvhloader.cpp | 0 indra/llcharacter/llbvhloader.h | 0 indra/llcharacter/llcharacter.cpp | 0 indra/llcharacter/llcharacter.h | 0 indra/llcharacter/lleditingmotion.cpp | 0 indra/llcharacter/lleditingmotion.h | 0 indra/llcharacter/llgesture.cpp | 0 indra/llcharacter/llgesture.h | 0 indra/llcharacter/llhandmotion.cpp | 0 indra/llcharacter/llhandmotion.h | 0 indra/llcharacter/llheadrotmotion.cpp | 0 indra/llcharacter/llheadrotmotion.h | 0 indra/llcharacter/lljoint.cpp | 0 indra/llcharacter/lljoint.h | 0 indra/llcharacter/lljointsolverrp3.cpp | 0 indra/llcharacter/lljointsolverrp3.h | 0 indra/llcharacter/lljointstate.h | 0 indra/llcharacter/llkeyframefallmotion.cpp | 0 indra/llcharacter/llkeyframefallmotion.h | 0 indra/llcharacter/llkeyframemotion.cpp | 0 indra/llcharacter/llkeyframemotion.h | 0 indra/llcharacter/llkeyframemotionparam.cpp | 0 indra/llcharacter/llkeyframemotionparam.h | 0 indra/llcharacter/llkeyframestandmotion.cpp | 0 indra/llcharacter/llkeyframestandmotion.h | 0 indra/llcharacter/llkeyframewalkmotion.cpp | 0 indra/llcharacter/llkeyframewalkmotion.h | 0 indra/llcharacter/llmotion.cpp | 0 indra/llcharacter/llmotion.h | 0 indra/llcharacter/llmotioncontroller.cpp | 0 indra/llcharacter/llmotioncontroller.h | 0 indra/llcharacter/llmultigesture.cpp | 0 indra/llcharacter/llmultigesture.h | 0 indra/llcharacter/llpose.cpp | 0 indra/llcharacter/llpose.h | 0 indra/llcharacter/llstatemachine.cpp | 0 indra/llcharacter/llstatemachine.h | 0 indra/llcharacter/lltargetingmotion.cpp | 0 indra/llcharacter/lltargetingmotion.h | 0 indra/llcharacter/llvisualparam.cpp | 0 indra/llcharacter/llvisualparam.h | 0 indra/llcharacter/tests/lljoint_test.cpp | 0 indra/llcommon/CMakeLists.txt | 0 indra/llcommon/bitpack.cpp | 0 indra/llcommon/bitpack.h | 0 indra/llcommon/ctype_workaround.h | 0 indra/llcommon/doublelinkedlist.h | 0 indra/llcommon/imageids.cpp | 0 indra/llcommon/imageids.h | 0 indra/llcommon/indra_constants.cpp | 0 indra/llcommon/indra_constants.h | 0 indra/llcommon/is_approx_equal_fraction.h | 0 indra/llcommon/linden_common.h | 0 indra/llcommon/linked_lists.h | 0 indra/llcommon/ll_template_cast.h | 0 indra/llcommon/llagentconstants.h | 0 indra/llcommon/llallocator.cpp | 0 indra/llcommon/llallocator.h | 0 indra/llcommon/llallocator_heap_profile.cpp | 0 indra/llcommon/llallocator_heap_profile.h | 0 indra/llcommon/llapp.cpp | 0 indra/llcommon/llapp.h | 0 indra/llcommon/llapr.cpp | 0 indra/llcommon/llapr.h | 0 indra/llcommon/llassettype.cpp | 0 indra/llcommon/llassettype.h | 0 indra/llcommon/llassoclist.h | 0 indra/llcommon/llavatarconstants.h | 0 indra/llcommon/llbase32.cpp | 0 indra/llcommon/llbase32.h | 0 indra/llcommon/llbase64.cpp | 0 indra/llcommon/llbase64.h | 0 indra/llcommon/llboost.h | 0 indra/llcommon/llchat.h | 0 indra/llcommon/llclickaction.h | 0 indra/llcommon/llcommon.cpp | 0 indra/llcommon/llcommon.h | 0 indra/llcommon/llcommonutils.cpp | 0 indra/llcommon/llcommonutils.h | 0 indra/llcommon/llcoros.cpp | 0 indra/llcommon/llcoros.h | 0 indra/llcommon/llcrc.cpp | 0 indra/llcommon/llcrc.h | 0 indra/llcommon/llcriticaldamp.cpp | 0 indra/llcommon/llcriticaldamp.h | 0 indra/llcommon/llcursortypes.cpp | 0 indra/llcommon/llcursortypes.h | 0 indra/llcommon/lldarray.h | 0 indra/llcommon/lldarrayptr.h | 0 indra/llcommon/lldate.cpp | 0 indra/llcommon/lldate.h | 0 indra/llcommon/lldefs.h | 0 indra/llcommon/lldeleteutils.h | 0 indra/llcommon/lldependencies.cpp | 0 indra/llcommon/lldependencies.h | 0 indra/llcommon/lldepthstack.h | 0 indra/llcommon/lldictionary.cpp | 0 indra/llcommon/lldictionary.h | 0 indra/llcommon/lldlinked.h | 0 indra/llcommon/lldoubledispatch.h | 0 indra/llcommon/lldqueueptr.h | 0 indra/llcommon/llendianswizzle.h | 0 indra/llcommon/llenum.h | 0 indra/llcommon/llerror.cpp | 0 indra/llcommon/llerror.h | 0 indra/llcommon/llerrorcontrol.h | 0 indra/llcommon/llerrorlegacy.h | 0 indra/llcommon/llerrorthread.cpp | 0 indra/llcommon/llerrorthread.h | 0 indra/llcommon/llevent.cpp | 0 indra/llcommon/llevent.h | 0 indra/llcommon/lleventapi.cpp | 0 indra/llcommon/lleventapi.h | 0 indra/llcommon/lleventcoro.cpp | 0 indra/llcommon/lleventcoro.h | 0 indra/llcommon/lleventdispatcher.cpp | 0 indra/llcommon/lleventdispatcher.h | 0 indra/llcommon/lleventemitter.h | 0 indra/llcommon/lleventfilter.cpp | 0 indra/llcommon/lleventfilter.h | 0 indra/llcommon/llevents.cpp | 0 indra/llcommon/llevents.h | 0 indra/llcommon/lleventtimer.cpp | 0 indra/llcommon/lleventtimer.h | 0 indra/llcommon/llextendedstatus.h | 0 indra/llcommon/llfasttimer.h | 0 indra/llcommon/llfasttimer_class.cpp | 0 indra/llcommon/llfasttimer_class.h | 0 indra/llcommon/llfile.cpp | 0 indra/llcommon/llfile.h | 0 indra/llcommon/llfindlocale.cpp | 0 indra/llcommon/llfindlocale.h | 0 indra/llcommon/llfixedbuffer.cpp | 0 indra/llcommon/llfixedbuffer.h | 0 indra/llcommon/llfoldertype.cpp | 0 indra/llcommon/llfoldertype.h | 0 indra/llcommon/llformat.cpp | 0 indra/llcommon/llformat.h | 0 indra/llcommon/llframetimer.cpp | 0 indra/llcommon/llframetimer.h | 0 indra/llcommon/llhash.h | 0 indra/llcommon/llheartbeat.cpp | 0 indra/llcommon/llheartbeat.h | 0 indra/llcommon/llhttpstatuscodes.h | 0 indra/llcommon/llindexedqueue.h | 0 indra/llcommon/llinstancetracker.cpp | 0 indra/llcommon/llinstancetracker.h | 0 indra/llcommon/llkeythrottle.h | 0 indra/llcommon/llkeyusetracker.h | 0 indra/llcommon/lllazy.cpp | 0 indra/llcommon/lllazy.h | 0 indra/llcommon/lllinkedqueue.h | 0 indra/llcommon/lllistenerwrapper.h | 0 indra/llcommon/llliveappconfig.cpp | 0 indra/llcommon/llliveappconfig.h | 0 indra/llcommon/lllivefile.cpp | 0 indra/llcommon/lllivefile.h | 0 indra/llcommon/lllocalidhashmap.h | 0 indra/llcommon/lllog.cpp | 0 indra/llcommon/lllog.h | 0 indra/llcommon/lllslconstants.h | 0 indra/llcommon/llmap.h | 0 indra/llcommon/llmd5.cpp | 0 indra/llcommon/llmd5.h | 0 indra/llcommon/llmemory.cpp | 0 indra/llcommon/llmemory.h | 0 indra/llcommon/llmemorystream.cpp | 0 indra/llcommon/llmemorystream.h | 0 indra/llcommon/llmemtype.cpp | 0 indra/llcommon/llmemtype.h | 0 indra/llcommon/llmetrics.cpp | 0 indra/llcommon/llmetrics.h | 0 indra/llcommon/llmortician.cpp | 0 indra/llcommon/llmortician.h | 0 indra/llcommon/llnametable.h | 0 indra/llcommon/lloptioninterface.cpp | 0 indra/llcommon/lloptioninterface.h | 0 indra/llcommon/llpointer.h | 0 indra/llcommon/llpreprocessor.h | 0 indra/llcommon/llpriqueuemap.h | 0 indra/llcommon/llprocesslauncher.cpp | 0 indra/llcommon/llprocesslauncher.h | 0 indra/llcommon/llprocessor.cpp | 0 indra/llcommon/llprocessor.h | 0 indra/llcommon/llptrskiplist.h | 0 indra/llcommon/llptrskipmap.h | 0 indra/llcommon/llptrto.cpp | 0 indra/llcommon/llptrto.h | 0 indra/llcommon/llqueuedthread.cpp | 0 indra/llcommon/llqueuedthread.h | 0 indra/llcommon/llrand.cpp | 0 indra/llcommon/llrand.h | 0 indra/llcommon/llrefcount.cpp | 0 indra/llcommon/llrefcount.h | 0 indra/llcommon/llrun.cpp | 0 indra/llcommon/llrun.h | 0 indra/llcommon/llsafehandle.h | 0 indra/llcommon/llsd.cpp | 0 indra/llcommon/llsd.h | 0 indra/llcommon/llsdserialize.cpp | 0 indra/llcommon/llsdserialize.h | 0 indra/llcommon/llsdserialize_xml.cpp | 0 indra/llcommon/llsdserialize_xml.h | 0 indra/llcommon/llsdutil.cpp | 0 indra/llcommon/llsdutil.h | 0 indra/llcommon/llsecondlifeurls.cpp | 0 indra/llcommon/llsecondlifeurls.h | 0 indra/llcommon/llsimplehash.h | 0 indra/llcommon/llsingleton.cpp | 0 indra/llcommon/llsingleton.h | 0 indra/llcommon/llskiplist.h | 0 indra/llcommon/llskipmap.h | 0 indra/llcommon/llsmoothstep.h | 0 indra/llcommon/llstack.h | 0 indra/llcommon/llstacktrace.cpp | 0 indra/llcommon/llstacktrace.h | 0 indra/llcommon/llstat.cpp | 0 indra/llcommon/llstat.h | 0 indra/llcommon/llstatenums.h | 0 indra/llcommon/llstl.h | 0 indra/llcommon/llstreamtools.cpp | 0 indra/llcommon/llstreamtools.h | 0 indra/llcommon/llstrider.h | 0 indra/llcommon/llstring.cpp | 0 indra/llcommon/llstring.h | 0 indra/llcommon/llstringtable.cpp | 0 indra/llcommon/llstringtable.h | 0 indra/llcommon/llsys.cpp | 0 indra/llcommon/llsys.h | 0 indra/llcommon/llthread.cpp | 0 indra/llcommon/llthread.h | 0 indra/llcommon/lltimer.cpp | 0 indra/llcommon/lltimer.h | 0 indra/llcommon/lltreeiterators.h | 0 indra/llcommon/lluri.cpp | 0 indra/llcommon/lluri.h | 0 indra/llcommon/lluuid.cpp | 0 indra/llcommon/lluuid.h | 0 indra/llcommon/lluuidhashmap.h | 0 indra/llcommon/llversionserver.h | 0 indra/llcommon/llversionviewer.h | 0 indra/llcommon/llworkerthread.cpp | 0 indra/llcommon/llworkerthread.h | 0 indra/llcommon/metaclass.cpp | 0 indra/llcommon/metaclass.h | 0 indra/llcommon/metaclasst.h | 0 indra/llcommon/metaproperty.cpp | 0 indra/llcommon/metaproperty.h | 0 indra/llcommon/metapropertyt.h | 0 indra/llcommon/reflective.cpp | 0 indra/llcommon/reflective.h | 0 indra/llcommon/reflectivet.h | 0 indra/llcommon/roles_constants.h | 0 indra/llcommon/stdenums.h | 0 indra/llcommon/stdtypes.h | 0 indra/llcommon/string_table.h | 0 indra/llcommon/stringize.h | 0 indra/llcommon/tests/bitpack_test.cpp | 0 indra/llcommon/tests/commonmisc_test.cpp | 0 indra/llcommon/tests/listener.h | 0 indra/llcommon/tests/llallocator_heap_profile_test.cpp | 0 indra/llcommon/tests/llallocator_test.cpp | 0 indra/llcommon/tests/llbase64_test.cpp | 0 indra/llcommon/tests/lldate_test.cpp | 0 indra/llcommon/tests/lldependencies_test.cpp | 0 indra/llcommon/tests/llerror_test.cpp | 0 indra/llcommon/tests/lleventcoro_test.cpp | 0 indra/llcommon/tests/lleventfilter_test.cpp | 0 indra/llcommon/tests/llframetimer_test.cpp | 0 indra/llcommon/tests/llinstancetracker_test.cpp | 0 indra/llcommon/tests/lllazy_test.cpp | 0 indra/llcommon/tests/llmemtype_test.cpp | 0 indra/llcommon/tests/llprocessor_test.cpp | 0 indra/llcommon/tests/llrand_test.cpp | 0 indra/llcommon/tests/llsdserialize_test.cpp | 0 indra/llcommon/tests/llstring_test.cpp | 0 indra/llcommon/tests/lltreeiterators_test.cpp | 0 indra/llcommon/tests/lluri_test.cpp | 0 indra/llcommon/tests/reflection_test.cpp | 0 indra/llcommon/tests/stringize_test.cpp | 0 indra/llcommon/tests/wrapllerrs.h | 0 indra/llcommon/timer.h | 0 indra/llcommon/timing.cpp | 0 indra/llcommon/timing.h | 0 indra/llcommon/u64.cpp | 0 indra/llcommon/u64.h | 0 indra/llcrashlogger/CMakeLists.txt | 0 indra/llcrashlogger/llcrashlogger.cpp | 0 indra/llcrashlogger/llcrashlogger.h | 0 indra/llimage/CMakeLists.txt | 0 indra/llimage/llimage.cpp | 0 indra/llimage/llimage.h | 0 indra/llimage/llimagebmp.cpp | 0 indra/llimage/llimagebmp.h | 0 indra/llimage/llimagedimensionsinfo.cpp | 0 indra/llimage/llimagedimensionsinfo.h | 0 indra/llimage/llimagedxt.cpp | 0 indra/llimage/llimagedxt.h | 0 indra/llimage/llimagej2c.cpp | 0 indra/llimage/llimagej2c.h | 0 indra/llimage/llimagejpeg.cpp | 0 indra/llimage/llimagejpeg.h | 0 indra/llimage/llimagepng.cpp | 0 indra/llimage/llimagepng.h | 0 indra/llimage/llimagetga.cpp | 0 indra/llimage/llimagetga.h | 0 indra/llimage/llimageworker.cpp | 0 indra/llimage/llimageworker.h | 0 indra/llimage/llmapimagetype.h | 0 indra/llimage/llpngwrapper.cpp | 0 indra/llimage/llpngwrapper.h | 0 indra/llimage/tests/llimageworker_test.cpp | 0 indra/llimagej2coj/CMakeLists.txt | 0 indra/llimagej2coj/llimagej2coj.cpp | 0 indra/llimagej2coj/llimagej2coj.h | 0 indra/llinventory/CMakeLists.txt | 0 indra/llinventory/llcategory.cpp | 0 indra/llinventory/llcategory.h | 0 indra/llinventory/lleconomy.cpp | 0 indra/llinventory/lleconomy.h | 0 indra/llinventory/llinventory.cpp | 0 indra/llinventory/llinventory.h | 0 indra/llinventory/llinventorydefines.cpp | 0 indra/llinventory/llinventorydefines.h | 0 indra/llinventory/llinventorytype.cpp | 0 indra/llinventory/llinventorytype.h | 0 indra/llinventory/lllandmark.cpp | 0 indra/llinventory/lllandmark.h | 0 indra/llinventory/llnotecard.cpp | 0 indra/llinventory/llnotecard.h | 0 indra/llinventory/llparcel.cpp | 0 indra/llinventory/llparcel.h | 0 indra/llinventory/llparcelflags.h | 0 indra/llinventory/llpermissions.cpp | 0 indra/llinventory/llpermissions.h | 0 indra/llinventory/llpermissionsflags.h | 0 indra/llinventory/llsaleinfo.cpp | 0 indra/llinventory/llsaleinfo.h | 0 indra/llinventory/lltransactionflags.cpp | 0 indra/llinventory/lltransactionflags.h | 0 indra/llinventory/lltransactiontypes.h | 0 indra/llinventory/lluserrelations.cpp | 0 indra/llinventory/lluserrelations.h | 0 indra/llinventory/tests/inventorymisc_test.cpp | 0 indra/llinventory/tests/llparcel_test.cpp | 0 indra/llmath/CMakeLists.txt | 0 indra/llmath/camera.h | 0 indra/llmath/coordframe.h | 0 indra/llmath/llbbox.cpp | 0 indra/llmath/llbbox.h | 0 indra/llmath/llbboxlocal.cpp | 0 indra/llmath/llbboxlocal.h | 0 indra/llmath/llcamera.cpp | 0 indra/llmath/llcamera.h | 0 indra/llmath/llcoord.h | 0 indra/llmath/llcoordframe.cpp | 0 indra/llmath/llcoordframe.h | 0 indra/llmath/llinterp.h | 0 indra/llmath/llline.cpp | 0 indra/llmath/llline.h | 0 indra/llmath/llmath.h | 0 indra/llmath/llmatrix3a.cpp | 0 indra/llmath/llmatrix3a.h | 0 indra/llmath/llmatrix3a.inl | 0 indra/llmath/llmatrix4a.h | 0 indra/llmath/llmodularmath.cpp | 0 indra/llmath/llmodularmath.h | 0 indra/llmath/lloctree.h | 0 indra/llmath/llperlin.cpp | 0 indra/llmath/llperlin.h | 0 indra/llmath/llplane.h | 0 indra/llmath/llquantize.h | 0 indra/llmath/llquaternion.cpp | 0 indra/llmath/llquaternion.h | 0 indra/llmath/llquaternion2.h | 0 indra/llmath/llquaternion2.inl | 0 indra/llmath/llrect.cpp | 0 indra/llmath/llrect.h | 0 indra/llmath/llsdutil_math.cpp | 0 indra/llmath/llsdutil_math.h | 0 indra/llmath/llsimdmath.h | 0 indra/llmath/llsimdtypes.h | 0 indra/llmath/llsimdtypes.inl | 0 indra/llmath/llsphere.cpp | 0 indra/llmath/llsphere.h | 0 indra/llmath/lltreenode.h | 0 indra/llmath/llv4math.h | 0 indra/llmath/llv4matrix3.h | 0 indra/llmath/llv4matrix4.h | 0 indra/llmath/llv4vector3.h | 0 indra/llmath/llvector4a.cpp | 0 indra/llmath/llvector4a.h | 0 indra/llmath/llvector4a.inl | 0 indra/llmath/llvector4logical.h | 0 indra/llmath/llvolume.cpp | 0 indra/llmath/llvolume.h | 0 indra/llmath/llvolumemgr.cpp | 0 indra/llmath/llvolumemgr.h | 0 indra/llmath/llvolumeoctree.cpp | 0 indra/llmath/llvolumeoctree.h | 0 indra/llmath/m3math.cpp | 0 indra/llmath/m3math.h | 0 indra/llmath/m4math.cpp | 0 indra/llmath/m4math.h | 0 indra/llmath/raytrace.cpp | 0 indra/llmath/raytrace.h | 0 indra/llmath/tests/llbbox_test.cpp | 0 indra/llmath/tests/llbboxlocal_test.cpp | 0 indra/llmath/tests/llmodularmath_test.cpp | 0 indra/llmath/tests/llquaternion_test.cpp | 0 indra/llmath/tests/llrect_test.cpp | 0 indra/llmath/tests/m3math_test.cpp | 0 indra/llmath/tests/mathmisc_test.cpp | 0 indra/llmath/tests/v2math_test.cpp | 0 indra/llmath/tests/v3color_test.cpp | 0 indra/llmath/tests/v3dmath_test.cpp | 0 indra/llmath/tests/v3math_test.cpp | 0 indra/llmath/tests/v4color_test.cpp | 0 indra/llmath/tests/v4coloru_test.cpp | 0 indra/llmath/tests/v4math_test.cpp | 0 indra/llmath/tests/xform_test.cpp | 0 indra/llmath/v2math.cpp | 0 indra/llmath/v2math.h | 0 indra/llmath/v3color.cpp | 0 indra/llmath/v3color.h | 0 indra/llmath/v3dmath.cpp | 0 indra/llmath/v3dmath.h | 0 indra/llmath/v3math.cpp | 0 indra/llmath/v3math.h | 0 indra/llmath/v4color.cpp | 0 indra/llmath/v4color.h | 0 indra/llmath/v4coloru.cpp | 0 indra/llmath/v4coloru.h | 0 indra/llmath/v4math.cpp | 0 indra/llmath/v4math.h | 0 indra/llmath/xform.cpp | 0 indra/llmath/xform.h | 0 indra/llmessage/CMakeLists.txt | 0 indra/llmessage/llares.cpp | 0 indra/llmessage/llares.h | 0 indra/llmessage/llareslistener.cpp | 0 indra/llmessage/llareslistener.h | 0 indra/llmessage/llassetstorage.cpp | 0 indra/llmessage/llassetstorage.h | 0 indra/llmessage/llblowfishcipher.cpp | 0 indra/llmessage/llblowfishcipher.h | 0 indra/llmessage/llbuffer.cpp | 0 indra/llmessage/llbuffer.h | 0 indra/llmessage/llbufferstream.cpp | 0 indra/llmessage/llbufferstream.h | 0 indra/llmessage/llcachename.cpp | 0 indra/llmessage/llcachename.h | 0 indra/llmessage/llchainio.cpp | 0 indra/llmessage/llchainio.h | 0 indra/llmessage/llcipher.h | 0 indra/llmessage/llcircuit.cpp | 0 indra/llmessage/llcircuit.h | 0 indra/llmessage/llclassifiedflags.cpp | 0 indra/llmessage/llclassifiedflags.h | 0 indra/llmessage/llcurl.cpp | 0 indra/llmessage/llcurl.h | 0 indra/llmessage/lldatapacker.cpp | 0 indra/llmessage/lldatapacker.h | 0 indra/llmessage/lldbstrings.h | 0 indra/llmessage/lldispatcher.cpp | 0 indra/llmessage/lldispatcher.h | 0 indra/llmessage/lleventflags.h | 0 indra/llmessage/llfiltersd2xmlrpc.cpp | 0 indra/llmessage/llfiltersd2xmlrpc.h | 0 indra/llmessage/llfollowcamparams.h | 0 indra/llmessage/llhost.cpp | 0 indra/llmessage/llhost.h | 0 indra/llmessage/llhttpassetstorage.cpp | 0 indra/llmessage/llhttpassetstorage.h | 0 indra/llmessage/llhttpclient.cpp | 0 indra/llmessage/llhttpclient.h | 0 indra/llmessage/llhttpclientadapter.cpp | 0 indra/llmessage/llhttpclientadapter.h | 0 indra/llmessage/llhttpclientinterface.h | 0 indra/llmessage/llhttpnode.cpp | 0 indra/llmessage/llhttpnode.h | 0 indra/llmessage/llhttpnodeadapter.h | 0 indra/llmessage/llhttpsender.cpp | 0 indra/llmessage/llhttpsender.h | 0 indra/llmessage/llinstantmessage.cpp | 0 indra/llmessage/llinstantmessage.h | 0 indra/llmessage/llinvite.h | 0 indra/llmessage/lliobuffer.cpp | 0 indra/llmessage/lliobuffer.h | 0 indra/llmessage/lliohttpserver.cpp | 0 indra/llmessage/lliohttpserver.h | 0 indra/llmessage/lliopipe.cpp | 0 indra/llmessage/lliopipe.h | 0 indra/llmessage/lliosocket.cpp | 0 indra/llmessage/lliosocket.h | 0 indra/llmessage/llioutil.cpp | 0 indra/llmessage/llioutil.h | 0 indra/llmessage/llloginflags.h | 0 indra/llmessage/llmail.cpp | 0 indra/llmessage/llmail.h | 0 indra/llmessage/llmessagebuilder.cpp | 0 indra/llmessage/llmessagebuilder.h | 0 indra/llmessage/llmessageconfig.cpp | 0 indra/llmessage/llmessageconfig.h | 0 indra/llmessage/llmessagereader.cpp | 0 indra/llmessage/llmessagereader.h | 0 indra/llmessage/llmessagesenderinterface.h | 0 indra/llmessage/llmessagetemplate.cpp | 0 indra/llmessage/llmessagetemplate.h | 0 indra/llmessage/llmessagetemplateparser.cpp | 0 indra/llmessage/llmessagetemplateparser.h | 0 indra/llmessage/llmessagethrottle.cpp | 0 indra/llmessage/llmessagethrottle.h | 0 indra/llmessage/llmime.cpp | 0 indra/llmessage/llmime.h | 0 indra/llmessage/llmsgvariabletype.h | 0 indra/llmessage/llnamevalue.cpp | 0 indra/llmessage/llnamevalue.h | 0 indra/llmessage/llnullcipher.cpp | 0 indra/llmessage/llnullcipher.h | 0 indra/llmessage/llpacketack.cpp | 0 indra/llmessage/llpacketack.h | 0 indra/llmessage/llpacketbuffer.cpp | 0 indra/llmessage/llpacketbuffer.h | 0 indra/llmessage/llpacketring.cpp | 0 indra/llmessage/llpacketring.h | 0 indra/llmessage/llpartdata.cpp | 0 indra/llmessage/llpartdata.h | 0 indra/llmessage/llpumpio.cpp | 0 indra/llmessage/llpumpio.h | 0 indra/llmessage/llqueryflags.h | 0 indra/llmessage/llregionflags.h | 0 indra/llmessage/llregionhandle.h | 0 indra/llmessage/llregionpresenceverifier.cpp | 0 indra/llmessage/llregionpresenceverifier.h | 0 indra/llmessage/llsdappservices.cpp | 0 indra/llmessage/llsdappservices.h | 0 indra/llmessage/llsdhttpserver.cpp | 0 indra/llmessage/llsdhttpserver.h | 0 indra/llmessage/llsdmessage.cpp | 0 indra/llmessage/llsdmessage.h | 0 indra/llmessage/llsdmessagebuilder.cpp | 0 indra/llmessage/llsdmessagebuilder.h | 0 indra/llmessage/llsdmessagereader.cpp | 0 indra/llmessage/llsdmessagereader.h | 0 indra/llmessage/llsdrpcclient.cpp | 0 indra/llmessage/llsdrpcclient.h | 0 indra/llmessage/llsdrpcserver.cpp | 0 indra/llmessage/llsdrpcserver.h | 0 indra/llmessage/llservice.cpp | 0 indra/llmessage/llservice.h | 0 indra/llmessage/llservicebuilder.cpp | 0 indra/llmessage/llservicebuilder.h | 0 indra/llmessage/llstoredmessage.cpp | 0 indra/llmessage/llstoredmessage.h | 0 indra/llmessage/lltaskname.h | 0 indra/llmessage/llteleportflags.h | 0 indra/llmessage/lltemplatemessagebuilder.cpp | 0 indra/llmessage/lltemplatemessagebuilder.h | 0 indra/llmessage/lltemplatemessagedispatcher.cpp | 0 indra/llmessage/lltemplatemessagedispatcher.h | 0 indra/llmessage/lltemplatemessagereader.cpp | 0 indra/llmessage/lltemplatemessagereader.h | 0 indra/llmessage/llthrottle.cpp | 0 indra/llmessage/llthrottle.h | 0 indra/llmessage/lltransfermanager.cpp | 0 indra/llmessage/lltransfermanager.h | 0 indra/llmessage/lltransfersourceasset.cpp | 0 indra/llmessage/lltransfersourceasset.h | 0 indra/llmessage/lltransfersourcefile.cpp | 0 indra/llmessage/lltransfersourcefile.h | 0 indra/llmessage/lltransfertargetfile.cpp | 0 indra/llmessage/lltransfertargetfile.h | 0 indra/llmessage/lltransfertargetvfile.cpp | 0 indra/llmessage/lltransfertargetvfile.h | 0 indra/llmessage/lltrustedmessageservice.cpp | 0 indra/llmessage/lltrustedmessageservice.h | 0 indra/llmessage/llurlrequest.cpp | 0 indra/llmessage/llurlrequest.h | 0 indra/llmessage/lluseroperation.cpp | 0 indra/llmessage/lluseroperation.h | 0 indra/llmessage/llvehicleparams.h | 0 indra/llmessage/llxfer.cpp | 0 indra/llmessage/llxfer.h | 0 indra/llmessage/llxfer_file.cpp | 0 indra/llmessage/llxfer_file.h | 0 indra/llmessage/llxfer_mem.cpp | 0 indra/llmessage/llxfer_mem.h | 0 indra/llmessage/llxfer_vfile.cpp | 0 indra/llmessage/llxfer_vfile.h | 0 indra/llmessage/llxfermanager.cpp | 0 indra/llmessage/llxfermanager.h | 0 indra/llmessage/llxorcipher.cpp | 0 indra/llmessage/llxorcipher.h | 0 indra/llmessage/machine.cpp | 0 indra/llmessage/machine.h | 0 indra/llmessage/mean_collision_data.h | 0 indra/llmessage/message.cpp | 0 indra/llmessage/message.h | 0 indra/llmessage/message_prehash.cpp | 0 indra/llmessage/message_prehash.h | 0 indra/llmessage/message_string_table.cpp | 0 indra/llmessage/net.cpp | 0 indra/llmessage/net.h | 0 indra/llmessage/partsyspacket.cpp | 0 indra/llmessage/partsyspacket.h | 0 indra/llmessage/patch_code.cpp | 0 indra/llmessage/patch_code.h | 0 indra/llmessage/patch_dct.cpp | 0 indra/llmessage/patch_dct.h | 0 indra/llmessage/patch_idct.cpp | 0 indra/llmessage/sound_ids.cpp | 0 indra/llmessage/sound_ids.h | 0 indra/llmessage/tests/commtest.h | 0 indra/llmessage/tests/llareslistener_test.cpp | 0 indra/llmessage/tests/llcurl_stub.cpp | 0 indra/llmessage/tests/llhost_test.cpp | 0 indra/llmessage/tests/llhttpclientadapter_test.cpp | 0 indra/llmessage/tests/llmime_test.cpp | 0 indra/llmessage/tests/llmockhttpclient.h | 0 indra/llmessage/tests/llnamevalue_test.cpp | 0 indra/llmessage/tests/llpartdata_test.cpp | 0 indra/llmessage/tests/llregionpresenceverifier_test.cpp | 0 indra/llmessage/tests/llsdmessage_test.cpp | 0 indra/llmessage/tests/lltemplatemessagedispatcher_test.cpp | 0 indra/llmessage/tests/lltesthttpclientadapter.cpp | 0 indra/llmessage/tests/lltesthttpclientadapter.h | 0 indra/llmessage/tests/lltestmessagesender.cpp | 0 indra/llmessage/tests/lltestmessagesender.h | 0 indra/llmessage/tests/lltrustedmessageservice_test.cpp | 0 indra/llmessage/tests/llxfer_file_test.cpp | 0 indra/llmessage/tests/networkio.h | 0 indra/llmessage/tests/test_llsdmessage_peer.py | 0 indra/llmessage/tests/testrunner.py | 0 indra/llplugin/CMakeLists.txt | 0 indra/llplugin/llpluginclassmedia.cpp | 0 indra/llplugin/llpluginclassmedia.h | 0 indra/llplugin/llpluginclassmediaowner.h | 0 indra/llplugin/llplugincookiestore.cpp | 0 indra/llplugin/llplugincookiestore.h | 0 indra/llplugin/llplugininstance.cpp | 0 indra/llplugin/llplugininstance.h | 0 indra/llplugin/llpluginmessage.cpp | 0 indra/llplugin/llpluginmessage.h | 0 indra/llplugin/llpluginmessageclasses.h | 0 indra/llplugin/llpluginmessagepipe.cpp | 0 indra/llplugin/llpluginmessagepipe.h | 0 indra/llplugin/llpluginprocesschild.cpp | 0 indra/llplugin/llpluginprocesschild.h | 0 indra/llplugin/llpluginprocessparent.cpp | 0 indra/llplugin/llpluginprocessparent.h | 0 indra/llplugin/llpluginsharedmemory.cpp | 0 indra/llplugin/llpluginsharedmemory.h | 0 indra/llplugin/slplugin/CMakeLists.txt | 0 indra/llplugin/slplugin/slplugin-objc.h | 0 indra/llplugin/slplugin/slplugin-objc.mm | 0 indra/llplugin/slplugin/slplugin.cpp | 0 indra/llplugin/slplugin/slplugin_info.plist | 0 indra/llplugin/tests/llplugincookiestore_test.cpp | 0 indra/llprimitive/CMakeLists.txt | 0 indra/llprimitive/legacy_object_types.h | 0 indra/llprimitive/llmaterialtable.cpp | 0 indra/llprimitive/llmaterialtable.h | 0 indra/llprimitive/llmediaentry.cpp | 0 indra/llprimitive/llmediaentry.h | 0 indra/llprimitive/llmodel.cpp | 0 indra/llprimitive/llmodel.h | 0 indra/llprimitive/llprimitive.cpp | 0 indra/llprimitive/llprimitive.h | 0 indra/llprimitive/llprimlinkinfo.h | 0 indra/llprimitive/llprimtexturelist.cpp | 0 indra/llprimitive/llprimtexturelist.h | 0 indra/llprimitive/lltextureanim.cpp | 0 indra/llprimitive/lltextureanim.h | 0 indra/llprimitive/lltextureentry.cpp | 0 indra/llprimitive/lltextureentry.h | 0 indra/llprimitive/lltree_common.h | 0 indra/llprimitive/lltreeparams.cpp | 0 indra/llprimitive/lltreeparams.h | 0 indra/llprimitive/llvolumemessage.cpp | 0 indra/llprimitive/llvolumemessage.h | 0 indra/llprimitive/llvolumexml.cpp | 0 indra/llprimitive/llvolumexml.h | 0 indra/llprimitive/material_codes.cpp | 0 indra/llprimitive/material_codes.h | 0 indra/llprimitive/object_flags.h | 0 indra/llprimitive/tests/llmediaentry_test.cpp | 0 indra/llprimitive/tests/llmessagesystem_stub.cpp | 0 indra/llprimitive/tests/llprimitive_test.cpp | 0 indra/llrender/CMakeLists.txt | 0 indra/llrender/llcubemap.cpp | 0 indra/llrender/llcubemap.h | 0 indra/llrender/llfontbitmapcache.cpp | 0 indra/llrender/llfontbitmapcache.h | 0 indra/llrender/llfontfreetype.cpp | 0 indra/llrender/llfontfreetype.h | 0 indra/llrender/llfontgl.cpp | 0 indra/llrender/llfontgl.h | 0 indra/llrender/llfontregistry.cpp | 0 indra/llrender/llfontregistry.h | 0 indra/llrender/llgl.cpp | 0 indra/llrender/llgl.h | 0 indra/llrender/llgldbg.cpp | 0 indra/llrender/llgldbg.h | 0 indra/llrender/llglheaders.h | 0 indra/llrender/llglslshader.cpp | 0 indra/llrender/llglslshader.h | 0 indra/llrender/llglstates.h | 0 indra/llrender/llgltypes.h | 0 indra/llrender/llimagegl.cpp | 0 indra/llrender/llimagegl.h | 0 indra/llrender/llpostprocess.cpp | 0 indra/llrender/llpostprocess.h | 0 indra/llrender/llrender.cpp | 0 indra/llrender/llrender.h | 0 indra/llrender/llrendersphere.cpp | 0 indra/llrender/llrendersphere.h | 0 indra/llrender/llrendertarget.cpp | 0 indra/llrender/llrendertarget.h | 0 indra/llrender/llshadermgr.cpp | 0 indra/llrender/llshadermgr.h | 0 indra/llrender/lltexture.cpp | 0 indra/llrender/lltexture.h | 0 indra/llrender/llvertexbuffer.cpp | 0 indra/llrender/llvertexbuffer.h | 0 indra/llui/CMakeLists.txt | 0 indra/llui/llaccordionctrl.cpp | 0 indra/llui/llaccordionctrl.h | 0 indra/llui/llaccordionctrltab.cpp | 0 indra/llui/llaccordionctrltab.h | 0 indra/llui/llbutton.cpp | 0 indra/llui/llbutton.h | 0 indra/llui/llcallbackmap.h | 0 indra/llui/llcheckboxctrl.cpp | 0 indra/llui/llcheckboxctrl.h | 0 indra/llui/llclipboard.cpp | 0 indra/llui/llclipboard.h | 0 indra/llui/llcombobox.cpp | 0 indra/llui/llcombobox.h | 0 indra/llui/llconsole.cpp | 0 indra/llui/llconsole.h | 0 indra/llui/llcontainerview.cpp | 0 indra/llui/llcontainerview.h | 0 indra/llui/llctrlselectioninterface.cpp | 0 indra/llui/llctrlselectioninterface.h | 0 indra/llui/lldockablefloater.cpp | 0 indra/llui/lldockablefloater.h | 0 indra/llui/lldockcontrol.cpp | 0 indra/llui/lldockcontrol.h | 0 indra/llui/lldraghandle.cpp | 0 indra/llui/lldraghandle.h | 0 indra/llui/lleditmenuhandler.cpp | 0 indra/llui/lleditmenuhandler.h | 0 indra/llui/llf32uictrl.cpp | 0 indra/llui/llf32uictrl.h | 0 indra/llui/llfiltereditor.cpp | 0 indra/llui/llfiltereditor.h | 0 indra/llui/llflatlistview.cpp | 0 indra/llui/llflatlistview.h | 0 indra/llui/llfloater.cpp | 0 indra/llui/llfloater.h | 0 indra/llui/llfloaterreg.cpp | 0 indra/llui/llfloaterreg.h | 0 indra/llui/llfloaterreglistener.cpp | 0 indra/llui/llfloaterreglistener.h | 0 indra/llui/llflyoutbutton.cpp | 0 indra/llui/llflyoutbutton.h | 0 indra/llui/llfocusmgr.cpp | 0 indra/llui/llfocusmgr.h | 0 indra/llui/llfunctorregistry.cpp | 0 indra/llui/llfunctorregistry.h | 0 indra/llui/llhandle.h | 0 indra/llui/llhelp.h | 0 indra/llui/lliconctrl.cpp | 0 indra/llui/lliconctrl.h | 0 indra/llui/llkeywords.cpp | 0 indra/llui/llkeywords.h | 0 indra/llui/lllayoutstack.cpp | 0 indra/llui/lllayoutstack.h | 0 indra/llui/lllazyvalue.h | 0 indra/llui/lllineeditor.cpp | 0 indra/llui/lllineeditor.h | 0 indra/llui/llloadingindicator.cpp | 0 indra/llui/llloadingindicator.h | 0 indra/llui/lllocalcliprect.cpp | 0 indra/llui/lllocalcliprect.h | 0 indra/llui/llmenubutton.cpp | 0 indra/llui/llmenubutton.h | 0 indra/llui/llmenugl.cpp | 0 indra/llui/llmenugl.h | 0 indra/llui/llmodaldialog.cpp | 0 indra/llui/llmodaldialog.h | 0 indra/llui/llmultifloater.cpp | 0 indra/llui/llmultifloater.h | 0 indra/llui/llmultislider.cpp | 0 indra/llui/llmultislider.h | 0 indra/llui/llmultisliderctrl.cpp | 0 indra/llui/llmultisliderctrl.h | 0 indra/llui/llnotificationptr.h | 0 indra/llui/llnotifications.cpp | 0 indra/llui/llnotifications.h | 0 indra/llui/llnotificationslistener.cpp | 0 indra/llui/llnotificationslistener.h | 0 indra/llui/llnotificationsutil.cpp | 0 indra/llui/llnotificationsutil.h | 0 indra/llui/llpanel.cpp | 0 indra/llui/llpanel.h | 0 indra/llui/llprogressbar.cpp | 0 indra/llui/llprogressbar.h | 0 indra/llui/llradiogroup.cpp | 0 indra/llui/llradiogroup.h | 0 indra/llui/llresizebar.cpp | 0 indra/llui/llresizebar.h | 0 indra/llui/llresizehandle.cpp | 0 indra/llui/llresizehandle.h | 0 indra/llui/llresmgr.cpp | 0 indra/llui/llresmgr.h | 0 indra/llui/llrngwriter.cpp | 0 indra/llui/llrngwriter.h | 0 indra/llui/llscrollbar.cpp | 0 indra/llui/llscrollbar.h | 0 indra/llui/llscrollcontainer.cpp | 0 indra/llui/llscrollcontainer.h | 0 indra/llui/llscrollingpanellist.cpp | 0 indra/llui/llscrollingpanellist.h | 0 indra/llui/llscrolllistcell.cpp | 0 indra/llui/llscrolllistcell.h | 0 indra/llui/llscrolllistcolumn.cpp | 0 indra/llui/llscrolllistcolumn.h | 0 indra/llui/llscrolllistctrl.cpp | 0 indra/llui/llscrolllistctrl.h | 0 indra/llui/llscrolllistitem.cpp | 0 indra/llui/llscrolllistitem.h | 0 indra/llui/llsdparam.cpp | 0 indra/llui/llsdparam.h | 0 indra/llui/llsearcheditor.cpp | 0 indra/llui/llsearcheditor.h | 0 indra/llui/llslider.cpp | 0 indra/llui/llslider.h | 0 indra/llui/llsliderctrl.cpp | 0 indra/llui/llsliderctrl.h | 0 indra/llui/llspinctrl.cpp | 0 indra/llui/llspinctrl.h | 0 indra/llui/llstatbar.cpp | 0 indra/llui/llstatbar.h | 0 indra/llui/llstatgraph.cpp | 0 indra/llui/llstatgraph.h | 0 indra/llui/llstatview.cpp | 0 indra/llui/llstatview.h | 0 indra/llui/llstyle.cpp | 0 indra/llui/llstyle.h | 0 indra/llui/lltabcontainer.cpp | 0 indra/llui/lltabcontainer.h | 0 indra/llui/lltextbase.cpp | 0 indra/llui/lltextbase.h | 0 indra/llui/lltextbox.cpp | 0 indra/llui/lltextbox.h | 0 indra/llui/lltexteditor.cpp | 0 indra/llui/lltexteditor.h | 0 indra/llui/lltextparser.cpp | 0 indra/llui/lltextparser.h | 0 indra/llui/lltextutil.cpp | 0 indra/llui/lltextutil.h | 0 indra/llui/lltextvalidate.cpp | 0 indra/llui/lltextvalidate.h | 0 indra/llui/lltoggleablemenu.cpp | 0 indra/llui/lltoggleablemenu.h | 0 indra/llui/lltooltip.cpp | 0 indra/llui/lltooltip.h | 0 indra/llui/lltransutil.cpp | 0 indra/llui/lltransutil.h | 0 indra/llui/llui.cpp | 0 indra/llui/llui.h | 0 indra/llui/lluicolortable.cpp | 0 indra/llui/lluicolortable.h | 0 indra/llui/lluiconstants.h | 0 indra/llui/lluictrl.cpp | 0 indra/llui/lluictrl.h | 0 indra/llui/lluictrlfactory.cpp | 0 indra/llui/lluictrlfactory.h | 0 indra/llui/lluifwd.h | 0 indra/llui/lluiimage.cpp | 0 indra/llui/lluiimage.h | 0 indra/llui/lluistring.cpp | 0 indra/llui/lluistring.h | 0 indra/llui/llundo.cpp | 0 indra/llui/llundo.h | 0 indra/llui/llurlaction.cpp | 0 indra/llui/llurlaction.h | 0 indra/llui/llurlentry.cpp | 0 indra/llui/llurlentry.h | 0 indra/llui/llurlmatch.cpp | 0 indra/llui/llurlmatch.h | 0 indra/llui/llurlregistry.cpp | 0 indra/llui/llurlregistry.h | 0 indra/llui/llview.cpp | 0 indra/llui/llview.h | 0 indra/llui/llviewborder.cpp | 0 indra/llui/llviewborder.h | 0 indra/llui/llviewmodel.cpp | 0 indra/llui/llviewmodel.h | 0 indra/llui/llviewquery.cpp | 0 indra/llui/llviewquery.h | 0 indra/llui/tests/llurlentry_stub.cpp | 0 indra/llui/tests/llurlentry_test.cpp | 0 indra/llui/tests/llurlmatch_test.cpp | 0 indra/llvfs/CMakeLists.txt | 0 indra/llvfs/lldir.cpp | 0 indra/llvfs/lldir.h | 0 indra/llvfs/lldir_linux.cpp | 0 indra/llvfs/lldir_linux.h | 0 indra/llvfs/lldir_mac.cpp | 0 indra/llvfs/lldir_mac.h | 0 indra/llvfs/lldir_solaris.cpp | 0 indra/llvfs/lldir_solaris.h | 0 indra/llvfs/lldir_win32.cpp | 0 indra/llvfs/lldir_win32.h | 0 indra/llvfs/lldirguard.h | 0 indra/llvfs/lllfsthread.cpp | 0 indra/llvfs/lllfsthread.h | 0 indra/llvfs/llpidlock.cpp | 0 indra/llvfs/llpidlock.h | 0 indra/llvfs/llvfile.cpp | 0 indra/llvfs/llvfile.h | 0 indra/llvfs/llvfs.cpp | 0 indra/llvfs/llvfs.h | 0 indra/llvfs/llvfsthread.cpp | 0 indra/llvfs/llvfsthread.h | 0 indra/llvfs/tests/lldir_test.cpp | 0 indra/llwindow/CMakeLists.txt | 0 indra/llwindow/GL/glh_extensions.h | 0 indra/llwindow/GL/glh_genext.h | 0 indra/llwindow/lldragdropwin32.cpp | 0 indra/llwindow/lldragdropwin32.h | 0 indra/llwindow/lldxhardware.cpp | 0 indra/llwindow/lldxhardware.h | 0 indra/llwindow/llkeyboard.cpp | 0 indra/llwindow/llkeyboard.h | 0 indra/llwindow/llkeyboardmacosx.cpp | 0 indra/llwindow/llkeyboardmacosx.h | 0 indra/llwindow/llkeyboardsdl.cpp | 0 indra/llwindow/llkeyboardsdl.h | 0 indra/llwindow/llkeyboardwin32.cpp | 0 indra/llwindow/llkeyboardwin32.h | 0 indra/llwindow/llmousehandler.cpp | 0 indra/llwindow/llmousehandler.h | 0 indra/llwindow/llpreeditor.h | 0 indra/llwindow/llwindow.cpp | 0 indra/llwindow/llwindow.h | 0 indra/llwindow/llwindowcallbacks.cpp | 0 indra/llwindow/llwindowcallbacks.h | 0 indra/llwindow/llwindowheadless.cpp | 0 indra/llwindow/llwindowheadless.h | 0 indra/llwindow/llwindowmacosx-objc.h | 0 indra/llwindow/llwindowmacosx-objc.mm | 0 indra/llwindow/llwindowmacosx.cpp | 0 indra/llwindow/llwindowmacosx.h | 0 indra/llwindow/llwindowmesaheadless.cpp | 0 indra/llwindow/llwindowmesaheadless.h | 0 indra/llwindow/llwindowsdl.cpp | 0 indra/llwindow/llwindowsdl.h | 0 indra/llwindow/llwindowwin32.cpp | 0 indra/llwindow/llwindowwin32.h | 0 indra/llxml/CMakeLists.txt | 0 indra/llxml/llcontrol.cpp | 0 indra/llxml/llcontrol.h | 0 indra/llxml/llcontrolgroupreader.h | 0 indra/llxml/llxmlnode.cpp | 0 indra/llxml/llxmlnode.h | 0 indra/llxml/llxmlparser.cpp | 0 indra/llxml/llxmlparser.h | 0 indra/llxml/llxmltree.cpp | 0 indra/llxml/llxmltree.h | 0 indra/llxml/tests/llcontrol_test.cpp | 0 indra/llxuixml/CMakeLists.txt | 0 indra/llxuixml/llinitparam.cpp | 0 indra/llxuixml/llinitparam.h | 0 indra/llxuixml/llregistry.h | 0 indra/llxuixml/lltrans.cpp | 0 indra/llxuixml/lltrans.h | 0 indra/llxuixml/lluicolor.cpp | 0 indra/llxuixml/lluicolor.h | 0 indra/llxuixml/llxuiparser.cpp | 0 indra/llxuixml/llxuiparser.h | 0 indra/lscript/CMakeLists.txt | 0 indra/lscript/llscriptresource.h | 0 indra/lscript/llscriptresourceconsumer.h | 0 indra/lscript/llscriptresourcepool.h | 0 indra/lscript/lscript_alloc.h | 0 indra/lscript/lscript_byteconvert.h | 0 indra/lscript/lscript_byteformat.h | 0 indra/lscript/lscript_compile/CMakeLists.txt | 0 indra/lscript/lscript_compile/indra.l | 0 indra/lscript/lscript_compile/indra.y | 0 indra/lscript/lscript_compile/lscript_alloc.cpp | 0 indra/lscript/lscript_compile/lscript_bytecode.cpp | 0 indra/lscript/lscript_compile/lscript_bytecode.h | 0 indra/lscript/lscript_compile/lscript_error.cpp | 0 indra/lscript/lscript_compile/lscript_error.h | 0 indra/lscript/lscript_compile/lscript_heap.cpp | 0 indra/lscript/lscript_compile/lscript_heap.h | 0 indra/lscript/lscript_compile/lscript_resource.cpp | 0 indra/lscript/lscript_compile/lscript_resource.h | 0 indra/lscript/lscript_compile/lscript_scope.cpp | 0 indra/lscript/lscript_compile/lscript_scope.h | 0 indra/lscript/lscript_compile/lscript_tree.cpp | 0 indra/lscript/lscript_compile/lscript_tree.h | 0 indra/lscript/lscript_compile/lscript_typecheck.cpp | 0 indra/lscript/lscript_compile/lscript_typecheck.h | 0 indra/lscript/lscript_compile/windows/unistd.h | 0 indra/lscript/lscript_execute.h | 0 indra/lscript/lscript_execute/CMakeLists.txt | 0 indra/lscript/lscript_execute/llscriptresource.cpp | 0 indra/lscript/lscript_execute/llscriptresourceconsumer.cpp | 0 indra/lscript/lscript_execute/llscriptresourcepool.cpp | 0 indra/lscript/lscript_execute/lscript_execute.cpp | 0 indra/lscript/lscript_execute/lscript_heapruntime.cpp | 0 indra/lscript/lscript_execute/lscript_heapruntime.h | 0 indra/lscript/lscript_execute/lscript_readlso.cpp | 0 indra/lscript/lscript_execute/lscript_readlso.h | 0 indra/lscript/lscript_export.h | 0 indra/lscript/lscript_http.h | 0 indra/lscript/lscript_library.h | 0 indra/lscript/lscript_library/CMakeLists.txt | 0 indra/lscript/lscript_library/lscript_alloc.cpp | 0 indra/lscript/lscript_library/lscript_export.cpp | 0 indra/lscript/lscript_library/lscript_library.cpp | 0 indra/lscript/lscript_rt_interface.h | 0 indra/mac_crash_logger/CMakeLists.txt | 0 indra/mac_crash_logger/CrashReporter.nib/classes.nib | 0 indra/mac_crash_logger/CrashReporter.nib/info.nib | 0 indra/mac_crash_logger/CrashReporter.nib/objects.xib | 0 indra/mac_crash_logger/Info.plist | 0 indra/mac_crash_logger/llcrashloggermac.cpp | 0 indra/mac_crash_logger/llcrashloggermac.h | 0 indra/mac_crash_logger/mac_crash_logger.cpp | 0 indra/mac_updater/AutoUpdater.nib/classes.nib | 0 indra/mac_updater/AutoUpdater.nib/info.nib | 0 indra/mac_updater/AutoUpdater.nib/objects.xib | 0 indra/mac_updater/CMakeLists.txt | 0 indra/mac_updater/Info.plist | 0 indra/mac_updater/mac_updater.cpp | 0 indra/media_plugins/CMakeLists.txt | 0 indra/media_plugins/base/CMakeLists.txt | 0 indra/media_plugins/base/media_plugin_base.cpp | 0 indra/media_plugins/base/media_plugin_base.exp | 0 indra/media_plugins/base/media_plugin_base.h | 0 indra/media_plugins/example/CMakeLists.txt | 0 indra/media_plugins/example/media_plugin_example.cpp | 0 indra/media_plugins/gstreamer010/CMakeLists.txt | 0 indra/media_plugins/gstreamer010/llmediaimplgstreamer.h | 0 .../gstreamer010/llmediaimplgstreamer_syms.cpp | 0 .../media_plugins/gstreamer010/llmediaimplgstreamer_syms.h | 0 .../gstreamer010/llmediaimplgstreamer_syms_raw.inc | 0 .../gstreamer010/llmediaimplgstreamer_syms_rawv.inc | 0 .../gstreamer010/llmediaimplgstreamertriviallogging.h | 0 .../gstreamer010/llmediaimplgstreamervidplug.cpp | 0 .../gstreamer010/llmediaimplgstreamervidplug.h | 0 .../gstreamer010/media_plugin_gstreamer010.cpp | 0 indra/media_plugins/quicktime/CMakeLists.txt | 0 indra/media_plugins/quicktime/media_plugin_quicktime.cpp | 0 indra/media_plugins/webkit/CMakeLists.txt | 0 indra/media_plugins/webkit/dummy_volume_catcher.cpp | 0 indra/media_plugins/webkit/linux_volume_catcher.cpp | 0 indra/media_plugins/webkit/linux_volume_catcher_pa_syms.inc | 0 .../webkit/linux_volume_catcher_paglib_syms.inc | 0 indra/media_plugins/webkit/mac_volume_catcher.cpp | 0 indra/media_plugins/webkit/media_plugin_webkit.cpp | 0 indra/media_plugins/webkit/volume_catcher.h | 0 indra/media_plugins/webkit/windows_volume_catcher.cpp | 0 indra/media_plugins/winmmshim/CMakeLists.txt | 0 indra/media_plugins/winmmshim/forwarding_api.cpp | 0 indra/media_plugins/winmmshim/forwarding_api.h | 0 indra/media_plugins/winmmshim/winmm.def | 0 indra/media_plugins/winmmshim/winmm_shim.cpp | 0 indra/newview/CMakeLists.txt | 0 indra/newview/English.lproj/InfoPlist.strings | 0 indra/newview/English.lproj/language.txt | 0 indra/newview/German.lproj/language.txt | 0 indra/newview/Info-SecondLife.plist | 0 indra/newview/Info-SecondLifeVorbis.plist | 0 indra/newview/Japanese.lproj/language.txt | 0 indra/newview/Korean.lproj/language.txt | 0 indra/newview/SecondLife.nib/classes.nib | 0 indra/newview/SecondLife.nib/info.nib | 0 indra/newview/SecondLife.nib/objects.xib | 0 indra/newview/VertexCache.h | 0 indra/newview/ViewerInstall.cmake | 0 indra/newview/VorbisFramework.h | 0 indra/newview/app_settings/CA.pem | 0 indra/newview/app_settings/anim.ini | 0 indra/newview/app_settings/cmd_line.xml | 0 indra/newview/app_settings/foldertypes.xml | 0 indra/newview/app_settings/grass.xml | 0 indra/newview/app_settings/high_graphics.xml | 0 indra/newview/app_settings/ignorable_dialogs.xml | 0 indra/newview/app_settings/keys.ini | 0 indra/newview/app_settings/keywords.ini | 0 indra/newview/app_settings/logcontrol.xml | 0 indra/newview/app_settings/low_graphics.xml | 0 indra/newview/app_settings/mid_graphics.xml | 0 indra/newview/app_settings/settings.xml | 0 indra/newview/app_settings/settings_crash_behavior.xml | 0 indra/newview/app_settings/settings_files.xml | 0 indra/newview/app_settings/settings_per_account.xml | 0 .../newview/app_settings/shaders/class1/avatar/avatarF.glsl | 0 .../app_settings/shaders/class1/avatar/avatarSkinV.glsl | 0 .../newview/app_settings/shaders/class1/avatar/avatarV.glsl | 0 .../app_settings/shaders/class1/avatar/eyeballF.glsl | 0 .../app_settings/shaders/class1/avatar/eyeballV.glsl | 0 .../app_settings/shaders/class1/avatar/objectSkinV.glsl | 0 .../app_settings/shaders/class1/avatar/pickAvatarF.glsl | 0 .../app_settings/shaders/class1/avatar/pickAvatarV.glsl | 0 .../app_settings/shaders/class1/deferred/alphaF.glsl | 0 .../app_settings/shaders/class1/deferred/alphaSkinnedV.glsl | 0 .../app_settings/shaders/class1/deferred/alphaV.glsl | 0 .../shaders/class1/deferred/attachmentShadowF.glsl | 0 .../shaders/class1/deferred/attachmentShadowV.glsl | 0 .../app_settings/shaders/class1/deferred/avatarAlphaF.glsl | 0 .../app_settings/shaders/class1/deferred/avatarAlphaV.glsl | 0 .../app_settings/shaders/class1/deferred/avatarF.glsl | 0 .../app_settings/shaders/class1/deferred/avatarShadowF.glsl | 0 .../app_settings/shaders/class1/deferred/avatarShadowV.glsl | 0 .../app_settings/shaders/class1/deferred/avatarV.glsl | 0 .../app_settings/shaders/class1/deferred/blurLightF.glsl | 0 .../app_settings/shaders/class1/deferred/blurLightV.glsl | 0 .../newview/app_settings/shaders/class1/deferred/bumpF.glsl | 0 .../app_settings/shaders/class1/deferred/bumpSkinnedV.glsl | 0 .../newview/app_settings/shaders/class1/deferred/bumpV.glsl | 0 .../app_settings/shaders/class1/deferred/diffuseF.glsl | 0 .../shaders/class1/deferred/diffuseSkinnedV.glsl | 0 .../app_settings/shaders/class1/deferred/diffuseV.glsl | 0 .../app_settings/shaders/class1/deferred/fullbrightF.glsl | 0 .../app_settings/shaders/class1/deferred/fullbrightV.glsl | 0 indra/newview/app_settings/shaders/class1/deferred/giF.glsl | 0 indra/newview/app_settings/shaders/class1/deferred/giV.glsl | 0 .../app_settings/shaders/class1/deferred/impostorF.glsl | 0 .../app_settings/shaders/class1/deferred/impostorV.glsl | 0 .../app_settings/shaders/class1/deferred/luminanceF.glsl | 0 .../app_settings/shaders/class1/deferred/luminanceV.glsl | 0 .../shaders/class1/deferred/multiPointLightF.glsl | 0 .../shaders/class1/deferred/multiSpotLightF.glsl | 0 .../app_settings/shaders/class1/deferred/pointLightF.glsl | 0 .../app_settings/shaders/class1/deferred/pointLightV.glsl | 0 .../app_settings/shaders/class1/deferred/postDeferredF.glsl | 0 .../app_settings/shaders/class1/deferred/postDeferredV.glsl | 0 .../app_settings/shaders/class1/deferred/postgiF.glsl | 0 .../app_settings/shaders/class1/deferred/postgiV.glsl | 0 .../app_settings/shaders/class1/deferred/shadowF.glsl | 0 .../app_settings/shaders/class1/deferred/shadowV.glsl | 0 .../app_settings/shaders/class1/deferred/softenLightF.glsl | 0 .../app_settings/shaders/class1/deferred/softenLightV.glsl | 0 .../app_settings/shaders/class1/deferred/spotLightF.glsl | 0 .../app_settings/shaders/class1/deferred/sunLightF.glsl | 0 .../app_settings/shaders/class1/deferred/sunLightSSAOF.glsl | 0 .../app_settings/shaders/class1/deferred/sunLightV.glsl | 0 .../app_settings/shaders/class1/deferred/terrainF.glsl | 0 .../app_settings/shaders/class1/deferred/terrainV.glsl | 0 .../newview/app_settings/shaders/class1/deferred/treeF.glsl | 0 .../newview/app_settings/shaders/class1/deferred/treeV.glsl | 0 .../app_settings/shaders/class1/deferred/waterF.glsl | 0 .../app_settings/shaders/class1/deferred/waterV.glsl | 0 .../app_settings/shaders/class1/effects/glowExtractF.glsl | 0 .../app_settings/shaders/class1/effects/glowExtractV.glsl | 0 .../newview/app_settings/shaders/class1/effects/glowF.glsl | 0 .../newview/app_settings/shaders/class1/effects/glowV.glsl | 0 .../app_settings/shaders/class1/environment/terrainF.glsl | 0 .../app_settings/shaders/class1/environment/terrainV.glsl | 0 .../shaders/class1/environment/terrainWaterF.glsl | 0 .../shaders/class1/environment/underWaterF.glsl | 0 .../app_settings/shaders/class1/environment/waterF.glsl | 0 .../app_settings/shaders/class1/environment/waterFogF.glsl | 0 .../app_settings/shaders/class1/environment/waterV.glsl | 0 .../app_settings/shaders/class1/interface/highlightF.glsl | 0 .../app_settings/shaders/class1/interface/highlightV.glsl | 0 .../app_settings/shaders/class1/lighting/lightF.glsl | 0 .../shaders/class1/lighting/lightFullbrightF.glsl | 0 .../shaders/class1/lighting/lightFullbrightShinyF.glsl | 0 .../shaders/class1/lighting/lightFullbrightShinyWaterF.glsl | 0 .../shaders/class1/lighting/lightFullbrightWaterF.glsl | 0 .../shaders/class1/lighting/lightFuncSpecularV.glsl | 0 .../app_settings/shaders/class1/lighting/lightFuncV.glsl | 0 .../app_settings/shaders/class1/lighting/lightShinyF.glsl | 0 .../shaders/class1/lighting/lightShinyWaterF.glsl | 0 .../shaders/class1/lighting/lightSpecularV.glsl | 0 .../app_settings/shaders/class1/lighting/lightV.glsl | 0 .../app_settings/shaders/class1/lighting/lightWaterF.glsl | 0 .../shaders/class1/lighting/sumLightsSpecularV.glsl | 0 .../app_settings/shaders/class1/lighting/sumLightsV.glsl | 0 .../app_settings/shaders/class1/objects/fullbrightF.glsl | 0 .../shaders/class1/objects/fullbrightShinyF.glsl | 0 .../shaders/class1/objects/fullbrightShinySkinnedV.glsl | 0 .../shaders/class1/objects/fullbrightShinyV.glsl | 0 .../shaders/class1/objects/fullbrightShinyWaterF.glsl | 0 .../shaders/class1/objects/fullbrightSkinnedV.glsl | 0 .../app_settings/shaders/class1/objects/fullbrightV.glsl | 0 .../shaders/class1/objects/fullbrightWaterF.glsl | 0 .../newview/app_settings/shaders/class1/objects/shinyF.glsl | 0 .../shaders/class1/objects/shinySimpleSkinnedV.glsl | 0 .../newview/app_settings/shaders/class1/objects/shinyV.glsl | 0 .../app_settings/shaders/class1/objects/shinyWaterF.glsl | 0 .../app_settings/shaders/class1/objects/simpleF.glsl | 0 .../app_settings/shaders/class1/objects/simpleSkinnedV.glsl | 0 .../app_settings/shaders/class1/objects/simpleV.glsl | 0 .../app_settings/shaders/class1/objects/simpleWaterF.glsl | 0 .../shaders/class1/windlight/atmosphericsF.glsl | 0 .../shaders/class1/windlight/atmosphericsHelpersV.glsl | 0 .../shaders/class1/windlight/atmosphericsV.glsl | 0 .../shaders/class1/windlight/atmosphericsVarsF.glsl | 0 .../shaders/class1/windlight/atmosphericsVarsV.glsl | 0 .../app_settings/shaders/class1/windlight/gammaF.glsl | 0 .../app_settings/shaders/class1/windlight/transportF.glsl | 0 .../app_settings/shaders/class2/avatar/eyeballV.glsl | 0 .../app_settings/shaders/class2/deferred/alphaF.glsl | 0 .../app_settings/shaders/class2/deferred/alphaSkinnedV.glsl | 0 .../app_settings/shaders/class2/deferred/alphaV.glsl | 0 .../app_settings/shaders/class2/deferred/avatarAlphaF.glsl | 0 .../app_settings/shaders/class2/deferred/avatarAlphaV.glsl | 0 .../app_settings/shaders/class2/deferred/blurLightF.glsl | 0 .../app_settings/shaders/class2/deferred/blurLightV.glsl | 0 .../newview/app_settings/shaders/class2/deferred/edgeF.glsl | 0 .../newview/app_settings/shaders/class2/deferred/edgeV.glsl | 0 .../shaders/class2/deferred/multiSpotLightF.glsl | 0 .../app_settings/shaders/class2/deferred/postDeferredF.glsl | 0 .../app_settings/shaders/class2/deferred/postDeferredV.glsl | 0 .../app_settings/shaders/class2/deferred/softenLightF.glsl | 0 .../app_settings/shaders/class2/deferred/softenLightV.glsl | 0 .../app_settings/shaders/class2/deferred/spotLightF.glsl | 0 .../app_settings/shaders/class2/deferred/sunLightF.glsl | 0 .../app_settings/shaders/class2/deferred/sunLightSSAOF.glsl | 0 .../app_settings/shaders/class2/deferred/sunLightV.glsl | 0 .../newview/app_settings/shaders/class2/effects/blurF.glsl | 0 .../newview/app_settings/shaders/class2/effects/blurV.glsl | 0 .../app_settings/shaders/class2/effects/colorFilterF.glsl | 0 .../app_settings/shaders/class2/effects/drawQuadV.glsl | 0 .../app_settings/shaders/class2/effects/extractF.glsl | 0 .../app_settings/shaders/class2/effects/nightVisionF.glsl | 0 .../app_settings/shaders/class2/effects/simpleF.glsl | 0 .../app_settings/shaders/class2/environment/terrainF.glsl | 0 .../app_settings/shaders/class2/environment/terrainV.glsl | 0 .../shaders/class2/environment/terrainWaterF.glsl | 0 .../shaders/class2/environment/underWaterF.glsl | 0 .../app_settings/shaders/class2/environment/waterF.glsl | 0 .../app_settings/shaders/class2/environment/waterFogF.glsl | 0 .../app_settings/shaders/class2/lighting/lightF.glsl | 0 .../shaders/class2/lighting/lightFullbrightF.glsl | 0 .../shaders/class2/lighting/lightFullbrightShinyF.glsl | 0 .../shaders/class2/lighting/lightFullbrightShinyWaterF.glsl | 0 .../shaders/class2/lighting/lightFullbrightWaterF.glsl | 0 .../app_settings/shaders/class2/lighting/lightShinyF.glsl | 0 .../shaders/class2/lighting/lightShinyWaterF.glsl | 0 .../shaders/class2/lighting/lightSpecularV.glsl | 0 .../app_settings/shaders/class2/lighting/lightV.glsl | 0 .../app_settings/shaders/class2/lighting/lightWaterF.glsl | 0 .../shaders/class2/lighting/sumLightsSpecularV.glsl | 0 .../app_settings/shaders/class2/lighting/sumLightsV.glsl | 0 .../newview/app_settings/shaders/class2/objects/shinyV.glsl | 0 .../shaders/class2/windlight/atmosphericsF.glsl | 0 .../shaders/class2/windlight/atmosphericsHelpersV.glsl | 0 .../shaders/class2/windlight/atmosphericsV.glsl | 0 .../shaders/class2/windlight/atmosphericsVarsF.glsl | 0 .../shaders/class2/windlight/atmosphericsVarsV.glsl | 0 .../app_settings/shaders/class2/windlight/cloudsF.glsl | 0 .../app_settings/shaders/class2/windlight/cloudsV.glsl | 0 .../app_settings/shaders/class2/windlight/gammaF.glsl | 0 .../newview/app_settings/shaders/class2/windlight/skyF.glsl | 0 .../newview/app_settings/shaders/class2/windlight/skyV.glsl | 0 .../app_settings/shaders/class2/windlight/transportF.glsl | 0 .../newview/app_settings/shaders/class3/avatar/avatarV.glsl | 0 .../app_settings/shaders/class3/deferred/giDownsampleF.glsl | 0 .../app_settings/shaders/class3/deferred/giDownsampleV.glsl | 0 indra/newview/app_settings/shaders/class3/deferred/giF.glsl | 0 .../app_settings/shaders/class3/deferred/giFinalF.glsl | 0 .../app_settings/shaders/class3/deferred/giFinalV.glsl | 0 indra/newview/app_settings/shaders/class3/deferred/giV.glsl | 0 .../app_settings/shaders/class3/deferred/luminanceF.glsl | 0 .../app_settings/shaders/class3/deferred/luminanceV.glsl | 0 .../app_settings/shaders/class3/deferred/postDeferredF.glsl | 0 .../app_settings/shaders/class3/deferred/postDeferredV.glsl | 0 .../app_settings/shaders/class3/deferred/postgiF.glsl | 0 .../app_settings/shaders/class3/deferred/postgiV.glsl | 0 .../app_settings/shaders/class3/deferred/softenLightF.glsl | 0 .../app_settings/shaders/class3/deferred/softenLightV.glsl | 0 .../newview/app_settings/shaders/class3/deferred/treeF.glsl | 0 .../shaders/class3/lighting/sumLightsSpecularV.glsl | 0 .../app_settings/shaders/class3/lighting/sumLightsV.glsl | 0 indra/newview/app_settings/shaders/shader_heirarchy.txt | 0 indra/newview/app_settings/static_data.db2 | Bin indra/newview/app_settings/static_index.db2 | Bin indra/newview/app_settings/std_bump.ini | 0 indra/newview/app_settings/trees.xml | 0 indra/newview/app_settings/ultra_graphics.xml | 0 indra/newview/app_settings/viewerart.xml | 0 indra/newview/app_settings/windlight/clouds2.tga | Bin indra/newview/app_settings/windlight/days/Default.xml | 0 indra/newview/app_settings/windlight/postprocesseffects.xml | 0 indra/newview/app_settings/windlight/skies/A%2D12AM.xml | 0 indra/newview/app_settings/windlight/skies/A%2D12PM.xml | 0 indra/newview/app_settings/windlight/skies/A%2D3AM.xml | 0 indra/newview/app_settings/windlight/skies/A%2D3PM.xml | 0 indra/newview/app_settings/windlight/skies/A%2D6AM.xml | 0 indra/newview/app_settings/windlight/skies/A%2D6PM.xml | 0 indra/newview/app_settings/windlight/skies/A%2D9AM.xml | 0 indra/newview/app_settings/windlight/skies/A%2D9PM.xml | 0 indra/newview/app_settings/windlight/skies/Barcelona.xml | 0 indra/newview/app_settings/windlight/skies/Blizzard.xml | 0 .../newview/app_settings/windlight/skies/Blue%20Midday.xml | 0 .../app_settings/windlight/skies/Coastal%20Afternoon.xml | 0 .../app_settings/windlight/skies/Coastal%20Sunset.xml | 0 indra/newview/app_settings/windlight/skies/Default.xml | 0 .../app_settings/windlight/skies/Desert%20Sunset.xml | 0 indra/newview/app_settings/windlight/skies/Fine%20Day.xml | 0 .../app_settings/windlight/skies/Fluffy%20Big%20Clouds.xml | 0 indra/newview/app_settings/windlight/skies/Foggy.xml | 0 .../app_settings/windlight/skies/Funky%20Funky%20Funky.xml | 0 .../newview/app_settings/windlight/skies/Funky%20Funky.xml | 0 indra/newview/app_settings/windlight/skies/Gelatto.xml | 0 indra/newview/app_settings/windlight/skies/Ghost.xml | 0 .../app_settings/windlight/skies/Incongruent%20Truths.xml | 0 indra/newview/app_settings/windlight/skies/Midday%201.xml | 0 indra/newview/app_settings/windlight/skies/Midday%202.xml | 0 indra/newview/app_settings/windlight/skies/Midday%203.xml | 0 indra/newview/app_settings/windlight/skies/Midday%204.xml | 0 indra/newview/app_settings/windlight/skies/Night.xml | 0 indra/newview/app_settings/windlight/skies/Pirate.xml | 0 indra/newview/app_settings/windlight/skies/Purple.xml | 0 .../app_settings/windlight/skies/Sailor%27s%20Delight.xml | 0 .../app_settings/windlight/skies/Sheer%20Surreality.xml | 0 indra/newview/app_settings/windlight/water/Default.xml | 0 indra/newview/app_settings/windlight/water/Glassy.xml | 0 indra/newview/app_settings/windlight/water/Murky.xml | 0 indra/newview/app_settings/windlight/water/Pond.xml | 0 .../newview/app_settings/windlight/water/SNAKE%21%21%21.xml | 0 .../app_settings/windlight/water/Second%20Plague.xml | 0 indra/newview/app_settings/windlight/water/Valdez.xml | 0 indra/newview/build_win32_appConfig.py | 0 indra/newview/character/attentions.xml | 0 indra/newview/character/attentionsN.xml | 0 indra/newview/character/avatar_eye.llm | Bin indra/newview/character/avatar_eye_1.llm | Bin indra/newview/character/avatar_eyelashes.llm | Bin indra/newview/character/avatar_hair.llm | Bin indra/newview/character/avatar_hair_1.llm | Bin indra/newview/character/avatar_hair_2.llm | Bin indra/newview/character/avatar_hair_3.llm | Bin indra/newview/character/avatar_hair_4.llm | Bin indra/newview/character/avatar_hair_5.llm | Bin indra/newview/character/avatar_head.llm | Bin indra/newview/character/avatar_head_1.llm | Bin indra/newview/character/avatar_head_2.llm | Bin indra/newview/character/avatar_head_3.llm | Bin indra/newview/character/avatar_head_4.llm | Bin indra/newview/character/avatar_lad.xml | 0 indra/newview/character/avatar_lower_body.llm | Bin indra/newview/character/avatar_lower_body_1.llm | Bin indra/newview/character/avatar_lower_body_2.llm | Bin indra/newview/character/avatar_lower_body_3.llm | Bin indra/newview/character/avatar_lower_body_4.llm | Bin indra/newview/character/avatar_skeleton.xml | 0 indra/newview/character/avatar_skirt.llm | Bin indra/newview/character/avatar_skirt_1.llm | Bin indra/newview/character/avatar_skirt_2.llm | Bin indra/newview/character/avatar_skirt_3.llm | Bin indra/newview/character/avatar_skirt_4.llm | Bin indra/newview/character/avatar_upper_body.llm | Bin indra/newview/character/avatar_upper_body_1.llm | Bin indra/newview/character/avatar_upper_body_2.llm | Bin indra/newview/character/avatar_upper_body_3.llm | Bin indra/newview/character/avatar_upper_body_4.llm | Bin indra/newview/character/blush_alpha.tga | Bin indra/newview/character/body_skingrain.tga | Bin indra/newview/character/bodyfreckles_alpha.tga | Bin indra/newview/character/bump_face_wrinkles.tga | Bin indra/newview/character/bump_head_base.tga | Bin indra/newview/character/bump_lowerbody_base.tga | Bin indra/newview/character/bump_pants_wrinkles.tga | Bin indra/newview/character/bump_shirt_wrinkles.tga | Bin indra/newview/character/bump_upperbody_base.tga | Bin indra/newview/character/checkerboard.tga | Bin indra/newview/character/eyebrows_alpha.tga | Bin indra/newview/character/eyeliner_alpha.tga | Bin indra/newview/character/eyeshadow_inner_alpha.tga | Bin indra/newview/character/eyeshadow_outer_alpha.tga | Bin indra/newview/character/eyewhite.tga | Bin indra/newview/character/facehair_chincurtains_alpha.tga | Bin indra/newview/character/facehair_moustache_alpha.tga | Bin indra/newview/character/facehair_sideburns_alpha.tga | Bin indra/newview/character/facehair_soulpatch_alpha.tga | Bin indra/newview/character/freckles_alpha.tga | Bin indra/newview/character/genepool.xml | 0 indra/newview/character/glove_length_alpha.tga | Bin indra/newview/character/gloves_fingers_alpha.tga | Bin indra/newview/character/head_alpha.tga | Bin indra/newview/character/head_color.tga | Bin indra/newview/character/head_hair.tga | Bin indra/newview/character/head_highlights_alpha.tga | Bin indra/newview/character/head_shading_alpha.tga | Bin indra/newview/character/head_skingrain.tga | Bin indra/newview/character/jacket_length_lower_alpha.tga | Bin indra/newview/character/jacket_length_upper_alpha.tga | Bin indra/newview/character/jacket_open_lower_alpha.tga | Bin indra/newview/character/jacket_open_upper_alpha.tga | Bin indra/newview/character/lipgloss_alpha.tga | Bin indra/newview/character/lips_mask.tga | Bin indra/newview/character/lipstick_alpha.tga | Bin indra/newview/character/lowerbody_color.tga | Bin indra/newview/character/lowerbody_highlights_alpha.tga | Bin indra/newview/character/lowerbody_shading_alpha.tga | Bin indra/newview/character/nailpolish_alpha.tga | Bin indra/newview/character/pants_length_alpha.tga | Bin indra/newview/character/pants_waist_alpha.tga | Bin indra/newview/character/rosyface_alpha.tga | Bin indra/newview/character/rouge_alpha.tga | Bin indra/newview/character/shirt_bottom_alpha.tga | Bin indra/newview/character/shirt_collar_alpha.tga | Bin indra/newview/character/shirt_collar_back_alpha.tga | Bin indra/newview/character/shirt_sleeve_alpha.tga | Bin indra/newview/character/shoe_height_alpha.tga | Bin indra/newview/character/skirt_length_alpha.tga | Bin indra/newview/character/skirt_slit_back_alpha.tga | Bin indra/newview/character/skirt_slit_front_alpha.tga | Bin indra/newview/character/skirt_slit_left_alpha.tga | Bin indra/newview/character/skirt_slit_right_alpha.tga | Bin indra/newview/character/underpants_trial_female.tga | Bin indra/newview/character/underpants_trial_male.tga | Bin indra/newview/character/undershirt_trial_female.tga | Bin indra/newview/character/upperbody_color.tga | Bin indra/newview/character/upperbody_highlights_alpha.tga | Bin indra/newview/character/upperbody_shading_alpha.tga | Bin indra/newview/character/upperbodyfreckles_alpha.tga | Bin indra/newview/cursors_mac/UI_CURSOR_ARROW.tif | Bin indra/newview/cursors_mac/UI_CURSOR_ARROWDRAG.tif | Bin indra/newview/cursors_mac/UI_CURSOR_ARROWLOCKED.tif | Bin indra/newview/cursors_mac/UI_CURSOR_GRABLOCKED.tif | Bin indra/newview/cursors_mac/UI_CURSOR_NO.tif | Bin indra/newview/cursors_mac/UI_CURSOR_NOLOCKED.tif | Bin indra/newview/cursors_mac/UI_CURSOR_SIZENESW.tif | Bin indra/newview/cursors_mac/UI_CURSOR_SIZENS.tif | Bin indra/newview/cursors_mac/UI_CURSOR_SIZENWSE.tif | Bin indra/newview/cursors_mac/UI_CURSOR_SIZEWE.tif | Bin indra/newview/cursors_mac/UI_CURSOR_TOOLBUY.tif | Bin indra/newview/cursors_mac/UI_CURSOR_TOOLCAMERA.tif | Bin indra/newview/cursors_mac/UI_CURSOR_TOOLCREATE.tif | Bin indra/newview/cursors_mac/UI_CURSOR_TOOLFOCUS.tif | Bin indra/newview/cursors_mac/UI_CURSOR_TOOLGRAB.tif | Bin indra/newview/cursors_mac/UI_CURSOR_TOOLLAND.tif | Bin indra/newview/cursors_mac/UI_CURSOR_TOOLMEDIAOPEN.tif | Bin indra/newview/cursors_mac/UI_CURSOR_TOOLOPEN.tif | Bin indra/newview/cursors_mac/UI_CURSOR_TOOLPAN.tif | Bin indra/newview/cursors_mac/UI_CURSOR_TOOLPAUSE.tif | Bin indra/newview/cursors_mac/UI_CURSOR_TOOLPICKOBJECT3.tif | Bin indra/newview/cursors_mac/UI_CURSOR_TOOLPLAY.tif | Bin indra/newview/cursors_mac/UI_CURSOR_TOOLROTATE.tif | Bin indra/newview/cursors_mac/UI_CURSOR_TOOLSCALE.tif | Bin indra/newview/cursors_mac/UI_CURSOR_TOOLSIT.tif | Bin indra/newview/cursors_mac/UI_CURSOR_TOOLTRANSLATE.tif | Bin indra/newview/cursors_mac/UI_CURSOR_TOOLZOOMIN.tif | Bin indra/newview/cursors_mac/UI_CURSOR_WORKING.tif | Bin indra/newview/da.lproj/language.txt | 0 indra/newview/es.lproj/language.txt | 0 indra/newview/featuretable.txt | 0 indra/newview/featuretable_linux.txt | 0 indra/newview/featuretable_mac.txt | 0 indra/newview/featuretable_solaris.txt | 0 indra/newview/fmod_hidden_symbols.exp | 0 indra/newview/fmodwrapper.cpp | 0 indra/newview/fonts/DejaVu-license.txt | 0 indra/newview/fonts/DejaVuSans-Bold.ttf | Bin indra/newview/fonts/DejaVuSans-BoldOblique.ttf | Bin indra/newview/fonts/DejaVuSans-Oblique.ttf | Bin indra/newview/fonts/DejaVuSans.ttf | Bin indra/newview/fonts/DejaVuSansMono.ttf | Bin indra/newview/fr.lproj/language.txt | 0 indra/newview/generate_breakpad_symbols.py | 0 indra/newview/gpu_table.txt | 0 indra/newview/hu.lproj/language.txt | 0 indra/newview/installers/darwin/dmg-cleanup.applescript | 0 .../installers/darwin/firstlook-dmg/Applications-alias.r | 0 indra/newview/installers/darwin/firstlook-dmg/_DS_Store | Bin .../installers/darwin/firstlook-dmg/_VolumeIcon.icns | Bin .../newview/installers/darwin/firstlook-dmg/background.jpg | Bin .../installers/darwin/fix_application_icon_position.sh | 0 .../darwin/publicnightly-dmg/Applications-alias.r | 0 indra/newview/installers/darwin/publicnightly-dmg/_DS_Store | Bin .../installers/darwin/publicnightly-dmg/_VolumeIcon.icns | Bin .../installers/darwin/publicnightly-dmg/background.jpg | Bin .../installers/darwin/release-dmg/Applications-alias.r | 0 indra/newview/installers/darwin/release-dmg/_DS_Store | Bin .../newview/installers/darwin/release-dmg/_VolumeIcon.icns | Bin indra/newview/installers/darwin/release-dmg/background.jpg | Bin .../darwin/releasecandidate-dmg/Applications-alias.r | 0 .../installers/darwin/releasecandidate-dmg/_DS_Store | Bin .../installers/darwin/releasecandidate-dmg/_VolumeIcon.icns | Bin .../installers/darwin/releasecandidate-dmg/background.jpg | Bin .../installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt | 0 indra/newview/installers/windows/install_icon.BMP | Bin indra/newview/installers/windows/install_icon.ico | Bin indra/newview/installers/windows/installer_template.nsi | 0 indra/newview/installers/windows/lang_da.nsi | Bin indra/newview/installers/windows/lang_de.nsi | Bin indra/newview/installers/windows/lang_en-us.nsi | Bin indra/newview/installers/windows/lang_es.nsi | Bin indra/newview/installers/windows/lang_fr.nsi | Bin indra/newview/installers/windows/lang_it.nsi | Bin indra/newview/installers/windows/lang_ja.nsi | Bin indra/newview/installers/windows/lang_ko.nsi | Bin indra/newview/installers/windows/lang_nl.nsi | Bin indra/newview/installers/windows/lang_pl.nsi | Bin indra/newview/installers/windows/lang_pt-br.nsi | Bin indra/newview/installers/windows/lang_zh.nsi | Bin indra/newview/installers/windows/language_menu.nsi | Bin indra/newview/installers/windows/uninstall_icon.BMP | Bin indra/newview/installers/windows/uninstall_icon.ico | Bin indra/newview/it.lproj/language.txt | 0 indra/newview/licenses-linux.txt | 0 indra/newview/licenses-mac.txt | 0 indra/newview/licenses-solaris.txt | 0 indra/newview/licenses-win32.txt | 0 indra/newview/linux_tools/client-readme-joystick.txt | 0 indra/newview/linux_tools/client-readme-voice.txt | 0 indra/newview/linux_tools/client-readme.txt | 0 indra/newview/llagent.cpp | 0 indra/newview/llagent.h | 0 indra/newview/llagentaccess.cpp | 0 indra/newview/llagentaccess.h | 0 indra/newview/llagentcamera.cpp | 0 indra/newview/llagentcamera.h | 0 indra/newview/llagentdata.cpp | 0 indra/newview/llagentdata.h | 0 indra/newview/llagentlanguage.cpp | 0 indra/newview/llagentlanguage.h | 0 indra/newview/llagentlistener.cpp | 0 indra/newview/llagentlistener.h | 0 indra/newview/llagentpicksinfo.cpp | 0 indra/newview/llagentpicksinfo.h | 0 indra/newview/llagentpilot.cpp | 0 indra/newview/llagentpilot.h | 0 indra/newview/llagentui.cpp | 0 indra/newview/llagentui.h | 0 indra/newview/llagentwearables.cpp | 0 indra/newview/llagentwearables.h | 0 indra/newview/llagentwearablesfetch.cpp | 0 indra/newview/llagentwearablesfetch.h | 0 indra/newview/llanimstatelabels.cpp | 0 indra/newview/llanimstatelabels.h | 0 indra/newview/llappearance.h | 0 indra/newview/llappearancemgr.cpp | 0 indra/newview/llappearancemgr.h | 0 indra/newview/llappviewer.cpp | 0 indra/newview/llappviewer.h | 0 indra/newview/llappviewerlinux.cpp | 0 indra/newview/llappviewerlinux.h | 0 indra/newview/llappviewerlinux_api.h | 0 indra/newview/llappviewerlinux_api.xml | 0 indra/newview/llappviewerlinux_api_dbus.cpp | 0 indra/newview/llappviewerlinux_api_dbus.h | 0 indra/newview/llappviewerlinux_api_dbus_syms_raw.inc | 0 indra/newview/llappviewerlistener.cpp | 0 indra/newview/llappviewerlistener.h | 0 indra/newview/llappviewermacosx.cpp | 0 indra/newview/llappviewermacosx.h | 0 indra/newview/llappviewerwin32.cpp | 0 indra/newview/llappviewerwin32.h | 0 indra/newview/llassetuploadqueue.cpp | 0 indra/newview/llassetuploadqueue.h | 0 indra/newview/llassetuploadresponders.cpp | 0 indra/newview/llassetuploadresponders.h | 0 indra/newview/llaudiosourcevo.cpp | 0 indra/newview/llaudiosourcevo.h | 0 indra/newview/llavataractions.cpp | 0 indra/newview/llavataractions.h | 0 indra/newview/llavatariconctrl.cpp | 0 indra/newview/llavatariconctrl.h | 0 indra/newview/llavatarlist.cpp | 0 indra/newview/llavatarlist.h | 0 indra/newview/llavatarlistitem.cpp | 0 indra/newview/llavatarlistitem.h | 0 indra/newview/llavatarpropertiesprocessor.cpp | 0 indra/newview/llavatarpropertiesprocessor.h | 0 indra/newview/llbottomtray.cpp | 0 indra/newview/llbottomtray.h | 0 indra/newview/llbox.cpp | 0 indra/newview/llbox.h | 0 indra/newview/llbreadcrumbview.cpp | 0 indra/newview/llbreadcrumbview.h | 0 indra/newview/llbuycurrencyhtml.cpp | 0 indra/newview/llbuycurrencyhtml.h | 0 indra/newview/llcallbacklist.cpp | 0 indra/newview/llcallbacklist.h | 0 indra/newview/llcallfloater.cpp | 0 indra/newview/llcallfloater.h | 0 indra/newview/llcallingcard.cpp | 0 indra/newview/llcallingcard.h | 0 indra/newview/llcapabilitylistener.cpp | 0 indra/newview/llcapabilitylistener.h | 0 indra/newview/llcapabilityprovider.h | 0 indra/newview/llcaphttpsender.cpp | 0 indra/newview/llcaphttpsender.h | 0 indra/newview/llchannelmanager.cpp | 0 indra/newview/llchannelmanager.h | 0 indra/newview/llchatbar.cpp | 0 indra/newview/llchatbar.h | 0 indra/newview/llchathistory.cpp | 0 indra/newview/llchathistory.h | 0 indra/newview/llchatitemscontainerctrl.cpp | 0 indra/newview/llchatitemscontainerctrl.h | 0 indra/newview/llchatmsgbox.cpp | 0 indra/newview/llchatmsgbox.h | 0 indra/newview/llchiclet.cpp | 0 indra/newview/llchiclet.h | 0 indra/newview/llclassifiedinfo.cpp | 0 indra/newview/llclassifiedinfo.h | 0 indra/newview/llclassifiedstatsresponder.cpp | 0 indra/newview/llclassifiedstatsresponder.h | 0 indra/newview/llcloud.cpp | 0 indra/newview/llcloud.h | 0 indra/newview/llcofwearables.cpp | 0 indra/newview/llcofwearables.h | 0 indra/newview/llcolorswatch.cpp | 0 indra/newview/llcolorswatch.h | 0 indra/newview/llcommanddispatcherlistener.cpp | 0 indra/newview/llcommanddispatcherlistener.h | 0 indra/newview/llcommandhandler.cpp | 0 indra/newview/llcommandhandler.h | 0 indra/newview/llcommandlineparser.cpp | 0 indra/newview/llcommandlineparser.h | 0 indra/newview/llcompilequeue.cpp | 0 indra/newview/llcompilequeue.h | 0 indra/newview/llconfirmationmanager.cpp | 0 indra/newview/llconfirmationmanager.h | 0 indra/newview/llcurrencyuimanager.cpp | 0 indra/newview/llcurrencyuimanager.h | 0 indra/newview/llcylinder.cpp | 0 indra/newview/llcylinder.h | 0 indra/newview/lldateutil.cpp | 0 indra/newview/lldateutil.h | 0 indra/newview/lldebugmessagebox.cpp | 0 indra/newview/lldebugmessagebox.h | 0 indra/newview/lldebugview.cpp | 0 indra/newview/lldebugview.h | 0 indra/newview/lldelayedgestureerror.cpp | 0 indra/newview/lldelayedgestureerror.h | 0 indra/newview/lldirpicker.cpp | 0 indra/newview/lldirpicker.h | 0 indra/newview/lldndbutton.cpp | 0 indra/newview/lldndbutton.h | 0 indra/newview/lldrawable.cpp | 0 indra/newview/lldrawable.h | 0 indra/newview/lldrawpool.cpp | 0 indra/newview/lldrawpool.h | 0 indra/newview/lldrawpoolalpha.cpp | 0 indra/newview/lldrawpoolalpha.h | 0 indra/newview/lldrawpoolavatar.cpp | 0 indra/newview/lldrawpoolavatar.h | 0 indra/newview/lldrawpoolbump.cpp | 0 indra/newview/lldrawpoolbump.h | 0 indra/newview/lldrawpoolclouds.cpp | 0 indra/newview/lldrawpoolclouds.h | 0 indra/newview/lldrawpoolground.cpp | 0 indra/newview/lldrawpoolground.h | 0 indra/newview/lldrawpoolsimple.cpp | 0 indra/newview/lldrawpoolsimple.h | 0 indra/newview/lldrawpoolsky.cpp | 0 indra/newview/lldrawpoolsky.h | 0 indra/newview/lldrawpoolterrain.cpp | 0 indra/newview/lldrawpoolterrain.h | 0 indra/newview/lldrawpooltree.cpp | 0 indra/newview/lldrawpooltree.h | 0 indra/newview/lldrawpoolwater.cpp | 0 indra/newview/lldrawpoolwater.h | 0 indra/newview/lldrawpoolwlsky.cpp | 0 indra/newview/lldrawpoolwlsky.h | 0 indra/newview/lldriverparam.cpp | 0 indra/newview/lldriverparam.h | 0 indra/newview/lldynamictexture.cpp | 0 indra/newview/lldynamictexture.h | 0 indra/newview/llemote.cpp | 0 indra/newview/llemote.h | 0 indra/newview/lleventinfo.cpp | 0 indra/newview/lleventinfo.h | 0 indra/newview/lleventnotifier.cpp | 0 indra/newview/lleventnotifier.h | 0 indra/newview/lleventpoll.cpp | 0 indra/newview/lleventpoll.h | 0 indra/newview/llexpandabletextbox.cpp | 0 indra/newview/llexpandabletextbox.h | 0 indra/newview/llface.cpp | 0 indra/newview/llface.h | 0 indra/newview/llface.inl | 0 indra/newview/llfasttimerview.cpp | 0 indra/newview/llfasttimerview.h | 0 indra/newview/llfavoritesbar.cpp | 0 indra/newview/llfavoritesbar.h | 0 indra/newview/llfeaturemanager.cpp | 0 indra/newview/llfeaturemanager.h | 0 indra/newview/llfilepicker.cpp | 0 indra/newview/llfilepicker.h | 0 indra/newview/llfilteredwearablelist.cpp | 0 indra/newview/llfilteredwearablelist.h | 0 indra/newview/llfirstuse.cpp | 0 indra/newview/llfirstuse.h | 0 indra/newview/llflexibleobject.cpp | 0 indra/newview/llflexibleobject.h | 0 indra/newview/llfloaterabout.cpp | 0 indra/newview/llfloaterabout.h | 0 indra/newview/llfloateranimpreview.cpp | 0 indra/newview/llfloateranimpreview.h | 0 indra/newview/llfloaterauction.cpp | 0 indra/newview/llfloaterauction.h | 0 indra/newview/llfloateravatarpicker.cpp | 0 indra/newview/llfloateravatarpicker.h | 0 indra/newview/llfloateravatartextures.cpp | 0 indra/newview/llfloateravatartextures.h | 0 indra/newview/llfloaterbeacons.cpp | 0 indra/newview/llfloaterbeacons.h | 0 indra/newview/llfloaterbuildoptions.cpp | 0 indra/newview/llfloaterbuildoptions.h | 0 indra/newview/llfloaterbulkpermission.cpp | 0 indra/newview/llfloaterbulkpermission.h | 0 indra/newview/llfloaterbump.cpp | 0 indra/newview/llfloaterbump.h | 0 indra/newview/llfloaterbuy.cpp | 0 indra/newview/llfloaterbuy.h | 0 indra/newview/llfloaterbuycontents.cpp | 0 indra/newview/llfloaterbuycontents.h | 0 indra/newview/llfloaterbuycurrency.cpp | 0 indra/newview/llfloaterbuycurrency.h | 0 indra/newview/llfloaterbuycurrencyhtml.cpp | 0 indra/newview/llfloaterbuycurrencyhtml.h | 0 indra/newview/llfloaterbuyland.cpp | 0 indra/newview/llfloaterbuyland.h | 0 indra/newview/llfloatercamera.cpp | 0 indra/newview/llfloatercamera.h | 0 indra/newview/llfloaterchat.cpp | 0 indra/newview/llfloaterchat.h | 0 indra/newview/llfloaterchatterbox.cpp | 0 indra/newview/llfloaterchatterbox.h | 0 indra/newview/llfloatercolorpicker.cpp | 0 indra/newview/llfloatercolorpicker.h | 0 indra/newview/llfloaterdaycycle.cpp | 0 indra/newview/llfloaterdaycycle.h | 0 indra/newview/llfloaterenvsettings.cpp | 0 indra/newview/llfloaterenvsettings.h | 0 indra/newview/llfloaterevent.cpp | 0 indra/newview/llfloaterevent.h | 0 indra/newview/llfloaterfonttest.cpp | 0 indra/newview/llfloaterfonttest.h | 0 indra/newview/llfloaterfriends.cpp | 0 indra/newview/llfloaterfriends.h | 0 indra/newview/llfloatergesture.cpp | 0 indra/newview/llfloatergesture.h | 0 indra/newview/llfloatergodtools.cpp | 0 indra/newview/llfloatergodtools.h | 0 indra/newview/llfloatergroupinvite.cpp | 0 indra/newview/llfloatergroupinvite.h | 0 indra/newview/llfloatergroups.cpp | 0 indra/newview/llfloatergroups.h | 0 indra/newview/llfloaterhandler.cpp | 0 indra/newview/llfloaterhandler.h | 0 indra/newview/llfloaterhardwaresettings.cpp | 0 indra/newview/llfloaterhardwaresettings.h | 0 indra/newview/llfloaterhelpbrowser.cpp | 0 indra/newview/llfloaterhelpbrowser.h | 0 indra/newview/llfloaterhud.cpp | 0 indra/newview/llfloaterhud.h | 0 indra/newview/llfloaterimagepreview.cpp | 0 indra/newview/llfloaterimagepreview.h | 0 indra/newview/llfloaterimportcollada.cpp | 0 indra/newview/llfloaterimportcollada.h | 0 indra/newview/llfloaterinspect.cpp | 0 indra/newview/llfloaterinspect.h | 0 indra/newview/llfloaterinventory.cpp | 0 indra/newview/llfloaterinventory.h | 0 indra/newview/llfloaterjoystick.cpp | 0 indra/newview/llfloaterjoystick.h | 0 indra/newview/llfloaterlagmeter.cpp | 0 indra/newview/llfloaterlagmeter.h | 0 indra/newview/llfloaterland.cpp | 0 indra/newview/llfloaterland.h | 0 indra/newview/llfloaterlandholdings.cpp | 0 indra/newview/llfloaterlandholdings.h | 0 indra/newview/llfloatermap.cpp | 0 indra/newview/llfloatermap.h | 0 indra/newview/llfloatermediabrowser.cpp | 0 indra/newview/llfloatermediabrowser.h | 0 indra/newview/llfloatermediasettings.cpp | 0 indra/newview/llfloatermediasettings.h | 0 indra/newview/llfloatermemleak.cpp | 0 indra/newview/llfloatermemleak.h | 0 indra/newview/llfloatermodelpreview.cpp | 0 indra/newview/llfloatermodelpreview.h | 0 indra/newview/llfloaternamedesc.cpp | 0 indra/newview/llfloaternamedesc.h | 0 indra/newview/llfloaternotificationsconsole.cpp | 0 indra/newview/llfloaternotificationsconsole.h | 0 indra/newview/llfloateropenobject.cpp | 0 indra/newview/llfloateropenobject.h | 0 indra/newview/llfloaterpay.cpp | 0 indra/newview/llfloaterpay.h | 0 indra/newview/llfloaterperms.cpp | 0 indra/newview/llfloaterperms.h | 0 indra/newview/llfloaterpostcard.cpp | 0 indra/newview/llfloaterpostcard.h | 0 indra/newview/llfloaterpostprocess.cpp | 0 indra/newview/llfloaterpostprocess.h | 0 indra/newview/llfloaterpreference.cpp | 0 indra/newview/llfloaterpreference.h | 0 indra/newview/llfloaterproperties.cpp | 0 indra/newview/llfloaterproperties.h | 0 indra/newview/llfloaterregioninfo.cpp | 0 indra/newview/llfloaterregioninfo.h | 0 indra/newview/llfloaterreporter.cpp | 0 indra/newview/llfloaterreporter.h | 0 indra/newview/llfloaterscriptdebug.cpp | 0 indra/newview/llfloaterscriptdebug.h | 0 indra/newview/llfloaterscriptlimits.cpp | 0 indra/newview/llfloaterscriptlimits.h | 0 indra/newview/llfloatersearch.cpp | 0 indra/newview/llfloatersearch.h | 0 indra/newview/llfloatersellland.cpp | 0 indra/newview/llfloatersellland.h | 0 indra/newview/llfloatersettingsdebug.cpp | 0 indra/newview/llfloatersettingsdebug.h | 0 indra/newview/llfloatersnapshot.cpp | 0 indra/newview/llfloatersnapshot.h | 0 indra/newview/llfloatertelehub.cpp | 0 indra/newview/llfloatertelehub.h | 0 indra/newview/llfloatertestinspectors.cpp | 0 indra/newview/llfloatertestinspectors.h | 0 indra/newview/llfloatertestlistview.cpp | 0 indra/newview/llfloatertestlistview.h | 0 indra/newview/llfloatertools.cpp | 0 indra/newview/llfloatertools.h | 0 indra/newview/llfloatertopobjects.cpp | 0 indra/newview/llfloatertopobjects.h | 0 indra/newview/llfloatertos.cpp | 0 indra/newview/llfloatertos.h | 0 indra/newview/llfloateruipreview.cpp | 0 indra/newview/llfloateruipreview.h | 0 indra/newview/llfloaterurlentry.cpp | 0 indra/newview/llfloaterurlentry.h | 0 indra/newview/llfloatervoicedevicesettings.cpp | 0 indra/newview/llfloatervoicedevicesettings.h | 0 indra/newview/llfloatervoiceeffect.cpp | 0 indra/newview/llfloatervoiceeffect.h | 0 indra/newview/llfloaterwater.cpp | 0 indra/newview/llfloaterwater.h | 0 indra/newview/llfloaterwhitelistentry.cpp | 0 indra/newview/llfloaterwhitelistentry.h | 0 indra/newview/llfloaterwindlight.cpp | 0 indra/newview/llfloaterwindlight.h | 0 indra/newview/llfloaterwindowsize.cpp | 0 indra/newview/llfloaterwindowsize.h | 0 indra/newview/llfloaterworldmap.cpp | 0 indra/newview/llfloaterworldmap.h | 0 indra/newview/llfolderview.cpp | 0 indra/newview/llfolderview.h | 0 indra/newview/llfoldervieweventlistener.h | 0 indra/newview/llfolderviewitem.cpp | 0 indra/newview/llfolderviewitem.h | 0 indra/newview/llfollowcam.cpp | 0 indra/newview/llfollowcam.h | 0 indra/newview/llfriendcard.cpp | 0 indra/newview/llfriendcard.h | 0 indra/newview/llgesturemgr.cpp | 0 indra/newview/llgesturemgr.h | 0 indra/newview/llgiveinventory.cpp | 0 indra/newview/llgiveinventory.h | 0 indra/newview/llglsandbox.cpp | 0 indra/newview/llgroupactions.cpp | 0 indra/newview/llgroupactions.h | 0 indra/newview/llgroupiconctrl.cpp | 0 indra/newview/llgroupiconctrl.h | 0 indra/newview/llgrouplist.cpp | 0 indra/newview/llgrouplist.h | 0 indra/newview/llgroupmgr.cpp | 0 indra/newview/llgroupmgr.h | 0 indra/newview/llhomelocationresponder.cpp | 0 indra/newview/llhomelocationresponder.h | 0 indra/newview/llhudeffect.cpp | 0 indra/newview/llhudeffect.h | 0 indra/newview/llhudeffectbeam.cpp | 0 indra/newview/llhudeffectbeam.h | 0 indra/newview/llhudeffectlookat.cpp | 0 indra/newview/llhudeffectlookat.h | 0 indra/newview/llhudeffectpointat.cpp | 0 indra/newview/llhudeffectpointat.h | 0 indra/newview/llhudeffecttrail.cpp | 0 indra/newview/llhudeffecttrail.h | 0 indra/newview/llhudicon.cpp | 0 indra/newview/llhudicon.h | 0 indra/newview/llhudmanager.cpp | 0 indra/newview/llhudmanager.h | 0 indra/newview/llhudobject.cpp | 0 indra/newview/llhudobject.h | 0 indra/newview/llhudrender.cpp | 0 indra/newview/llhudrender.h | 0 indra/newview/llhudtext.cpp | 0 indra/newview/llhudtext.h | 0 indra/newview/llhudview.cpp | 0 indra/newview/llhudview.h | 0 indra/newview/llimfloater.cpp | 0 indra/newview/llimfloater.h | 0 indra/newview/llimfloatercontainer.cpp | 0 indra/newview/llimfloatercontainer.h | 0 indra/newview/llimhandler.cpp | 0 indra/newview/llimpanel.cpp | 0 indra/newview/llimpanel.h | 0 indra/newview/llimview.cpp | 0 indra/newview/llimview.h | 0 indra/newview/llinspect.cpp | 0 indra/newview/llinspect.h | 0 indra/newview/llinspectavatar.cpp | 0 indra/newview/llinspectavatar.h | 0 indra/newview/llinspectgroup.cpp | 0 indra/newview/llinspectgroup.h | 0 indra/newview/llinspectobject.cpp | 0 indra/newview/llinspectobject.h | 0 indra/newview/llinspectremoteobject.cpp | 0 indra/newview/llinspectremoteobject.h | 0 indra/newview/llinspecttoast.cpp | 0 indra/newview/llinspecttoast.h | 0 indra/newview/llinventoryactions.h | 0 indra/newview/llinventorybridge.cpp | 0 indra/newview/llinventorybridge.h | 0 indra/newview/llinventoryclipboard.cpp | 0 indra/newview/llinventoryclipboard.h | 0 indra/newview/llinventoryfilter.cpp | 0 indra/newview/llinventoryfilter.h | 0 indra/newview/llinventoryfunctions.cpp | 0 indra/newview/llinventoryfunctions.h | 0 indra/newview/llinventoryicon.cpp | 0 indra/newview/llinventoryicon.h | 0 indra/newview/llinventoryitemslist.cpp | 0 indra/newview/llinventoryitemslist.h | 0 indra/newview/llinventorylistitem.cpp | 0 indra/newview/llinventorylistitem.h | 0 indra/newview/llinventorymodel.cpp | 0 indra/newview/llinventorymodel.h | 0 indra/newview/llinventorymodelbackgroundfetch.cpp | 0 indra/newview/llinventorymodelbackgroundfetch.h | 0 indra/newview/llinventoryobserver.cpp | 0 indra/newview/llinventoryobserver.h | 0 indra/newview/llinventorypanel.cpp | 0 indra/newview/llinventorypanel.h | 0 indra/newview/lljoystickbutton.cpp | 0 indra/newview/lljoystickbutton.h | 0 indra/newview/lllandmarkactions.cpp | 0 indra/newview/lllandmarkactions.h | 0 indra/newview/lllandmarklist.cpp | 0 indra/newview/lllandmarklist.h | 0 indra/newview/lllightconstants.h | 0 indra/newview/lllistbrowser.cpp | 0 indra/newview/lllistbrowser.h | 0 indra/newview/lllistcontextmenu.cpp | 0 indra/newview/lllistcontextmenu.h | 0 indra/newview/lllistview.cpp | 0 indra/newview/lllistview.h | 0 indra/newview/lllocaltextureobject.cpp | 0 indra/newview/lllocaltextureobject.h | 0 indra/newview/lllocationhistory.cpp | 0 indra/newview/lllocationhistory.h | 0 indra/newview/lllocationinputctrl.cpp | 0 indra/newview/lllocationinputctrl.h | 0 indra/newview/lllogchat.cpp | 0 indra/newview/lllogchat.h | 0 indra/newview/llloginhandler.cpp | 0 indra/newview/llloginhandler.h | 0 indra/newview/lllogininstance.cpp | 0 indra/newview/lllogininstance.h | 0 indra/newview/lllookshistorypanel.h | 0 indra/newview/llmachineid.cpp | 0 indra/newview/llmachineid.h | 0 indra/newview/llmanip.cpp | 0 indra/newview/llmanip.h | 0 indra/newview/llmaniprotate.cpp | 0 indra/newview/llmaniprotate.h | 0 indra/newview/llmanipscale.cpp | 0 indra/newview/llmanipscale.h | 0 indra/newview/llmaniptranslate.cpp | 0 indra/newview/llmaniptranslate.h | 0 indra/newview/llmediactrl.cpp | 0 indra/newview/llmediactrl.h | 0 indra/newview/llmediadataclient.cpp | 0 indra/newview/llmediadataclient.h | 0 indra/newview/llmemoryview.cpp | 0 indra/newview/llmemoryview.h | 0 indra/newview/llmenucommands.cpp | 0 indra/newview/llmenucommands.h | 0 indra/newview/llmeshreduction.cpp | 0 indra/newview/llmeshreduction.h | 0 indra/newview/llmeshrepository.cpp | 0 indra/newview/llmeshrepository.h | 0 indra/newview/llmetricperformancetester.cpp | 0 indra/newview/llmetricperformancetester.h | 0 indra/newview/llmimetypes.cpp | 0 indra/newview/llmimetypes.h | 0 indra/newview/llmorphview.cpp | 0 indra/newview/llmorphview.h | 0 indra/newview/llmoveview.cpp | 0 indra/newview/llmoveview.h | 0 indra/newview/llmutelist.cpp | 0 indra/newview/llmutelist.h | 0 indra/newview/llnamebox.cpp | 0 indra/newview/llnamebox.h | 0 indra/newview/llnameeditor.cpp | 0 indra/newview/llnameeditor.h | 0 indra/newview/llnamelistctrl.cpp | 0 indra/newview/llnamelistctrl.h | 0 indra/newview/llnavigationbar.cpp | 0 indra/newview/llnavigationbar.h | 0 indra/newview/llnearbychat.cpp | 0 indra/newview/llnearbychat.h | 0 indra/newview/llnearbychatbar.cpp | 0 indra/newview/llnearbychatbar.h | 0 indra/newview/llnearbychathandler.cpp | 0 indra/newview/llnearbychathandler.h | 0 indra/newview/llnetmap.cpp | 0 indra/newview/llnetmap.h | 0 indra/newview/llnotificationalerthandler.cpp | 0 indra/newview/llnotificationgrouphandler.cpp | 0 indra/newview/llnotificationhandler.h | 0 indra/newview/llnotificationhandlerutil.cpp | 0 indra/newview/llnotificationmanager.cpp | 0 indra/newview/llnotificationmanager.h | 0 indra/newview/llnotificationofferhandler.cpp | 0 indra/newview/llnotificationscripthandler.cpp | 0 indra/newview/llnotificationstorage.cpp | 0 indra/newview/llnotificationstorage.h | 0 indra/newview/llnotificationtiphandler.cpp | 0 indra/newview/lloutfitobserver.cpp | 0 indra/newview/lloutfitobserver.h | 0 indra/newview/lloutfitslist.cpp | 0 indra/newview/lloutfitslist.h | 0 indra/newview/lloutputmonitorctrl.cpp | 0 indra/newview/lloutputmonitorctrl.h | 0 indra/newview/lloverlaybar.cpp | 0 indra/newview/lloverlaybar.h | 0 indra/newview/llpanelappearancetab.h | 0 indra/newview/llpanelavatar.cpp | 0 indra/newview/llpanelavatar.h | 0 indra/newview/llpanelavatartag.cpp | 0 indra/newview/llpanelavatartag.h | 0 indra/newview/llpanelblockedlist.cpp | 0 indra/newview/llpanelblockedlist.h | 0 indra/newview/llpanelclassified.cpp | 0 indra/newview/llpanelclassified.h | 0 indra/newview/llpanelcontents.cpp | 0 indra/newview/llpanelcontents.h | 0 indra/newview/llpaneleditwearable.cpp | 0 indra/newview/llpaneleditwearable.h | 0 indra/newview/llpanelface.cpp | 0 indra/newview/llpanelface.h | 0 indra/newview/llpanelgenerictip.cpp | 0 indra/newview/llpanelgenerictip.h | 0 indra/newview/llpanelgroup.cpp | 0 indra/newview/llpanelgroup.h | 0 indra/newview/llpanelgroupgeneral.cpp | 0 indra/newview/llpanelgroupgeneral.h | 0 indra/newview/llpanelgroupinvite.cpp | 0 indra/newview/llpanelgroupinvite.h | 0 indra/newview/llpanelgrouplandmoney.cpp | 0 indra/newview/llpanelgrouplandmoney.h | 0 indra/newview/llpanelgroupnotices.cpp | 0 indra/newview/llpanelgroupnotices.h | 0 indra/newview/llpanelgrouproles.cpp | 0 indra/newview/llpanelgrouproles.h | 0 indra/newview/llpanelhome.cpp | 0 indra/newview/llpanelhome.h | 0 indra/newview/llpanelimcontrolpanel.cpp | 0 indra/newview/llpanelimcontrolpanel.h | 0 indra/newview/llpanelland.cpp | 0 indra/newview/llpanelland.h | 0 indra/newview/llpanellandaudio.cpp | 0 indra/newview/llpanellandaudio.h | 0 indra/newview/llpanellandmarkinfo.cpp | 0 indra/newview/llpanellandmarkinfo.h | 0 indra/newview/llpanellandmarks.cpp | 0 indra/newview/llpanellandmarks.h | 0 indra/newview/llpanellandmedia.cpp | 0 indra/newview/llpanellandmedia.h | 0 indra/newview/llpanellogin.cpp | 0 indra/newview/llpanellogin.h | 0 indra/newview/llpanelloginlistener.cpp | 0 indra/newview/llpanelloginlistener.h | 0 indra/newview/llpanelmaininventory.cpp | 0 indra/newview/llpanelmaininventory.h | 0 indra/newview/llpanelme.cpp | 0 indra/newview/llpanelme.h | 0 indra/newview/llpanelmediasettingsgeneral.cpp | 0 indra/newview/llpanelmediasettingsgeneral.h | 0 indra/newview/llpanelmediasettingspermissions.cpp | 0 indra/newview/llpanelmediasettingspermissions.h | 0 indra/newview/llpanelmediasettingssecurity.cpp | 0 indra/newview/llpanelmediasettingssecurity.h | 0 indra/newview/llpanelnearbymedia.cpp | 0 indra/newview/llpanelnearbymedia.h | 0 indra/newview/llpanelobject.cpp | 0 indra/newview/llpanelobject.h | 0 indra/newview/llpanelobjectinventory.cpp | 0 indra/newview/llpanelobjectinventory.h | 0 indra/newview/llpanelonlinestatus.cpp | 0 indra/newview/llpanelonlinestatus.h | 0 indra/newview/llpaneloutfitedit.cpp | 0 indra/newview/llpaneloutfitedit.h | 0 indra/newview/llpaneloutfitsinventory.cpp | 0 indra/newview/llpaneloutfitsinventory.h | 0 indra/newview/llpanelpeople.cpp | 0 indra/newview/llpanelpeople.h | 0 indra/newview/llpanelpeoplemenus.cpp | 0 indra/newview/llpanelpeoplemenus.h | 0 indra/newview/llpanelpermissions.cpp | 0 indra/newview/llpanelpermissions.h | 0 indra/newview/llpanelpick.cpp | 0 indra/newview/llpanelpick.h | 0 indra/newview/llpanelpicks.cpp | 0 indra/newview/llpanelpicks.h | 0 indra/newview/llpanelplaceinfo.cpp | 0 indra/newview/llpanelplaceinfo.h | 0 indra/newview/llpanelplaceprofile.cpp | 0 indra/newview/llpanelplaceprofile.h | 0 indra/newview/llpanelplaces.cpp | 0 indra/newview/llpanelplaces.h | 0 indra/newview/llpanelplacestab.cpp | 0 indra/newview/llpanelplacestab.h | 0 indra/newview/llpanelprimmediacontrols.cpp | 0 indra/newview/llpanelprimmediacontrols.h | 0 indra/newview/llpanelprofile.cpp | 0 indra/newview/llpanelprofile.h | 0 indra/newview/llpanelprofileview.cpp | 0 indra/newview/llpanelprofileview.h | 0 indra/newview/llpanelteleporthistory.cpp | 0 indra/newview/llpanelteleporthistory.h | 0 indra/newview/llpaneltiptoast.cpp | 0 indra/newview/llpaneltiptoast.h | 0 indra/newview/llpaneltopinfobar.cpp | 0 indra/newview/llpaneltopinfobar.h | 0 indra/newview/llpanelvoiceeffect.cpp | 0 indra/newview/llpanelvoiceeffect.h | 0 indra/newview/llpanelvolume.cpp | 0 indra/newview/llpanelvolume.h | 0 indra/newview/llpanelvolumepulldown.cpp | 0 indra/newview/llpanelvolumepulldown.h | 0 indra/newview/llpanelwearing.cpp | 0 indra/newview/llpanelwearing.h | 0 indra/newview/llparcelselection.cpp | 0 indra/newview/llparcelselection.h | 0 indra/newview/llparticipantlist.cpp | 0 indra/newview/llparticipantlist.h | 0 indra/newview/llpatchvertexarray.cpp | 0 indra/newview/llpatchvertexarray.h | 0 indra/newview/llplacesinventorybridge.cpp | 0 indra/newview/llplacesinventorybridge.h | 0 indra/newview/llplacesinventorypanel.cpp | 0 indra/newview/llplacesinventorypanel.h | 0 indra/newview/llpolymesh.cpp | 0 indra/newview/llpolymesh.h | 0 indra/newview/llpolymorph.cpp | 0 indra/newview/llpolymorph.h | 0 indra/newview/llpopupview.cpp | 0 indra/newview/llpopupview.h | 0 indra/newview/llpreview.cpp | 0 indra/newview/llpreview.h | 0 indra/newview/llpreviewanim.cpp | 0 indra/newview/llpreviewanim.h | 0 indra/newview/llpreviewgesture.cpp | 0 indra/newview/llpreviewgesture.h | 0 indra/newview/llpreviewnotecard.cpp | 0 indra/newview/llpreviewnotecard.h | 0 indra/newview/llpreviewscript.cpp | 0 indra/newview/llpreviewscript.h | 0 indra/newview/llpreviewsound.cpp | 0 indra/newview/llpreviewsound.h | 0 indra/newview/llpreviewtexture.cpp | 0 indra/newview/llpreviewtexture.h | 0 indra/newview/llproductinforequest.cpp | 0 indra/newview/llproductinforequest.h | 0 indra/newview/llprogressview.cpp | 0 indra/newview/llprogressview.h | 0 indra/newview/llrecentpeople.cpp | 0 indra/newview/llrecentpeople.h | 0 indra/newview/llregionposition.cpp | 0 indra/newview/llregionposition.h | 0 indra/newview/llremoteparcelrequest.cpp | 0 indra/newview/llremoteparcelrequest.h | 0 indra/newview/llresourcedata.h | 0 indra/newview/llrootview.h | 0 indra/newview/llsavedsettingsglue.cpp | 0 indra/newview/llsavedsettingsglue.h | 0 indra/newview/llsaveoutfitcombobtn.cpp | 0 indra/newview/llsaveoutfitcombobtn.h | 0 indra/newview/llscreenchannel.cpp | 0 indra/newview/llscreenchannel.h | 0 indra/newview/llscriptfloater.cpp | 0 indra/newview/llscriptfloater.h | 0 indra/newview/llscrollingpanelparam.cpp | 0 indra/newview/llscrollingpanelparam.h | 0 indra/newview/llsearchcombobox.cpp | 0 indra/newview/llsearchcombobox.h | 0 indra/newview/llsearchhistory.cpp | 0 indra/newview/llsearchhistory.h | 0 indra/newview/llsecapi.cpp | 0 indra/newview/llsecapi.h | 0 indra/newview/llsechandler_basic.cpp | 0 indra/newview/llsechandler_basic.h | 0 indra/newview/llselectmgr.cpp | 0 indra/newview/llselectmgr.h | 0 indra/newview/llsidepanelappearance.cpp | 0 indra/newview/llsidepanelappearance.h | 0 indra/newview/llsidepanelinventory.cpp | 0 indra/newview/llsidepanelinventory.h | 0 indra/newview/llsidepanelinventorysubpanel.cpp | 0 indra/newview/llsidepanelinventorysubpanel.h | 0 indra/newview/llsidepaneliteminfo.cpp | 0 indra/newview/llsidepaneliteminfo.h | 0 indra/newview/llsidepaneltaskinfo.cpp | 0 indra/newview/llsidepaneltaskinfo.h | 0 indra/newview/llsidetray.cpp | 0 indra/newview/llsidetray.h | 0 indra/newview/llsidetraypanelcontainer.cpp | 0 indra/newview/llsidetraypanelcontainer.h | 0 indra/newview/llsky.cpp | 0 indra/newview/llsky.h | 0 indra/newview/llslurl.cpp | 0 indra/newview/llslurl.h | 0 indra/newview/llspatialpartition.cpp | 0 indra/newview/llspatialpartition.h | 0 indra/newview/llspeakbutton.cpp | 0 indra/newview/llspeakbutton.h | 0 indra/newview/llspeakers.cpp | 0 indra/newview/llspeakers.h | 0 indra/newview/llspeakingindicatormanager.cpp | 0 indra/newview/llspeakingindicatormanager.h | 0 indra/newview/llsplitbutton.cpp | 0 indra/newview/llsplitbutton.h | 0 indra/newview/llsprite.cpp | 0 indra/newview/llsprite.h | 0 indra/newview/llsrv.cpp | 0 indra/newview/llsrv.h | 0 indra/newview/llstartup.cpp | 0 indra/newview/llstartup.h | 0 indra/newview/llstartuplistener.cpp | 0 indra/newview/llstartuplistener.h | 0 indra/newview/llstatusbar.cpp | 0 indra/newview/llstatusbar.h | 0 indra/newview/llstylemap.cpp | 0 indra/newview/llstylemap.h | 0 indra/newview/llsurface.cpp | 0 indra/newview/llsurface.h | 0 indra/newview/llsurfacepatch.cpp | 0 indra/newview/llsurfacepatch.h | 0 indra/newview/llsyswellitem.cpp | 0 indra/newview/llsyswellitem.h | 0 indra/newview/llsyswellwindow.cpp | 0 indra/newview/llsyswellwindow.h | 0 indra/newview/lltable.h | 0 indra/newview/llteleporthistory.cpp | 0 indra/newview/llteleporthistory.h | 0 indra/newview/llteleporthistorystorage.cpp | 0 indra/newview/llteleporthistorystorage.h | 0 indra/newview/lltexglobalcolor.cpp | 0 indra/newview/lltexglobalcolor.h | 0 indra/newview/lltexlayer.cpp | 0 indra/newview/lltexlayer.h | 0 indra/newview/lltexlayerparams.cpp | 0 indra/newview/lltexlayerparams.h | 0 indra/newview/lltextureatlas.cpp | 0 indra/newview/lltextureatlas.h | 0 indra/newview/lltextureatlasmanager.cpp | 0 indra/newview/lltextureatlasmanager.h | 0 indra/newview/lltexturecache.cpp | 0 indra/newview/lltexturecache.h | 0 indra/newview/lltexturectrl.cpp | 0 indra/newview/lltexturectrl.h | 0 indra/newview/lltexturefetch.cpp | 0 indra/newview/lltexturefetch.h | 0 indra/newview/lltextureinfo.cpp | 0 indra/newview/lltextureinfo.h | 0 indra/newview/lltextureinfodetails.cpp | 0 indra/newview/lltextureinfodetails.h | 0 indra/newview/lltexturestats.cpp | 0 indra/newview/lltexturestats.h | 0 indra/newview/lltexturestatsuploader.cpp | 0 indra/newview/lltexturestatsuploader.h | 0 indra/newview/lltextureview.cpp | 0 indra/newview/lltextureview.h | 0 indra/newview/lltoast.cpp | 0 indra/newview/lltoast.h | 0 indra/newview/lltoastalertpanel.cpp | 0 indra/newview/lltoastalertpanel.h | 0 indra/newview/lltoastgroupnotifypanel.cpp | 0 indra/newview/lltoastgroupnotifypanel.h | 0 indra/newview/lltoastimpanel.cpp | 0 indra/newview/lltoastimpanel.h | 0 indra/newview/lltoastnotifypanel.cpp | 0 indra/newview/lltoastnotifypanel.h | 0 indra/newview/lltoastpanel.cpp | 0 indra/newview/lltoastpanel.h | 0 indra/newview/lltool.cpp | 0 indra/newview/lltool.h | 0 indra/newview/lltoolbar.cpp | 0 indra/newview/lltoolbar.h | 0 indra/newview/lltoolbrush.cpp | 0 indra/newview/lltoolbrush.h | 0 indra/newview/lltoolcomp.cpp | 0 indra/newview/lltoolcomp.h | 0 indra/newview/lltooldraganddrop.cpp | 0 indra/newview/lltooldraganddrop.h | 0 indra/newview/lltoolface.cpp | 0 indra/newview/lltoolface.h | 0 indra/newview/lltoolfocus.cpp | 0 indra/newview/lltoolfocus.h | 0 indra/newview/lltoolgrab.cpp | 0 indra/newview/lltoolgrab.h | 0 indra/newview/lltoolgun.cpp | 0 indra/newview/lltoolgun.h | 0 indra/newview/lltoolindividual.cpp | 0 indra/newview/lltoolindividual.h | 0 indra/newview/lltoolmgr.cpp | 0 indra/newview/lltoolmgr.h | 0 indra/newview/lltoolmorph.cpp | 0 indra/newview/lltoolmorph.h | 0 indra/newview/lltoolobjpicker.cpp | 0 indra/newview/lltoolobjpicker.h | 0 indra/newview/lltoolpie.cpp | 0 indra/newview/lltoolpie.h | 0 indra/newview/lltoolpipette.cpp | 0 indra/newview/lltoolpipette.h | 0 indra/newview/lltoolplacer.cpp | 0 indra/newview/lltoolplacer.h | 0 indra/newview/lltoolselect.cpp | 0 indra/newview/lltoolselect.h | 0 indra/newview/lltoolselectland.cpp | 0 indra/newview/lltoolselectland.h | 0 indra/newview/lltoolselectrect.cpp | 0 indra/newview/lltoolselectrect.h | 0 indra/newview/lltoolview.cpp | 0 indra/newview/lltoolview.h | 0 indra/newview/lltracker.cpp | 0 indra/newview/lltracker.h | 0 indra/newview/lltransientdockablefloater.cpp | 0 indra/newview/lltransientdockablefloater.h | 0 indra/newview/lltransientfloatermgr.cpp | 0 indra/newview/lltransientfloatermgr.h | 0 indra/newview/lluiconstants.h | 0 indra/newview/lluilistener.cpp | 0 indra/newview/lluilistener.h | 0 indra/newview/lluploaddialog.cpp | 0 indra/newview/lluploaddialog.h | 0 indra/newview/llurl.cpp | 0 indra/newview/llurl.h | 0 indra/newview/llurldispatcher.cpp | 0 indra/newview/llurldispatcher.h | 0 indra/newview/llurldispatcherlistener.cpp | 0 indra/newview/llurldispatcherlistener.h | 0 indra/newview/llurlhistory.cpp | 0 indra/newview/llurlhistory.h | 0 indra/newview/llurllineeditorctrl.cpp | 0 indra/newview/llurllineeditorctrl.h | 0 indra/newview/llurlwhitelist.cpp | 0 indra/newview/llurlwhitelist.h | 0 indra/newview/llvectorperfoptions.cpp | 0 indra/newview/llvectorperfoptions.h | 0 indra/newview/llversioninfo.cpp | 0 indra/newview/llversioninfo.h | 0 indra/newview/llviewchildren.cpp | 0 indra/newview/llviewchildren.h | 0 indra/newview/llviewerassetstorage.cpp | 0 indra/newview/llviewerassetstorage.h | 0 indra/newview/llviewerassettype.cpp | 0 indra/newview/llviewerassettype.h | 0 indra/newview/llviewerattachmenu.cpp | 0 indra/newview/llviewerattachmenu.h | 0 indra/newview/llvieweraudio.cpp | 0 indra/newview/llvieweraudio.h | 0 indra/newview/llviewercamera.cpp | 0 indra/newview/llviewercamera.h | 0 indra/newview/llviewerchat.cpp | 0 indra/newview/llviewerchat.h | 0 indra/newview/llviewercontrol.cpp | 0 indra/newview/llviewercontrol.h | 0 indra/newview/llviewercontrollistener.cpp | 0 indra/newview/llviewercontrollistener.h | 0 indra/newview/llviewerdisplay.cpp | 0 indra/newview/llviewerdisplay.h | 0 indra/newview/llviewerfloaterreg.cpp | 0 indra/newview/llviewerfloaterreg.h | 0 indra/newview/llviewerfoldertype.cpp | 0 indra/newview/llviewerfoldertype.h | 0 indra/newview/llviewergenericmessage.cpp | 0 indra/newview/llviewergenericmessage.h | 0 indra/newview/llviewergesture.cpp | 0 indra/newview/llviewergesture.h | 0 indra/newview/llviewerhelp.cpp | 0 indra/newview/llviewerhelp.h | 0 indra/newview/llviewerhelputil.cpp | 0 indra/newview/llviewerhelputil.h | 0 indra/newview/llviewerhome.cpp | 0 indra/newview/llviewerhome.h | 0 indra/newview/llviewerinventory.cpp | 0 indra/newview/llviewerinventory.h | 0 indra/newview/llviewerjoint.cpp | 0 indra/newview/llviewerjoint.h | 0 indra/newview/llviewerjointattachment.cpp | 0 indra/newview/llviewerjointattachment.h | 0 indra/newview/llviewerjointmesh.cpp | 0 indra/newview/llviewerjointmesh.h | 0 indra/newview/llviewerjointmesh_sse.cpp | 0 indra/newview/llviewerjointmesh_sse2.cpp | 0 indra/newview/llviewerjointmesh_vec.cpp | 0 indra/newview/llviewerjoystick.cpp | 0 indra/newview/llviewerjoystick.h | 0 indra/newview/llviewerkeyboard.cpp | 0 indra/newview/llviewerkeyboard.h | 0 indra/newview/llviewerlayer.cpp | 0 indra/newview/llviewerlayer.h | 0 indra/newview/llviewermedia.cpp | 0 indra/newview/llviewermedia.h | 0 indra/newview/llviewermedia_streamingaudio.cpp | 0 indra/newview/llviewermedia_streamingaudio.h | 0 indra/newview/llviewermediafocus.cpp | 0 indra/newview/llviewermediafocus.h | 0 indra/newview/llviewermediaobserver.h | 0 indra/newview/llviewermenu.cpp | 0 indra/newview/llviewermenu.h | 0 indra/newview/llviewermenufile.cpp | 0 indra/newview/llviewermenufile.h | 0 indra/newview/llviewermessage.cpp | 0 indra/newview/llviewermessage.h | 0 indra/newview/llviewernetwork.cpp | 0 indra/newview/llviewernetwork.h | 0 indra/newview/llviewerobject.cpp | 0 indra/newview/llviewerobject.h | 0 indra/newview/llviewerobjectlist.cpp | 0 indra/newview/llviewerobjectlist.h | 0 indra/newview/llviewerparcelmedia.cpp | 0 indra/newview/llviewerparcelmedia.h | 0 indra/newview/llviewerparcelmediaautoplay.cpp | 0 indra/newview/llviewerparcelmediaautoplay.h | 0 indra/newview/llviewerparcelmgr.cpp | 0 indra/newview/llviewerparcelmgr.h | 0 indra/newview/llviewerparceloverlay.cpp | 0 indra/newview/llviewerparceloverlay.h | 0 indra/newview/llviewerpartsim.cpp | 0 indra/newview/llviewerpartsim.h | 0 indra/newview/llviewerpartsource.cpp | 0 indra/newview/llviewerpartsource.h | 0 indra/newview/llviewerprecompiledheaders.cpp | 0 indra/newview/llviewerprecompiledheaders.h | 0 indra/newview/llviewerregion.cpp | 0 indra/newview/llviewerregion.h | 0 indra/newview/llviewershadermgr.cpp | 0 indra/newview/llviewershadermgr.h | 0 indra/newview/llviewerstats.cpp | 0 indra/newview/llviewerstats.h | 0 indra/newview/llviewertexteditor.cpp | 0 indra/newview/llviewertexteditor.h | 0 indra/newview/llviewertexture.cpp | 0 indra/newview/llviewertexture.h | 0 indra/newview/llviewertextureanim.cpp | 0 indra/newview/llviewertextureanim.h | 0 indra/newview/llviewertexturelist.cpp | 0 indra/newview/llviewertexturelist.h | 0 indra/newview/llviewerthrottle.cpp | 0 indra/newview/llviewerthrottle.h | 0 indra/newview/llviewervisualparam.cpp | 0 indra/newview/llviewervisualparam.h | 0 indra/newview/llviewerwindow.cpp | 0 indra/newview/llviewerwindow.h | 0 indra/newview/llviewerwindowlistener.cpp | 0 indra/newview/llviewerwindowlistener.h | 0 indra/newview/llvlcomposition.cpp | 0 indra/newview/llvlcomposition.h | 0 indra/newview/llvlmanager.cpp | 0 indra/newview/llvlmanager.h | 0 indra/newview/llvoavatar.cpp | 0 indra/newview/llvoavatar.h | 0 indra/newview/llvoavatardefines.cpp | 0 indra/newview/llvoavatardefines.h | 0 indra/newview/llvoavatarself.cpp | 0 indra/newview/llvoavatarself.h | 0 indra/newview/llvocache.cpp | 0 indra/newview/llvocache.h | 0 indra/newview/llvoclouds.cpp | 0 indra/newview/llvoclouds.h | 0 indra/newview/llvograss.cpp | 0 indra/newview/llvograss.h | 0 indra/newview/llvoground.cpp | 0 indra/newview/llvoground.h | 0 indra/newview/llvoicechannel.cpp | 0 indra/newview/llvoicechannel.h | 0 indra/newview/llvoiceclient.cpp | 0 indra/newview/llvoiceclient.h | 0 indra/newview/llvoicevisualizer.cpp | 0 indra/newview/llvoicevisualizer.h | 0 indra/newview/llvoicevivox.cpp | 0 indra/newview/llvoicevivox.h | 0 indra/newview/llvoinventorylistener.cpp | 0 indra/newview/llvoinventorylistener.h | 0 indra/newview/llvopartgroup.cpp | 0 indra/newview/llvopartgroup.h | 0 indra/newview/llvosky.cpp | 0 indra/newview/llvosky.h | 0 indra/newview/llvosurfacepatch.cpp | 0 indra/newview/llvosurfacepatch.h | 0 indra/newview/llvotextbubble.cpp | 0 indra/newview/llvotextbubble.h | 0 indra/newview/llvotree.cpp | 0 indra/newview/llvotree.h | 0 indra/newview/llvotreenew.h | 0 indra/newview/llvovolume.cpp | 0 indra/newview/llvovolume.h | 0 indra/newview/llvowater.cpp | 0 indra/newview/llvowater.h | 0 indra/newview/llvowlsky.cpp | 0 indra/newview/llvowlsky.h | 0 indra/newview/llwatchdog.cpp | 0 indra/newview/llwatchdog.h | 0 indra/newview/llwaterparammanager.cpp | 0 indra/newview/llwaterparammanager.h | 0 indra/newview/llwaterparamset.cpp | 0 indra/newview/llwaterparamset.h | 0 indra/newview/llwearable.cpp | 0 indra/newview/llwearable.h | 0 indra/newview/llwearableitemslist.cpp | 0 indra/newview/llwearableitemslist.h | 0 indra/newview/llwearablelist.cpp | 0 indra/newview/llwearablelist.h | 0 indra/newview/llwearabletype.cpp | 0 indra/newview/llwearabletype.h | 0 indra/newview/llweb.cpp | 0 indra/newview/llweb.h | 0 indra/newview/llwebsharing.cpp | 0 indra/newview/llwebsharing.h | 0 indra/newview/llwind.cpp | 0 indra/newview/llwind.h | 0 indra/newview/llwindebug.cpp | 0 indra/newview/llwindebug.h | 0 indra/newview/llwlanimator.cpp | 0 indra/newview/llwlanimator.h | 0 indra/newview/llwldaycycle.cpp | 0 indra/newview/llwldaycycle.h | 0 indra/newview/llwlparammanager.cpp | 0 indra/newview/llwlparammanager.h | 0 indra/newview/llwlparamset.cpp | 0 indra/newview/llwlparamset.h | 0 indra/newview/llworld.cpp | 0 indra/newview/llworld.h | 0 indra/newview/llworldmap.cpp | 0 indra/newview/llworldmap.h | 0 indra/newview/llworldmapmessage.cpp | 0 indra/newview/llworldmapmessage.h | 0 indra/newview/llworldmapview.cpp | 0 indra/newview/llworldmapview.h | 0 indra/newview/llworldmipmap.cpp | 0 indra/newview/llworldmipmap.h | 0 indra/newview/llworldview.cpp | 0 indra/newview/llxmlrpclistener.cpp | 0 indra/newview/llxmlrpclistener.h | 0 indra/newview/llxmlrpctransaction.cpp | 0 indra/newview/llxmlrpctransaction.h | 0 indra/newview/macmain.h | 0 indra/newview/macutil_Prefix.h | 0 indra/newview/macview.r | 0 indra/newview/macview_Prefix.h | 0 indra/newview/nl.lproj/language.txt | 0 indra/newview/noise.cpp | 0 indra/newview/noise.h | 0 indra/newview/pipeline.cpp | 0 indra/newview/pipeline.h | 0 indra/newview/pl.lproj/language.txt | 0 indra/newview/pt.lproj/language.txt | 0 indra/newview/res-sdl/arrow.BMP | Bin indra/newview/res-sdl/arrowcop.BMP | Bin indra/newview/res-sdl/arrowcopmulti.BMP | Bin indra/newview/res-sdl/arrowdrag.BMP | Bin indra/newview/res-sdl/circleandline.BMP | Bin indra/newview/res-sdl/cross.BMP | Bin indra/newview/res-sdl/hand.BMP | Bin indra/newview/res-sdl/ibeam.BMP | Bin indra/newview/res-sdl/ll_icon.BMP | Bin indra/newview/res-sdl/llarrow.BMP | Bin indra/newview/res-sdl/llarrowdrag.BMP | Bin indra/newview/res-sdl/llarrowdragmulti.BMP | Bin indra/newview/res-sdl/llarrowlocked.BMP | Bin indra/newview/res-sdl/llgrablocked.BMP | Bin indra/newview/res-sdl/llno.BMP | Bin indra/newview/res-sdl/llnolocked.BMP | Bin indra/newview/res-sdl/lltoolcamera.BMP | Bin indra/newview/res-sdl/lltoolcreate.BMP | Bin indra/newview/res-sdl/lltoolfocus.BMP | Bin indra/newview/res-sdl/lltoolgrab.BMP | Bin indra/newview/res-sdl/lltoolland.BMP | Bin indra/newview/res-sdl/lltoolpan.BMP | Bin indra/newview/res-sdl/lltoolpipette.BMP | Bin indra/newview/res-sdl/lltoolrotate.BMP | Bin indra/newview/res-sdl/lltoolscale.BMP | Bin indra/newview/res-sdl/lltooltranslate.BMP | Bin indra/newview/res-sdl/lltoolzoomin.BMP | Bin indra/newview/res-sdl/lltoolzoomout.BMP | Bin indra/newview/res-sdl/sizenesw.BMP | Bin indra/newview/res-sdl/sizens.BMP | Bin indra/newview/res-sdl/sizenwse.BMP | Bin indra/newview/res-sdl/sizewe.BMP | Bin indra/newview/res-sdl/toolbuy.BMP | Bin indra/newview/res-sdl/toolmediaopen.BMP | Bin indra/newview/res-sdl/toolopen.BMP | Bin indra/newview/res-sdl/toolpause.BMP | Bin indra/newview/res-sdl/toolpickobject.BMP | Bin indra/newview/res-sdl/toolpickobject2.BMP | Bin indra/newview/res-sdl/toolpickobject3.BMP | Bin indra/newview/res-sdl/toolplay.BMP | Bin indra/newview/res-sdl/toolsit.BMP | Bin indra/newview/res-sdl/wait.BMP | Bin indra/newview/res-sdl/working.BMP | Bin indra/newview/res/arrow.cur | Bin indra/newview/res/arrowcop.cur | Bin indra/newview/res/arrowcopmulti.cur | Bin indra/newview/res/arrowdrag.cur | Bin indra/newview/res/bitmap2.bmp | Bin indra/newview/res/circleandline.cur | Bin indra/newview/res/have_artwork_bundle.marker | 0 indra/newview/res/icon1.ico | Bin indra/newview/res/install_icon.BMP | Bin indra/newview/res/ll_icon.BMP | Bin indra/newview/res/ll_icon.ico | Bin indra/newview/res/ll_icon.png | Bin indra/newview/res/llarrow.cur | Bin indra/newview/res/llarrowdrag.cur | Bin indra/newview/res/llarrowdragmulti.cur | Bin indra/newview/res/llarrowlocked.cur | Bin indra/newview/res/llgrablocked.cur | Bin indra/newview/res/llno.cur | Bin indra/newview/res/llnolocked.cur | Bin indra/newview/res/lltoolcamera.cur | Bin indra/newview/res/lltoolcreate.cur | Bin indra/newview/res/lltoolfocus.cur | Bin indra/newview/res/lltoolgrab.cur | Bin indra/newview/res/lltoolland.cur | Bin indra/newview/res/lltoolpan.cur | Bin indra/newview/res/lltoolpipette.cur | Bin indra/newview/res/lltoolrotate.cur | Bin indra/newview/res/lltoolscale.cur | Bin indra/newview/res/lltooltranslate.cur | Bin indra/newview/res/lltoolzoomin.cur | Bin indra/newview/res/lltoolzoomout.cur | Bin indra/newview/res/loginbackground.bmp | Bin indra/newview/res/resource.h | 0 indra/newview/res/toolbuy.cur | Bin indra/newview/res/toolmediaopen.cur | Bin indra/newview/res/toolopen.cur | Bin indra/newview/res/toolpause.cur | Bin indra/newview/res/toolpickobject.cur | Bin indra/newview/res/toolpickobject2.cur | Bin indra/newview/res/toolpickobject3.cur | Bin indra/newview/res/toolpipette.cur | Bin indra/newview/res/toolplay.cur | Bin indra/newview/res/toolsit.cur | Bin indra/newview/res/uninstall_icon.BMP | Bin indra/newview/res/viewerRes.rc | 0 indra/newview/ru.lproj/language.txt | 0 indra/newview/secondlife-i686.supp | 0 indra/newview/secondlife.icns | Bin indra/newview/secondlife_firstlook.icns | Bin indra/newview/skins/default/colors.xml | 0 indra/newview/skins/default/html/btn_purplepill_bg.png | Bin indra/newview/skins/default/html/da/loading/loading.html | 0 .../newview/skins/default/html/de/loading-error/index.html | 0 indra/newview/skins/default/html/de/loading/loading.html | 0 .../skins/default/html/en-us/help-offline/index.html | 0 .../skins/default/html/en-us/loading-error/index.html | 0 indra/newview/skins/default/html/en-us/loading/loading.html | 0 .../default/html/en-us/loading/sl_logo_rotate_black.gif | Bin .../newview/skins/default/html/es/loading-error/index.html | 0 indra/newview/skins/default/html/es/loading/loading.html | 0 .../newview/skins/default/html/fr/loading-error/index.html | 0 indra/newview/skins/default/html/fr/loading/loading.html | 0 indra/newview/skins/default/html/hu/loading/loading.html | 0 indra/newview/skins/default/html/it/loading/loading.html | 0 .../newview/skins/default/html/ja/loading-error/index.html | 0 indra/newview/skins/default/html/ja/loading/loading.html | 0 .../newview/skins/default/html/ko/loading-error/index.html | 0 indra/newview/skins/default/html/nl/loading/loading.html | 0 indra/newview/skins/default/html/pl/loading/loading.html | 0 .../newview/skins/default/html/pt/loading-error/index.html | 0 indra/newview/skins/default/html/pt/loading/loading.html | 0 indra/newview/skins/default/html/ru/loading/loading.html | 0 indra/newview/skins/default/html/tr/loading/loading.html | 0 indra/newview/skins/default/html/uk/loading/loading.html | 0 indra/newview/skins/default/html/unabletoconnect.png | Bin .../newview/skins/default/html/zh/loading-error/index.html | 0 indra/newview/skins/default/html/zh/loading/loading.html | 0 indra/newview/skins/default/textures/Blank.png | Bin indra/newview/skins/default/textures/alpha_gradient.tga | Bin indra/newview/skins/default/textures/alpha_gradient_2d.j2c | Bin indra/newview/skins/default/textures/arrow_down.tga | Bin indra/newview/skins/default/textures/arrow_up.tga | Bin .../newview/skins/default/textures/avatar_thumb_bkgrnd.png | Bin indra/newview/skins/default/textures/badge_note.j2c | Bin indra/newview/skins/default/textures/badge_ok.j2c | Bin indra/newview/skins/default/textures/badge_warn.j2c | Bin .../skins/default/textures/bottomtray/Cam_Avatar_Off.png | Bin .../skins/default/textures/bottomtray/Cam_FreeCam_Off.png | Bin .../skins/default/textures/bottomtray/Cam_Orbit_Off.png | Bin .../skins/default/textures/bottomtray/Cam_Pan_Off.png | Bin .../skins/default/textures/bottomtray/Cam_Pan_Over.png | Bin .../default/textures/bottomtray/Cam_Preset_Back_Off.png | Bin .../default/textures/bottomtray/Cam_Preset_Back_On.png | Bin .../default/textures/bottomtray/Cam_Preset_Eye_Off.png | Bin .../default/textures/bottomtray/Cam_Preset_Front_Off.png | Bin .../default/textures/bottomtray/Cam_Preset_Front_On.png | Bin .../default/textures/bottomtray/Cam_Preset_Side_Off.png | Bin .../default/textures/bottomtray/Cam_Preset_Side_On.png | Bin .../skins/default/textures/bottomtray/Cam_Rotate_In.png | Bin .../skins/default/textures/bottomtray/Cam_Rotate_Out.png | Bin .../skins/default/textures/bottomtray/Cam_Tracking_In.png | Bin .../skins/default/textures/bottomtray/Cam_Tracking_Out.png | Bin .../skins/default/textures/bottomtray/CameraView_Press.png | Bin .../newview/skins/default/textures/bottomtray/DownArrow.png | Bin .../default/textures/bottomtray/Mouselook_View_Off.png | Bin .../skins/default/textures/bottomtray/Mouselook_View_On.png | Bin .../skins/default/textures/bottomtray/Move_Fly_Off.png | Bin .../skins/default/textures/bottomtray/Move_Run_Off.png | Bin .../skins/default/textures/bottomtray/Move_Walk_Off.png | Bin .../default/textures/bottomtray/Movement_Backward_Off.png | Bin .../default/textures/bottomtray/Movement_Backward_On.png | Bin .../skins/default/textures/bottomtray/Movement_Down_Off.png | Bin .../skins/default/textures/bottomtray/Movement_Down_On.png | Bin .../default/textures/bottomtray/Movement_Forward_Off.png | Bin .../default/textures/bottomtray/Movement_Forward_On.png | Bin .../skins/default/textures/bottomtray/Movement_Left_Off.png | Bin .../skins/default/textures/bottomtray/Movement_Left_On.png | Bin .../default/textures/bottomtray/Movement_Right_Off.png | Bin .../skins/default/textures/bottomtray/Movement_Right_On.png | Bin .../default/textures/bottomtray/Movement_TurnLeft_Off.png | Bin .../default/textures/bottomtray/Movement_TurnLeft_On.png | Bin .../default/textures/bottomtray/Movement_TurnRight_Off.png | Bin .../default/textures/bottomtray/Movement_TurnRight_On.png | Bin .../skins/default/textures/bottomtray/Movement_Up_Off.png | Bin .../skins/default/textures/bottomtray/Movement_Up_On.png | Bin .../skins/default/textures/bottomtray/Notices_Unread.png | Bin .../skins/default/textures/bottomtray/Object_View_Off.png | Bin .../skins/default/textures/bottomtray/Object_View_On.png | Bin .../skins/default/textures/bottomtray/PanOrbit_Disabled.png | Bin .../skins/default/textures/bottomtray/PanOrbit_Off.png | Bin .../skins/default/textures/bottomtray/PanOrbit_Over.png | Bin .../skins/default/textures/bottomtray/PanOrbit_Press.png | Bin .../skins/default/textures/bottomtray/Snapshot_Off.png | Bin .../skins/default/textures/bottomtray/Unread_Chiclet.png | Bin .../newview/skins/default/textures/bottomtray/Unread_IM.png | Bin .../skins/default/textures/bottomtray/VoicePTT_Lvl1.png | Bin .../skins/default/textures/bottomtray/VoicePTT_Lvl2.png | Bin .../skins/default/textures/bottomtray/VoicePTT_Lvl3.png | Bin .../skins/default/textures/bottomtray/VoicePTT_Off.png | Bin .../skins/default/textures/bottomtray/VoicePTT_On.png | Bin .../skins/default/textures/bottomtray/WellButton_Lit.png | Bin .../default/textures/bottomtray/WellButton_Lit_Selected.png | Bin indra/newview/skins/default/textures/build/Object_Cone.png | Bin .../skins/default/textures/build/Object_Cone_Selected.png | Bin indra/newview/skins/default/textures/build/Object_Cube.png | Bin .../skins/default/textures/build/Object_Cube_Selected.png | Bin .../skins/default/textures/build/Object_Cylinder.png | Bin .../default/textures/build/Object_Cylinder_Selected.png | Bin indra/newview/skins/default/textures/build/Object_Grass.png | Bin .../skins/default/textures/build/Object_Grass_Selected.png | Bin .../skins/default/textures/build/Object_Hemi_Cone.png | Bin .../default/textures/build/Object_Hemi_Cone_Selected.png | Bin .../skins/default/textures/build/Object_Hemi_Cylinder.png | Bin .../textures/build/Object_Hemi_Cylinder_Selected.png | Bin .../skins/default/textures/build/Object_Hemi_Sphere.png | Bin .../default/textures/build/Object_Hemi_Sphere_Selected.png | Bin indra/newview/skins/default/textures/build/Object_Prism.png | Bin .../skins/default/textures/build/Object_Prism_Selected.png | Bin .../newview/skins/default/textures/build/Object_Pyramid.png | Bin .../default/textures/build/Object_Pyramid_Selected.png | Bin indra/newview/skins/default/textures/build/Object_Ring.png | Bin .../skins/default/textures/build/Object_Ring_Selected.png | Bin .../newview/skins/default/textures/build/Object_Sphere.png | Bin .../skins/default/textures/build/Object_Sphere_Selected.png | Bin .../skins/default/textures/build/Object_Tetrahedron.png | Bin .../default/textures/build/Object_Tetrahedron_Selected.png | Bin indra/newview/skins/default/textures/build/Object_Torus.png | Bin .../skins/default/textures/build/Object_Torus_Selected.png | Bin indra/newview/skins/default/textures/build/Object_Tree.png | Bin .../skins/default/textures/build/Object_Tree_Selected.png | Bin indra/newview/skins/default/textures/build/Object_Tube.png | Bin .../skins/default/textures/build/Object_Tube_Selected.png | Bin indra/newview/skins/default/textures/build/Tool_Create.png | Bin indra/newview/skins/default/textures/build/Tool_Dozer.png | Bin indra/newview/skins/default/textures/build/Tool_Face.png | Bin indra/newview/skins/default/textures/build/Tool_Grab.png | Bin indra/newview/skins/default/textures/build/Tool_Zoom.png | Bin indra/newview/skins/default/textures/button_anim_pause.tga | Bin .../skins/default/textures/button_anim_pause_selected.tga | Bin indra/newview/skins/default/textures/button_anim_play.tga | Bin .../skins/default/textures/button_anim_play_selected.tga | Bin .../skins/default/textures/checkerboard_transparency_bg.png | Bin indra/newview/skins/default/textures/circle.tga | Bin indra/newview/skins/default/textures/cloud-particle.j2c | Bin indra/newview/skins/default/textures/color_swatch_alpha.tga | Bin .../textures/containers/Accordion_ArrowClosed_Off.png | Bin .../textures/containers/Accordion_ArrowClosed_Over.png | Bin .../textures/containers/Accordion_ArrowClosed_Press.png | Bin .../textures/containers/Accordion_ArrowOpened_Off.png | Bin .../textures/containers/Accordion_ArrowOpened_Over.png | Bin .../textures/containers/Accordion_ArrowOpened_Press.png | Bin .../skins/default/textures/containers/Accordion_Off.png | Bin .../skins/default/textures/containers/Accordion_Over.png | Bin .../skins/default/textures/containers/Accordion_Press.png | Bin .../default/textures/containers/Accordion_Selected.png | Bin .../newview/skins/default/textures/containers/Container.png | Bin .../skins/default/textures/containers/TabTop_Left_Off.png | Bin .../skins/default/textures/containers/TabTop_Left_Over.png | Bin .../default/textures/containers/TabTop_Left_Selected.png | Bin .../skins/default/textures/containers/TabTop_Middle_Off.png | Bin .../default/textures/containers/TabTop_Middle_Over.png | Bin .../default/textures/containers/TabTop_Middle_Selected.png | Bin .../skins/default/textures/containers/TabTop_Right_Off.png | Bin .../skins/default/textures/containers/TabTop_Right_Over.png | Bin .../default/textures/containers/TabTop_Right_Selected.png | Bin .../default/textures/containers/Toolbar_Left_Flash.png | Bin .../skins/default/textures/containers/Toolbar_Left_Off.png | Bin .../skins/default/textures/containers/Toolbar_Left_Over.png | Bin .../default/textures/containers/Toolbar_Left_Selected.png | Bin .../default/textures/containers/Toolbar_Middle_Flash.png | Bin .../default/textures/containers/Toolbar_Middle_Off.png | Bin .../default/textures/containers/Toolbar_Middle_Over.png | Bin .../default/textures/containers/Toolbar_Middle_Selected.png | Bin .../default/textures/containers/Toolbar_Right_Flash.png | Bin .../skins/default/textures/containers/Toolbar_Right_Off.png | Bin .../default/textures/containers/Toolbar_Right_Over.png | Bin .../default/textures/containers/Toolbar_Right_Selected.png | Bin indra/newview/skins/default/textures/crosshairs.tga | Bin .../newview/skins/default/textures/default_land_picture.j2c | Bin .../skins/default/textures/default_profile_picture.j2c | Bin indra/newview/skins/default/textures/direction_arrow.tga | Bin indra/newview/skins/default/textures/down_arrow.png | Bin indra/newview/skins/default/textures/eye_button_active.tga | Bin .../newview/skins/default/textures/eye_button_inactive.tga | Bin indra/newview/skins/default/textures/ff_edit_mine.tga | Bin .../newview/skins/default/textures/ff_edit_mine_button.tga | Bin indra/newview/skins/default/textures/ff_edit_theirs.tga | Bin .../skins/default/textures/ff_edit_theirs_button.tga | Bin .../skins/default/textures/ff_online_status_button.tga | Bin indra/newview/skins/default/textures/ff_visible_map.tga | Bin .../skins/default/textures/ff_visible_map_button.tga | Bin indra/newview/skins/default/textures/ff_visible_online.tga | Bin .../skins/default/textures/ff_visible_online_button.tga | Bin indra/newview/skins/default/textures/folder_arrow.tga | Bin indra/newview/skins/default/textures/foot_shadow.j2c | Bin indra/newview/skins/default/textures/icn_label_web.tga | Bin indra/newview/skins/default/textures/icn_media.tga | Bin indra/newview/skins/default/textures/icn_media_movie.tga | Bin indra/newview/skins/default/textures/icn_media_web.tga | Bin .../newview/skins/default/textures/icn_voice-groupfocus.tga | Bin .../newview/skins/default/textures/icn_voice-localchat.tga | Bin indra/newview/skins/default/textures/icn_voice-pvtfocus.tga | Bin .../newview/skins/default/textures/icon_avatar_offline.tga | Bin indra/newview/skins/default/textures/icon_avatar_online.tga | Bin indra/newview/skins/default/textures/icon_day_cycle.tga | Bin indra/newview/skins/default/textures/icon_diurnal.tga | Bin indra/newview/skins/default/textures/icon_event_adult.tga | Bin .../newview/skins/default/textures/icon_for_sale_adult.tga | Bin indra/newview/skins/default/textures/icon_lock.tga | Bin indra/newview/skins/default/textures/icon_top_pick.tga | Bin .../skins/default/textures/icons/AddItem_Disabled.png | Bin indra/newview/skins/default/textures/icons/AddItem_Off.png | Bin indra/newview/skins/default/textures/icons/AddItem_Over.png | Bin .../newview/skins/default/textures/icons/AddItem_Press.png | Bin .../newview/skins/default/textures/icons/AudioMute_Off.png | Bin .../newview/skins/default/textures/icons/AudioMute_Over.png | Bin indra/newview/skins/default/textures/icons/Audio_Off.png | Bin indra/newview/skins/default/textures/icons/Audio_Press.png | Bin .../newview/skins/default/textures/icons/BackArrow_Off.png | Bin .../newview/skins/default/textures/icons/BackArrow_Over.png | Bin .../newview/skins/default/textures/icons/DownArrow_Off.png | Bin indra/newview/skins/default/textures/icons/DragHandle.png | Bin indra/newview/skins/default/textures/icons/Edit_Wrench.png | Bin .../skins/default/textures/icons/ExternalBrowser_Off.png | Bin indra/newview/skins/default/textures/icons/Female.png | Bin .../newview/skins/default/textures/icons/ForSale_Badge.png | Bin .../skins/default/textures/icons/ForwardArrow_Off.png | Bin .../skins/default/textures/icons/ForwardArrow_Press.png | Bin .../newview/skins/default/textures/icons/Generic_Group.png | Bin .../skins/default/textures/icons/Generic_Group_Large.png | Bin .../newview/skins/default/textures/icons/Generic_Object.png | Bin .../skins/default/textures/icons/Generic_Object_Small.png | Bin .../newview/skins/default/textures/icons/Generic_Person.png | Bin .../skins/default/textures/icons/Generic_Person_Large.png | Bin .../default/textures/icons/Hierarchy_View_Disabled.png | Bin .../skins/default/textures/icons/Hierarchy_View_On.png | Bin .../newview/skins/default/textures/icons/Icon_For_Sale.png | Bin indra/newview/skins/default/textures/icons/Info.png | Bin indra/newview/skins/default/textures/icons/Info_Over.png | Bin indra/newview/skins/default/textures/icons/Info_Small.png | Bin indra/newview/skins/default/textures/icons/Inv_Alpha.png | Bin .../newview/skins/default/textures/icons/Inv_Animation.png | Bin .../newview/skins/default/textures/icons/Inv_BodyShape.png | Bin .../skins/default/textures/icons/Inv_CallingCard.png | Bin indra/newview/skins/default/textures/icons/Inv_Clothing.png | Bin indra/newview/skins/default/textures/icons/Inv_Eye.png | Bin .../skins/default/textures/icons/Inv_FolderClosed.png | Bin .../newview/skins/default/textures/icons/Inv_FolderOpen.png | Bin indra/newview/skins/default/textures/icons/Inv_Gesture.png | Bin indra/newview/skins/default/textures/icons/Inv_Gloves.png | Bin indra/newview/skins/default/textures/icons/Inv_Hair.png | Bin indra/newview/skins/default/textures/icons/Inv_Jacket.png | Bin indra/newview/skins/default/textures/icons/Inv_Landmark.png | Bin indra/newview/skins/default/textures/icons/Inv_Link.png | Bin .../newview/skins/default/textures/icons/Inv_LinkFolder.png | Bin indra/newview/skins/default/textures/icons/Inv_LinkItem.png | Bin .../skins/default/textures/icons/Inv_LookFolderClosed.png | Bin .../skins/default/textures/icons/Inv_LookFolderOpen.png | Bin .../newview/skins/default/textures/icons/Inv_LostClosed.png | Bin indra/newview/skins/default/textures/icons/Inv_LostOpen.png | Bin indra/newview/skins/default/textures/icons/Inv_Notecard.png | Bin indra/newview/skins/default/textures/icons/Inv_Object.png | Bin .../skins/default/textures/icons/Inv_Object_Multi.png | Bin indra/newview/skins/default/textures/icons/Inv_Pants.png | Bin indra/newview/skins/default/textures/icons/Inv_Script.png | Bin indra/newview/skins/default/textures/icons/Inv_Shirt.png | Bin indra/newview/skins/default/textures/icons/Inv_Shoe.png | Bin indra/newview/skins/default/textures/icons/Inv_Skin.png | Bin indra/newview/skins/default/textures/icons/Inv_Skirt.png | Bin indra/newview/skins/default/textures/icons/Inv_Snapshot.png | Bin indra/newview/skins/default/textures/icons/Inv_Socks.png | Bin indra/newview/skins/default/textures/icons/Inv_Sound.png | Bin .../newview/skins/default/textures/icons/Inv_SysClosed.png | Bin indra/newview/skins/default/textures/icons/Inv_SysOpen.png | Bin indra/newview/skins/default/textures/icons/Inv_Tattoo.png | Bin indra/newview/skins/default/textures/icons/Inv_Texture.png | Bin .../skins/default/textures/icons/Inv_TrashClosed.png | Bin .../newview/skins/default/textures/icons/Inv_TrashOpen.png | Bin .../newview/skins/default/textures/icons/Inv_Underpants.png | Bin .../newview/skins/default/textures/icons/Inv_Undershirt.png | Bin .../skins/default/textures/icons/List_View_Disabled.png | Bin indra/newview/skins/default/textures/icons/List_View_On.png | Bin indra/newview/skins/default/textures/icons/Lock.png | Bin indra/newview/skins/default/textures/icons/Locked_Icon.png | Bin indra/newview/skins/default/textures/icons/Male.png | Bin .../newview/skins/default/textures/icons/Microphone_On.png | Bin .../skins/default/textures/icons/MinusItem_Disabled.png | Bin .../newview/skins/default/textures/icons/MinusItem_Off.png | Bin .../skins/default/textures/icons/MinusItem_Press.png | Bin .../skins/default/textures/icons/OptionsMenu_Disabled.png | Bin .../skins/default/textures/icons/OptionsMenu_Off.png | Bin .../skins/default/textures/icons/OptionsMenu_Over.png | Bin .../skins/default/textures/icons/OptionsMenu_Press.png | Bin .../skins/default/textures/icons/Parcel_BuildNo_Dark.png | Bin .../skins/default/textures/icons/Parcel_BuildNo_Light.png | Bin .../skins/default/textures/icons/Parcel_Build_Dark.png | Bin .../skins/default/textures/icons/Parcel_DamageNo_Dark.png | Bin .../skins/default/textures/icons/Parcel_Damage_Dark.png | Bin .../default/textures/icons/Parcel_Damage_Light_Alt.png | Bin .../skins/default/textures/icons/Parcel_Exp_Color.png | Bin .../skins/default/textures/icons/Parcel_FlyNo_Dark.png | Bin .../skins/default/textures/icons/Parcel_FlyNo_Light.png | Bin .../skins/default/textures/icons/Parcel_Fly_Dark.png | Bin .../skins/default/textures/icons/Parcel_ForSale_Light.png | Bin .../skins/default/textures/icons/Parcel_Health_Dark.png | Bin .../newview/skins/default/textures/icons/Parcel_M_Dark.png | Bin .../newview/skins/default/textures/icons/Parcel_M_Light.png | Bin .../skins/default/textures/icons/Parcel_NoScripts_Light.png | Bin .../newview/skins/default/textures/icons/Parcel_PG_Dark.png | Bin .../skins/default/textures/icons/Parcel_PG_Light.png | Bin .../skins/default/textures/icons/Parcel_PushNo_Dark.png | Bin .../skins/default/textures/icons/Parcel_PushNo_Light.png | Bin .../skins/default/textures/icons/Parcel_Push_Dark.png | Bin .../newview/skins/default/textures/icons/Parcel_R_Dark.png | Bin .../newview/skins/default/textures/icons/Parcel_R_Light.png | Bin .../skins/default/textures/icons/Parcel_ScriptsNo_Dark.png | Bin .../skins/default/textures/icons/Parcel_Scripts_Dark.png | Bin .../skins/default/textures/icons/Parcel_VoiceNo_Dark.png | Bin .../skins/default/textures/icons/Parcel_VoiceNo_Light.png | Bin .../skins/default/textures/icons/Parcel_Voice_Dark.png | Bin .../skins/default/textures/icons/Parcel_Voice_Light.png | Bin indra/newview/skins/default/textures/icons/Pause_Off.png | Bin indra/newview/skins/default/textures/icons/Pause_Over.png | Bin indra/newview/skins/default/textures/icons/Pause_Press.png | Bin indra/newview/skins/default/textures/icons/Play_Off.png | Bin indra/newview/skins/default/textures/icons/Play_Over.png | Bin indra/newview/skins/default/textures/icons/Play_Press.png | Bin indra/newview/skins/default/textures/icons/Progress_1.png | Bin indra/newview/skins/default/textures/icons/Progress_10.png | Bin indra/newview/skins/default/textures/icons/Progress_11.png | Bin indra/newview/skins/default/textures/icons/Progress_12.png | Bin indra/newview/skins/default/textures/icons/Progress_2.png | Bin indra/newview/skins/default/textures/icons/Progress_3.png | Bin indra/newview/skins/default/textures/icons/Progress_4.png | Bin indra/newview/skins/default/textures/icons/Progress_5.png | Bin indra/newview/skins/default/textures/icons/Progress_6.png | Bin indra/newview/skins/default/textures/icons/Progress_7.png | Bin indra/newview/skins/default/textures/icons/Progress_8.png | Bin indra/newview/skins/default/textures/icons/Progress_9.png | Bin indra/newview/skins/default/textures/icons/Refresh_Off.png | Bin indra/newview/skins/default/textures/icons/SL_Logo.png | Bin indra/newview/skins/default/textures/icons/Search_Icon.png | Bin indra/newview/skins/default/textures/icons/Shirt_Large.png | Bin indra/newview/skins/default/textures/icons/Shop.png | Bin .../skins/default/textures/icons/SkipBackward_Off.png | Bin .../skins/default/textures/icons/SkipForward_Off.png | Bin .../newview/skins/default/textures/icons/StopReload_Off.png | Bin .../skins/default/textures/icons/StopReload_Over.png | Bin indra/newview/skins/default/textures/icons/Stop_Off.png | Bin .../skins/default/textures/icons/TrashItem_Disabled.png | Bin .../newview/skins/default/textures/icons/TrashItem_Off.png | Bin .../newview/skins/default/textures/icons/TrashItem_Over.png | Bin .../skins/default/textures/icons/TrashItem_Press.png | Bin indra/newview/skins/default/textures/icons/UnZoom_Off.png | Bin indra/newview/skins/default/textures/icons/UpArrow_Off.png | Bin .../newview/skins/default/textures/icons/VoicePTT_Lvl1.png | Bin .../newview/skins/default/textures/icons/VoicePTT_Lvl2.png | Bin .../newview/skins/default/textures/icons/VoicePTT_Lvl3.png | Bin indra/newview/skins/default/textures/icons/VoicePTT_Off.png | Bin indra/newview/skins/default/textures/icons/VoicePTT_On.png | Bin .../skins/default/textures/icons/YouAreHere_Badge.png | Bin indra/newview/skins/default/textures/icons/Zoom_Off.png | Bin .../skins/default/textures/icons/avaline_default_icon.jpg | Bin .../newview/skins/default/textures/icons/back_arrow_off.png | Bin .../skins/default/textures/icons/back_arrow_over.png | Bin .../skins/default/textures/icons/back_arrow_press.png | Bin indra/newview/skins/default/textures/icons/object_icon.png | Bin .../skins/default/textures/icons/parcel_color_EVRY.png | Bin .../skins/default/textures/icons/parcel_color_EXP.png | Bin .../newview/skins/default/textures/icons/parcel_color_M.png | Bin indra/newview/skins/default/textures/icons/unknown_icon.png | Bin indra/newview/skins/default/textures/image_edit_icon.tga | Bin .../newview/skins/default/textures/inv_folder_animation.tga | Bin indra/newview/skins/default/textures/inv_folder_inbox.tga | Bin indra/newview/skins/default/textures/jump_left_in.tga | Bin indra/newview/skins/default/textures/jump_left_out.tga | Bin indra/newview/skins/default/textures/jump_right_in.tga | Bin indra/newview/skins/default/textures/jump_right_out.tga | Bin .../newview/skins/default/textures/lag_status_critical.tga | Bin indra/newview/skins/default/textures/lag_status_good.tga | Bin indra/newview/skins/default/textures/lag_status_warning.tga | Bin indra/newview/skins/default/textures/legend.tga | Bin indra/newview/skins/default/textures/locked_image.j2c | Bin indra/newview/skins/default/textures/map_avatar_16.tga | Bin indra/newview/skins/default/textures/map_avatar_32.tga | Bin indra/newview/skins/default/textures/map_avatar_8.tga | Bin .../newview/skins/default/textures/map_avatar_above_32.tga | Bin indra/newview/skins/default/textures/map_avatar_above_8.tga | Bin .../newview/skins/default/textures/map_avatar_below_32.tga | Bin indra/newview/skins/default/textures/map_avatar_below_8.tga | Bin indra/newview/skins/default/textures/map_avatar_you_32.tga | Bin indra/newview/skins/default/textures/map_event.tga | Bin indra/newview/skins/default/textures/map_event_adult.tga | Bin indra/newview/skins/default/textures/map_event_mature.tga | Bin indra/newview/skins/default/textures/map_home.tga | Bin indra/newview/skins/default/textures/map_infohub.tga | Bin indra/newview/skins/default/textures/map_telehub.tga | Bin indra/newview/skins/default/textures/map_track_16.tga | Bin indra/newview/skins/default/textures/map_track_8.tga | Bin indra/newview/skins/default/textures/menu_separator.png | Bin indra/newview/skins/default/textures/missing_asset.tga | Bin indra/newview/skins/default/textures/mute_icon.tga | Bin .../skins/default/textures/navbar/Arrow_Left_Off.png | Bin .../skins/default/textures/navbar/Arrow_Left_Over.png | Bin .../skins/default/textures/navbar/Arrow_Right_Off.png | Bin .../skins/default/textures/navbar/Arrow_Right_Over.png | Bin .../newview/skins/default/textures/navbar/BuyArrow_Over.png | Bin .../skins/default/textures/navbar/BuyArrow_Press.png | Bin .../skins/default/textures/navbar/Favorite_Link_Over.png | Bin .../skins/default/textures/navbar/Favorite_Star_Active.png | Bin .../skins/default/textures/navbar/Favorite_Star_Off.png | Bin .../skins/default/textures/navbar/Favorite_Star_Over.png | Bin .../skins/default/textures/navbar/Favorite_Star_Press.png | Bin .../skins/default/textures/navbar/FileMenu_Divider.png | Bin indra/newview/skins/default/textures/navbar/Flag.png | Bin indra/newview/skins/default/textures/navbar/Help_Over.png | Bin indra/newview/skins/default/textures/navbar/Help_Press.png | Bin indra/newview/skins/default/textures/navbar/Home_Off.png | Bin indra/newview/skins/default/textures/navbar/Home_Over.png | Bin indra/newview/skins/default/textures/navbar/Info_Off.png | Bin indra/newview/skins/default/textures/navbar/Info_Over.png | Bin indra/newview/skins/default/textures/navbar/Info_Press.png | Bin indra/newview/skins/default/textures/navbar/Lock.png | Bin indra/newview/skins/default/textures/navbar/NavBar_BG.png | Bin .../skins/default/textures/navbar/NavBar_BG_NoFav_Bevel.png | Bin .../skins/default/textures/navbar/NavBar_BG_NoNav_Bevel.png | Bin .../newview/skins/default/textures/navbar/Row_Selection.png | Bin indra/newview/skins/default/textures/navbar/Search.png | Bin .../newview/skins/default/textures/notify_caution_icon.tga | Bin indra/newview/skins/default/textures/pixiesmall.j2c | Bin .../newview/skins/default/textures/places_rating_adult.tga | Bin .../newview/skins/default/textures/places_rating_mature.tga | Bin indra/newview/skins/default/textures/places_rating_pg.tga | Bin indra/newview/skins/default/textures/propertyline.tga | Bin .../skins/default/textures/quick_tips/avatar_free_mode.png | Bin .../skins/default/textures/quick_tips/camera_free_mode.png | Bin .../skins/default/textures/quick_tips/camera_orbit_mode.png | Bin .../skins/default/textures/quick_tips/camera_pan_mode.png | Bin .../textures/quick_tips/camera_preset_front_view.png | Bin .../textures/quick_tips/camera_preset_group_view.png | Bin .../default/textures/quick_tips/camera_preset_rear_view.png | Bin .../skins/default/textures/quick_tips/move_fly_first.png | Bin .../skins/default/textures/quick_tips/move_fly_second.png | Bin .../skins/default/textures/quick_tips/move_run_first.png | Bin .../skins/default/textures/quick_tips/move_run_second.png | Bin .../skins/default/textures/quick_tips/move_walk_first.png | Bin .../skins/default/textures/quick_tips/move_walk_second.png | Bin indra/newview/skins/default/textures/rounded_square.j2c | Bin indra/newview/skins/default/textures/script_error.j2c | Bin indra/newview/skins/default/textures/show_btn.tga | Bin indra/newview/skins/default/textures/show_btn_selected.tga | Bin indra/newview/skins/default/textures/silhouette.j2c | Bin .../newview/skins/default/textures/slim_icon_16_viewer.tga | Bin indra/newview/skins/default/textures/smicon_warn.tga | Bin indra/newview/skins/default/textures/spacer24.tga | Bin indra/newview/skins/default/textures/spacer35.tga | Bin indra/newview/skins/default/textures/square_btn_32x128.tga | Bin .../skins/default/textures/square_btn_selected_32x128.tga | Bin indra/newview/skins/default/textures/startup_logo.j2c | Bin indra/newview/skins/default/textures/status_busy.tga | Bin indra/newview/skins/default/textures/tabarea.tga | Bin .../skins/default/textures/taskpanel/Activate_Checkmark.png | Bin .../default/textures/taskpanel/TabIcon_Appearance_Off.png | Bin .../textures/taskpanel/TabIcon_Appearance_Selected.png | Bin .../skins/default/textures/taskpanel/TabIcon_Close_Off.png | Bin .../skins/default/textures/taskpanel/TabIcon_Home_Off.png | Bin .../default/textures/taskpanel/TabIcon_Home_Selected.png | Bin .../skins/default/textures/taskpanel/TabIcon_Me_Off.png | Bin .../default/textures/taskpanel/TabIcon_Me_Selected.png | Bin .../skins/default/textures/taskpanel/TabIcon_Open_Off.png | Bin .../skins/default/textures/taskpanel/TabIcon_People_Off.png | Bin .../default/textures/taskpanel/TabIcon_People_Selected.png | Bin .../default/textures/taskpanel/TabIcon_Places_Large.png | Bin .../skins/default/textures/taskpanel/TabIcon_Places_Off.png | Bin .../default/textures/taskpanel/TabIcon_Places_Selected.png | Bin .../skins/default/textures/taskpanel/TabIcon_Things_Off.png | Bin .../default/textures/taskpanel/TabIcon_Things_Selected.png | Bin .../skins/default/textures/taskpanel/TaskPanel_Tab_Off.png | Bin .../default/textures/taskpanel/TaskPanel_Tab_Selected.png | Bin indra/newview/skins/default/textures/tearoff_pressed.tga | Bin indra/newview/skins/default/textures/tearoffbox.tga | Bin indra/newview/skins/default/textures/textures.xml | 0 indra/newview/skins/default/textures/transparent.j2c | Bin indra/newview/skins/default/textures/up_arrow.png | Bin indra/newview/skins/default/textures/uv_test1.j2c | Bin indra/newview/skins/default/textures/uv_test2.tga | Bin indra/newview/skins/default/textures/voice_meter_dot.j2c | Bin indra/newview/skins/default/textures/voice_meter_rings.j2c | Bin indra/newview/skins/default/textures/white.tga | Bin indra/newview/skins/default/textures/widgets/Arrow_Down.png | Bin .../skins/default/textures/widgets/Arrow_Small_Left.png | Bin .../skins/default/textures/widgets/Arrow_Small_Right.png | Bin .../skins/default/textures/widgets/Arrow_Small_Up.png | Bin indra/newview/skins/default/textures/widgets/Arrow_Up.png | Bin .../skins/default/textures/widgets/Checkbox_Disabled.png | Bin .../newview/skins/default/textures/widgets/Checkbox_Off.png | Bin .../newview/skins/default/textures/widgets/Checkbox_On.png | Bin .../skins/default/textures/widgets/Checkbox_On_Disabled.png | Bin .../skins/default/textures/widgets/Checkbox_On_Over.png | Bin .../skins/default/textures/widgets/Checkbox_On_Press.png | Bin .../skins/default/textures/widgets/Checkbox_Over.png | Bin .../skins/default/textures/widgets/Checkbox_Press.png | Bin .../skins/default/textures/widgets/ComboButton_Disabled.png | Bin .../skins/default/textures/widgets/ComboButton_Off.png | Bin .../skins/default/textures/widgets/ComboButton_On.png | Bin .../skins/default/textures/widgets/ComboButton_Selected.png | Bin .../skins/default/textures/widgets/ComboButton_UpOff.png | Bin .../default/textures/widgets/ComboButton_UpSelected.png | Bin .../default/textures/widgets/ComboButton_Up_On_Selected.png | Bin .../textures/widgets/DisclosureArrow_Closed_Over.png | Bin .../default/textures/widgets/DisclosureArrow_Opened_Off.png | Bin .../textures/widgets/DisclosureArrow_Opened_Over.png | Bin .../skins/default/textures/widgets/DropDown_Disabled.png | Bin .../newview/skins/default/textures/widgets/DropDown_Off.png | Bin .../newview/skins/default/textures/widgets/DropDown_On.png | Bin .../skins/default/textures/widgets/DropDown_Press.png | Bin indra/newview/skins/default/textures/widgets/DropTarget.png | Bin .../skins/default/textures/widgets/Linden_Dollar_Alert.png | Bin .../default/textures/widgets/Linden_Dollar_Background.png | Bin .../skins/default/textures/widgets/ListItem_Over.png | Bin .../skins/default/textures/widgets/ListItem_Select.png | Bin .../newview/skins/default/textures/widgets/ProgressBar.png | Bin .../skins/default/textures/widgets/ProgressTrack.png | Bin .../skins/default/textures/widgets/PushButton_Disabled.png | Bin .../skins/default/textures/widgets/PushButton_Off.png | Bin .../skins/default/textures/widgets/PushButton_On.png | Bin .../skins/default/textures/widgets/PushButton_On_Over.png | Bin .../default/textures/widgets/PushButton_On_Selected.png | Bin .../skins/default/textures/widgets/PushButton_Over.png | Bin .../skins/default/textures/widgets/PushButton_Press.png | Bin .../skins/default/textures/widgets/PushButton_Selected.png | Bin .../textures/widgets/PushButton_Selected_Disabled.png | Bin .../default/textures/widgets/PushButton_Selected_Over.png | Bin .../default/textures/widgets/PushButton_Selected_Press.png | Bin .../skins/default/textures/widgets/RadioButton_Disabled.png | Bin .../skins/default/textures/widgets/RadioButton_Off.png | Bin .../skins/default/textures/widgets/RadioButton_On.png | Bin .../default/textures/widgets/RadioButton_On_Disabled.png | Bin .../skins/default/textures/widgets/RadioButton_On_Over.png | Bin .../skins/default/textures/widgets/RadioButton_On_Press.png | Bin .../skins/default/textures/widgets/RadioButton_Over.png | Bin .../skins/default/textures/widgets/RadioButton_Press.png | Bin .../skins/default/textures/widgets/ScrollArrow_Down.png | Bin .../default/textures/widgets/ScrollArrow_Down_Opaque.png | Bin .../default/textures/widgets/ScrollArrow_Down_Over.png | Bin .../textures/widgets/ScrollArrow_Down_Over_Opaque.png | Bin .../skins/default/textures/widgets/ScrollArrow_Left.png | Bin .../default/textures/widgets/ScrollArrow_Left_Opaque.png | Bin .../default/textures/widgets/ScrollArrow_Left_Over.png | Bin .../textures/widgets/ScrollArrow_Left_Over_Opaque.png | Bin .../skins/default/textures/widgets/ScrollArrow_Right.png | Bin .../default/textures/widgets/ScrollArrow_Right_Opaque.png | Bin .../default/textures/widgets/ScrollArrow_Right_Over.png | Bin .../textures/widgets/ScrollArrow_Right_Over_Opaque.png | Bin .../skins/default/textures/widgets/ScrollArrow_Up.png | Bin .../default/textures/widgets/ScrollArrow_Up_Opaque.png | Bin .../skins/default/textures/widgets/ScrollArrow_Up_Over.png | Bin .../default/textures/widgets/ScrollArrow_Up_Over_Opaque.png | Bin .../skins/default/textures/widgets/ScrollThumb_Horiz.png | Bin .../default/textures/widgets/ScrollThumb_Horiz_Over.png | Bin .../skins/default/textures/widgets/ScrollThumb_Vert.png | Bin .../default/textures/widgets/ScrollThumb_Vert_Over.png | Bin .../skins/default/textures/widgets/ScrollTrack_Horiz.png | Bin .../skins/default/textures/widgets/ScrollTrack_Vert.png | Bin .../default/textures/widgets/SegmentedBtn_Left_Disabled.png | Bin .../default/textures/widgets/SegmentedBtn_Left_Off.png | Bin .../skins/default/textures/widgets/SegmentedBtn_Left_On.png | Bin .../textures/widgets/SegmentedBtn_Left_On_Disabled.png | Bin .../default/textures/widgets/SegmentedBtn_Left_On_Over.png | Bin .../textures/widgets/SegmentedBtn_Left_On_Selected.png | Bin .../default/textures/widgets/SegmentedBtn_Left_Over.png | Bin .../default/textures/widgets/SegmentedBtn_Left_Press.png | Bin .../default/textures/widgets/SegmentedBtn_Left_Selected.png | Bin .../widgets/SegmentedBtn_Left_Selected_Disabled.png | Bin .../textures/widgets/SegmentedBtn_Left_Selected_Over.png | Bin .../textures/widgets/SegmentedBtn_Left_Selected_Press.png | Bin .../textures/widgets/SegmentedBtn_Middle_Disabled.png | Bin .../default/textures/widgets/SegmentedBtn_Middle_On.png | Bin .../textures/widgets/SegmentedBtn_Middle_On_Over.png | Bin .../textures/widgets/SegmentedBtn_Middle_On_Press.png | Bin .../default/textures/widgets/SegmentedBtn_Middle_Over.png | Bin .../textures/widgets/SegmentedBtn_Middle_Selected.png | Bin .../widgets/SegmentedBtn_Middle_Selected_Disabled.png | Bin .../textures/widgets/SegmentedBtn_Middle_Selected_Over.png | Bin .../textures/widgets/SegmentedBtn_Middle_Selected_Press.png | Bin .../textures/widgets/SegmentedBtn_Right_Disabled.png | Bin .../default/textures/widgets/SegmentedBtn_Right_Off.png | Bin .../default/textures/widgets/SegmentedBtn_Right_On.png | Bin .../default/textures/widgets/SegmentedBtn_Right_On_Over.png | Bin .../textures/widgets/SegmentedBtn_Right_On_Selected.png | Bin .../default/textures/widgets/SegmentedBtn_Right_Over.png | Bin .../default/textures/widgets/SegmentedBtn_Right_Press.png | Bin .../textures/widgets/SegmentedBtn_Right_Selected.png | Bin .../widgets/SegmentedBtn_Right_Selected_Disabled.png | Bin .../textures/widgets/SegmentedBtn_Right_Selected_Over.png | Bin .../textures/widgets/SegmentedBtn_Right_Selected_Press.png | Bin .../skins/default/textures/widgets/SliderThumb_Disabled.png | Bin .../skins/default/textures/widgets/SliderThumb_Off.png | Bin .../skins/default/textures/widgets/SliderThumb_Over.png | Bin .../skins/default/textures/widgets/SliderThumb_Press.png | Bin .../skins/default/textures/widgets/SliderTrack_Horiz.png | Bin .../skins/default/textures/widgets/SliderTrack_Vert.png | Bin .../skins/default/textures/widgets/Stepper_Down_Off.png | Bin .../skins/default/textures/widgets/Stepper_Down_Over.png | Bin .../skins/default/textures/widgets/Stepper_Down_Press.png | Bin .../skins/default/textures/widgets/Stepper_Up_Off.png | Bin .../skins/default/textures/widgets/Stepper_Up_Over.png | Bin .../skins/default/textures/widgets/Stepper_Up_Press.png | Bin .../skins/default/textures/widgets/TextField_Active.png | Bin .../skins/default/textures/widgets/TextField_Disabled.png | Bin .../skins/default/textures/widgets/TextField_Off.png | Bin .../default/textures/widgets/TextField_Search_Active.png | Bin .../default/textures/widgets/TextField_Search_Disabled.png | Bin .../skins/default/textures/widgets/TextField_Search_Off.png | Bin indra/newview/skins/default/textures/widgets/Tooltip.png | Bin .../skins/default/textures/widgets/bevel_background.png | Bin indra/newview/skins/default/textures/widgets/buy_off.png | Bin indra/newview/skins/default/textures/widgets/buy_over.png | Bin indra/newview/skins/default/textures/widgets/buy_press.png | Bin .../newview/skins/default/textures/widgets/jump_left_in.png | Bin .../skins/default/textures/widgets/jump_left_out.png | Bin .../skins/default/textures/widgets/jump_right_in.png | Bin .../skins/default/textures/widgets/jump_right_out.png | Bin indra/newview/skins/default/textures/windows/Dragbar.png | Bin indra/newview/skins/default/textures/windows/Flyout.png | Bin .../skins/default/textures/windows/Flyout_Pointer.png | Bin .../skins/default/textures/windows/Flyout_Pointer_Up.png | Bin .../default/textures/windows/Icon_Close_Foreground.png | Bin .../skins/default/textures/windows/Icon_Close_Press.png | Bin .../skins/default/textures/windows/Icon_Close_Toast.png | Bin .../skins/default/textures/windows/Icon_Dock_Foreground.png | Bin .../skins/default/textures/windows/Icon_Dock_Press.png | Bin .../skins/default/textures/windows/Icon_Gear_Background.png | Bin .../skins/default/textures/windows/Icon_Gear_Foreground.png | Bin .../skins/default/textures/windows/Icon_Gear_Over.png | Bin .../skins/default/textures/windows/Icon_Gear_Press.png | Bin .../skins/default/textures/windows/Icon_Help_Foreground.png | Bin .../skins/default/textures/windows/Icon_Help_Press.png | Bin .../default/textures/windows/Icon_Minimize_Foreground.png | Bin .../skins/default/textures/windows/Icon_Minimize_Press.png | Bin .../default/textures/windows/Icon_Restore_Foreground.png | Bin .../skins/default/textures/windows/Icon_Restore_Press.png | Bin .../default/textures/windows/Icon_Undock_Foreground.png | Bin .../skins/default/textures/windows/Icon_Undock_Press.png | Bin .../skins/default/textures/windows/Inspector_Background.png | Bin .../skins/default/textures/windows/Inspector_Hover.png | Bin .../newview/skins/default/textures/windows/Inspector_I.png | Bin .../skins/default/textures/windows/Resize_Corner.png | Bin .../skins/default/textures/windows/Toast_Background.png | Bin .../skins/default/textures/windows/Toast_CloseBtn.png | Bin indra/newview/skins/default/textures/windows/Toast_Over.png | Bin .../skins/default/textures/windows/Volume_Background.png | Bin .../skins/default/textures/windows/Wearables_Divider.png | Bin .../skins/default/textures/windows/Window_Background.png | Bin .../skins/default/textures/windows/Window_Foreground.png | Bin .../default/textures/windows/Window_NoTitle_Background.png | Bin .../default/textures/windows/Window_NoTitle_Foreground.png | Bin .../newview/skins/default/textures/windows/startup_logo.png | Bin indra/newview/skins/default/textures/world/BeaconArrow.png | Bin indra/newview/skins/default/textures/world/NoEntryLines.png | Bin .../skins/default/textures/world/NoEntryPassLines.png | Bin indra/newview/skins/default/xui/da/floater_about.xml | 0 indra/newview/skins/default/xui/da/floater_about_land.xml | 0 indra/newview/skins/default/xui/da/floater_activeim.xml | 0 .../skins/default/xui/da/floater_animation_preview.xml | 0 indra/newview/skins/default/xui/da/floater_auction.xml | 0 .../newview/skins/default/xui/da/floater_avatar_picker.xml | 0 .../skins/default/xui/da/floater_avatar_textures.xml | 0 indra/newview/skins/default/xui/da/floater_beacons.xml | 0 .../newview/skins/default/xui/da/floater_build_options.xml | 0 indra/newview/skins/default/xui/da/floater_bulk_perms.xml | 0 indra/newview/skins/default/xui/da/floater_bumps.xml | 0 indra/newview/skins/default/xui/da/floater_buy_contents.xml | 0 indra/newview/skins/default/xui/da/floater_buy_currency.xml | 0 .../skins/default/xui/da/floater_buy_currency_html.xml | 0 indra/newview/skins/default/xui/da/floater_buy_land.xml | 0 indra/newview/skins/default/xui/da/floater_buy_object.xml | 0 indra/newview/skins/default/xui/da/floater_camera.xml | 0 indra/newview/skins/default/xui/da/floater_choose_group.xml | 0 indra/newview/skins/default/xui/da/floater_color_picker.xml | 0 indra/newview/skins/default/xui/da/floater_critical.xml | 0 indra/newview/skins/default/xui/da/floater_customize.xml | 0 .../skins/default/xui/da/floater_day_cycle_options.xml | 0 .../skins/default/xui/da/floater_device_settings.xml | 0 indra/newview/skins/default/xui/da/floater_env_settings.xml | 0 indra/newview/skins/default/xui/da/floater_event.xml | 0 indra/newview/skins/default/xui/da/floater_font_test.xml | 0 indra/newview/skins/default/xui/da/floater_gesture.xml | 0 indra/newview/skins/default/xui/da/floater_god_tools.xml | 0 .../skins/default/xui/da/floater_hardware_settings.xml | 0 indra/newview/skins/default/xui/da/floater_help_browser.xml | 0 indra/newview/skins/default/xui/da/floater_hud.xml | 0 indra/newview/skins/default/xui/da/floater_im.xml | 0 indra/newview/skins/default/xui/da/floater_im_container.xml | 0 indra/newview/skins/default/xui/da/floater_im_session.xml | 0 .../newview/skins/default/xui/da/floater_image_preview.xml | 0 .../newview/skins/default/xui/da/floater_incoming_call.xml | 0 indra/newview/skins/default/xui/da/floater_inspect.xml | 0 indra/newview/skins/default/xui/da/floater_inventory.xml | 0 .../default/xui/da/floater_inventory_item_properties.xml | 0 .../skins/default/xui/da/floater_inventory_view_finder.xml | 0 indra/newview/skins/default/xui/da/floater_joystick.xml | 0 indra/newview/skins/default/xui/da/floater_lagmeter.xml | 0 .../newview/skins/default/xui/da/floater_land_holdings.xml | 0 .../newview/skins/default/xui/da/floater_live_lsleditor.xml | 0 indra/newview/skins/default/xui/da/floater_lsl_guide.xml | 0 indra/newview/skins/default/xui/da/floater_map.xml | 0 .../newview/skins/default/xui/da/floater_media_browser.xml | 0 .../newview/skins/default/xui/da/floater_media_settings.xml | 0 indra/newview/skins/default/xui/da/floater_mem_leaking.xml | 0 indra/newview/skins/default/xui/da/floater_moveview.xml | 0 indra/newview/skins/default/xui/da/floater_mute_object.xml | 0 indra/newview/skins/default/xui/da/floater_my_friends.xml | 0 indra/newview/skins/default/xui/da/floater_nearby_chat.xml | 0 indra/newview/skins/default/xui/da/floater_openobject.xml | 0 .../newview/skins/default/xui/da/floater_outfit_save_as.xml | 0 .../newview/skins/default/xui/da/floater_outgoing_call.xml | 0 indra/newview/skins/default/xui/da/floater_pay.xml | 0 indra/newview/skins/default/xui/da/floater_pay_object.xml | 0 indra/newview/skins/default/xui/da/floater_perm_prefs.xml | 0 indra/newview/skins/default/xui/da/floater_postcard.xml | 0 indra/newview/skins/default/xui/da/floater_preferences.xml | 0 .../skins/default/xui/da/floater_preview_animation.xml | 0 .../skins/default/xui/da/floater_preview_classified.xml | 0 .../newview/skins/default/xui/da/floater_preview_event.xml | 0 .../skins/default/xui/da/floater_preview_gesture.xml | 0 .../skins/default/xui/da/floater_preview_gesture_info.xml | 0 .../default/xui/da/floater_preview_gesture_shortcut.xml | 0 .../skins/default/xui/da/floater_preview_gesture_steps.xml | 0 .../skins/default/xui/da/floater_preview_notecard.xml | 0 .../newview/skins/default/xui/da/floater_preview_sound.xml | 0 .../skins/default/xui/da/floater_preview_texture.xml | 0 .../skins/default/xui/da/floater_publish_classified.xml | 0 indra/newview/skins/default/xui/da/floater_region_info.xml | 0 indra/newview/skins/default/xui/da/floater_report_abuse.xml | 0 indra/newview/skins/default/xui/da/floater_script_debug.xml | 0 .../skins/default/xui/da/floater_script_debug_panel.xml | 0 .../newview/skins/default/xui/da/floater_script_limits.xml | 0 .../newview/skins/default/xui/da/floater_script_preview.xml | 0 indra/newview/skins/default/xui/da/floater_script_queue.xml | 0 .../newview/skins/default/xui/da/floater_script_search.xml | 0 indra/newview/skins/default/xui/da/floater_search.xml | 0 indra/newview/skins/default/xui/da/floater_select_key.xml | 0 indra/newview/skins/default/xui/da/floater_sell_land.xml | 0 .../newview/skins/default/xui/da/floater_settings_debug.xml | 0 indra/newview/skins/default/xui/da/floater_snapshot.xml | 0 .../newview/skins/default/xui/da/floater_sound_preview.xml | 0 indra/newview/skins/default/xui/da/floater_statistics.xml | 0 indra/newview/skins/default/xui/da/floater_stats.xml | 0 indra/newview/skins/default/xui/da/floater_sys_well.xml | 0 indra/newview/skins/default/xui/da/floater_telehub.xml | 0 indra/newview/skins/default/xui/da/floater_texture_ctrl.xml | 0 indra/newview/skins/default/xui/da/floater_tools.xml | 0 indra/newview/skins/default/xui/da/floater_top_objects.xml | 0 indra/newview/skins/default/xui/da/floater_tos.xml | 0 indra/newview/skins/default/xui/da/floater_url_entry.xml | 0 .../newview/skins/default/xui/da/floater_voice_controls.xml | 0 indra/newview/skins/default/xui/da/floater_voice_effect.xml | 0 indra/newview/skins/default/xui/da/floater_water.xml | 0 .../skins/default/xui/da/floater_wearable_save_as.xml | 0 .../skins/default/xui/da/floater_whitelist_entry.xml | 0 .../skins/default/xui/da/floater_windlight_options.xml | 0 indra/newview/skins/default/xui/da/floater_window_size.xml | 0 indra/newview/skins/default/xui/da/floater_world_map.xml | 0 indra/newview/skins/default/xui/da/inspect_avatar.xml | 0 indra/newview/skins/default/xui/da/inspect_group.xml | 0 indra/newview/skins/default/xui/da/inspect_object.xml | 0 .../newview/skins/default/xui/da/inspect_remote_object.xml | 0 indra/newview/skins/default/xui/da/language_settings.xml | 0 .../newview/skins/default/xui/da/menu_attachment_other.xml | 0 indra/newview/skins/default/xui/da/menu_attachment_self.xml | 0 indra/newview/skins/default/xui/da/menu_avatar_icon.xml | 0 indra/newview/skins/default/xui/da/menu_avatar_other.xml | 0 indra/newview/skins/default/xui/da/menu_avatar_self.xml | 0 indra/newview/skins/default/xui/da/menu_bottomtray.xml | 0 indra/newview/skins/default/xui/da/menu_cof_attachment.xml | 0 indra/newview/skins/default/xui/da/menu_cof_body_part.xml | 0 indra/newview/skins/default/xui/da/menu_cof_clothing.xml | 0 indra/newview/skins/default/xui/da/menu_cof_gear.xml | 0 indra/newview/skins/default/xui/da/menu_edit.xml | 0 indra/newview/skins/default/xui/da/menu_favorites.xml | 0 indra/newview/skins/default/xui/da/menu_gesture_gear.xml | 0 indra/newview/skins/default/xui/da/menu_group_plus.xml | 0 indra/newview/skins/default/xui/da/menu_hide_navbar.xml | 0 indra/newview/skins/default/xui/da/menu_im_well_button.xml | 0 indra/newview/skins/default/xui/da/menu_imchiclet_adhoc.xml | 0 indra/newview/skins/default/xui/da/menu_imchiclet_group.xml | 0 indra/newview/skins/default/xui/da/menu_imchiclet_p2p.xml | 0 .../skins/default/xui/da/menu_inspect_avatar_gear.xml | 0 .../skins/default/xui/da/menu_inspect_object_gear.xml | 0 .../newview/skins/default/xui/da/menu_inspect_self_gear.xml | 0 .../newview/skins/default/xui/da/menu_inv_offer_chiclet.xml | 0 indra/newview/skins/default/xui/da/menu_inventory.xml | 0 indra/newview/skins/default/xui/da/menu_inventory_add.xml | 0 .../skins/default/xui/da/menu_inventory_gear_default.xml | 0 indra/newview/skins/default/xui/da/menu_land.xml | 0 indra/newview/skins/default/xui/da/menu_landmark.xml | 0 indra/newview/skins/default/xui/da/menu_login.xml | 0 indra/newview/skins/default/xui/da/menu_mini_map.xml | 0 indra/newview/skins/default/xui/da/menu_navbar.xml | 0 indra/newview/skins/default/xui/da/menu_nearby_chat.xml | 0 .../skins/default/xui/da/menu_notification_well_button.xml | 0 indra/newview/skins/default/xui/da/menu_object.xml | 0 indra/newview/skins/default/xui/da/menu_object_icon.xml | 0 indra/newview/skins/default/xui/da/menu_outfit_gear.xml | 0 indra/newview/skins/default/xui/da/menu_outfit_tab.xml | 0 .../newview/skins/default/xui/da/menu_participant_list.xml | 0 .../skins/default/xui/da/menu_people_friends_view_sort.xml | 0 indra/newview/skins/default/xui/da/menu_people_groups.xml | 0 .../skins/default/xui/da/menu_people_groups_view_sort.xml | 0 indra/newview/skins/default/xui/da/menu_people_nearby.xml | 0 .../skins/default/xui/da/menu_people_nearby_multiselect.xml | 0 .../skins/default/xui/da/menu_people_nearby_view_sort.xml | 0 .../skins/default/xui/da/menu_people_recent_view_sort.xml | 0 indra/newview/skins/default/xui/da/menu_picks.xml | 0 indra/newview/skins/default/xui/da/menu_picks_plus.xml | 0 indra/newview/skins/default/xui/da/menu_place.xml | 0 .../newview/skins/default/xui/da/menu_place_add_button.xml | 0 .../skins/default/xui/da/menu_places_gear_folder.xml | 0 .../skins/default/xui/da/menu_places_gear_landmark.xml | 0 .../newview/skins/default/xui/da/menu_profile_overflow.xml | 0 indra/newview/skins/default/xui/da/menu_save_outfit.xml | 0 indra/newview/skins/default/xui/da/menu_script_chiclet.xml | 0 indra/newview/skins/default/xui/da/menu_slurl.xml | 0 .../skins/default/xui/da/menu_teleport_history_gear.xml | 0 .../skins/default/xui/da/menu_teleport_history_item.xml | 0 .../skins/default/xui/da/menu_teleport_history_tab.xml | 0 indra/newview/skins/default/xui/da/menu_text_editor.xml | 0 indra/newview/skins/default/xui/da/menu_topinfobar.xml | 0 indra/newview/skins/default/xui/da/menu_url_agent.xml | 0 indra/newview/skins/default/xui/da/menu_url_group.xml | 0 indra/newview/skins/default/xui/da/menu_url_http.xml | 0 indra/newview/skins/default/xui/da/menu_url_inventory.xml | 0 indra/newview/skins/default/xui/da/menu_url_map.xml | 0 indra/newview/skins/default/xui/da/menu_url_objectim.xml | 0 indra/newview/skins/default/xui/da/menu_url_parcel.xml | 0 indra/newview/skins/default/xui/da/menu_url_slapp.xml | 0 indra/newview/skins/default/xui/da/menu_url_slurl.xml | 0 indra/newview/skins/default/xui/da/menu_url_teleport.xml | 0 indra/newview/skins/default/xui/da/menu_viewer.xml | 0 .../skins/default/xui/da/menu_wearable_list_item.xml | 0 indra/newview/skins/default/xui/da/menu_wearing_gear.xml | 0 indra/newview/skins/default/xui/da/menu_wearing_tab.xml | 0 indra/newview/skins/default/xui/da/mime_types.xml | 0 indra/newview/skins/default/xui/da/mime_types_linux.xml | 0 indra/newview/skins/default/xui/da/mime_types_mac.xml | 0 indra/newview/skins/default/xui/da/notifications.xml | 0 indra/newview/skins/default/xui/da/outfit_accordion_tab.xml | 0 .../skins/default/xui/da/panel_active_object_row.xml | 0 .../skins/default/xui/da/panel_adhoc_control_panel.xml | 0 indra/newview/skins/default/xui/da/panel_audio_device.xml | 0 .../newview/skins/default/xui/da/panel_avatar_list_item.xml | 0 .../skins/default/xui/da/panel_block_list_sidetray.xml | 0 .../skins/default/xui/da/panel_body_parts_list_item.xml | 0 .../default/xui/da/panel_bodyparts_list_button_bar.xml | 0 indra/newview/skins/default/xui/da/panel_bottomtray.xml | 0 .../newview/skins/default/xui/da/panel_bottomtray_lite.xml | 0 .../newview/skins/default/xui/da/panel_classified_info.xml | 0 .../skins/default/xui/da/panel_clothing_list_button_bar.xml | 0 .../skins/default/xui/da/panel_clothing_list_item.xml | 0 indra/newview/skins/default/xui/da/panel_cof_wearables.xml | 0 .../default/xui/da/panel_deletable_wearable_list_item.xml | 0 .../skins/default/xui/da/panel_dummy_clothing_list_item.xml | 0 indra/newview/skins/default/xui/da/panel_edit_alpha.xml | 0 .../newview/skins/default/xui/da/panel_edit_classified.xml | 0 indra/newview/skins/default/xui/da/panel_edit_eyes.xml | 0 indra/newview/skins/default/xui/da/panel_edit_gloves.xml | 0 indra/newview/skins/default/xui/da/panel_edit_hair.xml | 0 indra/newview/skins/default/xui/da/panel_edit_jacket.xml | 0 indra/newview/skins/default/xui/da/panel_edit_pants.xml | 0 indra/newview/skins/default/xui/da/panel_edit_pick.xml | 0 indra/newview/skins/default/xui/da/panel_edit_profile.xml | 0 indra/newview/skins/default/xui/da/panel_edit_shape.xml | 0 indra/newview/skins/default/xui/da/panel_edit_shirt.xml | 0 indra/newview/skins/default/xui/da/panel_edit_shoes.xml | 0 indra/newview/skins/default/xui/da/panel_edit_skin.xml | 0 indra/newview/skins/default/xui/da/panel_edit_skirt.xml | 0 indra/newview/skins/default/xui/da/panel_edit_socks.xml | 0 indra/newview/skins/default/xui/da/panel_edit_tattoo.xml | 0 .../newview/skins/default/xui/da/panel_edit_underpants.xml | 0 .../newview/skins/default/xui/da/panel_edit_undershirt.xml | 0 indra/newview/skins/default/xui/da/panel_edit_wearable.xml | 0 indra/newview/skins/default/xui/da/panel_friends.xml | 0 .../skins/default/xui/da/panel_group_control_panel.xml | 0 indra/newview/skins/default/xui/da/panel_group_general.xml | 0 .../skins/default/xui/da/panel_group_info_sidetray.xml | 0 indra/newview/skins/default/xui/da/panel_group_invite.xml | 0 .../newview/skins/default/xui/da/panel_group_land_money.xml | 0 .../newview/skins/default/xui/da/panel_group_list_item.xml | 0 indra/newview/skins/default/xui/da/panel_group_notices.xml | 0 indra/newview/skins/default/xui/da/panel_group_notify.xml | 0 indra/newview/skins/default/xui/da/panel_group_roles.xml | 0 indra/newview/skins/default/xui/da/panel_groups.xml | 0 .../newview/skins/default/xui/da/panel_im_control_panel.xml | 0 indra/newview/skins/default/xui/da/panel_inventory_item.xml | 0 indra/newview/skins/default/xui/da/panel_landmark_info.xml | 0 indra/newview/skins/default/xui/da/panel_landmarks.xml | 0 indra/newview/skins/default/xui/da/panel_login.xml | 0 indra/newview/skins/default/xui/da/panel_main_inventory.xml | 0 indra/newview/skins/default/xui/da/panel_me.xml | 0 .../skins/default/xui/da/panel_media_settings_general.xml | 0 .../default/xui/da/panel_media_settings_permissions.xml | 0 .../skins/default/xui/da/panel_media_settings_security.xml | 0 indra/newview/skins/default/xui/da/panel_my_profile.xml | 0 indra/newview/skins/default/xui/da/panel_navigation_bar.xml | 0 indra/newview/skins/default/xui/da/panel_nearby_chat.xml | 0 .../newview/skins/default/xui/da/panel_nearby_chat_bar.xml | 0 indra/newview/skins/default/xui/da/panel_nearby_media.xml | 0 indra/newview/skins/default/xui/da/panel_notes.xml | 0 indra/newview/skins/default/xui/da/panel_online_status.xml | 0 .../skins/default/xui/da/panel_online_status_toast.xml | 0 indra/newview/skins/default/xui/da/panel_outfit_edit.xml | 0 .../skins/default/xui/da/panel_outfits_inventory.xml | 0 .../default/xui/da/panel_outfits_inventory_gear_default.xml | 0 indra/newview/skins/default/xui/da/panel_outfits_list.xml | 0 .../newview/skins/default/xui/da/panel_outfits_wearing.xml | 0 indra/newview/skins/default/xui/da/panel_people.xml | 0 indra/newview/skins/default/xui/da/panel_pick_info.xml | 0 indra/newview/skins/default/xui/da/panel_picks.xml | 0 indra/newview/skins/default/xui/da/panel_place_profile.xml | 0 indra/newview/skins/default/xui/da/panel_places.xml | 0 .../skins/default/xui/da/panel_preferences_advanced.xml | 0 .../skins/default/xui/da/panel_preferences_alerts.xml | 0 .../newview/skins/default/xui/da/panel_preferences_chat.xml | 0 .../skins/default/xui/da/panel_preferences_general.xml | 0 .../skins/default/xui/da/panel_preferences_graphics1.xml | 0 .../skins/default/xui/da/panel_preferences_privacy.xml | 0 .../skins/default/xui/da/panel_preferences_setup.xml | 0 .../skins/default/xui/da/panel_preferences_sound.xml | 0 .../skins/default/xui/da/panel_prim_media_controls.xml | 0 indra/newview/skins/default/xui/da/panel_profile.xml | 0 indra/newview/skins/default/xui/da/panel_profile_view.xml | 0 .../newview/skins/default/xui/da/panel_region_covenant.xml | 0 indra/newview/skins/default/xui/da/panel_region_debug.xml | 0 indra/newview/skins/default/xui/da/panel_region_estate.xml | 0 indra/newview/skins/default/xui/da/panel_region_general.xml | 0 .../skins/default/xui/da/panel_region_general_layout.xml | 0 indra/newview/skins/default/xui/da/panel_region_terrain.xml | 0 indra/newview/skins/default/xui/da/panel_region_texture.xml | 0 indra/newview/skins/default/xui/da/panel_script_ed.xml | 0 .../skins/default/xui/da/panel_script_limits_my_avatar.xml | 0 .../default/xui/da/panel_script_limits_region_memory.xml | 0 .../newview/skins/default/xui/da/panel_scrolling_param.xml | 0 indra/newview/skins/default/xui/da/panel_side_tray.xml | 0 .../skins/default/xui/da/panel_side_tray_tab_caption.xml | 0 .../skins/default/xui/da/panel_stand_stop_flying.xml | 0 indra/newview/skins/default/xui/da/panel_status_bar.xml | 0 .../newview/skins/default/xui/da/panel_teleport_history.xml | 0 .../skins/default/xui/da/panel_teleport_history_item.xml | 0 indra/newview/skins/default/xui/da/panel_voice_effect.xml | 0 indra/newview/skins/default/xui/da/panel_world_map.xml | 0 indra/newview/skins/default/xui/da/role_actions.xml | 0 indra/newview/skins/default/xui/da/sidepanel_appearance.xml | 0 indra/newview/skins/default/xui/da/sidepanel_inventory.xml | 0 indra/newview/skins/default/xui/da/sidepanel_item_info.xml | 0 indra/newview/skins/default/xui/da/sidepanel_task_info.xml | 0 indra/newview/skins/default/xui/da/strings.xml | 0 indra/newview/skins/default/xui/da/teleport_strings.xml | 0 indra/newview/skins/default/xui/da/xui_version.xml | 0 indra/newview/skins/default/xui/de/floater_about.xml | 0 indra/newview/skins/default/xui/de/floater_about_land.xml | 0 indra/newview/skins/default/xui/de/floater_activeim.xml | 0 .../skins/default/xui/de/floater_animation_preview.xml | 0 indra/newview/skins/default/xui/de/floater_auction.xml | 0 .../newview/skins/default/xui/de/floater_avatar_picker.xml | 0 .../skins/default/xui/de/floater_avatar_textures.xml | 0 indra/newview/skins/default/xui/de/floater_beacons.xml | 0 .../newview/skins/default/xui/de/floater_build_options.xml | 0 indra/newview/skins/default/xui/de/floater_bulk_perms.xml | 0 indra/newview/skins/default/xui/de/floater_bumps.xml | 0 indra/newview/skins/default/xui/de/floater_buy_contents.xml | 0 indra/newview/skins/default/xui/de/floater_buy_currency.xml | 0 .../skins/default/xui/de/floater_buy_currency_html.xml | 0 indra/newview/skins/default/xui/de/floater_buy_land.xml | 0 indra/newview/skins/default/xui/de/floater_buy_object.xml | 0 indra/newview/skins/default/xui/de/floater_camera.xml | 0 indra/newview/skins/default/xui/de/floater_choose_group.xml | 0 indra/newview/skins/default/xui/de/floater_color_picker.xml | 0 indra/newview/skins/default/xui/de/floater_critical.xml | 0 indra/newview/skins/default/xui/de/floater_customize.xml | 0 .../skins/default/xui/de/floater_day_cycle_options.xml | 0 .../skins/default/xui/de/floater_device_settings.xml | 0 indra/newview/skins/default/xui/de/floater_env_settings.xml | 0 indra/newview/skins/default/xui/de/floater_event.xml | 0 .../newview/skins/default/xui/de/floater_first_time_tip.xml | 0 indra/newview/skins/default/xui/de/floater_font_test.xml | 0 indra/newview/skins/default/xui/de/floater_gesture.xml | 0 indra/newview/skins/default/xui/de/floater_god_tools.xml | 0 .../skins/default/xui/de/floater_hardware_settings.xml | 0 indra/newview/skins/default/xui/de/floater_help_browser.xml | 0 indra/newview/skins/default/xui/de/floater_hud.xml | 0 indra/newview/skins/default/xui/de/floater_im.xml | 0 indra/newview/skins/default/xui/de/floater_im_container.xml | 0 indra/newview/skins/default/xui/de/floater_im_session.xml | 0 .../newview/skins/default/xui/de/floater_image_preview.xml | 0 .../newview/skins/default/xui/de/floater_incoming_call.xml | 0 indra/newview/skins/default/xui/de/floater_inspect.xml | 0 indra/newview/skins/default/xui/de/floater_inventory.xml | 0 .../default/xui/de/floater_inventory_item_properties.xml | 0 .../skins/default/xui/de/floater_inventory_view_finder.xml | 0 indra/newview/skins/default/xui/de/floater_joystick.xml | 0 indra/newview/skins/default/xui/de/floater_lagmeter.xml | 0 .../newview/skins/default/xui/de/floater_land_holdings.xml | 0 .../newview/skins/default/xui/de/floater_live_lsleditor.xml | 0 indra/newview/skins/default/xui/de/floater_lsl_guide.xml | 0 indra/newview/skins/default/xui/de/floater_map.xml | 0 .../newview/skins/default/xui/de/floater_media_browser.xml | 0 .../newview/skins/default/xui/de/floater_media_settings.xml | 0 indra/newview/skins/default/xui/de/floater_mem_leaking.xml | 0 indra/newview/skins/default/xui/de/floater_moveview.xml | 0 indra/newview/skins/default/xui/de/floater_mute_object.xml | 0 indra/newview/skins/default/xui/de/floater_my_friends.xml | 0 indra/newview/skins/default/xui/de/floater_nearby_chat.xml | 0 indra/newview/skins/default/xui/de/floater_notification.xml | 0 .../skins/default/xui/de/floater_notifications_console.xml | 0 indra/newview/skins/default/xui/de/floater_openobject.xml | 0 .../newview/skins/default/xui/de/floater_outfit_save_as.xml | 0 .../newview/skins/default/xui/de/floater_outgoing_call.xml | 0 indra/newview/skins/default/xui/de/floater_pay.xml | 0 indra/newview/skins/default/xui/de/floater_pay_object.xml | 0 indra/newview/skins/default/xui/de/floater_perm_prefs.xml | 0 indra/newview/skins/default/xui/de/floater_post_process.xml | 0 indra/newview/skins/default/xui/de/floater_postcard.xml | 0 indra/newview/skins/default/xui/de/floater_preferences.xml | 0 .../skins/default/xui/de/floater_preview_animation.xml | 0 .../skins/default/xui/de/floater_preview_classified.xml | 0 .../newview/skins/default/xui/de/floater_preview_event.xml | 0 .../skins/default/xui/de/floater_preview_gesture.xml | 0 .../skins/default/xui/de/floater_preview_gesture_info.xml | 0 .../default/xui/de/floater_preview_gesture_shortcut.xml | 0 .../skins/default/xui/de/floater_preview_gesture_steps.xml | 0 .../skins/default/xui/de/floater_preview_notecard.xml | 0 .../newview/skins/default/xui/de/floater_preview_sound.xml | 0 .../skins/default/xui/de/floater_preview_texture.xml | 0 .../skins/default/xui/de/floater_publish_classified.xml | 0 indra/newview/skins/default/xui/de/floater_region_info.xml | 0 indra/newview/skins/default/xui/de/floater_report_abuse.xml | 0 indra/newview/skins/default/xui/de/floater_script_debug.xml | 0 .../skins/default/xui/de/floater_script_debug_panel.xml | 0 .../newview/skins/default/xui/de/floater_script_limits.xml | 0 .../newview/skins/default/xui/de/floater_script_preview.xml | 0 indra/newview/skins/default/xui/de/floater_script_queue.xml | 0 .../newview/skins/default/xui/de/floater_script_search.xml | 0 indra/newview/skins/default/xui/de/floater_search.xml | 0 indra/newview/skins/default/xui/de/floater_select_key.xml | 0 indra/newview/skins/default/xui/de/floater_sell_land.xml | 0 .../newview/skins/default/xui/de/floater_settings_debug.xml | 0 indra/newview/skins/default/xui/de/floater_snapshot.xml | 0 .../newview/skins/default/xui/de/floater_sound_preview.xml | 0 indra/newview/skins/default/xui/de/floater_statistics.xml | 0 indra/newview/skins/default/xui/de/floater_stats.xml | 0 indra/newview/skins/default/xui/de/floater_sys_well.xml | 0 indra/newview/skins/default/xui/de/floater_telehub.xml | 0 indra/newview/skins/default/xui/de/floater_texture_ctrl.xml | 0 indra/newview/skins/default/xui/de/floater_tools.xml | 0 indra/newview/skins/default/xui/de/floater_top_objects.xml | 0 indra/newview/skins/default/xui/de/floater_tos.xml | 0 indra/newview/skins/default/xui/de/floater_url_entry.xml | 0 .../newview/skins/default/xui/de/floater_voice_controls.xml | 0 indra/newview/skins/default/xui/de/floater_voice_effect.xml | 0 indra/newview/skins/default/xui/de/floater_water.xml | 0 .../skins/default/xui/de/floater_wearable_save_as.xml | 0 .../skins/default/xui/de/floater_whitelist_entry.xml | 0 .../skins/default/xui/de/floater_windlight_options.xml | 0 indra/newview/skins/default/xui/de/floater_window_size.xml | 0 indra/newview/skins/default/xui/de/floater_world_map.xml | 0 indra/newview/skins/default/xui/de/inspect_avatar.xml | 0 indra/newview/skins/default/xui/de/inspect_group.xml | 0 indra/newview/skins/default/xui/de/inspect_object.xml | 0 .../newview/skins/default/xui/de/inspect_remote_object.xml | 0 indra/newview/skins/default/xui/de/language_settings.xml | 0 .../newview/skins/default/xui/de/menu_attachment_other.xml | 0 indra/newview/skins/default/xui/de/menu_attachment_self.xml | 0 indra/newview/skins/default/xui/de/menu_avatar_icon.xml | 0 indra/newview/skins/default/xui/de/menu_avatar_other.xml | 0 indra/newview/skins/default/xui/de/menu_avatar_self.xml | 0 indra/newview/skins/default/xui/de/menu_bottomtray.xml | 0 indra/newview/skins/default/xui/de/menu_cof_attachment.xml | 0 indra/newview/skins/default/xui/de/menu_cof_body_part.xml | 0 indra/newview/skins/default/xui/de/menu_cof_clothing.xml | 0 indra/newview/skins/default/xui/de/menu_cof_gear.xml | 0 indra/newview/skins/default/xui/de/menu_edit.xml | 0 indra/newview/skins/default/xui/de/menu_favorites.xml | 0 indra/newview/skins/default/xui/de/menu_gesture_gear.xml | 0 indra/newview/skins/default/xui/de/menu_group_plus.xml | 0 indra/newview/skins/default/xui/de/menu_hide_navbar.xml | 0 indra/newview/skins/default/xui/de/menu_im_well_button.xml | 0 indra/newview/skins/default/xui/de/menu_imchiclet_adhoc.xml | 0 indra/newview/skins/default/xui/de/menu_imchiclet_group.xml | 0 indra/newview/skins/default/xui/de/menu_imchiclet_p2p.xml | 0 .../skins/default/xui/de/menu_inspect_avatar_gear.xml | 0 .../skins/default/xui/de/menu_inspect_object_gear.xml | 0 .../newview/skins/default/xui/de/menu_inspect_self_gear.xml | 0 .../newview/skins/default/xui/de/menu_inv_offer_chiclet.xml | 0 indra/newview/skins/default/xui/de/menu_inventory.xml | 0 indra/newview/skins/default/xui/de/menu_inventory_add.xml | 0 .../skins/default/xui/de/menu_inventory_gear_default.xml | 0 indra/newview/skins/default/xui/de/menu_land.xml | 0 indra/newview/skins/default/xui/de/menu_landmark.xml | 0 indra/newview/skins/default/xui/de/menu_login.xml | 0 indra/newview/skins/default/xui/de/menu_mini_map.xml | 0 indra/newview/skins/default/xui/de/menu_navbar.xml | 0 indra/newview/skins/default/xui/de/menu_nearby_chat.xml | 0 .../skins/default/xui/de/menu_notification_well_button.xml | 0 indra/newview/skins/default/xui/de/menu_object.xml | 0 indra/newview/skins/default/xui/de/menu_object_icon.xml | 0 indra/newview/skins/default/xui/de/menu_outfit_gear.xml | 0 indra/newview/skins/default/xui/de/menu_outfit_tab.xml | 0 .../newview/skins/default/xui/de/menu_participant_list.xml | 0 .../skins/default/xui/de/menu_people_friends_view_sort.xml | 0 indra/newview/skins/default/xui/de/menu_people_groups.xml | 0 .../skins/default/xui/de/menu_people_groups_view_sort.xml | 0 indra/newview/skins/default/xui/de/menu_people_nearby.xml | 0 .../skins/default/xui/de/menu_people_nearby_multiselect.xml | 0 .../skins/default/xui/de/menu_people_nearby_view_sort.xml | 0 .../skins/default/xui/de/menu_people_recent_view_sort.xml | 0 indra/newview/skins/default/xui/de/menu_picks.xml | 0 indra/newview/skins/default/xui/de/menu_picks_plus.xml | 0 indra/newview/skins/default/xui/de/menu_place.xml | 0 .../newview/skins/default/xui/de/menu_place_add_button.xml | 0 .../skins/default/xui/de/menu_places_gear_folder.xml | 0 .../skins/default/xui/de/menu_places_gear_landmark.xml | 0 .../newview/skins/default/xui/de/menu_profile_overflow.xml | 0 indra/newview/skins/default/xui/de/menu_save_outfit.xml | 0 indra/newview/skins/default/xui/de/menu_script_chiclet.xml | 0 indra/newview/skins/default/xui/de/menu_slurl.xml | 0 .../skins/default/xui/de/menu_teleport_history_gear.xml | 0 .../skins/default/xui/de/menu_teleport_history_item.xml | 0 .../skins/default/xui/de/menu_teleport_history_tab.xml | 0 indra/newview/skins/default/xui/de/menu_text_editor.xml | 0 indra/newview/skins/default/xui/de/menu_topinfobar.xml | 0 indra/newview/skins/default/xui/de/menu_url_agent.xml | 0 indra/newview/skins/default/xui/de/menu_url_group.xml | 0 indra/newview/skins/default/xui/de/menu_url_http.xml | 0 indra/newview/skins/default/xui/de/menu_url_inventory.xml | 0 indra/newview/skins/default/xui/de/menu_url_map.xml | 0 indra/newview/skins/default/xui/de/menu_url_objectim.xml | 0 indra/newview/skins/default/xui/de/menu_url_parcel.xml | 0 indra/newview/skins/default/xui/de/menu_url_slapp.xml | 0 indra/newview/skins/default/xui/de/menu_url_slurl.xml | 0 indra/newview/skins/default/xui/de/menu_url_teleport.xml | 0 indra/newview/skins/default/xui/de/menu_viewer.xml | 0 .../skins/default/xui/de/menu_wearable_list_item.xml | 0 indra/newview/skins/default/xui/de/menu_wearing_gear.xml | 0 indra/newview/skins/default/xui/de/menu_wearing_tab.xml | 0 indra/newview/skins/default/xui/de/mime_types.xml | 0 indra/newview/skins/default/xui/de/mime_types_linux.xml | 0 indra/newview/skins/default/xui/de/mime_types_mac.xml | 0 indra/newview/skins/default/xui/de/notifications.xml | 0 indra/newview/skins/default/xui/de/outfit_accordion_tab.xml | 0 .../skins/default/xui/de/panel_active_object_row.xml | 0 indra/newview/skins/default/xui/de/panel_activeim_row.xml | 0 .../skins/default/xui/de/panel_adhoc_control_panel.xml | 0 indra/newview/skins/default/xui/de/panel_audio_device.xml | 0 .../newview/skins/default/xui/de/panel_avatar_list_item.xml | 0 indra/newview/skins/default/xui/de/panel_avatar_tag.xml | 0 .../skins/default/xui/de/panel_block_list_sidetray.xml | 0 .../skins/default/xui/de/panel_body_parts_list_item.xml | 0 .../default/xui/de/panel_bodyparts_list_button_bar.xml | 0 indra/newview/skins/default/xui/de/panel_bottomtray.xml | 0 .../newview/skins/default/xui/de/panel_bottomtray_lite.xml | 0 indra/newview/skins/default/xui/de/panel_chat_header.xml | 0 .../newview/skins/default/xui/de/panel_classified_info.xml | 0 .../skins/default/xui/de/panel_clothing_list_button_bar.xml | 0 .../skins/default/xui/de/panel_clothing_list_item.xml | 0 indra/newview/skins/default/xui/de/panel_cof_wearables.xml | 0 .../default/xui/de/panel_deletable_wearable_list_item.xml | 0 .../skins/default/xui/de/panel_dummy_clothing_list_item.xml | 0 indra/newview/skins/default/xui/de/panel_edit_alpha.xml | 0 .../newview/skins/default/xui/de/panel_edit_classified.xml | 0 indra/newview/skins/default/xui/de/panel_edit_eyes.xml | 0 indra/newview/skins/default/xui/de/panel_edit_gloves.xml | 0 indra/newview/skins/default/xui/de/panel_edit_hair.xml | 0 indra/newview/skins/default/xui/de/panel_edit_jacket.xml | 0 indra/newview/skins/default/xui/de/panel_edit_pants.xml | 0 indra/newview/skins/default/xui/de/panel_edit_pick.xml | 0 indra/newview/skins/default/xui/de/panel_edit_profile.xml | 0 indra/newview/skins/default/xui/de/panel_edit_shape.xml | 0 indra/newview/skins/default/xui/de/panel_edit_shirt.xml | 0 indra/newview/skins/default/xui/de/panel_edit_shoes.xml | 0 indra/newview/skins/default/xui/de/panel_edit_skin.xml | 0 indra/newview/skins/default/xui/de/panel_edit_skirt.xml | 0 indra/newview/skins/default/xui/de/panel_edit_socks.xml | 0 indra/newview/skins/default/xui/de/panel_edit_tattoo.xml | 0 .../newview/skins/default/xui/de/panel_edit_underpants.xml | 0 .../newview/skins/default/xui/de/panel_edit_undershirt.xml | 0 indra/newview/skins/default/xui/de/panel_edit_wearable.xml | 0 indra/newview/skins/default/xui/de/panel_friends.xml | 0 .../skins/default/xui/de/panel_group_control_panel.xml | 0 indra/newview/skins/default/xui/de/panel_group_general.xml | 0 .../skins/default/xui/de/panel_group_info_sidetray.xml | 0 indra/newview/skins/default/xui/de/panel_group_invite.xml | 0 .../newview/skins/default/xui/de/panel_group_land_money.xml | 0 .../newview/skins/default/xui/de/panel_group_list_item.xml | 0 indra/newview/skins/default/xui/de/panel_group_notices.xml | 0 indra/newview/skins/default/xui/de/panel_group_notify.xml | 0 indra/newview/skins/default/xui/de/panel_group_roles.xml | 0 indra/newview/skins/default/xui/de/panel_groups.xml | 0 .../newview/skins/default/xui/de/panel_im_control_panel.xml | 0 .../newview/skins/default/xui/de/panel_instant_message.xml | 0 indra/newview/skins/default/xui/de/panel_inventory_item.xml | 0 indra/newview/skins/default/xui/de/panel_landmark_info.xml | 0 indra/newview/skins/default/xui/de/panel_landmarks.xml | 0 indra/newview/skins/default/xui/de/panel_login.xml | 0 indra/newview/skins/default/xui/de/panel_main_inventory.xml | 0 indra/newview/skins/default/xui/de/panel_me.xml | 0 .../skins/default/xui/de/panel_media_settings_general.xml | 0 .../default/xui/de/panel_media_settings_permissions.xml | 0 .../skins/default/xui/de/panel_media_settings_security.xml | 0 indra/newview/skins/default/xui/de/panel_my_profile.xml | 0 indra/newview/skins/default/xui/de/panel_navigation_bar.xml | 0 indra/newview/skins/default/xui/de/panel_nearby_chat.xml | 0 .../newview/skins/default/xui/de/panel_nearby_chat_bar.xml | 0 indra/newview/skins/default/xui/de/panel_nearby_media.xml | 0 indra/newview/skins/default/xui/de/panel_notes.xml | 0 .../skins/default/xui/de/panel_notifications_channel.xml | 0 indra/newview/skins/default/xui/de/panel_online_status.xml | 0 .../skins/default/xui/de/panel_online_status_toast.xml | 0 indra/newview/skins/default/xui/de/panel_outfit_edit.xml | 0 .../skins/default/xui/de/panel_outfits_inventory.xml | 0 .../default/xui/de/panel_outfits_inventory_gear_default.xml | 0 indra/newview/skins/default/xui/de/panel_outfits_list.xml | 0 .../newview/skins/default/xui/de/panel_outfits_wearing.xml | 0 indra/newview/skins/default/xui/de/panel_people.xml | 0 indra/newview/skins/default/xui/de/panel_pick_info.xml | 0 indra/newview/skins/default/xui/de/panel_picks.xml | 0 indra/newview/skins/default/xui/de/panel_place_profile.xml | 0 indra/newview/skins/default/xui/de/panel_places.xml | 0 .../skins/default/xui/de/panel_preferences_advanced.xml | 0 .../skins/default/xui/de/panel_preferences_alerts.xml | 0 .../newview/skins/default/xui/de/panel_preferences_chat.xml | 0 .../skins/default/xui/de/panel_preferences_general.xml | 0 .../skins/default/xui/de/panel_preferences_graphics1.xml | 0 .../skins/default/xui/de/panel_preferences_privacy.xml | 0 .../skins/default/xui/de/panel_preferences_setup.xml | 0 .../skins/default/xui/de/panel_preferences_sound.xml | 0 .../skins/default/xui/de/panel_prim_media_controls.xml | 0 indra/newview/skins/default/xui/de/panel_profile.xml | 0 indra/newview/skins/default/xui/de/panel_profile_view.xml | 0 .../newview/skins/default/xui/de/panel_region_covenant.xml | 0 indra/newview/skins/default/xui/de/panel_region_debug.xml | 0 indra/newview/skins/default/xui/de/panel_region_estate.xml | 0 indra/newview/skins/default/xui/de/panel_region_general.xml | 0 .../skins/default/xui/de/panel_region_general_layout.xml | 0 indra/newview/skins/default/xui/de/panel_region_terrain.xml | 0 indra/newview/skins/default/xui/de/panel_region_texture.xml | 0 indra/newview/skins/default/xui/de/panel_script_ed.xml | 0 .../skins/default/xui/de/panel_script_limits_my_avatar.xml | 0 .../default/xui/de/panel_script_limits_region_memory.xml | 0 .../newview/skins/default/xui/de/panel_scrolling_param.xml | 0 indra/newview/skins/default/xui/de/panel_side_tray.xml | 0 .../skins/default/xui/de/panel_side_tray_tab_caption.xml | 0 .../skins/default/xui/de/panel_sidetray_home_tab.xml | 0 .../skins/default/xui/de/panel_stand_stop_flying.xml | 0 indra/newview/skins/default/xui/de/panel_status_bar.xml | 0 indra/newview/skins/default/xui/de/panel_sys_well_item.xml | 0 .../newview/skins/default/xui/de/panel_teleport_history.xml | 0 .../skins/default/xui/de/panel_teleport_history_item.xml | 0 indra/newview/skins/default/xui/de/panel_voice_effect.xml | 0 indra/newview/skins/default/xui/de/panel_world_map.xml | 0 indra/newview/skins/default/xui/de/role_actions.xml | 0 indra/newview/skins/default/xui/de/sidepanel_appearance.xml | 0 indra/newview/skins/default/xui/de/sidepanel_inventory.xml | 0 indra/newview/skins/default/xui/de/sidepanel_item_info.xml | 0 indra/newview/skins/default/xui/de/sidepanel_task_info.xml | 0 indra/newview/skins/default/xui/de/strings.xml | 0 indra/newview/skins/default/xui/de/teleport_strings.xml | 0 indra/newview/skins/default/xui/de/xui_version.xml | 0 indra/newview/skins/default/xui/en/accordion_drag.xml | 0 indra/newview/skins/default/xui/en/accordion_parent.xml | 0 indra/newview/skins/default/xui/en/alert_button.xml | 0 indra/newview/skins/default/xui/en/alert_check_box.xml | 0 indra/newview/skins/default/xui/en/alert_icon.xml | 0 indra/newview/skins/default/xui/en/alert_line_editor.xml | 0 indra/newview/skins/default/xui/en/favorites_bar_button.xml | 0 indra/newview/skins/default/xui/en/floater_aaa.xml | 0 indra/newview/skins/default/xui/en/floater_about.xml | 0 indra/newview/skins/default/xui/en/floater_about_land.xml | 0 indra/newview/skins/default/xui/en/floater_activeim.xml | 0 .../skins/default/xui/en/floater_animation_preview.xml | 0 indra/newview/skins/default/xui/en/floater_auction.xml | 0 .../newview/skins/default/xui/en/floater_avatar_picker.xml | 0 .../skins/default/xui/en/floater_avatar_textures.xml | 0 indra/newview/skins/default/xui/en/floater_beacons.xml | 0 .../newview/skins/default/xui/en/floater_build_options.xml | 0 indra/newview/skins/default/xui/en/floater_bulk_perms.xml | 0 indra/newview/skins/default/xui/en/floater_bumps.xml | 0 indra/newview/skins/default/xui/en/floater_buy_contents.xml | 0 indra/newview/skins/default/xui/en/floater_buy_currency.xml | 0 .../skins/default/xui/en/floater_buy_currency_html.xml | 0 indra/newview/skins/default/xui/en/floater_buy_land.xml | 0 indra/newview/skins/default/xui/en/floater_buy_object.xml | 0 indra/newview/skins/default/xui/en/floater_camera.xml | 0 indra/newview/skins/default/xui/en/floater_choose_group.xml | 0 indra/newview/skins/default/xui/en/floater_color_picker.xml | 0 indra/newview/skins/default/xui/en/floater_critical.xml | 0 indra/newview/skins/default/xui/en/floater_customize.xml | 0 .../skins/default/xui/en/floater_day_cycle_options.xml | 0 .../skins/default/xui/en/floater_device_settings.xml | 0 indra/newview/skins/default/xui/en/floater_env_settings.xml | 0 indra/newview/skins/default/xui/en/floater_event.xml | 0 .../newview/skins/default/xui/en/floater_first_time_tip.xml | 0 indra/newview/skins/default/xui/en/floater_font_test.xml | 0 indra/newview/skins/default/xui/en/floater_gesture.xml | 0 indra/newview/skins/default/xui/en/floater_god_tools.xml | 0 .../skins/default/xui/en/floater_hardware_settings.xml | 0 indra/newview/skins/default/xui/en/floater_help_browser.xml | 0 indra/newview/skins/default/xui/en/floater_hud.xml | 0 indra/newview/skins/default/xui/en/floater_im.xml | 0 indra/newview/skins/default/xui/en/floater_im_container.xml | 0 indra/newview/skins/default/xui/en/floater_im_session.xml | 0 .../newview/skins/default/xui/en/floater_image_preview.xml | 0 .../newview/skins/default/xui/en/floater_import_collada.xml | 0 .../newview/skins/default/xui/en/floater_incoming_call.xml | 0 indra/newview/skins/default/xui/en/floater_inspect.xml | 0 indra/newview/skins/default/xui/en/floater_inventory.xml | 0 .../default/xui/en/floater_inventory_item_properties.xml | 0 .../skins/default/xui/en/floater_inventory_view_finder.xml | 0 indra/newview/skins/default/xui/en/floater_joystick.xml | 0 indra/newview/skins/default/xui/en/floater_lagmeter.xml | 0 .../newview/skins/default/xui/en/floater_land_holdings.xml | 0 .../newview/skins/default/xui/en/floater_live_lsleditor.xml | 0 indra/newview/skins/default/xui/en/floater_lsl_guide.xml | 0 indra/newview/skins/default/xui/en/floater_map.xml | 0 .../newview/skins/default/xui/en/floater_media_browser.xml | 0 .../newview/skins/default/xui/en/floater_media_settings.xml | 0 indra/newview/skins/default/xui/en/floater_mem_leaking.xml | 0 .../newview/skins/default/xui/en/floater_model_preview.xml | 0 indra/newview/skins/default/xui/en/floater_moveview.xml | 0 indra/newview/skins/default/xui/en/floater_mute_object.xml | 0 indra/newview/skins/default/xui/en/floater_my_friends.xml | 0 indra/newview/skins/default/xui/en/floater_nearby_chat.xml | 0 indra/newview/skins/default/xui/en/floater_notification.xml | 0 .../skins/default/xui/en/floater_notifications_console.xml | 0 indra/newview/skins/default/xui/en/floater_openobject.xml | 0 .../newview/skins/default/xui/en/floater_outfit_save_as.xml | 0 .../newview/skins/default/xui/en/floater_outgoing_call.xml | 0 indra/newview/skins/default/xui/en/floater_pay.xml | 0 indra/newview/skins/default/xui/en/floater_pay_object.xml | 0 indra/newview/skins/default/xui/en/floater_perm_prefs.xml | 0 indra/newview/skins/default/xui/en/floater_post_process.xml | 0 indra/newview/skins/default/xui/en/floater_postcard.xml | 0 indra/newview/skins/default/xui/en/floater_preferences.xml | 0 .../skins/default/xui/en/floater_preview_animation.xml | 0 .../skins/default/xui/en/floater_preview_classified.xml | 0 .../newview/skins/default/xui/en/floater_preview_event.xml | 0 .../skins/default/xui/en/floater_preview_gesture.xml | 0 .../skins/default/xui/en/floater_preview_gesture_info.xml | 0 .../default/xui/en/floater_preview_gesture_shortcut.xml | 0 .../skins/default/xui/en/floater_preview_gesture_steps.xml | 0 .../skins/default/xui/en/floater_preview_notecard.xml | 0 .../newview/skins/default/xui/en/floater_preview_sound.xml | 0 .../skins/default/xui/en/floater_preview_texture.xml | 0 .../skins/default/xui/en/floater_price_for_listing.xml | 0 .../skins/default/xui/en/floater_publish_classified.xml | 0 indra/newview/skins/default/xui/en/floater_region_info.xml | 0 indra/newview/skins/default/xui/en/floater_report_abuse.xml | 0 indra/newview/skins/default/xui/en/floater_script.xml | 0 indra/newview/skins/default/xui/en/floater_script_debug.xml | 0 .../skins/default/xui/en/floater_script_debug_panel.xml | 0 .../newview/skins/default/xui/en/floater_script_limits.xml | 0 .../newview/skins/default/xui/en/floater_script_preview.xml | 0 indra/newview/skins/default/xui/en/floater_script_queue.xml | 0 .../newview/skins/default/xui/en/floater_script_search.xml | 0 indra/newview/skins/default/xui/en/floater_search.xml | 0 indra/newview/skins/default/xui/en/floater_select_key.xml | 0 indra/newview/skins/default/xui/en/floater_sell_land.xml | 0 .../newview/skins/default/xui/en/floater_settings_debug.xml | 0 indra/newview/skins/default/xui/en/floater_snapshot.xml | 0 .../newview/skins/default/xui/en/floater_sound_preview.xml | 0 indra/newview/skins/default/xui/en/floater_statistics.xml | 0 indra/newview/skins/default/xui/en/floater_stats.xml | 0 indra/newview/skins/default/xui/en/floater_sys_well.xml | 0 indra/newview/skins/default/xui/en/floater_telehub.xml | 0 indra/newview/skins/default/xui/en/floater_test_button.xml | 0 .../newview/skins/default/xui/en/floater_test_checkbox.xml | 0 .../newview/skins/default/xui/en/floater_test_combobox.xml | 0 .../skins/default/xui/en/floater_test_inspectors.xml | 0 indra/newview/skins/default/xui/en/floater_test_layout.xml | 0 .../skins/default/xui/en/floater_test_line_editor.xml | 0 .../newview/skins/default/xui/en/floater_test_list_view.xml | 0 .../skins/default/xui/en/floater_test_navigation_bar.xml | 0 .../skins/default/xui/en/floater_test_radiogroup.xml | 0 indra/newview/skins/default/xui/en/floater_test_slider.xml | 0 indra/newview/skins/default/xui/en/floater_test_spinner.xml | 0 .../skins/default/xui/en/floater_test_text_editor.xml | 0 indra/newview/skins/default/xui/en/floater_test_textbox.xml | 0 indra/newview/skins/default/xui/en/floater_test_widgets.xml | 0 indra/newview/skins/default/xui/en/floater_texture_ctrl.xml | 0 indra/newview/skins/default/xui/en/floater_tools.xml | 0 indra/newview/skins/default/xui/en/floater_top_objects.xml | 0 indra/newview/skins/default/xui/en/floater_tos.xml | 0 indra/newview/skins/default/xui/en/floater_ui_preview.xml | 0 indra/newview/skins/default/xui/en/floater_url_entry.xml | 0 .../newview/skins/default/xui/en/floater_voice_controls.xml | 0 indra/newview/skins/default/xui/en/floater_voice_effect.xml | 0 indra/newview/skins/default/xui/en/floater_water.xml | 0 .../skins/default/xui/en/floater_wearable_save_as.xml | 0 .../skins/default/xui/en/floater_whitelist_entry.xml | 0 .../skins/default/xui/en/floater_windlight_options.xml | 0 indra/newview/skins/default/xui/en/floater_window_size.xml | 0 indra/newview/skins/default/xui/en/floater_world_map.xml | 0 indra/newview/skins/default/xui/en/fonts.xml | 0 indra/newview/skins/default/xui/en/inspect_avatar.xml | 0 indra/newview/skins/default/xui/en/inspect_group.xml | 0 indra/newview/skins/default/xui/en/inspect_object.xml | 0 .../newview/skins/default/xui/en/inspect_remote_object.xml | 0 indra/newview/skins/default/xui/en/inspect_toast.xml | 0 indra/newview/skins/default/xui/en/inspector_info_ctrl.xml | 0 indra/newview/skins/default/xui/en/language_settings.xml | 0 indra/newview/skins/default/xui/en/main_view.xml | 0 .../newview/skins/default/xui/en/menu_add_wearable_gear.xml | 0 .../newview/skins/default/xui/en/menu_attachment_other.xml | 0 indra/newview/skins/default/xui/en/menu_attachment_self.xml | 0 indra/newview/skins/default/xui/en/menu_avatar_icon.xml | 0 indra/newview/skins/default/xui/en/menu_avatar_other.xml | 0 indra/newview/skins/default/xui/en/menu_avatar_self.xml | 0 indra/newview/skins/default/xui/en/menu_bottomtray.xml | 0 indra/newview/skins/default/xui/en/menu_cof_attachment.xml | 0 indra/newview/skins/default/xui/en/menu_cof_body_part.xml | 0 indra/newview/skins/default/xui/en/menu_cof_clothing.xml | 0 indra/newview/skins/default/xui/en/menu_cof_gear.xml | 0 indra/newview/skins/default/xui/en/menu_edit.xml | 0 indra/newview/skins/default/xui/en/menu_favorites.xml | 0 indra/newview/skins/default/xui/en/menu_gesture_gear.xml | 0 indra/newview/skins/default/xui/en/menu_group_plus.xml | 0 indra/newview/skins/default/xui/en/menu_hide_navbar.xml | 0 indra/newview/skins/default/xui/en/menu_im_well_button.xml | 0 indra/newview/skins/default/xui/en/menu_imchiclet_adhoc.xml | 0 indra/newview/skins/default/xui/en/menu_imchiclet_group.xml | 0 indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml | 0 .../skins/default/xui/en/menu_inspect_avatar_gear.xml | 0 .../skins/default/xui/en/menu_inspect_object_gear.xml | 0 .../newview/skins/default/xui/en/menu_inspect_self_gear.xml | 0 .../newview/skins/default/xui/en/menu_inv_offer_chiclet.xml | 0 indra/newview/skins/default/xui/en/menu_inventory.xml | 0 indra/newview/skins/default/xui/en/menu_inventory_add.xml | 0 .../skins/default/xui/en/menu_inventory_gear_default.xml | 0 indra/newview/skins/default/xui/en/menu_land.xml | 0 indra/newview/skins/default/xui/en/menu_landmark.xml | 0 indra/newview/skins/default/xui/en/menu_login.xml | 0 indra/newview/skins/default/xui/en/menu_mini_map.xml | 0 indra/newview/skins/default/xui/en/menu_navbar.xml | 0 indra/newview/skins/default/xui/en/menu_nearby_chat.xml | 0 .../skins/default/xui/en/menu_notification_well_button.xml | 0 indra/newview/skins/default/xui/en/menu_object.xml | 0 indra/newview/skins/default/xui/en/menu_object_icon.xml | 0 indra/newview/skins/default/xui/en/menu_outfit_gear.xml | 0 indra/newview/skins/default/xui/en/menu_outfit_tab.xml | 0 .../newview/skins/default/xui/en/menu_participant_list.xml | 0 .../skins/default/xui/en/menu_people_friends_view_sort.xml | 0 indra/newview/skins/default/xui/en/menu_people_groups.xml | 0 .../skins/default/xui/en/menu_people_groups_view_sort.xml | 0 indra/newview/skins/default/xui/en/menu_people_nearby.xml | 0 .../skins/default/xui/en/menu_people_nearby_multiselect.xml | 0 .../skins/default/xui/en/menu_people_nearby_view_sort.xml | 0 .../skins/default/xui/en/menu_people_recent_view_sort.xml | 0 indra/newview/skins/default/xui/en/menu_picks.xml | 0 indra/newview/skins/default/xui/en/menu_picks_plus.xml | 0 indra/newview/skins/default/xui/en/menu_place.xml | 0 .../newview/skins/default/xui/en/menu_place_add_button.xml | 0 .../skins/default/xui/en/menu_places_gear_folder.xml | 0 .../skins/default/xui/en/menu_places_gear_landmark.xml | 0 .../newview/skins/default/xui/en/menu_profile_overflow.xml | 0 indra/newview/skins/default/xui/en/menu_save_outfit.xml | 0 indra/newview/skins/default/xui/en/menu_script_chiclet.xml | 0 indra/newview/skins/default/xui/en/menu_slurl.xml | 0 .../skins/default/xui/en/menu_teleport_history_gear.xml | 0 .../skins/default/xui/en/menu_teleport_history_item.xml | 0 .../skins/default/xui/en/menu_teleport_history_tab.xml | 0 indra/newview/skins/default/xui/en/menu_text_editor.xml | 0 indra/newview/skins/default/xui/en/menu_topinfobar.xml | 0 indra/newview/skins/default/xui/en/menu_url_agent.xml | 0 indra/newview/skins/default/xui/en/menu_url_group.xml | 0 indra/newview/skins/default/xui/en/menu_url_http.xml | 0 indra/newview/skins/default/xui/en/menu_url_inventory.xml | 0 indra/newview/skins/default/xui/en/menu_url_map.xml | 0 indra/newview/skins/default/xui/en/menu_url_objectim.xml | 0 indra/newview/skins/default/xui/en/menu_url_parcel.xml | 0 indra/newview/skins/default/xui/en/menu_url_slapp.xml | 0 indra/newview/skins/default/xui/en/menu_url_slurl.xml | 0 indra/newview/skins/default/xui/en/menu_url_teleport.xml | 0 indra/newview/skins/default/xui/en/menu_viewer.xml | 0 .../skins/default/xui/en/menu_wearable_list_item.xml | 0 indra/newview/skins/default/xui/en/menu_wearing_gear.xml | 0 indra/newview/skins/default/xui/en/menu_wearing_tab.xml | 0 indra/newview/skins/default/xui/en/mime_types.xml | 0 indra/newview/skins/default/xui/en/mime_types_linux.xml | 0 indra/newview/skins/default/xui/en/mime_types_mac.xml | 0 indra/newview/skins/default/xui/en/notifications.xml | 0 indra/newview/skins/default/xui/en/outfit_accordion_tab.xml | 0 .../skins/default/xui/en/panel_active_object_row.xml | 0 indra/newview/skins/default/xui/en/panel_activeim_row.xml | 0 .../skins/default/xui/en/panel_adhoc_control_panel.xml | 0 indra/newview/skins/default/xui/en/panel_audio_device.xml | 0 .../newview/skins/default/xui/en/panel_avatar_list_item.xml | 0 indra/newview/skins/default/xui/en/panel_avatar_tag.xml | 0 .../skins/default/xui/en/panel_block_list_sidetray.xml | 0 .../skins/default/xui/en/panel_body_parts_list_item.xml | 0 .../default/xui/en/panel_bodyparts_list_button_bar.xml | 0 indra/newview/skins/default/xui/en/panel_bottomtray.xml | 0 .../newview/skins/default/xui/en/panel_bottomtray_lite.xml | 0 indra/newview/skins/default/xui/en/panel_chat_header.xml | 0 indra/newview/skins/default/xui/en/panel_chat_item.xml | 0 indra/newview/skins/default/xui/en/panel_chat_separator.xml | 0 .../newview/skins/default/xui/en/panel_classified_info.xml | 0 .../skins/default/xui/en/panel_classifieds_list_item.xml | 0 .../skins/default/xui/en/panel_clothing_list_button_bar.xml | 0 .../skins/default/xui/en/panel_clothing_list_item.xml | 0 indra/newview/skins/default/xui/en/panel_cof_wearables.xml | 0 .../default/xui/en/panel_deletable_wearable_list_item.xml | 0 .../skins/default/xui/en/panel_dummy_clothing_list_item.xml | 0 indra/newview/skins/default/xui/en/panel_edit_alpha.xml | 0 .../newview/skins/default/xui/en/panel_edit_classified.xml | 0 indra/newview/skins/default/xui/en/panel_edit_eyes.xml | 0 indra/newview/skins/default/xui/en/panel_edit_gloves.xml | 0 indra/newview/skins/default/xui/en/panel_edit_hair.xml | 0 indra/newview/skins/default/xui/en/panel_edit_jacket.xml | 0 indra/newview/skins/default/xui/en/panel_edit_pants.xml | 0 indra/newview/skins/default/xui/en/panel_edit_pick.xml | 0 indra/newview/skins/default/xui/en/panel_edit_profile.xml | 0 indra/newview/skins/default/xui/en/panel_edit_shape.xml | 0 indra/newview/skins/default/xui/en/panel_edit_shirt.xml | 0 indra/newview/skins/default/xui/en/panel_edit_shoes.xml | 0 indra/newview/skins/default/xui/en/panel_edit_skin.xml | 0 indra/newview/skins/default/xui/en/panel_edit_skirt.xml | 0 indra/newview/skins/default/xui/en/panel_edit_socks.xml | 0 indra/newview/skins/default/xui/en/panel_edit_tattoo.xml | 0 .../newview/skins/default/xui/en/panel_edit_underpants.xml | 0 .../newview/skins/default/xui/en/panel_edit_undershirt.xml | 0 indra/newview/skins/default/xui/en/panel_edit_wearable.xml | 0 indra/newview/skins/default/xui/en/panel_friends.xml | 0 indra/newview/skins/default/xui/en/panel_generic_tip.xml | 0 .../skins/default/xui/en/panel_group_control_panel.xml | 0 indra/newview/skins/default/xui/en/panel_group_general.xml | 0 .../skins/default/xui/en/panel_group_info_sidetray.xml | 0 indra/newview/skins/default/xui/en/panel_group_invite.xml | 0 .../newview/skins/default/xui/en/panel_group_land_money.xml | 0 .../newview/skins/default/xui/en/panel_group_list_item.xml | 0 indra/newview/skins/default/xui/en/panel_group_notices.xml | 0 indra/newview/skins/default/xui/en/panel_group_notify.xml | 0 indra/newview/skins/default/xui/en/panel_group_roles.xml | 0 indra/newview/skins/default/xui/en/panel_groups.xml | 0 indra/newview/skins/default/xui/en/panel_hud.xml | 0 .../newview/skins/default/xui/en/panel_im_control_panel.xml | 0 .../newview/skins/default/xui/en/panel_instant_message.xml | 0 indra/newview/skins/default/xui/en/panel_inventory_item.xml | 0 indra/newview/skins/default/xui/en/panel_landmark_info.xml | 0 indra/newview/skins/default/xui/en/panel_landmarks.xml | 0 indra/newview/skins/default/xui/en/panel_login.xml | 0 indra/newview/skins/default/xui/en/panel_main_inventory.xml | 0 indra/newview/skins/default/xui/en/panel_me.xml | 0 .../skins/default/xui/en/panel_media_settings_general.xml | 0 .../default/xui/en/panel_media_settings_permissions.xml | 0 .../skins/default/xui/en/panel_media_settings_security.xml | 0 indra/newview/skins/default/xui/en/panel_my_profile.xml | 0 indra/newview/skins/default/xui/en/panel_navigation_bar.xml | 0 indra/newview/skins/default/xui/en/panel_nearby_chat.xml | 0 .../newview/skins/default/xui/en/panel_nearby_chat_bar.xml | 0 indra/newview/skins/default/xui/en/panel_nearby_media.xml | 0 indra/newview/skins/default/xui/en/panel_notes.xml | 0 indra/newview/skins/default/xui/en/panel_notification.xml | 0 .../skins/default/xui/en/panel_notifications_channel.xml | 0 indra/newview/skins/default/xui/en/panel_online_status.xml | 0 .../skins/default/xui/en/panel_online_status_toast.xml | 0 indra/newview/skins/default/xui/en/panel_outfit_edit.xml | 0 .../skins/default/xui/en/panel_outfits_inventory.xml | 0 .../default/xui/en/panel_outfits_inventory_gear_default.xml | 0 indra/newview/skins/default/xui/en/panel_outfits_list.xml | 0 .../newview/skins/default/xui/en/panel_outfits_wearing.xml | 0 indra/newview/skins/default/xui/en/panel_people.xml | 0 indra/newview/skins/default/xui/en/panel_pick_info.xml | 0 indra/newview/skins/default/xui/en/panel_pick_list_item.xml | 0 indra/newview/skins/default/xui/en/panel_picks.xml | 0 indra/newview/skins/default/xui/en/panel_place_profile.xml | 0 indra/newview/skins/default/xui/en/panel_places.xml | 0 .../skins/default/xui/en/panel_preferences_advanced.xml | 0 .../skins/default/xui/en/panel_preferences_alerts.xml | 0 .../newview/skins/default/xui/en/panel_preferences_chat.xml | 0 .../skins/default/xui/en/panel_preferences_general.xml | 0 .../skins/default/xui/en/panel_preferences_graphics1.xml | 0 .../skins/default/xui/en/panel_preferences_privacy.xml | 0 .../skins/default/xui/en/panel_preferences_setup.xml | 0 .../skins/default/xui/en/panel_preferences_sound.xml | 0 .../skins/default/xui/en/panel_prim_media_controls.xml | 0 indra/newview/skins/default/xui/en/panel_profile.xml | 0 indra/newview/skins/default/xui/en/panel_profile_view.xml | 0 indra/newview/skins/default/xui/en/panel_progress.xml | 0 .../newview/skins/default/xui/en/panel_region_covenant.xml | 0 indra/newview/skins/default/xui/en/panel_region_debug.xml | 0 indra/newview/skins/default/xui/en/panel_region_estate.xml | 0 indra/newview/skins/default/xui/en/panel_region_general.xml | 0 .../skins/default/xui/en/panel_region_general_layout.xml | 0 indra/newview/skins/default/xui/en/panel_region_terrain.xml | 0 indra/newview/skins/default/xui/en/panel_region_texture.xml | 0 indra/newview/skins/default/xui/en/panel_script_ed.xml | 0 .../skins/default/xui/en/panel_script_limits_my_avatar.xml | 0 .../default/xui/en/panel_script_limits_region_memory.xml | 0 .../newview/skins/default/xui/en/panel_scrolling_param.xml | 0 indra/newview/skins/default/xui/en/panel_side_tray.xml | 0 .../skins/default/xui/en/panel_side_tray_tab_caption.xml | 0 .../skins/default/xui/en/panel_sidetray_home_tab.xml | 0 .../skins/default/xui/en/panel_stand_stop_flying.xml | 0 indra/newview/skins/default/xui/en/panel_status_bar.xml | 0 indra/newview/skins/default/xui/en/panel_sys_well_item.xml | 0 .../newview/skins/default/xui/en/panel_teleport_history.xml | 0 .../skins/default/xui/en/panel_teleport_history_item.xml | 0 indra/newview/skins/default/xui/en/panel_toast.xml | 0 indra/newview/skins/default/xui/en/panel_topinfo_bar.xml | 0 indra/newview/skins/default/xui/en/panel_voice_effect.xml | 0 .../newview/skins/default/xui/en/panel_volume_pulldown.xml | 0 indra/newview/skins/default/xui/en/panel_world_map.xml | 0 indra/newview/skins/default/xui/en/role_actions.xml | 0 indra/newview/skins/default/xui/en/sidepanel_appearance.xml | 0 indra/newview/skins/default/xui/en/sidepanel_inventory.xml | 0 indra/newview/skins/default/xui/en/sidepanel_item_info.xml | 0 indra/newview/skins/default/xui/en/sidepanel_task_info.xml | 0 indra/newview/skins/default/xui/en/strings.xml | 0 indra/newview/skins/default/xui/en/teleport_strings.xml | 0 indra/newview/skins/default/xui/en/widgets/accordion.xml | 0 .../newview/skins/default/xui/en/widgets/accordion_tab.xml | 0 indra/newview/skins/default/xui/en/widgets/avatar_icon.xml | 0 .../skins/default/xui/en/widgets/avatar_list_item.xml | 0 .../skins/default/xui/en/widgets/bodyparts_list_item.xml | 0 indra/newview/skins/default/xui/en/widgets/button.xml | 0 indra/newview/skins/default/xui/en/widgets/chat_history.xml | 0 indra/newview/skins/default/xui/en/widgets/check_box.xml | 0 .../skins/default/xui/en/widgets/chiclet_im_adhoc.xml | 0 .../skins/default/xui/en/widgets/chiclet_im_group.xml | 0 .../newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml | 0 .../newview/skins/default/xui/en/widgets/chiclet_offer.xml | 0 .../newview/skins/default/xui/en/widgets/chiclet_panel.xml | 0 .../newview/skins/default/xui/en/widgets/chiclet_script.xml | 0 .../skins/default/xui/en/widgets/clothing_list_item.xml | 0 indra/newview/skins/default/xui/en/widgets/color_swatch.xml | 0 indra/newview/skins/default/xui/en/widgets/combo_box.xml | 0 indra/newview/skins/default/xui/en/widgets/context_menu.xml | 0 .../default/xui/en/widgets/deletable_wearable_list_item.xml | 0 indra/newview/skins/default/xui/en/widgets/drop_down.xml | 0 .../default/xui/en/widgets/dummy_clothing_list_item.xml | 0 .../skins/default/xui/en/widgets/expandable_text.xml | 0 .../newview/skins/default/xui/en/widgets/filter_editor.xml | 0 .../newview/skins/default/xui/en/widgets/flat_list_view.xml | 0 indra/newview/skins/default/xui/en/widgets/floater.xml | 0 .../newview/skins/default/xui/en/widgets/flyout_button.xml | 0 .../skins/default/xui/en/widgets/folder_view_item.xml | 0 .../skins/default/xui/en/widgets/gesture_combo_list.xml | 0 indra/newview/skins/default/xui/en/widgets/group_icon.xml | 0 indra/newview/skins/default/xui/en/widgets/icon.xml | 0 indra/newview/skins/default/xui/en/widgets/inspector.xml | 0 .../skins/default/xui/en/widgets/inventory_list_item.xml | 0 .../skins/default/xui/en/widgets/inventory_panel.xml | 0 indra/newview/skins/default/xui/en/widgets/line_editor.xml | 0 indra/newview/skins/default/xui/en/widgets/list_view.xml | 0 .../skins/default/xui/en/widgets/loading_indicator.xml | 0 .../newview/skins/default/xui/en/widgets/location_input.xml | 0 indra/newview/skins/default/xui/en/widgets/menu.xml | 0 indra/newview/skins/default/xui/en/widgets/menu_item.xml | 0 .../newview/skins/default/xui/en/widgets/menu_item_call.xml | 0 .../skins/default/xui/en/widgets/menu_item_check.xml | 0 .../skins/default/xui/en/widgets/menu_item_separator.xml | 0 .../skins/default/xui/en/widgets/menu_item_tear_off.xml | 0 indra/newview/skins/default/xui/en/widgets/multi_slider.xml | 0 .../skins/default/xui/en/widgets/multi_slider_bar.xml | 0 indra/newview/skins/default/xui/en/widgets/name_editor.xml | 0 .../newview/skins/default/xui/en/widgets/output_monitor.xml | 0 indra/newview/skins/default/xui/en/widgets/panel.xml | 0 .../skins/default/xui/en/widgets/panel_camera_item.xml | 0 indra/newview/skins/default/xui/en/widgets/progress_bar.xml | 0 indra/newview/skins/default/xui/en/widgets/radio_group.xml | 0 indra/newview/skins/default/xui/en/widgets/radio_item.xml | 0 indra/newview/skins/default/xui/en/widgets/scroll_bar.xml | 0 .../skins/default/xui/en/widgets/scroll_column_header.xml | 0 .../skins/default/xui/en/widgets/scroll_container.xml | 0 indra/newview/skins/default/xui/en/widgets/scroll_list.xml | 0 .../skins/default/xui/en/widgets/search_combo_box.xml | 0 .../newview/skins/default/xui/en/widgets/search_editor.xml | 0 indra/newview/skins/default/xui/en/widgets/side_tray.xml | 0 .../skins/default/xui/en/widgets/simple_text_editor.xml | 0 indra/newview/skins/default/xui/en/widgets/slider.xml | 0 indra/newview/skins/default/xui/en/widgets/slider_bar.xml | 0 indra/newview/skins/default/xui/en/widgets/spinner.xml | 0 indra/newview/skins/default/xui/en/widgets/split_button.xml | 0 .../newview/skins/default/xui/en/widgets/tab_container.xml | 0 indra/newview/skins/default/xui/en/widgets/talk_button.xml | 0 .../default/xui/en/widgets/teleport_history_menu_item.xml | 0 indra/newview/skins/default/xui/en/widgets/text.xml | 0 indra/newview/skins/default/xui/en/widgets/text_editor.xml | 0 indra/newview/skins/default/xui/en/widgets/textbase.xml | 0 .../newview/skins/default/xui/en/widgets/texture_picker.xml | 0 .../skins/default/xui/en/widgets/toggleable_menu.xml | 0 indra/newview/skins/default/xui/en/widgets/tool_tip.xml | 0 indra/newview/skins/default/xui/en/widgets/ui_ctrl.xml | 0 indra/newview/skins/default/xui/en/widgets/view_border.xml | 0 indra/newview/skins/default/xui/en/widgets/web_browser.xml | 0 indra/newview/skins/default/xui/en/xui_version.xml | 0 indra/newview/skins/default/xui/es/floater_about.xml | 0 indra/newview/skins/default/xui/es/floater_about_land.xml | 0 indra/newview/skins/default/xui/es/floater_activeim.xml | 0 .../skins/default/xui/es/floater_animation_preview.xml | 0 indra/newview/skins/default/xui/es/floater_auction.xml | 0 .../newview/skins/default/xui/es/floater_avatar_picker.xml | 0 .../skins/default/xui/es/floater_avatar_textures.xml | 0 indra/newview/skins/default/xui/es/floater_beacons.xml | 0 .../newview/skins/default/xui/es/floater_build_options.xml | 0 indra/newview/skins/default/xui/es/floater_bulk_perms.xml | 0 indra/newview/skins/default/xui/es/floater_bumps.xml | 0 indra/newview/skins/default/xui/es/floater_buy_contents.xml | 0 indra/newview/skins/default/xui/es/floater_buy_currency.xml | 0 .../skins/default/xui/es/floater_buy_currency_html.xml | 0 indra/newview/skins/default/xui/es/floater_buy_land.xml | 0 indra/newview/skins/default/xui/es/floater_buy_object.xml | 0 indra/newview/skins/default/xui/es/floater_camera.xml | 0 indra/newview/skins/default/xui/es/floater_choose_group.xml | 0 indra/newview/skins/default/xui/es/floater_color_picker.xml | 0 indra/newview/skins/default/xui/es/floater_critical.xml | 0 indra/newview/skins/default/xui/es/floater_customize.xml | 0 .../skins/default/xui/es/floater_day_cycle_options.xml | 0 .../skins/default/xui/es/floater_device_settings.xml | 0 indra/newview/skins/default/xui/es/floater_env_settings.xml | 0 indra/newview/skins/default/xui/es/floater_event.xml | 0 indra/newview/skins/default/xui/es/floater_font_test.xml | 0 indra/newview/skins/default/xui/es/floater_gesture.xml | 0 indra/newview/skins/default/xui/es/floater_god_tools.xml | 0 .../skins/default/xui/es/floater_hardware_settings.xml | 0 indra/newview/skins/default/xui/es/floater_help_browser.xml | 0 indra/newview/skins/default/xui/es/floater_hud.xml | 0 indra/newview/skins/default/xui/es/floater_im.xml | 0 indra/newview/skins/default/xui/es/floater_im_container.xml | 0 indra/newview/skins/default/xui/es/floater_im_session.xml | 0 .../newview/skins/default/xui/es/floater_image_preview.xml | 0 .../newview/skins/default/xui/es/floater_incoming_call.xml | 0 indra/newview/skins/default/xui/es/floater_inspect.xml | 0 indra/newview/skins/default/xui/es/floater_inventory.xml | 0 .../default/xui/es/floater_inventory_item_properties.xml | 0 .../skins/default/xui/es/floater_inventory_view_finder.xml | 0 indra/newview/skins/default/xui/es/floater_joystick.xml | 0 indra/newview/skins/default/xui/es/floater_lagmeter.xml | 0 .../newview/skins/default/xui/es/floater_land_holdings.xml | 0 .../newview/skins/default/xui/es/floater_live_lsleditor.xml | 0 indra/newview/skins/default/xui/es/floater_lsl_guide.xml | 0 indra/newview/skins/default/xui/es/floater_map.xml | 0 .../newview/skins/default/xui/es/floater_media_browser.xml | 0 .../newview/skins/default/xui/es/floater_media_settings.xml | 0 indra/newview/skins/default/xui/es/floater_mem_leaking.xml | 0 indra/newview/skins/default/xui/es/floater_moveview.xml | 0 indra/newview/skins/default/xui/es/floater_mute_object.xml | 0 indra/newview/skins/default/xui/es/floater_my_friends.xml | 0 indra/newview/skins/default/xui/es/floater_nearby_chat.xml | 0 indra/newview/skins/default/xui/es/floater_openobject.xml | 0 .../newview/skins/default/xui/es/floater_outfit_save_as.xml | 0 .../newview/skins/default/xui/es/floater_outgoing_call.xml | 0 indra/newview/skins/default/xui/es/floater_pay.xml | 0 indra/newview/skins/default/xui/es/floater_pay_object.xml | 0 indra/newview/skins/default/xui/es/floater_perm_prefs.xml | 0 indra/newview/skins/default/xui/es/floater_post_process.xml | 0 indra/newview/skins/default/xui/es/floater_postcard.xml | 0 indra/newview/skins/default/xui/es/floater_preferences.xml | 0 .../skins/default/xui/es/floater_preview_animation.xml | 0 .../skins/default/xui/es/floater_preview_classified.xml | 0 .../newview/skins/default/xui/es/floater_preview_event.xml | 0 .../skins/default/xui/es/floater_preview_gesture.xml | 0 .../skins/default/xui/es/floater_preview_gesture_info.xml | 0 .../default/xui/es/floater_preview_gesture_shortcut.xml | 0 .../skins/default/xui/es/floater_preview_gesture_steps.xml | 0 .../skins/default/xui/es/floater_preview_notecard.xml | 0 .../newview/skins/default/xui/es/floater_preview_sound.xml | 0 .../skins/default/xui/es/floater_preview_texture.xml | 0 .../skins/default/xui/es/floater_publish_classified.xml | 0 indra/newview/skins/default/xui/es/floater_region_info.xml | 0 indra/newview/skins/default/xui/es/floater_report_abuse.xml | 0 indra/newview/skins/default/xui/es/floater_script_debug.xml | 0 .../skins/default/xui/es/floater_script_debug_panel.xml | 0 .../newview/skins/default/xui/es/floater_script_limits.xml | 0 .../newview/skins/default/xui/es/floater_script_preview.xml | 0 indra/newview/skins/default/xui/es/floater_script_queue.xml | 0 .../newview/skins/default/xui/es/floater_script_search.xml | 0 indra/newview/skins/default/xui/es/floater_search.xml | 0 indra/newview/skins/default/xui/es/floater_select_key.xml | 0 indra/newview/skins/default/xui/es/floater_sell_land.xml | 0 .../newview/skins/default/xui/es/floater_settings_debug.xml | 0 indra/newview/skins/default/xui/es/floater_snapshot.xml | 0 .../newview/skins/default/xui/es/floater_sound_preview.xml | 0 indra/newview/skins/default/xui/es/floater_statistics.xml | 0 indra/newview/skins/default/xui/es/floater_stats.xml | 0 indra/newview/skins/default/xui/es/floater_sys_well.xml | 0 indra/newview/skins/default/xui/es/floater_telehub.xml | 0 indra/newview/skins/default/xui/es/floater_texture_ctrl.xml | 0 indra/newview/skins/default/xui/es/floater_tools.xml | 0 indra/newview/skins/default/xui/es/floater_top_objects.xml | 0 indra/newview/skins/default/xui/es/floater_tos.xml | 0 indra/newview/skins/default/xui/es/floater_url_entry.xml | 0 .../newview/skins/default/xui/es/floater_voice_controls.xml | 0 indra/newview/skins/default/xui/es/floater_voice_effect.xml | 0 indra/newview/skins/default/xui/es/floater_water.xml | 0 .../skins/default/xui/es/floater_wearable_save_as.xml | 0 .../skins/default/xui/es/floater_whitelist_entry.xml | 0 .../skins/default/xui/es/floater_windlight_options.xml | 0 indra/newview/skins/default/xui/es/floater_window_size.xml | 0 indra/newview/skins/default/xui/es/floater_world_map.xml | 0 indra/newview/skins/default/xui/es/inspect_avatar.xml | 0 indra/newview/skins/default/xui/es/inspect_group.xml | 0 indra/newview/skins/default/xui/es/inspect_object.xml | 0 .../newview/skins/default/xui/es/inspect_remote_object.xml | 0 indra/newview/skins/default/xui/es/language_settings.xml | 0 .../newview/skins/default/xui/es/menu_attachment_other.xml | 0 indra/newview/skins/default/xui/es/menu_attachment_self.xml | 0 indra/newview/skins/default/xui/es/menu_avatar_icon.xml | 0 indra/newview/skins/default/xui/es/menu_avatar_other.xml | 0 indra/newview/skins/default/xui/es/menu_avatar_self.xml | 0 indra/newview/skins/default/xui/es/menu_bottomtray.xml | 0 indra/newview/skins/default/xui/es/menu_cof_attachment.xml | 0 indra/newview/skins/default/xui/es/menu_cof_body_part.xml | 0 indra/newview/skins/default/xui/es/menu_cof_clothing.xml | 0 indra/newview/skins/default/xui/es/menu_cof_gear.xml | 0 indra/newview/skins/default/xui/es/menu_edit.xml | 0 indra/newview/skins/default/xui/es/menu_favorites.xml | 0 indra/newview/skins/default/xui/es/menu_gesture_gear.xml | 0 indra/newview/skins/default/xui/es/menu_group_plus.xml | 0 indra/newview/skins/default/xui/es/menu_hide_navbar.xml | 0 indra/newview/skins/default/xui/es/menu_im_well_button.xml | 0 indra/newview/skins/default/xui/es/menu_imchiclet_adhoc.xml | 0 indra/newview/skins/default/xui/es/menu_imchiclet_group.xml | 0 indra/newview/skins/default/xui/es/menu_imchiclet_p2p.xml | 0 .../skins/default/xui/es/menu_inspect_avatar_gear.xml | 0 .../skins/default/xui/es/menu_inspect_object_gear.xml | 0 .../newview/skins/default/xui/es/menu_inspect_self_gear.xml | 0 .../newview/skins/default/xui/es/menu_inv_offer_chiclet.xml | 0 indra/newview/skins/default/xui/es/menu_inventory.xml | 0 indra/newview/skins/default/xui/es/menu_inventory_add.xml | 0 .../skins/default/xui/es/menu_inventory_gear_default.xml | 0 indra/newview/skins/default/xui/es/menu_land.xml | 0 indra/newview/skins/default/xui/es/menu_landmark.xml | 0 indra/newview/skins/default/xui/es/menu_login.xml | 0 indra/newview/skins/default/xui/es/menu_mini_map.xml | 0 indra/newview/skins/default/xui/es/menu_navbar.xml | 0 indra/newview/skins/default/xui/es/menu_nearby_chat.xml | 0 .../skins/default/xui/es/menu_notification_well_button.xml | 0 indra/newview/skins/default/xui/es/menu_object.xml | 0 indra/newview/skins/default/xui/es/menu_object_icon.xml | 0 indra/newview/skins/default/xui/es/menu_outfit_gear.xml | 0 indra/newview/skins/default/xui/es/menu_outfit_tab.xml | 0 .../newview/skins/default/xui/es/menu_participant_list.xml | 0 .../skins/default/xui/es/menu_people_friends_view_sort.xml | 0 indra/newview/skins/default/xui/es/menu_people_groups.xml | 0 .../skins/default/xui/es/menu_people_groups_view_sort.xml | 0 indra/newview/skins/default/xui/es/menu_people_nearby.xml | 0 .../skins/default/xui/es/menu_people_nearby_multiselect.xml | 0 .../skins/default/xui/es/menu_people_nearby_view_sort.xml | 0 .../skins/default/xui/es/menu_people_recent_view_sort.xml | 0 indra/newview/skins/default/xui/es/menu_picks.xml | 0 indra/newview/skins/default/xui/es/menu_picks_plus.xml | 0 indra/newview/skins/default/xui/es/menu_place.xml | 0 .../newview/skins/default/xui/es/menu_place_add_button.xml | 0 .../skins/default/xui/es/menu_places_gear_folder.xml | 0 .../skins/default/xui/es/menu_places_gear_landmark.xml | 0 .../newview/skins/default/xui/es/menu_profile_overflow.xml | 0 indra/newview/skins/default/xui/es/menu_save_outfit.xml | 0 indra/newview/skins/default/xui/es/menu_script_chiclet.xml | 0 indra/newview/skins/default/xui/es/menu_slurl.xml | 0 .../skins/default/xui/es/menu_teleport_history_gear.xml | 0 .../skins/default/xui/es/menu_teleport_history_item.xml | 0 .../skins/default/xui/es/menu_teleport_history_tab.xml | 0 indra/newview/skins/default/xui/es/menu_text_editor.xml | 0 indra/newview/skins/default/xui/es/menu_topinfobar.xml | 0 indra/newview/skins/default/xui/es/menu_url_agent.xml | 0 indra/newview/skins/default/xui/es/menu_url_group.xml | 0 indra/newview/skins/default/xui/es/menu_url_http.xml | 0 indra/newview/skins/default/xui/es/menu_url_inventory.xml | 0 indra/newview/skins/default/xui/es/menu_url_map.xml | 0 indra/newview/skins/default/xui/es/menu_url_objectim.xml | 0 indra/newview/skins/default/xui/es/menu_url_parcel.xml | 0 indra/newview/skins/default/xui/es/menu_url_slapp.xml | 0 indra/newview/skins/default/xui/es/menu_url_slurl.xml | 0 indra/newview/skins/default/xui/es/menu_url_teleport.xml | 0 indra/newview/skins/default/xui/es/menu_viewer.xml | 0 .../skins/default/xui/es/menu_wearable_list_item.xml | 0 indra/newview/skins/default/xui/es/menu_wearing_gear.xml | 0 indra/newview/skins/default/xui/es/menu_wearing_tab.xml | 0 indra/newview/skins/default/xui/es/mime_types.xml | 0 indra/newview/skins/default/xui/es/mime_types_linux.xml | 0 indra/newview/skins/default/xui/es/mime_types_mac.xml | 0 indra/newview/skins/default/xui/es/notifications.xml | 0 indra/newview/skins/default/xui/es/outfit_accordion_tab.xml | 0 .../skins/default/xui/es/panel_active_object_row.xml | 0 .../skins/default/xui/es/panel_adhoc_control_panel.xml | 0 indra/newview/skins/default/xui/es/panel_audio_device.xml | 0 .../newview/skins/default/xui/es/panel_avatar_list_item.xml | 0 .../skins/default/xui/es/panel_block_list_sidetray.xml | 0 .../skins/default/xui/es/panel_body_parts_list_item.xml | 0 .../default/xui/es/panel_bodyparts_list_button_bar.xml | 0 indra/newview/skins/default/xui/es/panel_bottomtray.xml | 0 .../newview/skins/default/xui/es/panel_bottomtray_lite.xml | 0 .../newview/skins/default/xui/es/panel_classified_info.xml | 0 .../skins/default/xui/es/panel_clothing_list_button_bar.xml | 0 .../skins/default/xui/es/panel_clothing_list_item.xml | 0 indra/newview/skins/default/xui/es/panel_cof_wearables.xml | 0 .../default/xui/es/panel_deletable_wearable_list_item.xml | 0 .../skins/default/xui/es/panel_dummy_clothing_list_item.xml | 0 indra/newview/skins/default/xui/es/panel_edit_alpha.xml | 0 .../newview/skins/default/xui/es/panel_edit_classified.xml | 0 indra/newview/skins/default/xui/es/panel_edit_eyes.xml | 0 indra/newview/skins/default/xui/es/panel_edit_gloves.xml | 0 indra/newview/skins/default/xui/es/panel_edit_hair.xml | 0 indra/newview/skins/default/xui/es/panel_edit_jacket.xml | 0 indra/newview/skins/default/xui/es/panel_edit_pants.xml | 0 indra/newview/skins/default/xui/es/panel_edit_pick.xml | 0 indra/newview/skins/default/xui/es/panel_edit_profile.xml | 0 indra/newview/skins/default/xui/es/panel_edit_shape.xml | 0 indra/newview/skins/default/xui/es/panel_edit_shirt.xml | 0 indra/newview/skins/default/xui/es/panel_edit_shoes.xml | 0 indra/newview/skins/default/xui/es/panel_edit_skin.xml | 0 indra/newview/skins/default/xui/es/panel_edit_skirt.xml | 0 indra/newview/skins/default/xui/es/panel_edit_socks.xml | 0 indra/newview/skins/default/xui/es/panel_edit_tattoo.xml | 0 .../newview/skins/default/xui/es/panel_edit_underpants.xml | 0 .../newview/skins/default/xui/es/panel_edit_undershirt.xml | 0 indra/newview/skins/default/xui/es/panel_edit_wearable.xml | 0 indra/newview/skins/default/xui/es/panel_friends.xml | 0 .../skins/default/xui/es/panel_group_control_panel.xml | 0 indra/newview/skins/default/xui/es/panel_group_general.xml | 0 .../skins/default/xui/es/panel_group_info_sidetray.xml | 0 indra/newview/skins/default/xui/es/panel_group_invite.xml | 0 .../newview/skins/default/xui/es/panel_group_land_money.xml | 0 .../newview/skins/default/xui/es/panel_group_list_item.xml | 0 indra/newview/skins/default/xui/es/panel_group_notices.xml | 0 indra/newview/skins/default/xui/es/panel_group_notify.xml | 0 indra/newview/skins/default/xui/es/panel_group_roles.xml | 0 indra/newview/skins/default/xui/es/panel_groups.xml | 0 .../newview/skins/default/xui/es/panel_im_control_panel.xml | 0 indra/newview/skins/default/xui/es/panel_inventory_item.xml | 0 indra/newview/skins/default/xui/es/panel_landmark_info.xml | 0 indra/newview/skins/default/xui/es/panel_landmarks.xml | 0 indra/newview/skins/default/xui/es/panel_login.xml | 0 indra/newview/skins/default/xui/es/panel_main_inventory.xml | 0 indra/newview/skins/default/xui/es/panel_me.xml | 0 .../skins/default/xui/es/panel_media_settings_general.xml | 0 .../default/xui/es/panel_media_settings_permissions.xml | 0 .../skins/default/xui/es/panel_media_settings_security.xml | 0 indra/newview/skins/default/xui/es/panel_my_profile.xml | 0 indra/newview/skins/default/xui/es/panel_navigation_bar.xml | 0 indra/newview/skins/default/xui/es/panel_nearby_chat.xml | 0 .../newview/skins/default/xui/es/panel_nearby_chat_bar.xml | 0 indra/newview/skins/default/xui/es/panel_nearby_media.xml | 0 indra/newview/skins/default/xui/es/panel_notes.xml | 0 indra/newview/skins/default/xui/es/panel_online_status.xml | 0 .../skins/default/xui/es/panel_online_status_toast.xml | 0 indra/newview/skins/default/xui/es/panel_outfit_edit.xml | 0 .../skins/default/xui/es/panel_outfits_inventory.xml | 0 .../default/xui/es/panel_outfits_inventory_gear_default.xml | 0 indra/newview/skins/default/xui/es/panel_outfits_list.xml | 0 .../newview/skins/default/xui/es/panel_outfits_wearing.xml | 0 indra/newview/skins/default/xui/es/panel_people.xml | 0 indra/newview/skins/default/xui/es/panel_pick_info.xml | 0 indra/newview/skins/default/xui/es/panel_picks.xml | 0 indra/newview/skins/default/xui/es/panel_place_profile.xml | 0 indra/newview/skins/default/xui/es/panel_places.xml | 0 .../skins/default/xui/es/panel_preferences_advanced.xml | 0 .../skins/default/xui/es/panel_preferences_alerts.xml | 0 .../newview/skins/default/xui/es/panel_preferences_chat.xml | 0 .../skins/default/xui/es/panel_preferences_general.xml | 0 .../skins/default/xui/es/panel_preferences_graphics1.xml | 0 .../skins/default/xui/es/panel_preferences_privacy.xml | 0 .../skins/default/xui/es/panel_preferences_setup.xml | 0 .../skins/default/xui/es/panel_preferences_sound.xml | 0 .../skins/default/xui/es/panel_prim_media_controls.xml | 0 indra/newview/skins/default/xui/es/panel_profile.xml | 0 indra/newview/skins/default/xui/es/panel_profile_view.xml | 0 .../newview/skins/default/xui/es/panel_region_covenant.xml | 0 indra/newview/skins/default/xui/es/panel_region_debug.xml | 0 indra/newview/skins/default/xui/es/panel_region_estate.xml | 0 indra/newview/skins/default/xui/es/panel_region_general.xml | 0 .../skins/default/xui/es/panel_region_general_layout.xml | 0 indra/newview/skins/default/xui/es/panel_region_terrain.xml | 0 indra/newview/skins/default/xui/es/panel_region_texture.xml | 0 indra/newview/skins/default/xui/es/panel_script_ed.xml | 0 .../skins/default/xui/es/panel_script_limits_my_avatar.xml | 0 .../default/xui/es/panel_script_limits_region_memory.xml | 0 .../newview/skins/default/xui/es/panel_scrolling_param.xml | 0 indra/newview/skins/default/xui/es/panel_side_tray.xml | 0 .../skins/default/xui/es/panel_side_tray_tab_caption.xml | 0 .../skins/default/xui/es/panel_stand_stop_flying.xml | 0 indra/newview/skins/default/xui/es/panel_status_bar.xml | 0 .../newview/skins/default/xui/es/panel_teleport_history.xml | 0 .../skins/default/xui/es/panel_teleport_history_item.xml | 0 indra/newview/skins/default/xui/es/panel_voice_effect.xml | 0 indra/newview/skins/default/xui/es/panel_world_map.xml | 0 indra/newview/skins/default/xui/es/role_actions.xml | 0 indra/newview/skins/default/xui/es/sidepanel_appearance.xml | 0 indra/newview/skins/default/xui/es/sidepanel_inventory.xml | 0 indra/newview/skins/default/xui/es/sidepanel_item_info.xml | 0 indra/newview/skins/default/xui/es/sidepanel_task_info.xml | 0 indra/newview/skins/default/xui/es/strings.xml | 0 indra/newview/skins/default/xui/es/teleport_strings.xml | 0 indra/newview/skins/default/xui/es/xui_version.xml | 0 indra/newview/skins/default/xui/fr/floater_about.xml | 0 indra/newview/skins/default/xui/fr/floater_about_land.xml | 0 indra/newview/skins/default/xui/fr/floater_activeim.xml | 0 .../skins/default/xui/fr/floater_animation_preview.xml | 0 indra/newview/skins/default/xui/fr/floater_auction.xml | 0 .../newview/skins/default/xui/fr/floater_avatar_picker.xml | 0 .../skins/default/xui/fr/floater_avatar_textures.xml | 0 indra/newview/skins/default/xui/fr/floater_beacons.xml | 0 .../newview/skins/default/xui/fr/floater_build_options.xml | 0 indra/newview/skins/default/xui/fr/floater_bulk_perms.xml | 0 indra/newview/skins/default/xui/fr/floater_bumps.xml | 0 indra/newview/skins/default/xui/fr/floater_buy_contents.xml | 0 indra/newview/skins/default/xui/fr/floater_buy_currency.xml | 0 .../skins/default/xui/fr/floater_buy_currency_html.xml | 0 indra/newview/skins/default/xui/fr/floater_buy_land.xml | 0 indra/newview/skins/default/xui/fr/floater_buy_object.xml | 0 indra/newview/skins/default/xui/fr/floater_camera.xml | 0 indra/newview/skins/default/xui/fr/floater_choose_group.xml | 0 indra/newview/skins/default/xui/fr/floater_color_picker.xml | 0 indra/newview/skins/default/xui/fr/floater_critical.xml | 0 indra/newview/skins/default/xui/fr/floater_customize.xml | 0 .../skins/default/xui/fr/floater_day_cycle_options.xml | 0 .../skins/default/xui/fr/floater_device_settings.xml | 0 indra/newview/skins/default/xui/fr/floater_env_settings.xml | 0 indra/newview/skins/default/xui/fr/floater_event.xml | 0 .../newview/skins/default/xui/fr/floater_first_time_tip.xml | 0 indra/newview/skins/default/xui/fr/floater_font_test.xml | 0 indra/newview/skins/default/xui/fr/floater_gesture.xml | 0 indra/newview/skins/default/xui/fr/floater_god_tools.xml | 0 .../skins/default/xui/fr/floater_hardware_settings.xml | 0 indra/newview/skins/default/xui/fr/floater_help_browser.xml | 0 indra/newview/skins/default/xui/fr/floater_hud.xml | 0 indra/newview/skins/default/xui/fr/floater_im.xml | 0 indra/newview/skins/default/xui/fr/floater_im_container.xml | 0 indra/newview/skins/default/xui/fr/floater_im_session.xml | 0 .../newview/skins/default/xui/fr/floater_image_preview.xml | 0 .../newview/skins/default/xui/fr/floater_incoming_call.xml | 0 indra/newview/skins/default/xui/fr/floater_inspect.xml | 0 indra/newview/skins/default/xui/fr/floater_inventory.xml | 0 .../default/xui/fr/floater_inventory_item_properties.xml | 0 .../skins/default/xui/fr/floater_inventory_view_finder.xml | 0 indra/newview/skins/default/xui/fr/floater_joystick.xml | 0 indra/newview/skins/default/xui/fr/floater_lagmeter.xml | 0 .../newview/skins/default/xui/fr/floater_land_holdings.xml | 0 .../newview/skins/default/xui/fr/floater_live_lsleditor.xml | 0 indra/newview/skins/default/xui/fr/floater_lsl_guide.xml | 0 indra/newview/skins/default/xui/fr/floater_map.xml | 0 .../newview/skins/default/xui/fr/floater_media_browser.xml | 0 .../newview/skins/default/xui/fr/floater_media_settings.xml | 0 indra/newview/skins/default/xui/fr/floater_mem_leaking.xml | 0 indra/newview/skins/default/xui/fr/floater_moveview.xml | 0 indra/newview/skins/default/xui/fr/floater_mute_object.xml | 0 indra/newview/skins/default/xui/fr/floater_my_friends.xml | 0 indra/newview/skins/default/xui/fr/floater_nearby_chat.xml | 0 indra/newview/skins/default/xui/fr/floater_notification.xml | 0 .../skins/default/xui/fr/floater_notifications_console.xml | 0 indra/newview/skins/default/xui/fr/floater_openobject.xml | 0 .../newview/skins/default/xui/fr/floater_outfit_save_as.xml | 0 .../newview/skins/default/xui/fr/floater_outgoing_call.xml | 0 indra/newview/skins/default/xui/fr/floater_pay.xml | 0 indra/newview/skins/default/xui/fr/floater_pay_object.xml | 0 indra/newview/skins/default/xui/fr/floater_perm_prefs.xml | 0 indra/newview/skins/default/xui/fr/floater_post_process.xml | 0 indra/newview/skins/default/xui/fr/floater_postcard.xml | 0 indra/newview/skins/default/xui/fr/floater_preferences.xml | 0 .../skins/default/xui/fr/floater_preview_animation.xml | 0 .../skins/default/xui/fr/floater_preview_classified.xml | 0 .../newview/skins/default/xui/fr/floater_preview_event.xml | 0 .../skins/default/xui/fr/floater_preview_gesture.xml | 0 .../skins/default/xui/fr/floater_preview_gesture_info.xml | 0 .../default/xui/fr/floater_preview_gesture_shortcut.xml | 0 .../skins/default/xui/fr/floater_preview_gesture_steps.xml | 0 .../skins/default/xui/fr/floater_preview_notecard.xml | 0 .../newview/skins/default/xui/fr/floater_preview_sound.xml | 0 .../skins/default/xui/fr/floater_preview_texture.xml | 0 .../skins/default/xui/fr/floater_publish_classified.xml | 0 indra/newview/skins/default/xui/fr/floater_region_info.xml | 0 indra/newview/skins/default/xui/fr/floater_report_abuse.xml | 0 indra/newview/skins/default/xui/fr/floater_script_debug.xml | 0 .../skins/default/xui/fr/floater_script_debug_panel.xml | 0 .../newview/skins/default/xui/fr/floater_script_limits.xml | 0 .../newview/skins/default/xui/fr/floater_script_preview.xml | 0 indra/newview/skins/default/xui/fr/floater_script_queue.xml | 0 .../newview/skins/default/xui/fr/floater_script_search.xml | 0 indra/newview/skins/default/xui/fr/floater_search.xml | 0 indra/newview/skins/default/xui/fr/floater_select_key.xml | 0 indra/newview/skins/default/xui/fr/floater_sell_land.xml | 0 .../newview/skins/default/xui/fr/floater_settings_debug.xml | 0 indra/newview/skins/default/xui/fr/floater_snapshot.xml | 0 .../newview/skins/default/xui/fr/floater_sound_preview.xml | 0 indra/newview/skins/default/xui/fr/floater_statistics.xml | 0 indra/newview/skins/default/xui/fr/floater_stats.xml | 0 indra/newview/skins/default/xui/fr/floater_sys_well.xml | 0 indra/newview/skins/default/xui/fr/floater_telehub.xml | 0 indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml | 0 indra/newview/skins/default/xui/fr/floater_tools.xml | 0 indra/newview/skins/default/xui/fr/floater_top_objects.xml | 0 indra/newview/skins/default/xui/fr/floater_tos.xml | 0 indra/newview/skins/default/xui/fr/floater_url_entry.xml | 0 .../newview/skins/default/xui/fr/floater_voice_controls.xml | 0 indra/newview/skins/default/xui/fr/floater_voice_effect.xml | 0 indra/newview/skins/default/xui/fr/floater_water.xml | 0 .../skins/default/xui/fr/floater_wearable_save_as.xml | 0 .../skins/default/xui/fr/floater_whitelist_entry.xml | 0 .../skins/default/xui/fr/floater_windlight_options.xml | 0 indra/newview/skins/default/xui/fr/floater_window_size.xml | 0 indra/newview/skins/default/xui/fr/floater_world_map.xml | 0 indra/newview/skins/default/xui/fr/fonts.xml | 0 indra/newview/skins/default/xui/fr/inspect_avatar.xml | 0 indra/newview/skins/default/xui/fr/inspect_group.xml | 0 indra/newview/skins/default/xui/fr/inspect_object.xml | 0 .../newview/skins/default/xui/fr/inspect_remote_object.xml | 0 indra/newview/skins/default/xui/fr/language_settings.xml | 0 .../newview/skins/default/xui/fr/menu_attachment_other.xml | 0 indra/newview/skins/default/xui/fr/menu_attachment_self.xml | 0 indra/newview/skins/default/xui/fr/menu_avatar_icon.xml | 0 indra/newview/skins/default/xui/fr/menu_avatar_other.xml | 0 indra/newview/skins/default/xui/fr/menu_avatar_self.xml | 0 indra/newview/skins/default/xui/fr/menu_bottomtray.xml | 0 indra/newview/skins/default/xui/fr/menu_cof_attachment.xml | 0 indra/newview/skins/default/xui/fr/menu_cof_body_part.xml | 0 indra/newview/skins/default/xui/fr/menu_cof_clothing.xml | 0 indra/newview/skins/default/xui/fr/menu_cof_gear.xml | 0 indra/newview/skins/default/xui/fr/menu_edit.xml | 0 indra/newview/skins/default/xui/fr/menu_favorites.xml | 0 indra/newview/skins/default/xui/fr/menu_gesture_gear.xml | 0 indra/newview/skins/default/xui/fr/menu_group_plus.xml | 0 indra/newview/skins/default/xui/fr/menu_hide_navbar.xml | 0 indra/newview/skins/default/xui/fr/menu_im_well_button.xml | 0 indra/newview/skins/default/xui/fr/menu_imchiclet_adhoc.xml | 0 indra/newview/skins/default/xui/fr/menu_imchiclet_group.xml | 0 indra/newview/skins/default/xui/fr/menu_imchiclet_p2p.xml | 0 .../skins/default/xui/fr/menu_inspect_avatar_gear.xml | 0 .../skins/default/xui/fr/menu_inspect_object_gear.xml | 0 .../newview/skins/default/xui/fr/menu_inspect_self_gear.xml | 0 .../newview/skins/default/xui/fr/menu_inv_offer_chiclet.xml | 0 indra/newview/skins/default/xui/fr/menu_inventory.xml | 0 indra/newview/skins/default/xui/fr/menu_inventory_add.xml | 0 .../skins/default/xui/fr/menu_inventory_gear_default.xml | 0 indra/newview/skins/default/xui/fr/menu_land.xml | 0 indra/newview/skins/default/xui/fr/menu_landmark.xml | 0 indra/newview/skins/default/xui/fr/menu_login.xml | 0 indra/newview/skins/default/xui/fr/menu_mini_map.xml | 0 indra/newview/skins/default/xui/fr/menu_navbar.xml | 0 indra/newview/skins/default/xui/fr/menu_nearby_chat.xml | 0 .../skins/default/xui/fr/menu_notification_well_button.xml | 0 indra/newview/skins/default/xui/fr/menu_object.xml | 0 indra/newview/skins/default/xui/fr/menu_object_icon.xml | 0 indra/newview/skins/default/xui/fr/menu_outfit_gear.xml | 0 indra/newview/skins/default/xui/fr/menu_outfit_tab.xml | 0 .../newview/skins/default/xui/fr/menu_participant_list.xml | 0 .../skins/default/xui/fr/menu_people_friends_view_sort.xml | 0 indra/newview/skins/default/xui/fr/menu_people_groups.xml | 0 .../skins/default/xui/fr/menu_people_groups_view_sort.xml | 0 indra/newview/skins/default/xui/fr/menu_people_nearby.xml | 0 .../skins/default/xui/fr/menu_people_nearby_multiselect.xml | 0 .../skins/default/xui/fr/menu_people_nearby_view_sort.xml | 0 .../skins/default/xui/fr/menu_people_recent_view_sort.xml | 0 indra/newview/skins/default/xui/fr/menu_picks.xml | 0 indra/newview/skins/default/xui/fr/menu_picks_plus.xml | 0 indra/newview/skins/default/xui/fr/menu_place.xml | 0 .../newview/skins/default/xui/fr/menu_place_add_button.xml | 0 .../skins/default/xui/fr/menu_places_gear_folder.xml | 0 .../skins/default/xui/fr/menu_places_gear_landmark.xml | 0 .../newview/skins/default/xui/fr/menu_profile_overflow.xml | 0 indra/newview/skins/default/xui/fr/menu_save_outfit.xml | 0 indra/newview/skins/default/xui/fr/menu_script_chiclet.xml | 0 indra/newview/skins/default/xui/fr/menu_slurl.xml | 0 .../skins/default/xui/fr/menu_teleport_history_gear.xml | 0 .../skins/default/xui/fr/menu_teleport_history_item.xml | 0 .../skins/default/xui/fr/menu_teleport_history_tab.xml | 0 indra/newview/skins/default/xui/fr/menu_text_editor.xml | 0 indra/newview/skins/default/xui/fr/menu_topinfobar.xml | 0 indra/newview/skins/default/xui/fr/menu_url_agent.xml | 0 indra/newview/skins/default/xui/fr/menu_url_group.xml | 0 indra/newview/skins/default/xui/fr/menu_url_http.xml | 0 indra/newview/skins/default/xui/fr/menu_url_inventory.xml | 0 indra/newview/skins/default/xui/fr/menu_url_map.xml | 0 indra/newview/skins/default/xui/fr/menu_url_objectim.xml | 0 indra/newview/skins/default/xui/fr/menu_url_parcel.xml | 0 indra/newview/skins/default/xui/fr/menu_url_slapp.xml | 0 indra/newview/skins/default/xui/fr/menu_url_slurl.xml | 0 indra/newview/skins/default/xui/fr/menu_url_teleport.xml | 0 indra/newview/skins/default/xui/fr/menu_viewer.xml | 0 .../skins/default/xui/fr/menu_wearable_list_item.xml | 0 indra/newview/skins/default/xui/fr/menu_wearing_gear.xml | 0 indra/newview/skins/default/xui/fr/menu_wearing_tab.xml | 0 indra/newview/skins/default/xui/fr/mime_types.xml | 0 indra/newview/skins/default/xui/fr/mime_types_linux.xml | 0 indra/newview/skins/default/xui/fr/mime_types_mac.xml | 0 indra/newview/skins/default/xui/fr/notifications.xml | 0 indra/newview/skins/default/xui/fr/outfit_accordion_tab.xml | 0 .../skins/default/xui/fr/panel_active_object_row.xml | 0 indra/newview/skins/default/xui/fr/panel_activeim_row.xml | 0 .../skins/default/xui/fr/panel_adhoc_control_panel.xml | 0 indra/newview/skins/default/xui/fr/panel_audio_device.xml | 0 .../newview/skins/default/xui/fr/panel_avatar_list_item.xml | 0 indra/newview/skins/default/xui/fr/panel_avatar_tag.xml | 0 .../skins/default/xui/fr/panel_block_list_sidetray.xml | 0 .../skins/default/xui/fr/panel_body_parts_list_item.xml | 0 .../default/xui/fr/panel_bodyparts_list_button_bar.xml | 0 indra/newview/skins/default/xui/fr/panel_bottomtray.xml | 0 .../newview/skins/default/xui/fr/panel_bottomtray_lite.xml | 0 indra/newview/skins/default/xui/fr/panel_chat_header.xml | 0 .../newview/skins/default/xui/fr/panel_classified_info.xml | 0 .../skins/default/xui/fr/panel_clothing_list_button_bar.xml | 0 .../skins/default/xui/fr/panel_clothing_list_item.xml | 0 indra/newview/skins/default/xui/fr/panel_cof_wearables.xml | 0 .../default/xui/fr/panel_deletable_wearable_list_item.xml | 0 .../skins/default/xui/fr/panel_dummy_clothing_list_item.xml | 0 indra/newview/skins/default/xui/fr/panel_edit_alpha.xml | 0 .../newview/skins/default/xui/fr/panel_edit_classified.xml | 0 indra/newview/skins/default/xui/fr/panel_edit_eyes.xml | 0 indra/newview/skins/default/xui/fr/panel_edit_gloves.xml | 0 indra/newview/skins/default/xui/fr/panel_edit_hair.xml | 0 indra/newview/skins/default/xui/fr/panel_edit_jacket.xml | 0 indra/newview/skins/default/xui/fr/panel_edit_pants.xml | 0 indra/newview/skins/default/xui/fr/panel_edit_pick.xml | 0 indra/newview/skins/default/xui/fr/panel_edit_profile.xml | 0 indra/newview/skins/default/xui/fr/panel_edit_shape.xml | 0 indra/newview/skins/default/xui/fr/panel_edit_shirt.xml | 0 indra/newview/skins/default/xui/fr/panel_edit_shoes.xml | 0 indra/newview/skins/default/xui/fr/panel_edit_skin.xml | 0 indra/newview/skins/default/xui/fr/panel_edit_skirt.xml | 0 indra/newview/skins/default/xui/fr/panel_edit_socks.xml | 0 indra/newview/skins/default/xui/fr/panel_edit_tattoo.xml | 0 .../newview/skins/default/xui/fr/panel_edit_underpants.xml | 0 .../newview/skins/default/xui/fr/panel_edit_undershirt.xml | 0 indra/newview/skins/default/xui/fr/panel_edit_wearable.xml | 0 indra/newview/skins/default/xui/fr/panel_friends.xml | 0 .../skins/default/xui/fr/panel_group_control_panel.xml | 0 indra/newview/skins/default/xui/fr/panel_group_general.xml | 0 .../skins/default/xui/fr/panel_group_info_sidetray.xml | 0 indra/newview/skins/default/xui/fr/panel_group_invite.xml | 0 .../newview/skins/default/xui/fr/panel_group_land_money.xml | 0 .../newview/skins/default/xui/fr/panel_group_list_item.xml | 0 indra/newview/skins/default/xui/fr/panel_group_notices.xml | 0 indra/newview/skins/default/xui/fr/panel_group_notify.xml | 0 indra/newview/skins/default/xui/fr/panel_group_roles.xml | 0 indra/newview/skins/default/xui/fr/panel_groups.xml | 0 .../newview/skins/default/xui/fr/panel_im_control_panel.xml | 0 .../newview/skins/default/xui/fr/panel_instant_message.xml | 0 indra/newview/skins/default/xui/fr/panel_inventory_item.xml | 0 indra/newview/skins/default/xui/fr/panel_landmark_info.xml | 0 indra/newview/skins/default/xui/fr/panel_landmarks.xml | 0 indra/newview/skins/default/xui/fr/panel_login.xml | 0 indra/newview/skins/default/xui/fr/panel_main_inventory.xml | 0 indra/newview/skins/default/xui/fr/panel_me.xml | 0 .../skins/default/xui/fr/panel_media_settings_general.xml | 0 .../default/xui/fr/panel_media_settings_permissions.xml | 0 .../skins/default/xui/fr/panel_media_settings_security.xml | 0 indra/newview/skins/default/xui/fr/panel_my_profile.xml | 0 indra/newview/skins/default/xui/fr/panel_navigation_bar.xml | 0 indra/newview/skins/default/xui/fr/panel_nearby_chat.xml | 0 .../newview/skins/default/xui/fr/panel_nearby_chat_bar.xml | 0 indra/newview/skins/default/xui/fr/panel_nearby_media.xml | 0 indra/newview/skins/default/xui/fr/panel_notes.xml | 0 .../skins/default/xui/fr/panel_notifications_channel.xml | 0 indra/newview/skins/default/xui/fr/panel_online_status.xml | 0 .../skins/default/xui/fr/panel_online_status_toast.xml | 0 indra/newview/skins/default/xui/fr/panel_outfit_edit.xml | 0 .../skins/default/xui/fr/panel_outfits_inventory.xml | 0 .../default/xui/fr/panel_outfits_inventory_gear_default.xml | 0 indra/newview/skins/default/xui/fr/panel_outfits_list.xml | 0 .../newview/skins/default/xui/fr/panel_outfits_wearing.xml | 0 indra/newview/skins/default/xui/fr/panel_people.xml | 0 indra/newview/skins/default/xui/fr/panel_pick_info.xml | 0 indra/newview/skins/default/xui/fr/panel_picks.xml | 0 indra/newview/skins/default/xui/fr/panel_place_profile.xml | 0 indra/newview/skins/default/xui/fr/panel_places.xml | 0 .../skins/default/xui/fr/panel_preferences_advanced.xml | 0 .../skins/default/xui/fr/panel_preferences_alerts.xml | 0 .../newview/skins/default/xui/fr/panel_preferences_chat.xml | 0 .../skins/default/xui/fr/panel_preferences_general.xml | 0 .../skins/default/xui/fr/panel_preferences_graphics1.xml | 0 .../skins/default/xui/fr/panel_preferences_privacy.xml | 0 .../skins/default/xui/fr/panel_preferences_setup.xml | 0 .../skins/default/xui/fr/panel_preferences_sound.xml | 0 .../skins/default/xui/fr/panel_prim_media_controls.xml | 0 indra/newview/skins/default/xui/fr/panel_profile.xml | 0 indra/newview/skins/default/xui/fr/panel_profile_view.xml | 0 .../newview/skins/default/xui/fr/panel_region_covenant.xml | 0 indra/newview/skins/default/xui/fr/panel_region_debug.xml | 0 indra/newview/skins/default/xui/fr/panel_region_estate.xml | 0 indra/newview/skins/default/xui/fr/panel_region_general.xml | 0 .../skins/default/xui/fr/panel_region_general_layout.xml | 0 indra/newview/skins/default/xui/fr/panel_region_terrain.xml | 0 indra/newview/skins/default/xui/fr/panel_region_texture.xml | 0 indra/newview/skins/default/xui/fr/panel_script_ed.xml | 0 .../skins/default/xui/fr/panel_script_limits_my_avatar.xml | 0 .../default/xui/fr/panel_script_limits_region_memory.xml | 0 .../newview/skins/default/xui/fr/panel_scrolling_param.xml | 0 indra/newview/skins/default/xui/fr/panel_side_tray.xml | 0 .../skins/default/xui/fr/panel_side_tray_tab_caption.xml | 0 .../skins/default/xui/fr/panel_sidetray_home_tab.xml | 0 .../skins/default/xui/fr/panel_stand_stop_flying.xml | 0 indra/newview/skins/default/xui/fr/panel_status_bar.xml | 0 indra/newview/skins/default/xui/fr/panel_sys_well_item.xml | 0 .../newview/skins/default/xui/fr/panel_teleport_history.xml | 0 .../skins/default/xui/fr/panel_teleport_history_item.xml | 0 indra/newview/skins/default/xui/fr/panel_voice_effect.xml | 0 indra/newview/skins/default/xui/fr/panel_world_map.xml | 0 indra/newview/skins/default/xui/fr/role_actions.xml | 0 indra/newview/skins/default/xui/fr/sidepanel_appearance.xml | 0 indra/newview/skins/default/xui/fr/sidepanel_inventory.xml | 0 indra/newview/skins/default/xui/fr/sidepanel_item_info.xml | 0 indra/newview/skins/default/xui/fr/sidepanel_task_info.xml | 0 indra/newview/skins/default/xui/fr/strings.xml | 0 indra/newview/skins/default/xui/fr/teleport_strings.xml | 0 indra/newview/skins/default/xui/fr/xui_version.xml | 0 indra/newview/skins/default/xui/it/floater_about.xml | 0 indra/newview/skins/default/xui/it/floater_about_land.xml | 0 indra/newview/skins/default/xui/it/floater_activeim.xml | 0 .../skins/default/xui/it/floater_animation_preview.xml | 0 indra/newview/skins/default/xui/it/floater_auction.xml | 0 .../newview/skins/default/xui/it/floater_avatar_picker.xml | 0 .../skins/default/xui/it/floater_avatar_textures.xml | 0 indra/newview/skins/default/xui/it/floater_beacons.xml | 0 .../newview/skins/default/xui/it/floater_build_options.xml | 0 indra/newview/skins/default/xui/it/floater_bulk_perms.xml | 0 indra/newview/skins/default/xui/it/floater_bumps.xml | 0 indra/newview/skins/default/xui/it/floater_buy_contents.xml | 0 indra/newview/skins/default/xui/it/floater_buy_currency.xml | 0 .../skins/default/xui/it/floater_buy_currency_html.xml | 0 indra/newview/skins/default/xui/it/floater_buy_land.xml | 0 indra/newview/skins/default/xui/it/floater_buy_object.xml | 0 indra/newview/skins/default/xui/it/floater_camera.xml | 0 indra/newview/skins/default/xui/it/floater_choose_group.xml | 0 indra/newview/skins/default/xui/it/floater_color_picker.xml | 0 indra/newview/skins/default/xui/it/floater_critical.xml | 0 indra/newview/skins/default/xui/it/floater_customize.xml | 0 .../skins/default/xui/it/floater_day_cycle_options.xml | 0 .../skins/default/xui/it/floater_device_settings.xml | 0 indra/newview/skins/default/xui/it/floater_env_settings.xml | 0 indra/newview/skins/default/xui/it/floater_event.xml | 0 indra/newview/skins/default/xui/it/floater_font_test.xml | 0 indra/newview/skins/default/xui/it/floater_gesture.xml | 0 indra/newview/skins/default/xui/it/floater_god_tools.xml | 0 .../skins/default/xui/it/floater_hardware_settings.xml | 0 indra/newview/skins/default/xui/it/floater_help_browser.xml | 0 indra/newview/skins/default/xui/it/floater_hud.xml | 0 indra/newview/skins/default/xui/it/floater_im.xml | 0 indra/newview/skins/default/xui/it/floater_im_container.xml | 0 indra/newview/skins/default/xui/it/floater_im_session.xml | 0 .../newview/skins/default/xui/it/floater_image_preview.xml | 0 .../newview/skins/default/xui/it/floater_incoming_call.xml | 0 indra/newview/skins/default/xui/it/floater_inspect.xml | 0 indra/newview/skins/default/xui/it/floater_inventory.xml | 0 .../default/xui/it/floater_inventory_item_properties.xml | 0 .../skins/default/xui/it/floater_inventory_view_finder.xml | 0 indra/newview/skins/default/xui/it/floater_joystick.xml | 0 indra/newview/skins/default/xui/it/floater_lagmeter.xml | 0 .../newview/skins/default/xui/it/floater_land_holdings.xml | 0 .../newview/skins/default/xui/it/floater_live_lsleditor.xml | 0 indra/newview/skins/default/xui/it/floater_lsl_guide.xml | 0 indra/newview/skins/default/xui/it/floater_map.xml | 0 .../newview/skins/default/xui/it/floater_media_browser.xml | 0 .../newview/skins/default/xui/it/floater_media_settings.xml | 0 indra/newview/skins/default/xui/it/floater_mem_leaking.xml | 0 indra/newview/skins/default/xui/it/floater_moveview.xml | 0 indra/newview/skins/default/xui/it/floater_mute_object.xml | 0 indra/newview/skins/default/xui/it/floater_my_friends.xml | 0 indra/newview/skins/default/xui/it/floater_nearby_chat.xml | 0 indra/newview/skins/default/xui/it/floater_openobject.xml | 0 .../newview/skins/default/xui/it/floater_outfit_save_as.xml | 0 .../newview/skins/default/xui/it/floater_outgoing_call.xml | 0 indra/newview/skins/default/xui/it/floater_pay.xml | 0 indra/newview/skins/default/xui/it/floater_pay_object.xml | 0 indra/newview/skins/default/xui/it/floater_perm_prefs.xml | 0 indra/newview/skins/default/xui/it/floater_post_process.xml | 0 indra/newview/skins/default/xui/it/floater_postcard.xml | 0 indra/newview/skins/default/xui/it/floater_preferences.xml | 0 .../skins/default/xui/it/floater_preview_animation.xml | 0 .../skins/default/xui/it/floater_preview_classified.xml | 0 .../newview/skins/default/xui/it/floater_preview_event.xml | 0 .../skins/default/xui/it/floater_preview_gesture.xml | 0 .../skins/default/xui/it/floater_preview_gesture_info.xml | 0 .../default/xui/it/floater_preview_gesture_shortcut.xml | 0 .../skins/default/xui/it/floater_preview_gesture_steps.xml | 0 .../skins/default/xui/it/floater_preview_notecard.xml | 0 .../newview/skins/default/xui/it/floater_preview_sound.xml | 0 .../skins/default/xui/it/floater_preview_texture.xml | 0 .../skins/default/xui/it/floater_publish_classified.xml | 0 indra/newview/skins/default/xui/it/floater_region_info.xml | 0 indra/newview/skins/default/xui/it/floater_report_abuse.xml | 0 indra/newview/skins/default/xui/it/floater_script_debug.xml | 0 .../skins/default/xui/it/floater_script_debug_panel.xml | 0 .../newview/skins/default/xui/it/floater_script_limits.xml | 0 .../newview/skins/default/xui/it/floater_script_preview.xml | 0 indra/newview/skins/default/xui/it/floater_script_queue.xml | 0 .../newview/skins/default/xui/it/floater_script_search.xml | 0 indra/newview/skins/default/xui/it/floater_search.xml | 0 indra/newview/skins/default/xui/it/floater_select_key.xml | 0 indra/newview/skins/default/xui/it/floater_sell_land.xml | 0 .../newview/skins/default/xui/it/floater_settings_debug.xml | 0 indra/newview/skins/default/xui/it/floater_snapshot.xml | 0 .../newview/skins/default/xui/it/floater_sound_preview.xml | 0 indra/newview/skins/default/xui/it/floater_statistics.xml | 0 indra/newview/skins/default/xui/it/floater_stats.xml | 0 indra/newview/skins/default/xui/it/floater_sys_well.xml | 0 indra/newview/skins/default/xui/it/floater_telehub.xml | 0 indra/newview/skins/default/xui/it/floater_texture_ctrl.xml | 0 indra/newview/skins/default/xui/it/floater_tools.xml | 0 indra/newview/skins/default/xui/it/floater_top_objects.xml | 0 indra/newview/skins/default/xui/it/floater_tos.xml | 0 indra/newview/skins/default/xui/it/floater_url_entry.xml | 0 .../newview/skins/default/xui/it/floater_voice_controls.xml | 0 indra/newview/skins/default/xui/it/floater_voice_effect.xml | 0 indra/newview/skins/default/xui/it/floater_water.xml | 0 .../skins/default/xui/it/floater_wearable_save_as.xml | 0 .../skins/default/xui/it/floater_whitelist_entry.xml | 0 .../skins/default/xui/it/floater_windlight_options.xml | 0 indra/newview/skins/default/xui/it/floater_window_size.xml | 0 indra/newview/skins/default/xui/it/floater_world_map.xml | 0 indra/newview/skins/default/xui/it/inspect_avatar.xml | 0 indra/newview/skins/default/xui/it/inspect_group.xml | 0 indra/newview/skins/default/xui/it/inspect_object.xml | 0 .../newview/skins/default/xui/it/inspect_remote_object.xml | 0 indra/newview/skins/default/xui/it/language_settings.xml | 0 .../newview/skins/default/xui/it/menu_attachment_other.xml | 0 indra/newview/skins/default/xui/it/menu_attachment_self.xml | 0 indra/newview/skins/default/xui/it/menu_avatar_icon.xml | 0 indra/newview/skins/default/xui/it/menu_avatar_other.xml | 0 indra/newview/skins/default/xui/it/menu_avatar_self.xml | 0 indra/newview/skins/default/xui/it/menu_bottomtray.xml | 0 indra/newview/skins/default/xui/it/menu_cof_attachment.xml | 0 indra/newview/skins/default/xui/it/menu_cof_body_part.xml | 0 indra/newview/skins/default/xui/it/menu_cof_clothing.xml | 0 indra/newview/skins/default/xui/it/menu_cof_gear.xml | 0 indra/newview/skins/default/xui/it/menu_edit.xml | 0 indra/newview/skins/default/xui/it/menu_favorites.xml | 0 indra/newview/skins/default/xui/it/menu_gesture_gear.xml | 0 indra/newview/skins/default/xui/it/menu_group_plus.xml | 0 indra/newview/skins/default/xui/it/menu_hide_navbar.xml | 0 indra/newview/skins/default/xui/it/menu_im_well_button.xml | 0 indra/newview/skins/default/xui/it/menu_imchiclet_adhoc.xml | 0 indra/newview/skins/default/xui/it/menu_imchiclet_group.xml | 0 indra/newview/skins/default/xui/it/menu_imchiclet_p2p.xml | 0 .../skins/default/xui/it/menu_inspect_avatar_gear.xml | 0 .../skins/default/xui/it/menu_inspect_object_gear.xml | 0 .../newview/skins/default/xui/it/menu_inspect_self_gear.xml | 0 .../newview/skins/default/xui/it/menu_inv_offer_chiclet.xml | 0 indra/newview/skins/default/xui/it/menu_inventory.xml | 0 indra/newview/skins/default/xui/it/menu_inventory_add.xml | 0 .../skins/default/xui/it/menu_inventory_gear_default.xml | 0 indra/newview/skins/default/xui/it/menu_land.xml | 0 indra/newview/skins/default/xui/it/menu_landmark.xml | 0 indra/newview/skins/default/xui/it/menu_login.xml | 0 indra/newview/skins/default/xui/it/menu_mini_map.xml | 0 indra/newview/skins/default/xui/it/menu_navbar.xml | 0 indra/newview/skins/default/xui/it/menu_nearby_chat.xml | 0 .../skins/default/xui/it/menu_notification_well_button.xml | 0 indra/newview/skins/default/xui/it/menu_object.xml | 0 indra/newview/skins/default/xui/it/menu_object_icon.xml | 0 indra/newview/skins/default/xui/it/menu_outfit_gear.xml | 0 indra/newview/skins/default/xui/it/menu_outfit_tab.xml | 0 .../newview/skins/default/xui/it/menu_participant_list.xml | 0 .../skins/default/xui/it/menu_people_friends_view_sort.xml | 0 indra/newview/skins/default/xui/it/menu_people_groups.xml | 0 .../skins/default/xui/it/menu_people_groups_view_sort.xml | 0 indra/newview/skins/default/xui/it/menu_people_nearby.xml | 0 .../skins/default/xui/it/menu_people_nearby_multiselect.xml | 0 .../skins/default/xui/it/menu_people_nearby_view_sort.xml | 0 .../skins/default/xui/it/menu_people_recent_view_sort.xml | 0 indra/newview/skins/default/xui/it/menu_picks.xml | 0 indra/newview/skins/default/xui/it/menu_picks_plus.xml | 0 indra/newview/skins/default/xui/it/menu_place.xml | 0 .../newview/skins/default/xui/it/menu_place_add_button.xml | 0 .../skins/default/xui/it/menu_places_gear_folder.xml | 0 .../skins/default/xui/it/menu_places_gear_landmark.xml | 0 .../newview/skins/default/xui/it/menu_profile_overflow.xml | 0 indra/newview/skins/default/xui/it/menu_save_outfit.xml | 0 indra/newview/skins/default/xui/it/menu_script_chiclet.xml | 0 indra/newview/skins/default/xui/it/menu_slurl.xml | 0 .../skins/default/xui/it/menu_teleport_history_gear.xml | 0 .../skins/default/xui/it/menu_teleport_history_item.xml | 0 .../skins/default/xui/it/menu_teleport_history_tab.xml | 0 indra/newview/skins/default/xui/it/menu_text_editor.xml | 0 indra/newview/skins/default/xui/it/menu_topinfobar.xml | 0 indra/newview/skins/default/xui/it/menu_url_agent.xml | 0 indra/newview/skins/default/xui/it/menu_url_group.xml | 0 indra/newview/skins/default/xui/it/menu_url_http.xml | 0 indra/newview/skins/default/xui/it/menu_url_inventory.xml | 0 indra/newview/skins/default/xui/it/menu_url_map.xml | 0 indra/newview/skins/default/xui/it/menu_url_objectim.xml | 0 indra/newview/skins/default/xui/it/menu_url_parcel.xml | 0 indra/newview/skins/default/xui/it/menu_url_slapp.xml | 0 indra/newview/skins/default/xui/it/menu_url_slurl.xml | 0 indra/newview/skins/default/xui/it/menu_url_teleport.xml | 0 indra/newview/skins/default/xui/it/menu_viewer.xml | 0 .../skins/default/xui/it/menu_wearable_list_item.xml | 0 indra/newview/skins/default/xui/it/menu_wearing_gear.xml | 0 indra/newview/skins/default/xui/it/menu_wearing_tab.xml | 0 indra/newview/skins/default/xui/it/mime_types.xml | 0 indra/newview/skins/default/xui/it/mime_types_linux.xml | 0 indra/newview/skins/default/xui/it/mime_types_mac.xml | 0 indra/newview/skins/default/xui/it/notifications.xml | 0 indra/newview/skins/default/xui/it/outfit_accordion_tab.xml | 0 .../skins/default/xui/it/panel_active_object_row.xml | 0 .../skins/default/xui/it/panel_adhoc_control_panel.xml | 0 indra/newview/skins/default/xui/it/panel_audio_device.xml | 0 .../newview/skins/default/xui/it/panel_avatar_list_item.xml | 0 .../skins/default/xui/it/panel_block_list_sidetray.xml | 0 .../skins/default/xui/it/panel_body_parts_list_item.xml | 0 .../default/xui/it/panel_bodyparts_list_button_bar.xml | 0 indra/newview/skins/default/xui/it/panel_bottomtray.xml | 0 .../newview/skins/default/xui/it/panel_bottomtray_lite.xml | 0 .../newview/skins/default/xui/it/panel_classified_info.xml | 0 .../skins/default/xui/it/panel_clothing_list_button_bar.xml | 0 .../skins/default/xui/it/panel_clothing_list_item.xml | 0 indra/newview/skins/default/xui/it/panel_cof_wearables.xml | 0 .../default/xui/it/panel_deletable_wearable_list_item.xml | 0 .../skins/default/xui/it/panel_dummy_clothing_list_item.xml | 0 indra/newview/skins/default/xui/it/panel_edit_alpha.xml | 0 .../newview/skins/default/xui/it/panel_edit_classified.xml | 0 indra/newview/skins/default/xui/it/panel_edit_eyes.xml | 0 indra/newview/skins/default/xui/it/panel_edit_gloves.xml | 0 indra/newview/skins/default/xui/it/panel_edit_hair.xml | 0 indra/newview/skins/default/xui/it/panel_edit_jacket.xml | 0 indra/newview/skins/default/xui/it/panel_edit_pants.xml | 0 indra/newview/skins/default/xui/it/panel_edit_pick.xml | 0 indra/newview/skins/default/xui/it/panel_edit_profile.xml | 0 indra/newview/skins/default/xui/it/panel_edit_shape.xml | 0 indra/newview/skins/default/xui/it/panel_edit_shirt.xml | 0 indra/newview/skins/default/xui/it/panel_edit_shoes.xml | 0 indra/newview/skins/default/xui/it/panel_edit_skin.xml | 0 indra/newview/skins/default/xui/it/panel_edit_skirt.xml | 0 indra/newview/skins/default/xui/it/panel_edit_socks.xml | 0 indra/newview/skins/default/xui/it/panel_edit_tattoo.xml | 0 .../newview/skins/default/xui/it/panel_edit_underpants.xml | 0 .../newview/skins/default/xui/it/panel_edit_undershirt.xml | 0 indra/newview/skins/default/xui/it/panel_edit_wearable.xml | 0 indra/newview/skins/default/xui/it/panel_friends.xml | 0 .../skins/default/xui/it/panel_group_control_panel.xml | 0 indra/newview/skins/default/xui/it/panel_group_general.xml | 0 .../skins/default/xui/it/panel_group_info_sidetray.xml | 0 indra/newview/skins/default/xui/it/panel_group_invite.xml | 0 .../newview/skins/default/xui/it/panel_group_land_money.xml | 0 .../newview/skins/default/xui/it/panel_group_list_item.xml | 0 indra/newview/skins/default/xui/it/panel_group_notices.xml | 0 indra/newview/skins/default/xui/it/panel_group_notify.xml | 0 indra/newview/skins/default/xui/it/panel_group_roles.xml | 0 indra/newview/skins/default/xui/it/panel_groups.xml | 0 .../newview/skins/default/xui/it/panel_im_control_panel.xml | 0 indra/newview/skins/default/xui/it/panel_inventory_item.xml | 0 indra/newview/skins/default/xui/it/panel_landmark_info.xml | 0 indra/newview/skins/default/xui/it/panel_landmarks.xml | 0 indra/newview/skins/default/xui/it/panel_login.xml | 0 indra/newview/skins/default/xui/it/panel_main_inventory.xml | 0 indra/newview/skins/default/xui/it/panel_me.xml | 0 .../skins/default/xui/it/panel_media_settings_general.xml | 0 .../default/xui/it/panel_media_settings_permissions.xml | 0 .../skins/default/xui/it/panel_media_settings_security.xml | 0 indra/newview/skins/default/xui/it/panel_my_profile.xml | 0 indra/newview/skins/default/xui/it/panel_navigation_bar.xml | 0 indra/newview/skins/default/xui/it/panel_nearby_chat.xml | 0 .../newview/skins/default/xui/it/panel_nearby_chat_bar.xml | 0 indra/newview/skins/default/xui/it/panel_nearby_media.xml | 0 indra/newview/skins/default/xui/it/panel_notes.xml | 0 indra/newview/skins/default/xui/it/panel_online_status.xml | 0 .../skins/default/xui/it/panel_online_status_toast.xml | 0 indra/newview/skins/default/xui/it/panel_outfit_edit.xml | 0 .../skins/default/xui/it/panel_outfits_inventory.xml | 0 .../default/xui/it/panel_outfits_inventory_gear_default.xml | 0 indra/newview/skins/default/xui/it/panel_outfits_list.xml | 0 .../newview/skins/default/xui/it/panel_outfits_wearing.xml | 0 indra/newview/skins/default/xui/it/panel_people.xml | 0 indra/newview/skins/default/xui/it/panel_pick_info.xml | 0 indra/newview/skins/default/xui/it/panel_picks.xml | 0 indra/newview/skins/default/xui/it/panel_place_profile.xml | 0 indra/newview/skins/default/xui/it/panel_places.xml | 0 .../skins/default/xui/it/panel_preferences_advanced.xml | 0 .../skins/default/xui/it/panel_preferences_alerts.xml | 0 .../newview/skins/default/xui/it/panel_preferences_chat.xml | 0 .../skins/default/xui/it/panel_preferences_general.xml | 0 .../skins/default/xui/it/panel_preferences_graphics1.xml | 0 .../skins/default/xui/it/panel_preferences_privacy.xml | 0 .../skins/default/xui/it/panel_preferences_setup.xml | 0 .../skins/default/xui/it/panel_preferences_sound.xml | 0 .../skins/default/xui/it/panel_prim_media_controls.xml | 0 indra/newview/skins/default/xui/it/panel_profile.xml | 0 indra/newview/skins/default/xui/it/panel_profile_view.xml | 0 .../newview/skins/default/xui/it/panel_region_covenant.xml | 0 indra/newview/skins/default/xui/it/panel_region_debug.xml | 0 indra/newview/skins/default/xui/it/panel_region_estate.xml | 0 indra/newview/skins/default/xui/it/panel_region_general.xml | 0 .../skins/default/xui/it/panel_region_general_layout.xml | 0 indra/newview/skins/default/xui/it/panel_region_terrain.xml | 0 indra/newview/skins/default/xui/it/panel_region_texture.xml | 0 indra/newview/skins/default/xui/it/panel_script_ed.xml | 0 .../skins/default/xui/it/panel_script_limits_my_avatar.xml | 0 .../default/xui/it/panel_script_limits_region_memory.xml | 0 .../newview/skins/default/xui/it/panel_scrolling_param.xml | 0 indra/newview/skins/default/xui/it/panel_side_tray.xml | 0 .../skins/default/xui/it/panel_side_tray_tab_caption.xml | 0 .../skins/default/xui/it/panel_stand_stop_flying.xml | 0 indra/newview/skins/default/xui/it/panel_status_bar.xml | 0 .../newview/skins/default/xui/it/panel_teleport_history.xml | 0 .../skins/default/xui/it/panel_teleport_history_item.xml | 0 indra/newview/skins/default/xui/it/panel_voice_effect.xml | 0 indra/newview/skins/default/xui/it/panel_world_map.xml | 0 indra/newview/skins/default/xui/it/role_actions.xml | 0 indra/newview/skins/default/xui/it/sidepanel_appearance.xml | 0 indra/newview/skins/default/xui/it/sidepanel_inventory.xml | 0 indra/newview/skins/default/xui/it/sidepanel_item_info.xml | 0 indra/newview/skins/default/xui/it/sidepanel_task_info.xml | 0 indra/newview/skins/default/xui/it/strings.xml | 0 indra/newview/skins/default/xui/it/teleport_strings.xml | 0 indra/newview/skins/default/xui/ja/floater_about.xml | 0 indra/newview/skins/default/xui/ja/floater_about_land.xml | 0 indra/newview/skins/default/xui/ja/floater_activeim.xml | 0 .../skins/default/xui/ja/floater_animation_preview.xml | 0 indra/newview/skins/default/xui/ja/floater_auction.xml | 0 .../newview/skins/default/xui/ja/floater_avatar_picker.xml | 0 .../skins/default/xui/ja/floater_avatar_textures.xml | 0 indra/newview/skins/default/xui/ja/floater_beacons.xml | 0 .../newview/skins/default/xui/ja/floater_build_options.xml | 0 indra/newview/skins/default/xui/ja/floater_bulk_perms.xml | 0 indra/newview/skins/default/xui/ja/floater_bumps.xml | 0 indra/newview/skins/default/xui/ja/floater_buy_contents.xml | 0 indra/newview/skins/default/xui/ja/floater_buy_currency.xml | 0 .../skins/default/xui/ja/floater_buy_currency_html.xml | 0 indra/newview/skins/default/xui/ja/floater_buy_land.xml | 0 indra/newview/skins/default/xui/ja/floater_buy_object.xml | 0 indra/newview/skins/default/xui/ja/floater_camera.xml | 0 indra/newview/skins/default/xui/ja/floater_choose_group.xml | 0 indra/newview/skins/default/xui/ja/floater_color_picker.xml | 0 indra/newview/skins/default/xui/ja/floater_critical.xml | 0 indra/newview/skins/default/xui/ja/floater_customize.xml | 0 .../skins/default/xui/ja/floater_day_cycle_options.xml | 0 .../skins/default/xui/ja/floater_device_settings.xml | 0 indra/newview/skins/default/xui/ja/floater_env_settings.xml | 0 indra/newview/skins/default/xui/ja/floater_event.xml | 0 .../newview/skins/default/xui/ja/floater_first_time_tip.xml | 0 indra/newview/skins/default/xui/ja/floater_font_test.xml | 0 indra/newview/skins/default/xui/ja/floater_gesture.xml | 0 indra/newview/skins/default/xui/ja/floater_god_tools.xml | 0 .../skins/default/xui/ja/floater_hardware_settings.xml | 0 indra/newview/skins/default/xui/ja/floater_help_browser.xml | 0 indra/newview/skins/default/xui/ja/floater_hud.xml | 0 indra/newview/skins/default/xui/ja/floater_im.xml | 0 indra/newview/skins/default/xui/ja/floater_im_container.xml | 0 indra/newview/skins/default/xui/ja/floater_im_session.xml | 0 .../newview/skins/default/xui/ja/floater_image_preview.xml | 0 .../newview/skins/default/xui/ja/floater_incoming_call.xml | 0 indra/newview/skins/default/xui/ja/floater_inspect.xml | 0 indra/newview/skins/default/xui/ja/floater_inventory.xml | 0 .../default/xui/ja/floater_inventory_item_properties.xml | 0 .../skins/default/xui/ja/floater_inventory_view_finder.xml | 0 indra/newview/skins/default/xui/ja/floater_joystick.xml | 0 indra/newview/skins/default/xui/ja/floater_lagmeter.xml | 0 .../newview/skins/default/xui/ja/floater_land_holdings.xml | 0 .../newview/skins/default/xui/ja/floater_live_lsleditor.xml | 0 indra/newview/skins/default/xui/ja/floater_lsl_guide.xml | 0 indra/newview/skins/default/xui/ja/floater_map.xml | 0 .../newview/skins/default/xui/ja/floater_media_browser.xml | 0 .../newview/skins/default/xui/ja/floater_media_settings.xml | 0 indra/newview/skins/default/xui/ja/floater_mem_leaking.xml | 0 indra/newview/skins/default/xui/ja/floater_moveview.xml | 0 indra/newview/skins/default/xui/ja/floater_mute_object.xml | 0 indra/newview/skins/default/xui/ja/floater_my_friends.xml | 0 indra/newview/skins/default/xui/ja/floater_nearby_chat.xml | 0 indra/newview/skins/default/xui/ja/floater_notification.xml | 0 .../skins/default/xui/ja/floater_notifications_console.xml | 0 indra/newview/skins/default/xui/ja/floater_openobject.xml | 0 .../newview/skins/default/xui/ja/floater_outfit_save_as.xml | 0 .../newview/skins/default/xui/ja/floater_outgoing_call.xml | 0 indra/newview/skins/default/xui/ja/floater_pay.xml | 0 indra/newview/skins/default/xui/ja/floater_pay_object.xml | 0 indra/newview/skins/default/xui/ja/floater_perm_prefs.xml | 0 indra/newview/skins/default/xui/ja/floater_post_process.xml | 0 indra/newview/skins/default/xui/ja/floater_postcard.xml | 0 indra/newview/skins/default/xui/ja/floater_preferences.xml | 0 .../skins/default/xui/ja/floater_preview_animation.xml | 0 .../skins/default/xui/ja/floater_preview_classified.xml | 0 .../newview/skins/default/xui/ja/floater_preview_event.xml | 0 .../skins/default/xui/ja/floater_preview_gesture.xml | 0 .../skins/default/xui/ja/floater_preview_gesture_info.xml | 0 .../default/xui/ja/floater_preview_gesture_shortcut.xml | 0 .../skins/default/xui/ja/floater_preview_gesture_steps.xml | 0 .../skins/default/xui/ja/floater_preview_notecard.xml | 0 .../newview/skins/default/xui/ja/floater_preview_sound.xml | 0 .../skins/default/xui/ja/floater_preview_texture.xml | 0 .../skins/default/xui/ja/floater_publish_classified.xml | 0 indra/newview/skins/default/xui/ja/floater_region_info.xml | 0 indra/newview/skins/default/xui/ja/floater_report_abuse.xml | 0 indra/newview/skins/default/xui/ja/floater_script_debug.xml | 0 .../skins/default/xui/ja/floater_script_debug_panel.xml | 0 .../newview/skins/default/xui/ja/floater_script_limits.xml | 0 .../newview/skins/default/xui/ja/floater_script_preview.xml | 0 indra/newview/skins/default/xui/ja/floater_script_queue.xml | 0 .../newview/skins/default/xui/ja/floater_script_search.xml | 0 indra/newview/skins/default/xui/ja/floater_search.xml | 0 indra/newview/skins/default/xui/ja/floater_select_key.xml | 0 indra/newview/skins/default/xui/ja/floater_sell_land.xml | 0 .../newview/skins/default/xui/ja/floater_settings_debug.xml | 0 indra/newview/skins/default/xui/ja/floater_snapshot.xml | 0 .../newview/skins/default/xui/ja/floater_sound_preview.xml | 0 indra/newview/skins/default/xui/ja/floater_statistics.xml | 0 indra/newview/skins/default/xui/ja/floater_stats.xml | 0 indra/newview/skins/default/xui/ja/floater_sys_well.xml | 0 indra/newview/skins/default/xui/ja/floater_telehub.xml | 0 indra/newview/skins/default/xui/ja/floater_texture_ctrl.xml | 0 indra/newview/skins/default/xui/ja/floater_tools.xml | 0 indra/newview/skins/default/xui/ja/floater_top_objects.xml | 0 indra/newview/skins/default/xui/ja/floater_tos.xml | 0 indra/newview/skins/default/xui/ja/floater_url_entry.xml | 0 .../newview/skins/default/xui/ja/floater_voice_controls.xml | 0 indra/newview/skins/default/xui/ja/floater_voice_effect.xml | 0 indra/newview/skins/default/xui/ja/floater_water.xml | 0 .../skins/default/xui/ja/floater_wearable_save_as.xml | 0 .../skins/default/xui/ja/floater_whitelist_entry.xml | 0 .../skins/default/xui/ja/floater_windlight_options.xml | 0 indra/newview/skins/default/xui/ja/floater_window_size.xml | 0 indra/newview/skins/default/xui/ja/floater_world_map.xml | 0 indra/newview/skins/default/xui/ja/inspect_avatar.xml | 0 indra/newview/skins/default/xui/ja/inspect_group.xml | 0 indra/newview/skins/default/xui/ja/inspect_object.xml | 0 .../newview/skins/default/xui/ja/inspect_remote_object.xml | 0 indra/newview/skins/default/xui/ja/language_settings.xml | 0 .../newview/skins/default/xui/ja/menu_attachment_other.xml | 0 indra/newview/skins/default/xui/ja/menu_attachment_self.xml | 0 indra/newview/skins/default/xui/ja/menu_avatar_icon.xml | 0 indra/newview/skins/default/xui/ja/menu_avatar_other.xml | 0 indra/newview/skins/default/xui/ja/menu_avatar_self.xml | 0 indra/newview/skins/default/xui/ja/menu_bottomtray.xml | 0 indra/newview/skins/default/xui/ja/menu_cof_attachment.xml | 0 indra/newview/skins/default/xui/ja/menu_cof_body_part.xml | 0 indra/newview/skins/default/xui/ja/menu_cof_clothing.xml | 0 indra/newview/skins/default/xui/ja/menu_cof_gear.xml | 0 indra/newview/skins/default/xui/ja/menu_edit.xml | 0 indra/newview/skins/default/xui/ja/menu_favorites.xml | 0 indra/newview/skins/default/xui/ja/menu_gesture_gear.xml | 0 indra/newview/skins/default/xui/ja/menu_group_plus.xml | 0 indra/newview/skins/default/xui/ja/menu_hide_navbar.xml | 0 indra/newview/skins/default/xui/ja/menu_im_well_button.xml | 0 indra/newview/skins/default/xui/ja/menu_imchiclet_adhoc.xml | 0 indra/newview/skins/default/xui/ja/menu_imchiclet_group.xml | 0 indra/newview/skins/default/xui/ja/menu_imchiclet_p2p.xml | 0 .../skins/default/xui/ja/menu_inspect_avatar_gear.xml | 0 .../skins/default/xui/ja/menu_inspect_object_gear.xml | 0 .../newview/skins/default/xui/ja/menu_inspect_self_gear.xml | 0 .../newview/skins/default/xui/ja/menu_inv_offer_chiclet.xml | 0 indra/newview/skins/default/xui/ja/menu_inventory.xml | 0 indra/newview/skins/default/xui/ja/menu_inventory_add.xml | 0 .../skins/default/xui/ja/menu_inventory_gear_default.xml | 0 indra/newview/skins/default/xui/ja/menu_land.xml | 0 indra/newview/skins/default/xui/ja/menu_landmark.xml | 0 indra/newview/skins/default/xui/ja/menu_login.xml | 0 indra/newview/skins/default/xui/ja/menu_mini_map.xml | 0 indra/newview/skins/default/xui/ja/menu_navbar.xml | 0 indra/newview/skins/default/xui/ja/menu_nearby_chat.xml | 0 .../skins/default/xui/ja/menu_notification_well_button.xml | 0 indra/newview/skins/default/xui/ja/menu_object.xml | 0 indra/newview/skins/default/xui/ja/menu_object_icon.xml | 0 indra/newview/skins/default/xui/ja/menu_outfit_gear.xml | 0 indra/newview/skins/default/xui/ja/menu_outfit_tab.xml | 0 .../newview/skins/default/xui/ja/menu_participant_list.xml | 0 .../skins/default/xui/ja/menu_people_friends_view_sort.xml | 0 indra/newview/skins/default/xui/ja/menu_people_groups.xml | 0 .../skins/default/xui/ja/menu_people_groups_view_sort.xml | 0 indra/newview/skins/default/xui/ja/menu_people_nearby.xml | 0 .../skins/default/xui/ja/menu_people_nearby_multiselect.xml | 0 .../skins/default/xui/ja/menu_people_nearby_view_sort.xml | 0 .../skins/default/xui/ja/menu_people_recent_view_sort.xml | 0 indra/newview/skins/default/xui/ja/menu_picks.xml | 0 indra/newview/skins/default/xui/ja/menu_picks_plus.xml | 0 indra/newview/skins/default/xui/ja/menu_place.xml | 0 .../newview/skins/default/xui/ja/menu_place_add_button.xml | 0 .../skins/default/xui/ja/menu_places_gear_folder.xml | 0 .../skins/default/xui/ja/menu_places_gear_landmark.xml | 0 .../newview/skins/default/xui/ja/menu_profile_overflow.xml | 0 indra/newview/skins/default/xui/ja/menu_save_outfit.xml | 0 indra/newview/skins/default/xui/ja/menu_script_chiclet.xml | 0 indra/newview/skins/default/xui/ja/menu_slurl.xml | 0 .../skins/default/xui/ja/menu_teleport_history_gear.xml | 0 .../skins/default/xui/ja/menu_teleport_history_item.xml | 0 .../skins/default/xui/ja/menu_teleport_history_tab.xml | 0 indra/newview/skins/default/xui/ja/menu_text_editor.xml | 0 indra/newview/skins/default/xui/ja/menu_topinfobar.xml | 0 indra/newview/skins/default/xui/ja/menu_url_agent.xml | 0 indra/newview/skins/default/xui/ja/menu_url_group.xml | 0 indra/newview/skins/default/xui/ja/menu_url_http.xml | 0 indra/newview/skins/default/xui/ja/menu_url_inventory.xml | 0 indra/newview/skins/default/xui/ja/menu_url_map.xml | 0 indra/newview/skins/default/xui/ja/menu_url_objectim.xml | 0 indra/newview/skins/default/xui/ja/menu_url_parcel.xml | 0 indra/newview/skins/default/xui/ja/menu_url_slapp.xml | 0 indra/newview/skins/default/xui/ja/menu_url_slurl.xml | 0 indra/newview/skins/default/xui/ja/menu_url_teleport.xml | 0 indra/newview/skins/default/xui/ja/menu_viewer.xml | 0 .../skins/default/xui/ja/menu_wearable_list_item.xml | 0 indra/newview/skins/default/xui/ja/menu_wearing_gear.xml | 0 indra/newview/skins/default/xui/ja/menu_wearing_tab.xml | 0 indra/newview/skins/default/xui/ja/mime_types.xml | 0 indra/newview/skins/default/xui/ja/mime_types_linux.xml | 0 indra/newview/skins/default/xui/ja/mime_types_mac.xml | 0 indra/newview/skins/default/xui/ja/notifications.xml | 0 indra/newview/skins/default/xui/ja/outfit_accordion_tab.xml | 0 .../skins/default/xui/ja/panel_active_object_row.xml | 0 indra/newview/skins/default/xui/ja/panel_activeim_row.xml | 0 .../skins/default/xui/ja/panel_adhoc_control_panel.xml | 0 indra/newview/skins/default/xui/ja/panel_audio_device.xml | 0 .../newview/skins/default/xui/ja/panel_avatar_list_item.xml | 0 indra/newview/skins/default/xui/ja/panel_avatar_tag.xml | 0 .../skins/default/xui/ja/panel_block_list_sidetray.xml | 0 .../skins/default/xui/ja/panel_body_parts_list_item.xml | 0 .../default/xui/ja/panel_bodyparts_list_button_bar.xml | 0 indra/newview/skins/default/xui/ja/panel_bottomtray.xml | 0 .../newview/skins/default/xui/ja/panel_bottomtray_lite.xml | 0 indra/newview/skins/default/xui/ja/panel_chat_header.xml | 0 .../newview/skins/default/xui/ja/panel_classified_info.xml | 0 .../skins/default/xui/ja/panel_clothing_list_button_bar.xml | 0 .../skins/default/xui/ja/panel_clothing_list_item.xml | 0 indra/newview/skins/default/xui/ja/panel_cof_wearables.xml | 0 .../default/xui/ja/panel_deletable_wearable_list_item.xml | 0 .../skins/default/xui/ja/panel_dummy_clothing_list_item.xml | 0 indra/newview/skins/default/xui/ja/panel_edit_alpha.xml | 0 .../newview/skins/default/xui/ja/panel_edit_classified.xml | 0 indra/newview/skins/default/xui/ja/panel_edit_eyes.xml | 0 indra/newview/skins/default/xui/ja/panel_edit_gloves.xml | 0 indra/newview/skins/default/xui/ja/panel_edit_hair.xml | 0 indra/newview/skins/default/xui/ja/panel_edit_jacket.xml | 0 indra/newview/skins/default/xui/ja/panel_edit_pants.xml | 0 indra/newview/skins/default/xui/ja/panel_edit_pick.xml | 0 indra/newview/skins/default/xui/ja/panel_edit_profile.xml | 0 indra/newview/skins/default/xui/ja/panel_edit_shape.xml | 0 indra/newview/skins/default/xui/ja/panel_edit_shirt.xml | 0 indra/newview/skins/default/xui/ja/panel_edit_shoes.xml | 0 indra/newview/skins/default/xui/ja/panel_edit_skin.xml | 0 indra/newview/skins/default/xui/ja/panel_edit_skirt.xml | 0 indra/newview/skins/default/xui/ja/panel_edit_socks.xml | 0 indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml | 0 .../newview/skins/default/xui/ja/panel_edit_underpants.xml | 0 .../newview/skins/default/xui/ja/panel_edit_undershirt.xml | 0 indra/newview/skins/default/xui/ja/panel_edit_wearable.xml | 0 indra/newview/skins/default/xui/ja/panel_friends.xml | 0 .../skins/default/xui/ja/panel_group_control_panel.xml | 0 indra/newview/skins/default/xui/ja/panel_group_general.xml | 0 .../skins/default/xui/ja/panel_group_info_sidetray.xml | 0 indra/newview/skins/default/xui/ja/panel_group_invite.xml | 0 .../newview/skins/default/xui/ja/panel_group_land_money.xml | 0 .../newview/skins/default/xui/ja/panel_group_list_item.xml | 0 indra/newview/skins/default/xui/ja/panel_group_notices.xml | 0 indra/newview/skins/default/xui/ja/panel_group_notify.xml | 0 indra/newview/skins/default/xui/ja/panel_group_roles.xml | 0 indra/newview/skins/default/xui/ja/panel_groups.xml | 0 .../newview/skins/default/xui/ja/panel_im_control_panel.xml | 0 .../newview/skins/default/xui/ja/panel_instant_message.xml | 0 indra/newview/skins/default/xui/ja/panel_inventory_item.xml | 0 indra/newview/skins/default/xui/ja/panel_landmark_info.xml | 0 indra/newview/skins/default/xui/ja/panel_landmarks.xml | 0 indra/newview/skins/default/xui/ja/panel_login.xml | 0 indra/newview/skins/default/xui/ja/panel_main_inventory.xml | 0 indra/newview/skins/default/xui/ja/panel_me.xml | 0 .../skins/default/xui/ja/panel_media_settings_general.xml | 0 .../default/xui/ja/panel_media_settings_permissions.xml | 0 .../skins/default/xui/ja/panel_media_settings_security.xml | 0 indra/newview/skins/default/xui/ja/panel_my_profile.xml | 0 indra/newview/skins/default/xui/ja/panel_navigation_bar.xml | 0 indra/newview/skins/default/xui/ja/panel_nearby_chat.xml | 0 .../newview/skins/default/xui/ja/panel_nearby_chat_bar.xml | 0 indra/newview/skins/default/xui/ja/panel_nearby_media.xml | 0 indra/newview/skins/default/xui/ja/panel_notes.xml | 0 .../skins/default/xui/ja/panel_notifications_channel.xml | 0 indra/newview/skins/default/xui/ja/panel_online_status.xml | 0 .../skins/default/xui/ja/panel_online_status_toast.xml | 0 indra/newview/skins/default/xui/ja/panel_outfit_edit.xml | 0 .../skins/default/xui/ja/panel_outfits_inventory.xml | 0 .../default/xui/ja/panel_outfits_inventory_gear_default.xml | 0 indra/newview/skins/default/xui/ja/panel_outfits_list.xml | 0 .../newview/skins/default/xui/ja/panel_outfits_wearing.xml | 0 indra/newview/skins/default/xui/ja/panel_people.xml | 0 indra/newview/skins/default/xui/ja/panel_pick_info.xml | 0 indra/newview/skins/default/xui/ja/panel_picks.xml | 0 indra/newview/skins/default/xui/ja/panel_place_profile.xml | 0 indra/newview/skins/default/xui/ja/panel_places.xml | 0 .../skins/default/xui/ja/panel_preferences_advanced.xml | 0 .../skins/default/xui/ja/panel_preferences_alerts.xml | 0 .../newview/skins/default/xui/ja/panel_preferences_chat.xml | 0 .../skins/default/xui/ja/panel_preferences_general.xml | 0 .../skins/default/xui/ja/panel_preferences_graphics1.xml | 0 .../skins/default/xui/ja/panel_preferences_privacy.xml | 0 .../skins/default/xui/ja/panel_preferences_setup.xml | 0 .../skins/default/xui/ja/panel_preferences_sound.xml | 0 .../skins/default/xui/ja/panel_prim_media_controls.xml | 0 indra/newview/skins/default/xui/ja/panel_profile.xml | 0 indra/newview/skins/default/xui/ja/panel_profile_view.xml | 0 .../newview/skins/default/xui/ja/panel_region_covenant.xml | 0 indra/newview/skins/default/xui/ja/panel_region_debug.xml | 0 indra/newview/skins/default/xui/ja/panel_region_estate.xml | 0 indra/newview/skins/default/xui/ja/panel_region_general.xml | 0 .../skins/default/xui/ja/panel_region_general_layout.xml | 0 indra/newview/skins/default/xui/ja/panel_region_terrain.xml | 0 indra/newview/skins/default/xui/ja/panel_region_texture.xml | 0 indra/newview/skins/default/xui/ja/panel_script_ed.xml | 0 .../skins/default/xui/ja/panel_script_limits_my_avatar.xml | 0 .../default/xui/ja/panel_script_limits_region_memory.xml | 0 .../newview/skins/default/xui/ja/panel_scrolling_param.xml | 0 indra/newview/skins/default/xui/ja/panel_side_tray.xml | 0 .../skins/default/xui/ja/panel_side_tray_tab_caption.xml | 0 .../skins/default/xui/ja/panel_sidetray_home_tab.xml | 0 .../skins/default/xui/ja/panel_stand_stop_flying.xml | 0 indra/newview/skins/default/xui/ja/panel_status_bar.xml | 0 indra/newview/skins/default/xui/ja/panel_sys_well_item.xml | 0 .../newview/skins/default/xui/ja/panel_teleport_history.xml | 0 .../skins/default/xui/ja/panel_teleport_history_item.xml | 0 indra/newview/skins/default/xui/ja/panel_voice_effect.xml | 0 indra/newview/skins/default/xui/ja/panel_world_map.xml | 0 indra/newview/skins/default/xui/ja/role_actions.xml | 0 indra/newview/skins/default/xui/ja/sidepanel_appearance.xml | 0 indra/newview/skins/default/xui/ja/sidepanel_inventory.xml | 0 indra/newview/skins/default/xui/ja/sidepanel_item_info.xml | 0 indra/newview/skins/default/xui/ja/sidepanel_task_info.xml | 0 indra/newview/skins/default/xui/ja/strings.xml | 0 indra/newview/skins/default/xui/ja/teleport_strings.xml | 0 indra/newview/skins/default/xui/ja/xui_version.xml | 0 indra/newview/skins/default/xui/nl/floater_about.xml | 0 indra/newview/skins/default/xui/nl/floater_about_land.xml | 0 .../skins/default/xui/nl/floater_animation_preview.xml | 0 indra/newview/skins/default/xui/nl/floater_auction.xml | 0 .../newview/skins/default/xui/nl/floater_avatar_picker.xml | 0 .../skins/default/xui/nl/floater_avatar_textures.xml | 0 indra/newview/skins/default/xui/nl/floater_beacons.xml | 0 .../newview/skins/default/xui/nl/floater_build_options.xml | 0 indra/newview/skins/default/xui/nl/floater_bulk_perms.xml | 0 indra/newview/skins/default/xui/nl/floater_bumps.xml | 0 indra/newview/skins/default/xui/nl/floater_buy_contents.xml | 0 indra/newview/skins/default/xui/nl/floater_buy_currency.xml | 0 indra/newview/skins/default/xui/nl/floater_buy_land.xml | 0 indra/newview/skins/default/xui/nl/floater_buy_object.xml | 0 indra/newview/skins/default/xui/nl/floater_camera.xml | 0 indra/newview/skins/default/xui/nl/floater_choose_group.xml | 0 indra/newview/skins/default/xui/nl/floater_color_picker.xml | 0 indra/newview/skins/default/xui/nl/floater_critical.xml | 0 indra/newview/skins/default/xui/nl/floater_customize.xml | 0 .../skins/default/xui/nl/floater_day_cycle_options.xml | 0 indra/newview/skins/default/xui/nl/floater_env_settings.xml | 0 indra/newview/skins/default/xui/nl/floater_font_test.xml | 0 indra/newview/skins/default/xui/nl/floater_gesture.xml | 0 .../skins/default/xui/nl/floater_hardware_settings.xml | 0 indra/newview/skins/default/xui/nl/floater_hud.xml | 0 indra/newview/skins/default/xui/nl/floater_im.xml | 0 .../newview/skins/default/xui/nl/floater_image_preview.xml | 0 indra/newview/skins/default/xui/nl/floater_inspect.xml | 0 indra/newview/skins/default/xui/nl/floater_inventory.xml | 0 .../default/xui/nl/floater_inventory_item_properties.xml | 0 .../skins/default/xui/nl/floater_inventory_view_finder.xml | 0 indra/newview/skins/default/xui/nl/floater_joystick.xml | 0 indra/newview/skins/default/xui/nl/floater_lagmeter.xml | 0 .../newview/skins/default/xui/nl/floater_land_holdings.xml | 0 .../newview/skins/default/xui/nl/floater_live_lsleditor.xml | 0 indra/newview/skins/default/xui/nl/floater_lsl_guide.xml | 0 indra/newview/skins/default/xui/nl/floater_map.xml | 0 .../newview/skins/default/xui/nl/floater_media_browser.xml | 0 indra/newview/skins/default/xui/nl/floater_mem_leaking.xml | 0 indra/newview/skins/default/xui/nl/floater_moveview.xml | 0 indra/newview/skins/default/xui/nl/floater_mute_object.xml | 0 indra/newview/skins/default/xui/nl/floater_my_friends.xml | 0 indra/newview/skins/default/xui/nl/floater_openobject.xml | 0 indra/newview/skins/default/xui/nl/floater_pay.xml | 0 indra/newview/skins/default/xui/nl/floater_pay_object.xml | 0 indra/newview/skins/default/xui/nl/floater_perm_prefs.xml | 0 indra/newview/skins/default/xui/nl/floater_post_process.xml | 0 indra/newview/skins/default/xui/nl/floater_postcard.xml | 0 indra/newview/skins/default/xui/nl/floater_preferences.xml | 0 .../skins/default/xui/nl/floater_preview_animation.xml | 0 .../skins/default/xui/nl/floater_preview_gesture.xml | 0 .../skins/default/xui/nl/floater_preview_notecard.xml | 0 .../newview/skins/default/xui/nl/floater_preview_sound.xml | 0 .../skins/default/xui/nl/floater_preview_texture.xml | 0 indra/newview/skins/default/xui/nl/floater_region_info.xml | 0 indra/newview/skins/default/xui/nl/floater_report_abuse.xml | 0 indra/newview/skins/default/xui/nl/floater_script_debug.xml | 0 .../newview/skins/default/xui/nl/floater_script_preview.xml | 0 indra/newview/skins/default/xui/nl/floater_script_queue.xml | 0 .../newview/skins/default/xui/nl/floater_script_search.xml | 0 indra/newview/skins/default/xui/nl/floater_select_key.xml | 0 indra/newview/skins/default/xui/nl/floater_sell_land.xml | 0 .../newview/skins/default/xui/nl/floater_settings_debug.xml | 0 indra/newview/skins/default/xui/nl/floater_snapshot.xml | 0 .../newview/skins/default/xui/nl/floater_sound_preview.xml | 0 indra/newview/skins/default/xui/nl/floater_statistics.xml | 0 indra/newview/skins/default/xui/nl/floater_stats.xml | 0 indra/newview/skins/default/xui/nl/floater_telehub.xml | 0 indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml | 0 indra/newview/skins/default/xui/nl/floater_tools.xml | 0 indra/newview/skins/default/xui/nl/floater_top_objects.xml | 0 indra/newview/skins/default/xui/nl/floater_tos.xml | 0 indra/newview/skins/default/xui/nl/floater_url_entry.xml | 0 indra/newview/skins/default/xui/nl/floater_water.xml | 0 .../skins/default/xui/nl/floater_windlight_options.xml | 0 indra/newview/skins/default/xui/nl/floater_world_map.xml | 0 indra/newview/skins/default/xui/nl/language_settings.xml | 0 indra/newview/skins/default/xui/nl/menu_inventory.xml | 0 indra/newview/skins/default/xui/nl/menu_inventory_add.xml | 0 indra/newview/skins/default/xui/nl/menu_login.xml | 0 indra/newview/skins/default/xui/nl/menu_mini_map.xml | 0 indra/newview/skins/default/xui/nl/menu_picks.xml | 0 .../skins/default/xui/nl/menu_places_gear_landmark.xml | 0 indra/newview/skins/default/xui/nl/menu_slurl.xml | 0 indra/newview/skins/default/xui/nl/menu_viewer.xml | 0 indra/newview/skins/default/xui/nl/mime_types.xml | 0 indra/newview/skins/default/xui/nl/notifications.xml | 0 indra/newview/skins/default/xui/nl/panel_audio_device.xml | 0 .../skins/default/xui/nl/panel_block_list_sidetray.xml | 0 indra/newview/skins/default/xui/nl/panel_edit_profile.xml | 0 indra/newview/skins/default/xui/nl/panel_friends.xml | 0 indra/newview/skins/default/xui/nl/panel_group_general.xml | 0 indra/newview/skins/default/xui/nl/panel_group_invite.xml | 0 .../newview/skins/default/xui/nl/panel_group_land_money.xml | 0 indra/newview/skins/default/xui/nl/panel_group_notices.xml | 0 indra/newview/skins/default/xui/nl/panel_group_roles.xml | 0 indra/newview/skins/default/xui/nl/panel_groups.xml | 0 indra/newview/skins/default/xui/nl/panel_login.xml | 0 indra/newview/skins/default/xui/nl/panel_main_inventory.xml | 0 .../skins/default/xui/nl/panel_preferences_advanced.xml | 0 .../skins/default/xui/nl/panel_preferences_alerts.xml | 0 .../newview/skins/default/xui/nl/panel_preferences_chat.xml | 0 .../skins/default/xui/nl/panel_preferences_general.xml | 0 .../skins/default/xui/nl/panel_preferences_graphics1.xml | 0 .../skins/default/xui/nl/panel_preferences_privacy.xml | 0 .../skins/default/xui/nl/panel_preferences_setup.xml | 0 .../skins/default/xui/nl/panel_preferences_sound.xml | 0 .../newview/skins/default/xui/nl/panel_region_covenant.xml | 0 indra/newview/skins/default/xui/nl/panel_region_debug.xml | 0 indra/newview/skins/default/xui/nl/panel_region_estate.xml | 0 indra/newview/skins/default/xui/nl/panel_region_general.xml | 0 indra/newview/skins/default/xui/nl/panel_region_terrain.xml | 0 indra/newview/skins/default/xui/nl/panel_region_texture.xml | 0 .../newview/skins/default/xui/nl/panel_scrolling_param.xml | 0 indra/newview/skins/default/xui/nl/panel_status_bar.xml | 0 indra/newview/skins/default/xui/nl/panel_world_map.xml | 0 indra/newview/skins/default/xui/nl/role_actions.xml | 0 indra/newview/skins/default/xui/nl/strings.xml | 0 indra/newview/skins/default/xui/nl/teleport_strings.xml | 0 indra/newview/skins/default/xui/pl/floater_about.xml | 0 indra/newview/skins/default/xui/pl/floater_about_land.xml | 0 indra/newview/skins/default/xui/pl/floater_activeim.xml | 0 .../skins/default/xui/pl/floater_animation_preview.xml | 0 indra/newview/skins/default/xui/pl/floater_auction.xml | 0 .../newview/skins/default/xui/pl/floater_avatar_picker.xml | 0 .../skins/default/xui/pl/floater_avatar_textures.xml | 0 indra/newview/skins/default/xui/pl/floater_beacons.xml | 0 .../newview/skins/default/xui/pl/floater_build_options.xml | 0 indra/newview/skins/default/xui/pl/floater_bulk_perms.xml | 0 indra/newview/skins/default/xui/pl/floater_bumps.xml | 0 indra/newview/skins/default/xui/pl/floater_buy_contents.xml | 0 indra/newview/skins/default/xui/pl/floater_buy_currency.xml | 0 .../skins/default/xui/pl/floater_buy_currency_html.xml | 0 indra/newview/skins/default/xui/pl/floater_buy_land.xml | 0 indra/newview/skins/default/xui/pl/floater_buy_object.xml | 0 indra/newview/skins/default/xui/pl/floater_camera.xml | 0 indra/newview/skins/default/xui/pl/floater_choose_group.xml | 0 indra/newview/skins/default/xui/pl/floater_color_picker.xml | 0 indra/newview/skins/default/xui/pl/floater_critical.xml | 0 indra/newview/skins/default/xui/pl/floater_customize.xml | 0 .../skins/default/xui/pl/floater_day_cycle_options.xml | 0 .../skins/default/xui/pl/floater_device_settings.xml | 0 indra/newview/skins/default/xui/pl/floater_env_settings.xml | 0 indra/newview/skins/default/xui/pl/floater_event.xml | 0 indra/newview/skins/default/xui/pl/floater_font_test.xml | 0 indra/newview/skins/default/xui/pl/floater_gesture.xml | 0 indra/newview/skins/default/xui/pl/floater_god_tools.xml | 0 .../skins/default/xui/pl/floater_hardware_settings.xml | 0 indra/newview/skins/default/xui/pl/floater_help_browser.xml | 0 indra/newview/skins/default/xui/pl/floater_hud.xml | 0 indra/newview/skins/default/xui/pl/floater_im.xml | 0 indra/newview/skins/default/xui/pl/floater_im_container.xml | 0 indra/newview/skins/default/xui/pl/floater_im_session.xml | 0 .../newview/skins/default/xui/pl/floater_image_preview.xml | 0 .../newview/skins/default/xui/pl/floater_incoming_call.xml | 0 indra/newview/skins/default/xui/pl/floater_inspect.xml | 0 indra/newview/skins/default/xui/pl/floater_inventory.xml | 0 .../default/xui/pl/floater_inventory_item_properties.xml | 0 .../skins/default/xui/pl/floater_inventory_view_finder.xml | 0 indra/newview/skins/default/xui/pl/floater_joystick.xml | 0 indra/newview/skins/default/xui/pl/floater_lagmeter.xml | 0 .../newview/skins/default/xui/pl/floater_land_holdings.xml | 0 .../newview/skins/default/xui/pl/floater_live_lsleditor.xml | 0 indra/newview/skins/default/xui/pl/floater_lsl_guide.xml | 0 indra/newview/skins/default/xui/pl/floater_map.xml | 0 .../newview/skins/default/xui/pl/floater_media_browser.xml | 0 .../newview/skins/default/xui/pl/floater_media_settings.xml | 0 indra/newview/skins/default/xui/pl/floater_mem_leaking.xml | 0 indra/newview/skins/default/xui/pl/floater_moveview.xml | 0 indra/newview/skins/default/xui/pl/floater_mute_object.xml | 0 indra/newview/skins/default/xui/pl/floater_my_friends.xml | 0 indra/newview/skins/default/xui/pl/floater_nearby_chat.xml | 0 indra/newview/skins/default/xui/pl/floater_openobject.xml | 0 .../newview/skins/default/xui/pl/floater_outfit_save_as.xml | 0 .../newview/skins/default/xui/pl/floater_outgoing_call.xml | 0 indra/newview/skins/default/xui/pl/floater_pay.xml | 0 indra/newview/skins/default/xui/pl/floater_pay_object.xml | 0 indra/newview/skins/default/xui/pl/floater_perm_prefs.xml | 0 indra/newview/skins/default/xui/pl/floater_post_process.xml | 0 indra/newview/skins/default/xui/pl/floater_postcard.xml | 0 indra/newview/skins/default/xui/pl/floater_preferences.xml | 0 .../skins/default/xui/pl/floater_preview_animation.xml | 0 .../skins/default/xui/pl/floater_preview_classified.xml | 0 .../newview/skins/default/xui/pl/floater_preview_event.xml | 0 .../skins/default/xui/pl/floater_preview_gesture.xml | 0 .../skins/default/xui/pl/floater_preview_gesture_info.xml | 0 .../default/xui/pl/floater_preview_gesture_shortcut.xml | 0 .../skins/default/xui/pl/floater_preview_gesture_steps.xml | 0 .../skins/default/xui/pl/floater_preview_notecard.xml | 0 .../newview/skins/default/xui/pl/floater_preview_sound.xml | 0 .../skins/default/xui/pl/floater_preview_texture.xml | 0 .../skins/default/xui/pl/floater_publish_classified.xml | 0 indra/newview/skins/default/xui/pl/floater_region_info.xml | 0 indra/newview/skins/default/xui/pl/floater_report_abuse.xml | 0 indra/newview/skins/default/xui/pl/floater_script_debug.xml | 0 .../skins/default/xui/pl/floater_script_debug_panel.xml | 0 .../newview/skins/default/xui/pl/floater_script_limits.xml | 0 .../newview/skins/default/xui/pl/floater_script_preview.xml | 0 indra/newview/skins/default/xui/pl/floater_script_queue.xml | 0 .../newview/skins/default/xui/pl/floater_script_search.xml | 0 indra/newview/skins/default/xui/pl/floater_search.xml | 0 indra/newview/skins/default/xui/pl/floater_select_key.xml | 0 indra/newview/skins/default/xui/pl/floater_sell_land.xml | 0 .../newview/skins/default/xui/pl/floater_settings_debug.xml | 0 indra/newview/skins/default/xui/pl/floater_snapshot.xml | 0 .../newview/skins/default/xui/pl/floater_sound_preview.xml | 0 indra/newview/skins/default/xui/pl/floater_statistics.xml | 0 indra/newview/skins/default/xui/pl/floater_stats.xml | 0 indra/newview/skins/default/xui/pl/floater_sys_well.xml | 0 indra/newview/skins/default/xui/pl/floater_telehub.xml | 0 indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml | 0 indra/newview/skins/default/xui/pl/floater_tools.xml | 0 indra/newview/skins/default/xui/pl/floater_top_objects.xml | 0 indra/newview/skins/default/xui/pl/floater_tos.xml | 0 indra/newview/skins/default/xui/pl/floater_url_entry.xml | 0 .../newview/skins/default/xui/pl/floater_voice_controls.xml | 0 indra/newview/skins/default/xui/pl/floater_voice_effect.xml | 0 indra/newview/skins/default/xui/pl/floater_water.xml | 0 .../skins/default/xui/pl/floater_wearable_save_as.xml | 0 .../skins/default/xui/pl/floater_whitelist_entry.xml | 0 .../skins/default/xui/pl/floater_windlight_options.xml | 0 indra/newview/skins/default/xui/pl/floater_window_size.xml | 0 indra/newview/skins/default/xui/pl/floater_world_map.xml | 0 indra/newview/skins/default/xui/pl/inspect_avatar.xml | 0 indra/newview/skins/default/xui/pl/inspect_group.xml | 0 indra/newview/skins/default/xui/pl/inspect_object.xml | 0 .../newview/skins/default/xui/pl/inspect_remote_object.xml | 0 indra/newview/skins/default/xui/pl/language_settings.xml | 0 .../newview/skins/default/xui/pl/menu_attachment_other.xml | 0 indra/newview/skins/default/xui/pl/menu_attachment_self.xml | 0 indra/newview/skins/default/xui/pl/menu_avatar_icon.xml | 0 indra/newview/skins/default/xui/pl/menu_avatar_other.xml | 0 indra/newview/skins/default/xui/pl/menu_avatar_self.xml | 0 indra/newview/skins/default/xui/pl/menu_bottomtray.xml | 0 indra/newview/skins/default/xui/pl/menu_cof_attachment.xml | 0 indra/newview/skins/default/xui/pl/menu_cof_body_part.xml | 0 indra/newview/skins/default/xui/pl/menu_cof_clothing.xml | 0 indra/newview/skins/default/xui/pl/menu_cof_gear.xml | 0 indra/newview/skins/default/xui/pl/menu_edit.xml | 0 indra/newview/skins/default/xui/pl/menu_favorites.xml | 0 indra/newview/skins/default/xui/pl/menu_gesture_gear.xml | 0 indra/newview/skins/default/xui/pl/menu_group_plus.xml | 0 indra/newview/skins/default/xui/pl/menu_hide_navbar.xml | 0 indra/newview/skins/default/xui/pl/menu_im_well_button.xml | 0 indra/newview/skins/default/xui/pl/menu_imchiclet_adhoc.xml | 0 indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml | 0 indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml | 0 .../skins/default/xui/pl/menu_inspect_avatar_gear.xml | 0 .../skins/default/xui/pl/menu_inspect_object_gear.xml | 0 .../newview/skins/default/xui/pl/menu_inspect_self_gear.xml | 0 .../newview/skins/default/xui/pl/menu_inv_offer_chiclet.xml | 0 indra/newview/skins/default/xui/pl/menu_inventory.xml | 0 indra/newview/skins/default/xui/pl/menu_inventory_add.xml | 0 .../skins/default/xui/pl/menu_inventory_gear_default.xml | 0 indra/newview/skins/default/xui/pl/menu_land.xml | 0 indra/newview/skins/default/xui/pl/menu_landmark.xml | 0 indra/newview/skins/default/xui/pl/menu_login.xml | 0 indra/newview/skins/default/xui/pl/menu_mini_map.xml | 0 indra/newview/skins/default/xui/pl/menu_navbar.xml | 0 indra/newview/skins/default/xui/pl/menu_nearby_chat.xml | 0 .../skins/default/xui/pl/menu_notification_well_button.xml | 0 indra/newview/skins/default/xui/pl/menu_object.xml | 0 indra/newview/skins/default/xui/pl/menu_object_icon.xml | 0 indra/newview/skins/default/xui/pl/menu_outfit_gear.xml | 0 indra/newview/skins/default/xui/pl/menu_outfit_tab.xml | 0 .../newview/skins/default/xui/pl/menu_participant_list.xml | 0 .../skins/default/xui/pl/menu_people_friends_view_sort.xml | 0 indra/newview/skins/default/xui/pl/menu_people_groups.xml | 0 .../skins/default/xui/pl/menu_people_groups_view_sort.xml | 0 indra/newview/skins/default/xui/pl/menu_people_nearby.xml | 0 .../skins/default/xui/pl/menu_people_nearby_multiselect.xml | 0 .../skins/default/xui/pl/menu_people_nearby_view_sort.xml | 0 .../skins/default/xui/pl/menu_people_recent_view_sort.xml | 0 indra/newview/skins/default/xui/pl/menu_picks.xml | 0 indra/newview/skins/default/xui/pl/menu_picks_plus.xml | 0 indra/newview/skins/default/xui/pl/menu_place.xml | 0 .../newview/skins/default/xui/pl/menu_place_add_button.xml | 0 .../skins/default/xui/pl/menu_places_gear_folder.xml | 0 .../skins/default/xui/pl/menu_places_gear_landmark.xml | 0 .../newview/skins/default/xui/pl/menu_profile_overflow.xml | 0 indra/newview/skins/default/xui/pl/menu_save_outfit.xml | 0 indra/newview/skins/default/xui/pl/menu_script_chiclet.xml | 0 indra/newview/skins/default/xui/pl/menu_slurl.xml | 0 .../skins/default/xui/pl/menu_teleport_history_gear.xml | 0 .../skins/default/xui/pl/menu_teleport_history_item.xml | 0 .../skins/default/xui/pl/menu_teleport_history_tab.xml | 0 indra/newview/skins/default/xui/pl/menu_text_editor.xml | 0 indra/newview/skins/default/xui/pl/menu_topinfobar.xml | 0 indra/newview/skins/default/xui/pl/menu_url_agent.xml | 0 indra/newview/skins/default/xui/pl/menu_url_group.xml | 0 indra/newview/skins/default/xui/pl/menu_url_http.xml | 0 indra/newview/skins/default/xui/pl/menu_url_inventory.xml | 0 indra/newview/skins/default/xui/pl/menu_url_map.xml | 0 indra/newview/skins/default/xui/pl/menu_url_objectim.xml | 0 indra/newview/skins/default/xui/pl/menu_url_parcel.xml | 0 indra/newview/skins/default/xui/pl/menu_url_slapp.xml | 0 indra/newview/skins/default/xui/pl/menu_url_slurl.xml | 0 indra/newview/skins/default/xui/pl/menu_url_teleport.xml | 0 indra/newview/skins/default/xui/pl/menu_viewer.xml | 0 .../skins/default/xui/pl/menu_wearable_list_item.xml | 0 indra/newview/skins/default/xui/pl/menu_wearing_gear.xml | 0 indra/newview/skins/default/xui/pl/menu_wearing_tab.xml | 0 indra/newview/skins/default/xui/pl/mime_types.xml | 0 indra/newview/skins/default/xui/pl/mime_types_linux.xml | 0 indra/newview/skins/default/xui/pl/mime_types_mac.xml | 0 indra/newview/skins/default/xui/pl/notifications.xml | 0 indra/newview/skins/default/xui/pl/outfit_accordion_tab.xml | 0 .../skins/default/xui/pl/panel_active_object_row.xml | 0 .../skins/default/xui/pl/panel_adhoc_control_panel.xml | 0 indra/newview/skins/default/xui/pl/panel_audio_device.xml | 0 .../newview/skins/default/xui/pl/panel_avatar_list_item.xml | 0 .../skins/default/xui/pl/panel_block_list_sidetray.xml | 0 .../skins/default/xui/pl/panel_body_parts_list_item.xml | 0 .../default/xui/pl/panel_bodyparts_list_button_bar.xml | 0 indra/newview/skins/default/xui/pl/panel_bottomtray.xml | 0 .../newview/skins/default/xui/pl/panel_bottomtray_lite.xml | 0 .../newview/skins/default/xui/pl/panel_classified_info.xml | 0 .../skins/default/xui/pl/panel_clothing_list_button_bar.xml | 0 .../skins/default/xui/pl/panel_clothing_list_item.xml | 0 indra/newview/skins/default/xui/pl/panel_cof_wearables.xml | 0 .../default/xui/pl/panel_deletable_wearable_list_item.xml | 0 .../skins/default/xui/pl/panel_dummy_clothing_list_item.xml | 0 indra/newview/skins/default/xui/pl/panel_edit_alpha.xml | 0 .../newview/skins/default/xui/pl/panel_edit_classified.xml | 0 indra/newview/skins/default/xui/pl/panel_edit_eyes.xml | 0 indra/newview/skins/default/xui/pl/panel_edit_gloves.xml | 0 indra/newview/skins/default/xui/pl/panel_edit_hair.xml | 0 indra/newview/skins/default/xui/pl/panel_edit_jacket.xml | 0 indra/newview/skins/default/xui/pl/panel_edit_pants.xml | 0 indra/newview/skins/default/xui/pl/panel_edit_pick.xml | 0 indra/newview/skins/default/xui/pl/panel_edit_profile.xml | 0 indra/newview/skins/default/xui/pl/panel_edit_shape.xml | 0 indra/newview/skins/default/xui/pl/panel_edit_shirt.xml | 0 indra/newview/skins/default/xui/pl/panel_edit_shoes.xml | 0 indra/newview/skins/default/xui/pl/panel_edit_skin.xml | 0 indra/newview/skins/default/xui/pl/panel_edit_skirt.xml | 0 indra/newview/skins/default/xui/pl/panel_edit_socks.xml | 0 indra/newview/skins/default/xui/pl/panel_edit_tattoo.xml | 0 .../newview/skins/default/xui/pl/panel_edit_underpants.xml | 0 .../newview/skins/default/xui/pl/panel_edit_undershirt.xml | 0 indra/newview/skins/default/xui/pl/panel_edit_wearable.xml | 0 indra/newview/skins/default/xui/pl/panel_friends.xml | 0 .../skins/default/xui/pl/panel_group_control_panel.xml | 0 indra/newview/skins/default/xui/pl/panel_group_general.xml | 0 .../skins/default/xui/pl/panel_group_info_sidetray.xml | 0 indra/newview/skins/default/xui/pl/panel_group_invite.xml | 0 .../newview/skins/default/xui/pl/panel_group_land_money.xml | 0 .../newview/skins/default/xui/pl/panel_group_list_item.xml | 0 indra/newview/skins/default/xui/pl/panel_group_notices.xml | 0 indra/newview/skins/default/xui/pl/panel_group_notify.xml | 0 indra/newview/skins/default/xui/pl/panel_group_roles.xml | 0 indra/newview/skins/default/xui/pl/panel_groups.xml | 0 .../newview/skins/default/xui/pl/panel_im_control_panel.xml | 0 indra/newview/skins/default/xui/pl/panel_inventory_item.xml | 0 indra/newview/skins/default/xui/pl/panel_landmark_info.xml | 0 indra/newview/skins/default/xui/pl/panel_landmarks.xml | 0 indra/newview/skins/default/xui/pl/panel_login.xml | 0 indra/newview/skins/default/xui/pl/panel_main_inventory.xml | 0 indra/newview/skins/default/xui/pl/panel_me.xml | 0 .../skins/default/xui/pl/panel_media_settings_general.xml | 0 .../default/xui/pl/panel_media_settings_permissions.xml | 0 .../skins/default/xui/pl/panel_media_settings_security.xml | 0 indra/newview/skins/default/xui/pl/panel_my_profile.xml | 0 indra/newview/skins/default/xui/pl/panel_navigation_bar.xml | 0 indra/newview/skins/default/xui/pl/panel_nearby_chat.xml | 0 .../newview/skins/default/xui/pl/panel_nearby_chat_bar.xml | 0 indra/newview/skins/default/xui/pl/panel_nearby_media.xml | 0 indra/newview/skins/default/xui/pl/panel_notes.xml | 0 indra/newview/skins/default/xui/pl/panel_online_status.xml | 0 .../skins/default/xui/pl/panel_online_status_toast.xml | 0 indra/newview/skins/default/xui/pl/panel_outfit_edit.xml | 0 .../skins/default/xui/pl/panel_outfits_inventory.xml | 0 .../default/xui/pl/panel_outfits_inventory_gear_default.xml | 0 indra/newview/skins/default/xui/pl/panel_outfits_list.xml | 0 .../newview/skins/default/xui/pl/panel_outfits_wearing.xml | 0 indra/newview/skins/default/xui/pl/panel_people.xml | 0 indra/newview/skins/default/xui/pl/panel_pick_info.xml | 0 indra/newview/skins/default/xui/pl/panel_picks.xml | 0 indra/newview/skins/default/xui/pl/panel_place_profile.xml | 0 indra/newview/skins/default/xui/pl/panel_places.xml | 0 .../skins/default/xui/pl/panel_preferences_advanced.xml | 0 .../skins/default/xui/pl/panel_preferences_alerts.xml | 0 .../newview/skins/default/xui/pl/panel_preferences_chat.xml | 0 .../skins/default/xui/pl/panel_preferences_general.xml | 0 .../skins/default/xui/pl/panel_preferences_graphics1.xml | 0 .../skins/default/xui/pl/panel_preferences_privacy.xml | 0 .../skins/default/xui/pl/panel_preferences_setup.xml | 0 .../skins/default/xui/pl/panel_preferences_sound.xml | 0 .../skins/default/xui/pl/panel_prim_media_controls.xml | 0 indra/newview/skins/default/xui/pl/panel_profile.xml | 0 indra/newview/skins/default/xui/pl/panel_profile_view.xml | 0 .../newview/skins/default/xui/pl/panel_region_covenant.xml | 0 indra/newview/skins/default/xui/pl/panel_region_debug.xml | 0 indra/newview/skins/default/xui/pl/panel_region_estate.xml | 0 indra/newview/skins/default/xui/pl/panel_region_general.xml | 0 .../skins/default/xui/pl/panel_region_general_layout.xml | 0 indra/newview/skins/default/xui/pl/panel_region_terrain.xml | 0 indra/newview/skins/default/xui/pl/panel_region_texture.xml | 0 indra/newview/skins/default/xui/pl/panel_script_ed.xml | 0 .../skins/default/xui/pl/panel_script_limits_my_avatar.xml | 0 .../default/xui/pl/panel_script_limits_region_memory.xml | 0 .../newview/skins/default/xui/pl/panel_scrolling_param.xml | 0 indra/newview/skins/default/xui/pl/panel_side_tray.xml | 0 .../skins/default/xui/pl/panel_side_tray_tab_caption.xml | 0 .../skins/default/xui/pl/panel_stand_stop_flying.xml | 0 indra/newview/skins/default/xui/pl/panel_status_bar.xml | 0 .../newview/skins/default/xui/pl/panel_teleport_history.xml | 0 .../skins/default/xui/pl/panel_teleport_history_item.xml | 0 indra/newview/skins/default/xui/pl/panel_voice_effect.xml | 0 indra/newview/skins/default/xui/pl/panel_world_map.xml | 0 indra/newview/skins/default/xui/pl/role_actions.xml | 0 indra/newview/skins/default/xui/pl/sidepanel_appearance.xml | 0 indra/newview/skins/default/xui/pl/sidepanel_inventory.xml | 0 indra/newview/skins/default/xui/pl/sidepanel_item_info.xml | 0 indra/newview/skins/default/xui/pl/sidepanel_task_info.xml | 0 indra/newview/skins/default/xui/pl/strings.xml | 0 indra/newview/skins/default/xui/pl/teleport_strings.xml | 0 indra/newview/skins/default/xui/pl/xui_version.xml | 0 indra/newview/skins/default/xui/pt/floater_about.xml | 0 indra/newview/skins/default/xui/pt/floater_about_land.xml | 0 indra/newview/skins/default/xui/pt/floater_activeim.xml | 0 .../skins/default/xui/pt/floater_animation_preview.xml | 0 indra/newview/skins/default/xui/pt/floater_auction.xml | 0 .../newview/skins/default/xui/pt/floater_avatar_picker.xml | 0 .../skins/default/xui/pt/floater_avatar_textures.xml | 0 indra/newview/skins/default/xui/pt/floater_beacons.xml | 0 .../newview/skins/default/xui/pt/floater_build_options.xml | 0 indra/newview/skins/default/xui/pt/floater_bulk_perms.xml | 0 indra/newview/skins/default/xui/pt/floater_bumps.xml | 0 indra/newview/skins/default/xui/pt/floater_buy_contents.xml | 0 indra/newview/skins/default/xui/pt/floater_buy_currency.xml | 0 .../skins/default/xui/pt/floater_buy_currency_html.xml | 0 indra/newview/skins/default/xui/pt/floater_buy_land.xml | 0 indra/newview/skins/default/xui/pt/floater_buy_object.xml | 0 indra/newview/skins/default/xui/pt/floater_camera.xml | 0 indra/newview/skins/default/xui/pt/floater_choose_group.xml | 0 indra/newview/skins/default/xui/pt/floater_color_picker.xml | 0 indra/newview/skins/default/xui/pt/floater_critical.xml | 0 indra/newview/skins/default/xui/pt/floater_customize.xml | 0 .../skins/default/xui/pt/floater_day_cycle_options.xml | 0 .../skins/default/xui/pt/floater_device_settings.xml | 0 indra/newview/skins/default/xui/pt/floater_env_settings.xml | 0 indra/newview/skins/default/xui/pt/floater_event.xml | 0 indra/newview/skins/default/xui/pt/floater_font_test.xml | 0 indra/newview/skins/default/xui/pt/floater_gesture.xml | 0 indra/newview/skins/default/xui/pt/floater_god_tools.xml | 0 .../skins/default/xui/pt/floater_hardware_settings.xml | 0 indra/newview/skins/default/xui/pt/floater_help_browser.xml | 0 indra/newview/skins/default/xui/pt/floater_hud.xml | 0 indra/newview/skins/default/xui/pt/floater_im.xml | 0 indra/newview/skins/default/xui/pt/floater_im_container.xml | 0 indra/newview/skins/default/xui/pt/floater_im_session.xml | 0 .../newview/skins/default/xui/pt/floater_image_preview.xml | 0 .../newview/skins/default/xui/pt/floater_incoming_call.xml | 0 indra/newview/skins/default/xui/pt/floater_inspect.xml | 0 indra/newview/skins/default/xui/pt/floater_inventory.xml | 0 .../default/xui/pt/floater_inventory_item_properties.xml | 0 .../skins/default/xui/pt/floater_inventory_view_finder.xml | 0 indra/newview/skins/default/xui/pt/floater_joystick.xml | 0 indra/newview/skins/default/xui/pt/floater_lagmeter.xml | 0 .../newview/skins/default/xui/pt/floater_land_holdings.xml | 0 .../newview/skins/default/xui/pt/floater_live_lsleditor.xml | 0 indra/newview/skins/default/xui/pt/floater_lsl_guide.xml | 0 indra/newview/skins/default/xui/pt/floater_map.xml | 0 .../newview/skins/default/xui/pt/floater_media_browser.xml | 0 .../newview/skins/default/xui/pt/floater_media_settings.xml | 0 indra/newview/skins/default/xui/pt/floater_mem_leaking.xml | 0 indra/newview/skins/default/xui/pt/floater_moveview.xml | 0 indra/newview/skins/default/xui/pt/floater_mute_object.xml | 0 indra/newview/skins/default/xui/pt/floater_my_friends.xml | 0 indra/newview/skins/default/xui/pt/floater_nearby_chat.xml | 0 indra/newview/skins/default/xui/pt/floater_openobject.xml | 0 .../newview/skins/default/xui/pt/floater_outfit_save_as.xml | 0 .../newview/skins/default/xui/pt/floater_outgoing_call.xml | 0 indra/newview/skins/default/xui/pt/floater_pay.xml | 0 indra/newview/skins/default/xui/pt/floater_pay_object.xml | 0 indra/newview/skins/default/xui/pt/floater_perm_prefs.xml | 0 indra/newview/skins/default/xui/pt/floater_post_process.xml | 0 indra/newview/skins/default/xui/pt/floater_postcard.xml | 0 indra/newview/skins/default/xui/pt/floater_preferences.xml | 0 .../skins/default/xui/pt/floater_preview_animation.xml | 0 .../skins/default/xui/pt/floater_preview_classified.xml | 0 .../newview/skins/default/xui/pt/floater_preview_event.xml | 0 .../skins/default/xui/pt/floater_preview_gesture.xml | 0 .../skins/default/xui/pt/floater_preview_gesture_info.xml | 0 .../default/xui/pt/floater_preview_gesture_shortcut.xml | 0 .../skins/default/xui/pt/floater_preview_gesture_steps.xml | 0 .../skins/default/xui/pt/floater_preview_notecard.xml | 0 .../newview/skins/default/xui/pt/floater_preview_sound.xml | 0 .../skins/default/xui/pt/floater_preview_texture.xml | 0 .../skins/default/xui/pt/floater_publish_classified.xml | 0 indra/newview/skins/default/xui/pt/floater_region_info.xml | 0 indra/newview/skins/default/xui/pt/floater_report_abuse.xml | 0 indra/newview/skins/default/xui/pt/floater_script_debug.xml | 0 .../skins/default/xui/pt/floater_script_debug_panel.xml | 0 .../newview/skins/default/xui/pt/floater_script_limits.xml | 0 .../newview/skins/default/xui/pt/floater_script_preview.xml | 0 indra/newview/skins/default/xui/pt/floater_script_queue.xml | 0 .../newview/skins/default/xui/pt/floater_script_search.xml | 0 indra/newview/skins/default/xui/pt/floater_search.xml | 0 indra/newview/skins/default/xui/pt/floater_select_key.xml | 0 indra/newview/skins/default/xui/pt/floater_sell_land.xml | 0 .../newview/skins/default/xui/pt/floater_settings_debug.xml | 0 indra/newview/skins/default/xui/pt/floater_snapshot.xml | 0 .../newview/skins/default/xui/pt/floater_sound_preview.xml | 0 indra/newview/skins/default/xui/pt/floater_statistics.xml | 0 indra/newview/skins/default/xui/pt/floater_stats.xml | 0 indra/newview/skins/default/xui/pt/floater_sys_well.xml | 0 indra/newview/skins/default/xui/pt/floater_telehub.xml | 0 indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml | 0 indra/newview/skins/default/xui/pt/floater_tools.xml | 0 indra/newview/skins/default/xui/pt/floater_top_objects.xml | 0 indra/newview/skins/default/xui/pt/floater_tos.xml | 0 indra/newview/skins/default/xui/pt/floater_url_entry.xml | 0 .../newview/skins/default/xui/pt/floater_voice_controls.xml | 0 indra/newview/skins/default/xui/pt/floater_voice_effect.xml | 0 indra/newview/skins/default/xui/pt/floater_water.xml | 0 .../skins/default/xui/pt/floater_wearable_save_as.xml | 0 .../skins/default/xui/pt/floater_whitelist_entry.xml | 0 .../skins/default/xui/pt/floater_windlight_options.xml | 0 indra/newview/skins/default/xui/pt/floater_window_size.xml | 0 indra/newview/skins/default/xui/pt/floater_world_map.xml | 0 indra/newview/skins/default/xui/pt/inspect_avatar.xml | 0 indra/newview/skins/default/xui/pt/inspect_group.xml | 0 indra/newview/skins/default/xui/pt/inspect_object.xml | 0 .../newview/skins/default/xui/pt/inspect_remote_object.xml | 0 indra/newview/skins/default/xui/pt/language_settings.xml | 0 .../newview/skins/default/xui/pt/menu_attachment_other.xml | 0 indra/newview/skins/default/xui/pt/menu_attachment_self.xml | 0 indra/newview/skins/default/xui/pt/menu_avatar_icon.xml | 0 indra/newview/skins/default/xui/pt/menu_avatar_other.xml | 0 indra/newview/skins/default/xui/pt/menu_avatar_self.xml | 0 indra/newview/skins/default/xui/pt/menu_bottomtray.xml | 0 indra/newview/skins/default/xui/pt/menu_cof_attachment.xml | 0 indra/newview/skins/default/xui/pt/menu_cof_body_part.xml | 0 indra/newview/skins/default/xui/pt/menu_cof_clothing.xml | 0 indra/newview/skins/default/xui/pt/menu_cof_gear.xml | 0 indra/newview/skins/default/xui/pt/menu_edit.xml | 0 indra/newview/skins/default/xui/pt/menu_favorites.xml | 0 indra/newview/skins/default/xui/pt/menu_gesture_gear.xml | 0 indra/newview/skins/default/xui/pt/menu_group_plus.xml | 0 indra/newview/skins/default/xui/pt/menu_hide_navbar.xml | 0 indra/newview/skins/default/xui/pt/menu_im_well_button.xml | 0 indra/newview/skins/default/xui/pt/menu_imchiclet_adhoc.xml | 0 indra/newview/skins/default/xui/pt/menu_imchiclet_group.xml | 0 indra/newview/skins/default/xui/pt/menu_imchiclet_p2p.xml | 0 .../skins/default/xui/pt/menu_inspect_avatar_gear.xml | 0 .../skins/default/xui/pt/menu_inspect_object_gear.xml | 0 .../newview/skins/default/xui/pt/menu_inspect_self_gear.xml | 0 .../newview/skins/default/xui/pt/menu_inv_offer_chiclet.xml | 0 indra/newview/skins/default/xui/pt/menu_inventory.xml | 0 indra/newview/skins/default/xui/pt/menu_inventory_add.xml | 0 .../skins/default/xui/pt/menu_inventory_gear_default.xml | 0 indra/newview/skins/default/xui/pt/menu_land.xml | 0 indra/newview/skins/default/xui/pt/menu_landmark.xml | 0 indra/newview/skins/default/xui/pt/menu_login.xml | 0 indra/newview/skins/default/xui/pt/menu_mini_map.xml | 0 indra/newview/skins/default/xui/pt/menu_navbar.xml | 0 indra/newview/skins/default/xui/pt/menu_nearby_chat.xml | 0 .../skins/default/xui/pt/menu_notification_well_button.xml | 0 indra/newview/skins/default/xui/pt/menu_object.xml | 0 indra/newview/skins/default/xui/pt/menu_object_icon.xml | 0 indra/newview/skins/default/xui/pt/menu_outfit_gear.xml | 0 indra/newview/skins/default/xui/pt/menu_outfit_tab.xml | 0 .../newview/skins/default/xui/pt/menu_participant_list.xml | 0 .../skins/default/xui/pt/menu_people_friends_view_sort.xml | 0 indra/newview/skins/default/xui/pt/menu_people_groups.xml | 0 .../skins/default/xui/pt/menu_people_groups_view_sort.xml | 0 indra/newview/skins/default/xui/pt/menu_people_nearby.xml | 0 .../skins/default/xui/pt/menu_people_nearby_multiselect.xml | 0 .../skins/default/xui/pt/menu_people_nearby_view_sort.xml | 0 .../skins/default/xui/pt/menu_people_recent_view_sort.xml | 0 indra/newview/skins/default/xui/pt/menu_picks.xml | 0 indra/newview/skins/default/xui/pt/menu_picks_plus.xml | 0 indra/newview/skins/default/xui/pt/menu_place.xml | 0 .../newview/skins/default/xui/pt/menu_place_add_button.xml | 0 .../skins/default/xui/pt/menu_places_gear_folder.xml | 0 .../skins/default/xui/pt/menu_places_gear_landmark.xml | 0 .../newview/skins/default/xui/pt/menu_profile_overflow.xml | 0 indra/newview/skins/default/xui/pt/menu_save_outfit.xml | 0 indra/newview/skins/default/xui/pt/menu_script_chiclet.xml | 0 indra/newview/skins/default/xui/pt/menu_slurl.xml | 0 .../skins/default/xui/pt/menu_teleport_history_gear.xml | 0 .../skins/default/xui/pt/menu_teleport_history_item.xml | 0 .../skins/default/xui/pt/menu_teleport_history_tab.xml | 0 indra/newview/skins/default/xui/pt/menu_text_editor.xml | 0 indra/newview/skins/default/xui/pt/menu_topinfobar.xml | 0 indra/newview/skins/default/xui/pt/menu_url_agent.xml | 0 indra/newview/skins/default/xui/pt/menu_url_group.xml | 0 indra/newview/skins/default/xui/pt/menu_url_http.xml | 0 indra/newview/skins/default/xui/pt/menu_url_inventory.xml | 0 indra/newview/skins/default/xui/pt/menu_url_map.xml | 0 indra/newview/skins/default/xui/pt/menu_url_objectim.xml | 0 indra/newview/skins/default/xui/pt/menu_url_parcel.xml | 0 indra/newview/skins/default/xui/pt/menu_url_slapp.xml | 0 indra/newview/skins/default/xui/pt/menu_url_slurl.xml | 0 indra/newview/skins/default/xui/pt/menu_url_teleport.xml | 0 indra/newview/skins/default/xui/pt/menu_viewer.xml | 0 .../skins/default/xui/pt/menu_wearable_list_item.xml | 0 indra/newview/skins/default/xui/pt/menu_wearing_gear.xml | 0 indra/newview/skins/default/xui/pt/menu_wearing_tab.xml | 0 indra/newview/skins/default/xui/pt/mime_types.xml | 0 indra/newview/skins/default/xui/pt/mime_types_linux.xml | 0 indra/newview/skins/default/xui/pt/mime_types_mac.xml | 0 indra/newview/skins/default/xui/pt/notifications.xml | 0 indra/newview/skins/default/xui/pt/outfit_accordion_tab.xml | 0 .../skins/default/xui/pt/panel_active_object_row.xml | 0 .../skins/default/xui/pt/panel_adhoc_control_panel.xml | 0 indra/newview/skins/default/xui/pt/panel_audio_device.xml | 0 .../newview/skins/default/xui/pt/panel_avatar_list_item.xml | 0 .../skins/default/xui/pt/panel_block_list_sidetray.xml | 0 .../skins/default/xui/pt/panel_body_parts_list_item.xml | 0 .../default/xui/pt/panel_bodyparts_list_button_bar.xml | 0 indra/newview/skins/default/xui/pt/panel_bottomtray.xml | 0 .../newview/skins/default/xui/pt/panel_bottomtray_lite.xml | 0 .../newview/skins/default/xui/pt/panel_classified_info.xml | 0 .../skins/default/xui/pt/panel_clothing_list_button_bar.xml | 0 .../skins/default/xui/pt/panel_clothing_list_item.xml | 0 indra/newview/skins/default/xui/pt/panel_cof_wearables.xml | 0 .../default/xui/pt/panel_deletable_wearable_list_item.xml | 0 .../skins/default/xui/pt/panel_dummy_clothing_list_item.xml | 0 indra/newview/skins/default/xui/pt/panel_edit_alpha.xml | 0 .../newview/skins/default/xui/pt/panel_edit_classified.xml | 0 indra/newview/skins/default/xui/pt/panel_edit_eyes.xml | 0 indra/newview/skins/default/xui/pt/panel_edit_gloves.xml | 0 indra/newview/skins/default/xui/pt/panel_edit_hair.xml | 0 indra/newview/skins/default/xui/pt/panel_edit_jacket.xml | 0 indra/newview/skins/default/xui/pt/panel_edit_pants.xml | 0 indra/newview/skins/default/xui/pt/panel_edit_pick.xml | 0 indra/newview/skins/default/xui/pt/panel_edit_profile.xml | 0 indra/newview/skins/default/xui/pt/panel_edit_shape.xml | 0 indra/newview/skins/default/xui/pt/panel_edit_shirt.xml | 0 indra/newview/skins/default/xui/pt/panel_edit_shoes.xml | 0 indra/newview/skins/default/xui/pt/panel_edit_skin.xml | 0 indra/newview/skins/default/xui/pt/panel_edit_skirt.xml | 0 indra/newview/skins/default/xui/pt/panel_edit_socks.xml | 0 indra/newview/skins/default/xui/pt/panel_edit_tattoo.xml | 0 .../newview/skins/default/xui/pt/panel_edit_underpants.xml | 0 .../newview/skins/default/xui/pt/panel_edit_undershirt.xml | 0 indra/newview/skins/default/xui/pt/panel_edit_wearable.xml | 0 indra/newview/skins/default/xui/pt/panel_friends.xml | 0 .../skins/default/xui/pt/panel_group_control_panel.xml | 0 indra/newview/skins/default/xui/pt/panel_group_general.xml | 0 .../skins/default/xui/pt/panel_group_info_sidetray.xml | 0 indra/newview/skins/default/xui/pt/panel_group_invite.xml | 0 .../newview/skins/default/xui/pt/panel_group_land_money.xml | 0 .../newview/skins/default/xui/pt/panel_group_list_item.xml | 0 indra/newview/skins/default/xui/pt/panel_group_notices.xml | 0 indra/newview/skins/default/xui/pt/panel_group_notify.xml | 0 indra/newview/skins/default/xui/pt/panel_group_roles.xml | 0 indra/newview/skins/default/xui/pt/panel_groups.xml | 0 .../newview/skins/default/xui/pt/panel_im_control_panel.xml | 0 indra/newview/skins/default/xui/pt/panel_inventory_item.xml | 0 indra/newview/skins/default/xui/pt/panel_landmark_info.xml | 0 indra/newview/skins/default/xui/pt/panel_landmarks.xml | 0 indra/newview/skins/default/xui/pt/panel_login.xml | 0 indra/newview/skins/default/xui/pt/panel_main_inventory.xml | 0 indra/newview/skins/default/xui/pt/panel_me.xml | 0 .../skins/default/xui/pt/panel_media_settings_general.xml | 0 .../default/xui/pt/panel_media_settings_permissions.xml | 0 .../skins/default/xui/pt/panel_media_settings_security.xml | 0 indra/newview/skins/default/xui/pt/panel_my_profile.xml | 0 indra/newview/skins/default/xui/pt/panel_navigation_bar.xml | 0 indra/newview/skins/default/xui/pt/panel_nearby_chat.xml | 0 .../newview/skins/default/xui/pt/panel_nearby_chat_bar.xml | 0 indra/newview/skins/default/xui/pt/panel_nearby_media.xml | 0 indra/newview/skins/default/xui/pt/panel_notes.xml | 0 indra/newview/skins/default/xui/pt/panel_online_status.xml | 0 .../skins/default/xui/pt/panel_online_status_toast.xml | 0 indra/newview/skins/default/xui/pt/panel_outfit_edit.xml | 0 .../skins/default/xui/pt/panel_outfits_inventory.xml | 0 .../default/xui/pt/panel_outfits_inventory_gear_default.xml | 0 indra/newview/skins/default/xui/pt/panel_outfits_list.xml | 0 .../newview/skins/default/xui/pt/panel_outfits_wearing.xml | 0 indra/newview/skins/default/xui/pt/panel_people.xml | 0 indra/newview/skins/default/xui/pt/panel_pick_info.xml | 0 indra/newview/skins/default/xui/pt/panel_picks.xml | 0 indra/newview/skins/default/xui/pt/panel_place_profile.xml | 0 indra/newview/skins/default/xui/pt/panel_places.xml | 0 .../skins/default/xui/pt/panel_preferences_advanced.xml | 0 .../skins/default/xui/pt/panel_preferences_alerts.xml | 0 .../newview/skins/default/xui/pt/panel_preferences_chat.xml | 0 .../skins/default/xui/pt/panel_preferences_general.xml | 0 .../skins/default/xui/pt/panel_preferences_graphics1.xml | 0 .../skins/default/xui/pt/panel_preferences_privacy.xml | 0 .../skins/default/xui/pt/panel_preferences_setup.xml | 0 .../skins/default/xui/pt/panel_preferences_sound.xml | 0 .../skins/default/xui/pt/panel_prim_media_controls.xml | 0 indra/newview/skins/default/xui/pt/panel_profile.xml | 0 indra/newview/skins/default/xui/pt/panel_profile_view.xml | 0 .../newview/skins/default/xui/pt/panel_region_covenant.xml | 0 indra/newview/skins/default/xui/pt/panel_region_debug.xml | 0 indra/newview/skins/default/xui/pt/panel_region_estate.xml | 0 indra/newview/skins/default/xui/pt/panel_region_general.xml | 0 .../skins/default/xui/pt/panel_region_general_layout.xml | 0 indra/newview/skins/default/xui/pt/panel_region_terrain.xml | 0 indra/newview/skins/default/xui/pt/panel_region_texture.xml | 0 indra/newview/skins/default/xui/pt/panel_script_ed.xml | 0 .../skins/default/xui/pt/panel_script_limits_my_avatar.xml | 0 .../default/xui/pt/panel_script_limits_region_memory.xml | 0 .../newview/skins/default/xui/pt/panel_scrolling_param.xml | 0 indra/newview/skins/default/xui/pt/panel_side_tray.xml | 0 .../skins/default/xui/pt/panel_side_tray_tab_caption.xml | 0 .../skins/default/xui/pt/panel_stand_stop_flying.xml | 0 indra/newview/skins/default/xui/pt/panel_status_bar.xml | 0 .../newview/skins/default/xui/pt/panel_teleport_history.xml | 0 .../skins/default/xui/pt/panel_teleport_history_item.xml | 0 indra/newview/skins/default/xui/pt/panel_voice_effect.xml | 0 indra/newview/skins/default/xui/pt/panel_world_map.xml | 0 indra/newview/skins/default/xui/pt/role_actions.xml | 0 indra/newview/skins/default/xui/pt/sidepanel_appearance.xml | 0 indra/newview/skins/default/xui/pt/sidepanel_inventory.xml | 0 indra/newview/skins/default/xui/pt/sidepanel_item_info.xml | 0 indra/newview/skins/default/xui/pt/sidepanel_task_info.xml | 0 indra/newview/skins/default/xui/pt/strings.xml | 0 indra/newview/skins/default/xui/pt/teleport_strings.xml | 0 indra/newview/skins/default/xui/pt/xui_version.xml | 0 indra/newview/skins/paths.xml | 0 indra/newview/tests/llagentaccess_test.cpp | 0 indra/newview/tests/llcapabilitylistener_test.cpp | 0 indra/newview/tests/lldateutil_test.cpp | 0 indra/newview/tests/lllogininstance_test.cpp | 0 indra/newview/tests/llmediadataclient_test.cpp | 0 indra/newview/tests/llsecapi_test.cpp | 0 indra/newview/tests/llsechandler_basic_test.cpp | 0 indra/newview/tests/llslurl_test.cpp | 0 indra/newview/tests/lltextureinfo_test.cpp | 0 indra/newview/tests/lltextureinfodetails_test.cpp | 0 indra/newview/tests/lltexturestatsuploader_test.cpp | 0 indra/newview/tests/llviewerhelputil_test.cpp | 0 indra/newview/tests/llviewernetwork_test.cpp | 0 indra/newview/tests/llworldmap_test.cpp | 0 indra/newview/tests/llworldmipmap_test.cpp | 0 indra/newview/tests/llxmlrpclistener_test.cpp | 0 indra/newview/tests/test_llxmlrpc_peer.py | 0 indra/newview/tr.lproj/language.txt | 0 indra/newview/uk.lproj/language.txt | 0 indra/newview/viewer_manifest.py | 0 indra/newview/zh-Hans.lproj/language.txt | 0 indra/test/CMakeLists.txt | 0 indra/test/blowfish.1.bin | 0 indra/test/blowfish.2.bin | Bin indra/test/blowfish.digits.txt | 0 indra/test/debug.h | 0 indra/test/io.cpp | 0 indra/test/llassetuploadqueue_tut.cpp | 0 indra/test/llblowfish_tut.cpp | 0 indra/test/llbuffer_tut.cpp | 0 indra/test/lldatapacker_tut.cpp | 0 indra/test/lldoubledispatch_tut.cpp | 0 indra/test/llevents_tut.cpp | 0 indra/test/llhttpclient_tut.cpp | 0 indra/test/llhttpdate_tut.cpp | 0 indra/test/llhttpnode_tut.cpp | 0 indra/test/lliohttpserver_tut.cpp | 0 indra/test/llmessageconfig_tut.cpp | 0 indra/test/llmessagetemplateparser_tut.cpp | 0 indra/test/llpermissions_tut.cpp | 0 indra/test/llpipeutil.cpp | 0 indra/test/llpipeutil.h | 0 indra/test/llsaleinfo_tut.cpp | 0 indra/test/llscriptresource_tut.cpp | 0 indra/test/llsd_new_tut.cpp | 0 indra/test/llsdmessagebuilder_tut.cpp | 0 indra/test/llsdmessagereader_tut.cpp | 0 indra/test/llsdtraits.h | 0 indra/test/llsdutil_tut.cpp | 0 indra/test/llservicebuilder_tut.cpp | 0 indra/test/llstreamtools_tut.cpp | 0 indra/test/lltemplatemessagebuilder_tut.cpp | 0 indra/test/lltimestampcache_tut.cpp | 0 indra/test/lltranscode_tut.cpp | 0 indra/test/lltut.cpp | 0 indra/test/lltut.h | 0 indra/test/lluserrelations_tut.cpp | 0 indra/test/lluuidhashmap_tut.cpp | 0 indra/test/llxorcipher_tut.cpp | 0 indra/test/message_tut.cpp | 0 indra/test/mock_http_client.cpp | 0 indra/test/mock_http_client.h | 0 indra/test/prim_linkability_tut.cpp | 0 indra/test/test.cpp | 0 indra/test/test.h | 0 indra/test/test_llmanifest.py | 0 indra/test_apps/llplugintest/CMakeLists.txt | 0 indra/test_apps/llplugintest/bookmarks.txt | 0 indra/test_apps/llplugintest/llmediaplugintest.cpp | 0 indra/test_apps/llplugintest/llmediaplugintest.h | 0 indra/tools/vstool/README.txt | 0 indra/tools/vstool/VSTool.csproj | 0 indra/tools/vstool/VSTool.sln | 0 indra/tools/vstool/main.cs | 0 indra/viewer_components/CMakeLists.txt | 0 indra/viewer_components/login/CMakeLists.txt | 0 indra/viewer_components/login/lllogin.cpp | 0 indra/viewer_components/login/lllogin.h | 0 indra/viewer_components/login/tests/lllogin_test.cpp | 0 indra/win_crash_logger/CMakeLists.txt | 0 indra/win_crash_logger/StdAfx.cpp | 0 indra/win_crash_logger/StdAfx.h | 0 indra/win_crash_logger/ll_icon.ico | Bin indra/win_crash_logger/llcrashloggerwindows.cpp | 0 indra/win_crash_logger/llcrashloggerwindows.h | 0 indra/win_crash_logger/resource.h | 0 indra/win_crash_logger/win_crash_logger.cpp | 0 indra/win_crash_logger/win_crash_logger.h | 0 indra/win_crash_logger/win_crash_logger.ico | Bin indra/win_crash_logger/win_crash_logger.rc | 0 indra/win_updater/CMakeLists.txt | 0 indra/win_updater/updater.cpp | 0 install.xml | 0 scripts/messages/message_template.msg | 0 scripts/setup-path.py | 0 scripts/template_verifier.py | 0 viewer-hg-convert.shamap | 0 6564 files changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 .hgignore mode change 100644 => 100755 .hgtags mode change 100644 => 100755 BuildParams mode change 100644 => 100755 build.sh mode change 100644 => 100755 doc/FLOSS-exception.txt mode change 100644 => 100755 doc/GPL-license.txt mode change 100644 => 100755 doc/LICENSE-logos.txt mode change 100644 => 100755 doc/LICENSE-source.txt mode change 100644 => 100755 doc/contributions.txt mode change 100644 => 100755 doc/releasenotes-where.txt mode change 100644 => 100755 etc/message.xml mode change 100644 => 100755 indra/CMakeLists.txt mode change 100644 => 100755 indra/cmake/00-Common.cmake mode change 100644 => 100755 indra/cmake/APR.cmake mode change 100644 => 100755 indra/cmake/Audio.cmake mode change 100644 => 100755 indra/cmake/BerkeleyDB.cmake mode change 100644 => 100755 indra/cmake/Boost.cmake mode change 100644 => 100755 indra/cmake/BuildVersion.cmake mode change 100644 => 100755 indra/cmake/CARes.cmake mode change 100644 => 100755 indra/cmake/CMakeCopyIfDifferent.cmake mode change 100644 => 100755 indra/cmake/CMakeLists.txt mode change 100644 => 100755 indra/cmake/CSharpMacros.cmake mode change 100644 => 100755 indra/cmake/CURL.cmake mode change 100644 => 100755 indra/cmake/Copy3rdPartyLibs.cmake mode change 100644 => 100755 indra/cmake/CopyBackToSource.cmake mode change 100644 => 100755 indra/cmake/DBusGlib.cmake mode change 100644 => 100755 indra/cmake/DeploySharedLibs.cmake mode change 100644 => 100755 indra/cmake/DirectX.cmake mode change 100644 => 100755 indra/cmake/DragDrop.cmake mode change 100644 => 100755 indra/cmake/ELFIO.cmake mode change 100644 => 100755 indra/cmake/EXPAT.cmake mode change 100644 => 100755 indra/cmake/ExamplePlugin.cmake mode change 100644 => 100755 indra/cmake/Externals.cmake mode change 100644 => 100755 indra/cmake/FMOD.cmake mode change 100644 => 100755 indra/cmake/FindAPR.cmake mode change 100644 => 100755 indra/cmake/FindBerkeleyDB.cmake mode change 100644 => 100755 indra/cmake/FindCARes.cmake mode change 100644 => 100755 indra/cmake/FindELFIO.cmake mode change 100644 => 100755 indra/cmake/FindGooglePerfTools.cmake mode change 100644 => 100755 indra/cmake/FindMT.cmake mode change 100644 => 100755 indra/cmake/FindMono.cmake mode change 100644 => 100755 indra/cmake/FindMySQL.cmake mode change 100644 => 100755 indra/cmake/FindOpenJPEG.cmake mode change 100644 => 100755 indra/cmake/FindSCP.cmake mode change 100644 => 100755 indra/cmake/FindSVN.cmake mode change 100644 => 100755 indra/cmake/FindXmlRpcEpi.cmake mode change 100644 => 100755 indra/cmake/FreeType.cmake mode change 100644 => 100755 indra/cmake/GLOD.cmake mode change 100644 => 100755 indra/cmake/GStreamer010Plugin.cmake mode change 100644 => 100755 indra/cmake/GetPrerequisites_2_8.cmake mode change 100644 => 100755 indra/cmake/Glui.cmake mode change 100644 => 100755 indra/cmake/Glut.cmake mode change 100644 => 100755 indra/cmake/GoogleBreakpad.cmake mode change 100644 => 100755 indra/cmake/GoogleMock.cmake mode change 100644 => 100755 indra/cmake/GooglePerfTools.cmake mode change 100644 => 100755 indra/cmake/JPEG.cmake mode change 100644 => 100755 indra/cmake/LLAddBuildTest.cmake mode change 100644 => 100755 indra/cmake/LLAudio.cmake mode change 100644 => 100755 indra/cmake/LLCharacter.cmake mode change 100644 => 100755 indra/cmake/LLCommon.cmake mode change 100644 => 100755 indra/cmake/LLConvexDecomposition.cmake mode change 100644 => 100755 indra/cmake/LLCrashLogger.cmake mode change 100644 => 100755 indra/cmake/LLDatabase.cmake mode change 100644 => 100755 indra/cmake/LLImage.cmake mode change 100644 => 100755 indra/cmake/LLImageJ2COJ.cmake mode change 100644 => 100755 indra/cmake/LLInventory.cmake mode change 100644 => 100755 indra/cmake/LLKDU.cmake mode change 100644 => 100755 indra/cmake/LLLogin.cmake mode change 100644 => 100755 indra/cmake/LLMath.cmake mode change 100644 => 100755 indra/cmake/LLMessage.cmake mode change 100644 => 100755 indra/cmake/LLPlugin.cmake mode change 100644 => 100755 indra/cmake/LLPrimitive.cmake mode change 100644 => 100755 indra/cmake/LLRender.cmake mode change 100644 => 100755 indra/cmake/LLScene.cmake mode change 100644 => 100755 indra/cmake/LLSharedLibs.cmake mode change 100644 => 100755 indra/cmake/LLTestCommand.cmake mode change 100644 => 100755 indra/cmake/LLUI.cmake mode change 100644 => 100755 indra/cmake/LLVFS.cmake mode change 100644 => 100755 indra/cmake/LLWindow.cmake mode change 100644 => 100755 indra/cmake/LLXML.cmake mode change 100644 => 100755 indra/cmake/LLXUIXML.cmake mode change 100644 => 100755 indra/cmake/LScript.cmake mode change 100644 => 100755 indra/cmake/Linking.cmake mode change 100644 => 100755 indra/cmake/MediaPluginBase.cmake mode change 100644 => 100755 indra/cmake/MonoDeps.cmake mode change 100644 => 100755 indra/cmake/MonoEmbed.cmake mode change 100644 => 100755 indra/cmake/MySQL.cmake mode change 100644 => 100755 indra/cmake/NDOF.cmake mode change 100644 => 100755 indra/cmake/OPENAL.cmake mode change 100644 => 100755 indra/cmake/OpenGL.cmake mode change 100644 => 100755 indra/cmake/OpenJPEG.cmake mode change 100644 => 100755 indra/cmake/OpenSSL.cmake mode change 100644 => 100755 indra/cmake/PNG.cmake mode change 100644 => 100755 indra/cmake/PluginAPI.cmake mode change 100644 => 100755 indra/cmake/Prebuilt.cmake mode change 100644 => 100755 indra/cmake/Pth.cmake mode change 100644 => 100755 indra/cmake/PulseAudio.cmake mode change 100644 => 100755 indra/cmake/Python.cmake mode change 100644 => 100755 indra/cmake/QuickTimePlugin.cmake mode change 100644 => 100755 indra/cmake/TemplateCheck.cmake mode change 100644 => 100755 indra/cmake/Tut.cmake mode change 100644 => 100755 indra/cmake/UI.cmake mode change 100644 => 100755 indra/cmake/UnixInstall.cmake mode change 100644 => 100755 indra/cmake/Variables.cmake mode change 100644 => 100755 indra/cmake/ViewerMiscLibs.cmake mode change 100644 => 100755 indra/cmake/WebKitLibPlugin.cmake mode change 100644 => 100755 indra/cmake/XmlRpcEpi.cmake mode change 100644 => 100755 indra/cmake/ZLIB.cmake mode change 100644 => 100755 indra/cmake/cmake_dummy.cpp mode change 100644 => 100755 indra/cmake/run_build_test.py mode change 100644 => 100755 indra/copy_win_scripts/CMakeLists.txt mode change 100644 => 100755 indra/copy_win_scripts/start-client.py mode change 100644 => 100755 indra/integration_tests/CMakeLists.txt mode change 100644 => 100755 indra/integration_tests/llui_libtest/CMakeLists.txt mode change 100644 => 100755 indra/integration_tests/llui_libtest/llui_libtest.cpp mode change 100644 => 100755 indra/integration_tests/llui_libtest/llui_libtest.h mode change 100644 => 100755 indra/integration_tests/llui_libtest/llwidgetreg.cpp mode change 100644 => 100755 indra/integration_tests/llui_libtest/llwidgetreg.h mode change 100644 => 100755 indra/lib/python/indra/__init__.py mode change 100644 => 100755 indra/lib/python/indra/base/__init__.py mode change 100644 => 100755 indra/lib/python/indra/base/cllsd_test.py mode change 100644 => 100755 indra/lib/python/indra/base/config.py mode change 100644 => 100755 indra/lib/python/indra/base/llsd.py mode change 100644 => 100755 indra/lib/python/indra/base/lluuid.py mode change 100644 => 100755 indra/lib/python/indra/base/metrics.py mode change 100644 => 100755 indra/lib/python/indra/ipc/__init__.py mode change 100644 => 100755 indra/lib/python/indra/ipc/compatibility.py mode change 100644 => 100755 indra/lib/python/indra/ipc/httputil.py mode change 100644 => 100755 indra/lib/python/indra/ipc/llmessage.py mode change 100644 => 100755 indra/lib/python/indra/ipc/llsdhttp.py mode change 100644 => 100755 indra/lib/python/indra/ipc/mysql_pool.py mode change 100644 => 100755 indra/lib/python/indra/ipc/russ.py mode change 100644 => 100755 indra/lib/python/indra/ipc/servicebuilder.py mode change 100644 => 100755 indra/lib/python/indra/ipc/siesta.py mode change 100644 => 100755 indra/lib/python/indra/ipc/siesta_test.py mode change 100644 => 100755 indra/lib/python/indra/ipc/tokenstream.py mode change 100644 => 100755 indra/lib/python/indra/ipc/webdav.py mode change 100644 => 100755 indra/lib/python/indra/ipc/xml_rpc.py mode change 100644 => 100755 indra/lib/python/indra/util/__init__.py mode change 100644 => 100755 indra/lib/python/indra/util/fastest_elementtree.py mode change 100644 => 100755 indra/lib/python/indra/util/helpformatter.py mode change 100644 => 100755 indra/lib/python/indra/util/iterators.py mode change 100644 => 100755 indra/lib/python/indra/util/llmanifest.py mode change 100644 => 100755 indra/lib/python/indra/util/llsubprocess.py mode change 100644 => 100755 indra/lib/python/indra/util/llversion.py mode change 100644 => 100755 indra/lib/python/indra/util/named_query.py mode change 100644 => 100755 indra/lib/python/indra/util/shutil2.py mode change 100644 => 100755 indra/lib/python/indra/util/term.py mode change 100644 => 100755 indra/lib/python/indra/util/test_win32_manifest.py mode change 100644 => 100755 indra/lib/python/uuid.py mode change 100644 => 100755 indra/linux_crash_logger/CMakeLists.txt mode change 100644 => 100755 indra/linux_crash_logger/linux_crash_logger.cpp mode change 100644 => 100755 indra/linux_crash_logger/llcrashloggerlinux.cpp mode change 100644 => 100755 indra/linux_crash_logger/llcrashloggerlinux.h mode change 100644 => 100755 indra/linux_updater/CMakeLists.txt mode change 100644 => 100755 indra/linux_updater/linux_updater.cpp mode change 100644 => 100755 indra/llaudio/CMakeLists.txt mode change 100644 => 100755 indra/llaudio/llaudiodecodemgr.cpp mode change 100644 => 100755 indra/llaudio/llaudiodecodemgr.h mode change 100644 => 100755 indra/llaudio/llaudioengine.cpp mode change 100644 => 100755 indra/llaudio/llaudioengine.h mode change 100644 => 100755 indra/llaudio/llaudioengine_fmod.cpp mode change 100644 => 100755 indra/llaudio/llaudioengine_fmod.h mode change 100644 => 100755 indra/llaudio/llaudioengine_openal.cpp mode change 100644 => 100755 indra/llaudio/llaudioengine_openal.h mode change 100644 => 100755 indra/llaudio/lllistener.cpp mode change 100644 => 100755 indra/llaudio/lllistener.h mode change 100644 => 100755 indra/llaudio/lllistener_ds3d.h mode change 100644 => 100755 indra/llaudio/lllistener_fmod.cpp mode change 100644 => 100755 indra/llaudio/lllistener_fmod.h mode change 100644 => 100755 indra/llaudio/lllistener_openal.cpp mode change 100644 => 100755 indra/llaudio/lllistener_openal.h mode change 100644 => 100755 indra/llaudio/llstreamingaudio.h mode change 100644 => 100755 indra/llaudio/llstreamingaudio_fmod.cpp mode change 100644 => 100755 indra/llaudio/llstreamingaudio_fmod.h mode change 100644 => 100755 indra/llaudio/llvorbisencode.cpp mode change 100644 => 100755 indra/llaudio/llvorbisencode.h mode change 100644 => 100755 indra/llaudio/llwindgen.h mode change 100644 => 100755 indra/llcharacter/CMakeLists.txt mode change 100644 => 100755 indra/llcharacter/llanimationstates.cpp mode change 100644 => 100755 indra/llcharacter/llanimationstates.h mode change 100644 => 100755 indra/llcharacter/llbvhconsts.h mode change 100644 => 100755 indra/llcharacter/llbvhloader.cpp mode change 100644 => 100755 indra/llcharacter/llbvhloader.h mode change 100644 => 100755 indra/llcharacter/llcharacter.cpp mode change 100644 => 100755 indra/llcharacter/llcharacter.h mode change 100644 => 100755 indra/llcharacter/lleditingmotion.cpp mode change 100644 => 100755 indra/llcharacter/lleditingmotion.h mode change 100644 => 100755 indra/llcharacter/llgesture.cpp mode change 100644 => 100755 indra/llcharacter/llgesture.h mode change 100644 => 100755 indra/llcharacter/llhandmotion.cpp mode change 100644 => 100755 indra/llcharacter/llhandmotion.h mode change 100644 => 100755 indra/llcharacter/llheadrotmotion.cpp mode change 100644 => 100755 indra/llcharacter/llheadrotmotion.h mode change 100644 => 100755 indra/llcharacter/lljoint.cpp mode change 100644 => 100755 indra/llcharacter/lljoint.h mode change 100644 => 100755 indra/llcharacter/lljointsolverrp3.cpp mode change 100644 => 100755 indra/llcharacter/lljointsolverrp3.h mode change 100644 => 100755 indra/llcharacter/lljointstate.h mode change 100644 => 100755 indra/llcharacter/llkeyframefallmotion.cpp mode change 100644 => 100755 indra/llcharacter/llkeyframefallmotion.h mode change 100644 => 100755 indra/llcharacter/llkeyframemotion.cpp mode change 100644 => 100755 indra/llcharacter/llkeyframemotion.h mode change 100644 => 100755 indra/llcharacter/llkeyframemotionparam.cpp mode change 100644 => 100755 indra/llcharacter/llkeyframemotionparam.h mode change 100644 => 100755 indra/llcharacter/llkeyframestandmotion.cpp mode change 100644 => 100755 indra/llcharacter/llkeyframestandmotion.h mode change 100644 => 100755 indra/llcharacter/llkeyframewalkmotion.cpp mode change 100644 => 100755 indra/llcharacter/llkeyframewalkmotion.h mode change 100644 => 100755 indra/llcharacter/llmotion.cpp mode change 100644 => 100755 indra/llcharacter/llmotion.h mode change 100644 => 100755 indra/llcharacter/llmotioncontroller.cpp mode change 100644 => 100755 indra/llcharacter/llmotioncontroller.h mode change 100644 => 100755 indra/llcharacter/llmultigesture.cpp mode change 100644 => 100755 indra/llcharacter/llmultigesture.h mode change 100644 => 100755 indra/llcharacter/llpose.cpp mode change 100644 => 100755 indra/llcharacter/llpose.h mode change 100644 => 100755 indra/llcharacter/llstatemachine.cpp mode change 100644 => 100755 indra/llcharacter/llstatemachine.h mode change 100644 => 100755 indra/llcharacter/lltargetingmotion.cpp mode change 100644 => 100755 indra/llcharacter/lltargetingmotion.h mode change 100644 => 100755 indra/llcharacter/llvisualparam.cpp mode change 100644 => 100755 indra/llcharacter/llvisualparam.h mode change 100644 => 100755 indra/llcharacter/tests/lljoint_test.cpp mode change 100644 => 100755 indra/llcommon/CMakeLists.txt mode change 100644 => 100755 indra/llcommon/bitpack.cpp mode change 100644 => 100755 indra/llcommon/bitpack.h mode change 100644 => 100755 indra/llcommon/ctype_workaround.h mode change 100644 => 100755 indra/llcommon/doublelinkedlist.h mode change 100644 => 100755 indra/llcommon/imageids.cpp mode change 100644 => 100755 indra/llcommon/imageids.h mode change 100644 => 100755 indra/llcommon/indra_constants.cpp mode change 100644 => 100755 indra/llcommon/indra_constants.h mode change 100644 => 100755 indra/llcommon/is_approx_equal_fraction.h mode change 100644 => 100755 indra/llcommon/linden_common.h mode change 100644 => 100755 indra/llcommon/linked_lists.h mode change 100644 => 100755 indra/llcommon/ll_template_cast.h mode change 100644 => 100755 indra/llcommon/llagentconstants.h mode change 100644 => 100755 indra/llcommon/llallocator.cpp mode change 100644 => 100755 indra/llcommon/llallocator.h mode change 100644 => 100755 indra/llcommon/llallocator_heap_profile.cpp mode change 100644 => 100755 indra/llcommon/llallocator_heap_profile.h mode change 100644 => 100755 indra/llcommon/llapp.cpp mode change 100644 => 100755 indra/llcommon/llapp.h mode change 100644 => 100755 indra/llcommon/llapr.cpp mode change 100644 => 100755 indra/llcommon/llapr.h mode change 100644 => 100755 indra/llcommon/llassettype.cpp mode change 100644 => 100755 indra/llcommon/llassettype.h mode change 100644 => 100755 indra/llcommon/llassoclist.h mode change 100644 => 100755 indra/llcommon/llavatarconstants.h mode change 100644 => 100755 indra/llcommon/llbase32.cpp mode change 100644 => 100755 indra/llcommon/llbase32.h mode change 100644 => 100755 indra/llcommon/llbase64.cpp mode change 100644 => 100755 indra/llcommon/llbase64.h mode change 100644 => 100755 indra/llcommon/llboost.h mode change 100644 => 100755 indra/llcommon/llchat.h mode change 100644 => 100755 indra/llcommon/llclickaction.h mode change 100644 => 100755 indra/llcommon/llcommon.cpp mode change 100644 => 100755 indra/llcommon/llcommon.h mode change 100644 => 100755 indra/llcommon/llcommonutils.cpp mode change 100644 => 100755 indra/llcommon/llcommonutils.h mode change 100644 => 100755 indra/llcommon/llcoros.cpp mode change 100644 => 100755 indra/llcommon/llcoros.h mode change 100644 => 100755 indra/llcommon/llcrc.cpp mode change 100644 => 100755 indra/llcommon/llcrc.h mode change 100644 => 100755 indra/llcommon/llcriticaldamp.cpp mode change 100644 => 100755 indra/llcommon/llcriticaldamp.h mode change 100644 => 100755 indra/llcommon/llcursortypes.cpp mode change 100644 => 100755 indra/llcommon/llcursortypes.h mode change 100644 => 100755 indra/llcommon/lldarray.h mode change 100644 => 100755 indra/llcommon/lldarrayptr.h mode change 100644 => 100755 indra/llcommon/lldate.cpp mode change 100644 => 100755 indra/llcommon/lldate.h mode change 100644 => 100755 indra/llcommon/lldefs.h mode change 100644 => 100755 indra/llcommon/lldeleteutils.h mode change 100644 => 100755 indra/llcommon/lldependencies.cpp mode change 100644 => 100755 indra/llcommon/lldependencies.h mode change 100644 => 100755 indra/llcommon/lldepthstack.h mode change 100644 => 100755 indra/llcommon/lldictionary.cpp mode change 100644 => 100755 indra/llcommon/lldictionary.h mode change 100644 => 100755 indra/llcommon/lldlinked.h mode change 100644 => 100755 indra/llcommon/lldoubledispatch.h mode change 100644 => 100755 indra/llcommon/lldqueueptr.h mode change 100644 => 100755 indra/llcommon/llendianswizzle.h mode change 100644 => 100755 indra/llcommon/llenum.h mode change 100644 => 100755 indra/llcommon/llerror.cpp mode change 100644 => 100755 indra/llcommon/llerror.h mode change 100644 => 100755 indra/llcommon/llerrorcontrol.h mode change 100644 => 100755 indra/llcommon/llerrorlegacy.h mode change 100644 => 100755 indra/llcommon/llerrorthread.cpp mode change 100644 => 100755 indra/llcommon/llerrorthread.h mode change 100644 => 100755 indra/llcommon/llevent.cpp mode change 100644 => 100755 indra/llcommon/llevent.h mode change 100644 => 100755 indra/llcommon/lleventapi.cpp mode change 100644 => 100755 indra/llcommon/lleventapi.h mode change 100644 => 100755 indra/llcommon/lleventcoro.cpp mode change 100644 => 100755 indra/llcommon/lleventcoro.h mode change 100644 => 100755 indra/llcommon/lleventdispatcher.cpp mode change 100644 => 100755 indra/llcommon/lleventdispatcher.h mode change 100644 => 100755 indra/llcommon/lleventemitter.h mode change 100644 => 100755 indra/llcommon/lleventfilter.cpp mode change 100644 => 100755 indra/llcommon/lleventfilter.h mode change 100644 => 100755 indra/llcommon/llevents.cpp mode change 100644 => 100755 indra/llcommon/llevents.h mode change 100644 => 100755 indra/llcommon/lleventtimer.cpp mode change 100644 => 100755 indra/llcommon/lleventtimer.h mode change 100644 => 100755 indra/llcommon/llextendedstatus.h mode change 100644 => 100755 indra/llcommon/llfasttimer.h mode change 100644 => 100755 indra/llcommon/llfasttimer_class.cpp mode change 100644 => 100755 indra/llcommon/llfasttimer_class.h mode change 100644 => 100755 indra/llcommon/llfile.cpp mode change 100644 => 100755 indra/llcommon/llfile.h mode change 100644 => 100755 indra/llcommon/llfindlocale.cpp mode change 100644 => 100755 indra/llcommon/llfindlocale.h mode change 100644 => 100755 indra/llcommon/llfixedbuffer.cpp mode change 100644 => 100755 indra/llcommon/llfixedbuffer.h mode change 100644 => 100755 indra/llcommon/llfoldertype.cpp mode change 100644 => 100755 indra/llcommon/llfoldertype.h mode change 100644 => 100755 indra/llcommon/llformat.cpp mode change 100644 => 100755 indra/llcommon/llformat.h mode change 100644 => 100755 indra/llcommon/llframetimer.cpp mode change 100644 => 100755 indra/llcommon/llframetimer.h mode change 100644 => 100755 indra/llcommon/llhash.h mode change 100644 => 100755 indra/llcommon/llheartbeat.cpp mode change 100644 => 100755 indra/llcommon/llheartbeat.h mode change 100644 => 100755 indra/llcommon/llhttpstatuscodes.h mode change 100644 => 100755 indra/llcommon/llindexedqueue.h mode change 100644 => 100755 indra/llcommon/llinstancetracker.cpp mode change 100644 => 100755 indra/llcommon/llinstancetracker.h mode change 100644 => 100755 indra/llcommon/llkeythrottle.h mode change 100644 => 100755 indra/llcommon/llkeyusetracker.h mode change 100644 => 100755 indra/llcommon/lllazy.cpp mode change 100644 => 100755 indra/llcommon/lllazy.h mode change 100644 => 100755 indra/llcommon/lllinkedqueue.h mode change 100644 => 100755 indra/llcommon/lllistenerwrapper.h mode change 100644 => 100755 indra/llcommon/llliveappconfig.cpp mode change 100644 => 100755 indra/llcommon/llliveappconfig.h mode change 100644 => 100755 indra/llcommon/lllivefile.cpp mode change 100644 => 100755 indra/llcommon/lllivefile.h mode change 100644 => 100755 indra/llcommon/lllocalidhashmap.h mode change 100644 => 100755 indra/llcommon/lllog.cpp mode change 100644 => 100755 indra/llcommon/lllog.h mode change 100644 => 100755 indra/llcommon/lllslconstants.h mode change 100644 => 100755 indra/llcommon/llmap.h mode change 100644 => 100755 indra/llcommon/llmd5.cpp mode change 100644 => 100755 indra/llcommon/llmd5.h mode change 100644 => 100755 indra/llcommon/llmemory.cpp mode change 100644 => 100755 indra/llcommon/llmemory.h mode change 100644 => 100755 indra/llcommon/llmemorystream.cpp mode change 100644 => 100755 indra/llcommon/llmemorystream.h mode change 100644 => 100755 indra/llcommon/llmemtype.cpp mode change 100644 => 100755 indra/llcommon/llmemtype.h mode change 100644 => 100755 indra/llcommon/llmetrics.cpp mode change 100644 => 100755 indra/llcommon/llmetrics.h mode change 100644 => 100755 indra/llcommon/llmortician.cpp mode change 100644 => 100755 indra/llcommon/llmortician.h mode change 100644 => 100755 indra/llcommon/llnametable.h mode change 100644 => 100755 indra/llcommon/lloptioninterface.cpp mode change 100644 => 100755 indra/llcommon/lloptioninterface.h mode change 100644 => 100755 indra/llcommon/llpointer.h mode change 100644 => 100755 indra/llcommon/llpreprocessor.h mode change 100644 => 100755 indra/llcommon/llpriqueuemap.h mode change 100644 => 100755 indra/llcommon/llprocesslauncher.cpp mode change 100644 => 100755 indra/llcommon/llprocesslauncher.h mode change 100644 => 100755 indra/llcommon/llprocessor.cpp mode change 100644 => 100755 indra/llcommon/llprocessor.h mode change 100644 => 100755 indra/llcommon/llptrskiplist.h mode change 100644 => 100755 indra/llcommon/llptrskipmap.h mode change 100644 => 100755 indra/llcommon/llptrto.cpp mode change 100644 => 100755 indra/llcommon/llptrto.h mode change 100644 => 100755 indra/llcommon/llqueuedthread.cpp mode change 100644 => 100755 indra/llcommon/llqueuedthread.h mode change 100644 => 100755 indra/llcommon/llrand.cpp mode change 100644 => 100755 indra/llcommon/llrand.h mode change 100644 => 100755 indra/llcommon/llrefcount.cpp mode change 100644 => 100755 indra/llcommon/llrefcount.h mode change 100644 => 100755 indra/llcommon/llrun.cpp mode change 100644 => 100755 indra/llcommon/llrun.h mode change 100644 => 100755 indra/llcommon/llsafehandle.h mode change 100644 => 100755 indra/llcommon/llsd.cpp mode change 100644 => 100755 indra/llcommon/llsd.h mode change 100644 => 100755 indra/llcommon/llsdserialize.cpp mode change 100644 => 100755 indra/llcommon/llsdserialize.h mode change 100644 => 100755 indra/llcommon/llsdserialize_xml.cpp mode change 100644 => 100755 indra/llcommon/llsdserialize_xml.h mode change 100644 => 100755 indra/llcommon/llsdutil.cpp mode change 100644 => 100755 indra/llcommon/llsdutil.h mode change 100644 => 100755 indra/llcommon/llsecondlifeurls.cpp mode change 100644 => 100755 indra/llcommon/llsecondlifeurls.h mode change 100644 => 100755 indra/llcommon/llsimplehash.h mode change 100644 => 100755 indra/llcommon/llsingleton.cpp mode change 100644 => 100755 indra/llcommon/llsingleton.h mode change 100644 => 100755 indra/llcommon/llskiplist.h mode change 100644 => 100755 indra/llcommon/llskipmap.h mode change 100644 => 100755 indra/llcommon/llsmoothstep.h mode change 100644 => 100755 indra/llcommon/llstack.h mode change 100644 => 100755 indra/llcommon/llstacktrace.cpp mode change 100644 => 100755 indra/llcommon/llstacktrace.h mode change 100644 => 100755 indra/llcommon/llstat.cpp mode change 100644 => 100755 indra/llcommon/llstat.h mode change 100644 => 100755 indra/llcommon/llstatenums.h mode change 100644 => 100755 indra/llcommon/llstl.h mode change 100644 => 100755 indra/llcommon/llstreamtools.cpp mode change 100644 => 100755 indra/llcommon/llstreamtools.h mode change 100644 => 100755 indra/llcommon/llstrider.h mode change 100644 => 100755 indra/llcommon/llstring.cpp mode change 100644 => 100755 indra/llcommon/llstring.h mode change 100644 => 100755 indra/llcommon/llstringtable.cpp mode change 100644 => 100755 indra/llcommon/llstringtable.h mode change 100644 => 100755 indra/llcommon/llsys.cpp mode change 100644 => 100755 indra/llcommon/llsys.h mode change 100644 => 100755 indra/llcommon/llthread.cpp mode change 100644 => 100755 indra/llcommon/llthread.h mode change 100644 => 100755 indra/llcommon/lltimer.cpp mode change 100644 => 100755 indra/llcommon/lltimer.h mode change 100644 => 100755 indra/llcommon/lltreeiterators.h mode change 100644 => 100755 indra/llcommon/lluri.cpp mode change 100644 => 100755 indra/llcommon/lluri.h mode change 100644 => 100755 indra/llcommon/lluuid.cpp mode change 100644 => 100755 indra/llcommon/lluuid.h mode change 100644 => 100755 indra/llcommon/lluuidhashmap.h mode change 100644 => 100755 indra/llcommon/llversionserver.h mode change 100644 => 100755 indra/llcommon/llversionviewer.h mode change 100644 => 100755 indra/llcommon/llworkerthread.cpp mode change 100644 => 100755 indra/llcommon/llworkerthread.h mode change 100644 => 100755 indra/llcommon/metaclass.cpp mode change 100644 => 100755 indra/llcommon/metaclass.h mode change 100644 => 100755 indra/llcommon/metaclasst.h mode change 100644 => 100755 indra/llcommon/metaproperty.cpp mode change 100644 => 100755 indra/llcommon/metaproperty.h mode change 100644 => 100755 indra/llcommon/metapropertyt.h mode change 100644 => 100755 indra/llcommon/reflective.cpp mode change 100644 => 100755 indra/llcommon/reflective.h mode change 100644 => 100755 indra/llcommon/reflectivet.h mode change 100644 => 100755 indra/llcommon/roles_constants.h mode change 100644 => 100755 indra/llcommon/stdenums.h mode change 100644 => 100755 indra/llcommon/stdtypes.h mode change 100644 => 100755 indra/llcommon/string_table.h mode change 100644 => 100755 indra/llcommon/stringize.h mode change 100644 => 100755 indra/llcommon/tests/bitpack_test.cpp mode change 100644 => 100755 indra/llcommon/tests/commonmisc_test.cpp mode change 100644 => 100755 indra/llcommon/tests/listener.h mode change 100644 => 100755 indra/llcommon/tests/llallocator_heap_profile_test.cpp mode change 100644 => 100755 indra/llcommon/tests/llallocator_test.cpp mode change 100644 => 100755 indra/llcommon/tests/llbase64_test.cpp mode change 100644 => 100755 indra/llcommon/tests/lldate_test.cpp mode change 100644 => 100755 indra/llcommon/tests/lldependencies_test.cpp mode change 100644 => 100755 indra/llcommon/tests/llerror_test.cpp mode change 100644 => 100755 indra/llcommon/tests/lleventcoro_test.cpp mode change 100644 => 100755 indra/llcommon/tests/lleventfilter_test.cpp mode change 100644 => 100755 indra/llcommon/tests/llframetimer_test.cpp mode change 100644 => 100755 indra/llcommon/tests/llinstancetracker_test.cpp mode change 100644 => 100755 indra/llcommon/tests/lllazy_test.cpp mode change 100644 => 100755 indra/llcommon/tests/llmemtype_test.cpp mode change 100644 => 100755 indra/llcommon/tests/llprocessor_test.cpp mode change 100644 => 100755 indra/llcommon/tests/llrand_test.cpp mode change 100644 => 100755 indra/llcommon/tests/llsdserialize_test.cpp mode change 100644 => 100755 indra/llcommon/tests/llstring_test.cpp mode change 100644 => 100755 indra/llcommon/tests/lltreeiterators_test.cpp mode change 100644 => 100755 indra/llcommon/tests/lluri_test.cpp mode change 100644 => 100755 indra/llcommon/tests/reflection_test.cpp mode change 100644 => 100755 indra/llcommon/tests/stringize_test.cpp mode change 100644 => 100755 indra/llcommon/tests/wrapllerrs.h mode change 100644 => 100755 indra/llcommon/timer.h mode change 100644 => 100755 indra/llcommon/timing.cpp mode change 100644 => 100755 indra/llcommon/timing.h mode change 100644 => 100755 indra/llcommon/u64.cpp mode change 100644 => 100755 indra/llcommon/u64.h mode change 100644 => 100755 indra/llcrashlogger/CMakeLists.txt mode change 100644 => 100755 indra/llcrashlogger/llcrashlogger.cpp mode change 100644 => 100755 indra/llcrashlogger/llcrashlogger.h mode change 100644 => 100755 indra/llimage/CMakeLists.txt mode change 100644 => 100755 indra/llimage/llimage.cpp mode change 100644 => 100755 indra/llimage/llimage.h mode change 100644 => 100755 indra/llimage/llimagebmp.cpp mode change 100644 => 100755 indra/llimage/llimagebmp.h mode change 100644 => 100755 indra/llimage/llimagedimensionsinfo.cpp mode change 100644 => 100755 indra/llimage/llimagedimensionsinfo.h mode change 100644 => 100755 indra/llimage/llimagedxt.cpp mode change 100644 => 100755 indra/llimage/llimagedxt.h mode change 100644 => 100755 indra/llimage/llimagej2c.cpp mode change 100644 => 100755 indra/llimage/llimagej2c.h mode change 100644 => 100755 indra/llimage/llimagejpeg.cpp mode change 100644 => 100755 indra/llimage/llimagejpeg.h mode change 100644 => 100755 indra/llimage/llimagepng.cpp mode change 100644 => 100755 indra/llimage/llimagepng.h mode change 100644 => 100755 indra/llimage/llimagetga.cpp mode change 100644 => 100755 indra/llimage/llimagetga.h mode change 100644 => 100755 indra/llimage/llimageworker.cpp mode change 100644 => 100755 indra/llimage/llimageworker.h mode change 100644 => 100755 indra/llimage/llmapimagetype.h mode change 100644 => 100755 indra/llimage/llpngwrapper.cpp mode change 100644 => 100755 indra/llimage/llpngwrapper.h mode change 100644 => 100755 indra/llimage/tests/llimageworker_test.cpp mode change 100644 => 100755 indra/llimagej2coj/CMakeLists.txt mode change 100644 => 100755 indra/llimagej2coj/llimagej2coj.cpp mode change 100644 => 100755 indra/llimagej2coj/llimagej2coj.h mode change 100644 => 100755 indra/llinventory/CMakeLists.txt mode change 100644 => 100755 indra/llinventory/llcategory.cpp mode change 100644 => 100755 indra/llinventory/llcategory.h mode change 100644 => 100755 indra/llinventory/lleconomy.cpp mode change 100644 => 100755 indra/llinventory/lleconomy.h mode change 100644 => 100755 indra/llinventory/llinventory.cpp mode change 100644 => 100755 indra/llinventory/llinventory.h mode change 100644 => 100755 indra/llinventory/llinventorydefines.cpp mode change 100644 => 100755 indra/llinventory/llinventorydefines.h mode change 100644 => 100755 indra/llinventory/llinventorytype.cpp mode change 100644 => 100755 indra/llinventory/llinventorytype.h mode change 100644 => 100755 indra/llinventory/lllandmark.cpp mode change 100644 => 100755 indra/llinventory/lllandmark.h mode change 100644 => 100755 indra/llinventory/llnotecard.cpp mode change 100644 => 100755 indra/llinventory/llnotecard.h mode change 100644 => 100755 indra/llinventory/llparcel.cpp mode change 100644 => 100755 indra/llinventory/llparcel.h mode change 100644 => 100755 indra/llinventory/llparcelflags.h mode change 100644 => 100755 indra/llinventory/llpermissions.cpp mode change 100644 => 100755 indra/llinventory/llpermissions.h mode change 100644 => 100755 indra/llinventory/llpermissionsflags.h mode change 100644 => 100755 indra/llinventory/llsaleinfo.cpp mode change 100644 => 100755 indra/llinventory/llsaleinfo.h mode change 100644 => 100755 indra/llinventory/lltransactionflags.cpp mode change 100644 => 100755 indra/llinventory/lltransactionflags.h mode change 100644 => 100755 indra/llinventory/lltransactiontypes.h mode change 100644 => 100755 indra/llinventory/lluserrelations.cpp mode change 100644 => 100755 indra/llinventory/lluserrelations.h mode change 100644 => 100755 indra/llinventory/tests/inventorymisc_test.cpp mode change 100644 => 100755 indra/llinventory/tests/llparcel_test.cpp mode change 100644 => 100755 indra/llmath/CMakeLists.txt mode change 100644 => 100755 indra/llmath/camera.h mode change 100644 => 100755 indra/llmath/coordframe.h mode change 100644 => 100755 indra/llmath/llbbox.cpp mode change 100644 => 100755 indra/llmath/llbbox.h mode change 100644 => 100755 indra/llmath/llbboxlocal.cpp mode change 100644 => 100755 indra/llmath/llbboxlocal.h mode change 100644 => 100755 indra/llmath/llcamera.cpp mode change 100644 => 100755 indra/llmath/llcamera.h mode change 100644 => 100755 indra/llmath/llcoord.h mode change 100644 => 100755 indra/llmath/llcoordframe.cpp mode change 100644 => 100755 indra/llmath/llcoordframe.h mode change 100644 => 100755 indra/llmath/llinterp.h mode change 100644 => 100755 indra/llmath/llline.cpp mode change 100644 => 100755 indra/llmath/llline.h mode change 100644 => 100755 indra/llmath/llmath.h mode change 100644 => 100755 indra/llmath/llmatrix3a.cpp mode change 100644 => 100755 indra/llmath/llmatrix3a.h mode change 100644 => 100755 indra/llmath/llmatrix3a.inl mode change 100644 => 100755 indra/llmath/llmatrix4a.h mode change 100644 => 100755 indra/llmath/llmodularmath.cpp mode change 100644 => 100755 indra/llmath/llmodularmath.h mode change 100644 => 100755 indra/llmath/lloctree.h mode change 100644 => 100755 indra/llmath/llperlin.cpp mode change 100644 => 100755 indra/llmath/llperlin.h mode change 100644 => 100755 indra/llmath/llplane.h mode change 100644 => 100755 indra/llmath/llquantize.h mode change 100644 => 100755 indra/llmath/llquaternion.cpp mode change 100644 => 100755 indra/llmath/llquaternion.h mode change 100644 => 100755 indra/llmath/llquaternion2.h mode change 100644 => 100755 indra/llmath/llquaternion2.inl mode change 100644 => 100755 indra/llmath/llrect.cpp mode change 100644 => 100755 indra/llmath/llrect.h mode change 100644 => 100755 indra/llmath/llsdutil_math.cpp mode change 100644 => 100755 indra/llmath/llsdutil_math.h mode change 100644 => 100755 indra/llmath/llsimdmath.h mode change 100644 => 100755 indra/llmath/llsimdtypes.h mode change 100644 => 100755 indra/llmath/llsimdtypes.inl mode change 100644 => 100755 indra/llmath/llsphere.cpp mode change 100644 => 100755 indra/llmath/llsphere.h mode change 100644 => 100755 indra/llmath/lltreenode.h mode change 100644 => 100755 indra/llmath/llv4math.h mode change 100644 => 100755 indra/llmath/llv4matrix3.h mode change 100644 => 100755 indra/llmath/llv4matrix4.h mode change 100644 => 100755 indra/llmath/llv4vector3.h mode change 100644 => 100755 indra/llmath/llvector4a.cpp mode change 100644 => 100755 indra/llmath/llvector4a.h mode change 100644 => 100755 indra/llmath/llvector4a.inl mode change 100644 => 100755 indra/llmath/llvector4logical.h mode change 100644 => 100755 indra/llmath/llvolume.cpp mode change 100644 => 100755 indra/llmath/llvolume.h mode change 100644 => 100755 indra/llmath/llvolumemgr.cpp mode change 100644 => 100755 indra/llmath/llvolumemgr.h mode change 100644 => 100755 indra/llmath/llvolumeoctree.cpp mode change 100644 => 100755 indra/llmath/llvolumeoctree.h mode change 100644 => 100755 indra/llmath/m3math.cpp mode change 100644 => 100755 indra/llmath/m3math.h mode change 100644 => 100755 indra/llmath/m4math.cpp mode change 100644 => 100755 indra/llmath/m4math.h mode change 100644 => 100755 indra/llmath/raytrace.cpp mode change 100644 => 100755 indra/llmath/raytrace.h mode change 100644 => 100755 indra/llmath/tests/llbbox_test.cpp mode change 100644 => 100755 indra/llmath/tests/llbboxlocal_test.cpp mode change 100644 => 100755 indra/llmath/tests/llmodularmath_test.cpp mode change 100644 => 100755 indra/llmath/tests/llquaternion_test.cpp mode change 100644 => 100755 indra/llmath/tests/llrect_test.cpp mode change 100644 => 100755 indra/llmath/tests/m3math_test.cpp mode change 100644 => 100755 indra/llmath/tests/mathmisc_test.cpp mode change 100644 => 100755 indra/llmath/tests/v2math_test.cpp mode change 100644 => 100755 indra/llmath/tests/v3color_test.cpp mode change 100644 => 100755 indra/llmath/tests/v3dmath_test.cpp mode change 100644 => 100755 indra/llmath/tests/v3math_test.cpp mode change 100644 => 100755 indra/llmath/tests/v4color_test.cpp mode change 100644 => 100755 indra/llmath/tests/v4coloru_test.cpp mode change 100644 => 100755 indra/llmath/tests/v4math_test.cpp mode change 100644 => 100755 indra/llmath/tests/xform_test.cpp mode change 100644 => 100755 indra/llmath/v2math.cpp mode change 100644 => 100755 indra/llmath/v2math.h mode change 100644 => 100755 indra/llmath/v3color.cpp mode change 100644 => 100755 indra/llmath/v3color.h mode change 100644 => 100755 indra/llmath/v3dmath.cpp mode change 100644 => 100755 indra/llmath/v3dmath.h mode change 100644 => 100755 indra/llmath/v3math.cpp mode change 100644 => 100755 indra/llmath/v3math.h mode change 100644 => 100755 indra/llmath/v4color.cpp mode change 100644 => 100755 indra/llmath/v4color.h mode change 100644 => 100755 indra/llmath/v4coloru.cpp mode change 100644 => 100755 indra/llmath/v4coloru.h mode change 100644 => 100755 indra/llmath/v4math.cpp mode change 100644 => 100755 indra/llmath/v4math.h mode change 100644 => 100755 indra/llmath/xform.cpp mode change 100644 => 100755 indra/llmath/xform.h mode change 100644 => 100755 indra/llmessage/CMakeLists.txt mode change 100644 => 100755 indra/llmessage/llares.cpp mode change 100644 => 100755 indra/llmessage/llares.h mode change 100644 => 100755 indra/llmessage/llareslistener.cpp mode change 100644 => 100755 indra/llmessage/llareslistener.h mode change 100644 => 100755 indra/llmessage/llassetstorage.cpp mode change 100644 => 100755 indra/llmessage/llassetstorage.h mode change 100644 => 100755 indra/llmessage/llblowfishcipher.cpp mode change 100644 => 100755 indra/llmessage/llblowfishcipher.h mode change 100644 => 100755 indra/llmessage/llbuffer.cpp mode change 100644 => 100755 indra/llmessage/llbuffer.h mode change 100644 => 100755 indra/llmessage/llbufferstream.cpp mode change 100644 => 100755 indra/llmessage/llbufferstream.h mode change 100644 => 100755 indra/llmessage/llcachename.cpp mode change 100644 => 100755 indra/llmessage/llcachename.h mode change 100644 => 100755 indra/llmessage/llchainio.cpp mode change 100644 => 100755 indra/llmessage/llchainio.h mode change 100644 => 100755 indra/llmessage/llcipher.h mode change 100644 => 100755 indra/llmessage/llcircuit.cpp mode change 100644 => 100755 indra/llmessage/llcircuit.h mode change 100644 => 100755 indra/llmessage/llclassifiedflags.cpp mode change 100644 => 100755 indra/llmessage/llclassifiedflags.h mode change 100644 => 100755 indra/llmessage/llcurl.cpp mode change 100644 => 100755 indra/llmessage/llcurl.h mode change 100644 => 100755 indra/llmessage/lldatapacker.cpp mode change 100644 => 100755 indra/llmessage/lldatapacker.h mode change 100644 => 100755 indra/llmessage/lldbstrings.h mode change 100644 => 100755 indra/llmessage/lldispatcher.cpp mode change 100644 => 100755 indra/llmessage/lldispatcher.h mode change 100644 => 100755 indra/llmessage/lleventflags.h mode change 100644 => 100755 indra/llmessage/llfiltersd2xmlrpc.cpp mode change 100644 => 100755 indra/llmessage/llfiltersd2xmlrpc.h mode change 100644 => 100755 indra/llmessage/llfollowcamparams.h mode change 100644 => 100755 indra/llmessage/llhost.cpp mode change 100644 => 100755 indra/llmessage/llhost.h mode change 100644 => 100755 indra/llmessage/llhttpassetstorage.cpp mode change 100644 => 100755 indra/llmessage/llhttpassetstorage.h mode change 100644 => 100755 indra/llmessage/llhttpclient.cpp mode change 100644 => 100755 indra/llmessage/llhttpclient.h mode change 100644 => 100755 indra/llmessage/llhttpclientadapter.cpp mode change 100644 => 100755 indra/llmessage/llhttpclientadapter.h mode change 100644 => 100755 indra/llmessage/llhttpclientinterface.h mode change 100644 => 100755 indra/llmessage/llhttpnode.cpp mode change 100644 => 100755 indra/llmessage/llhttpnode.h mode change 100644 => 100755 indra/llmessage/llhttpnodeadapter.h mode change 100644 => 100755 indra/llmessage/llhttpsender.cpp mode change 100644 => 100755 indra/llmessage/llhttpsender.h mode change 100644 => 100755 indra/llmessage/llinstantmessage.cpp mode change 100644 => 100755 indra/llmessage/llinstantmessage.h mode change 100644 => 100755 indra/llmessage/llinvite.h mode change 100644 => 100755 indra/llmessage/lliobuffer.cpp mode change 100644 => 100755 indra/llmessage/lliobuffer.h mode change 100644 => 100755 indra/llmessage/lliohttpserver.cpp mode change 100644 => 100755 indra/llmessage/lliohttpserver.h mode change 100644 => 100755 indra/llmessage/lliopipe.cpp mode change 100644 => 100755 indra/llmessage/lliopipe.h mode change 100644 => 100755 indra/llmessage/lliosocket.cpp mode change 100644 => 100755 indra/llmessage/lliosocket.h mode change 100644 => 100755 indra/llmessage/llioutil.cpp mode change 100644 => 100755 indra/llmessage/llioutil.h mode change 100644 => 100755 indra/llmessage/llloginflags.h mode change 100644 => 100755 indra/llmessage/llmail.cpp mode change 100644 => 100755 indra/llmessage/llmail.h mode change 100644 => 100755 indra/llmessage/llmessagebuilder.cpp mode change 100644 => 100755 indra/llmessage/llmessagebuilder.h mode change 100644 => 100755 indra/llmessage/llmessageconfig.cpp mode change 100644 => 100755 indra/llmessage/llmessageconfig.h mode change 100644 => 100755 indra/llmessage/llmessagereader.cpp mode change 100644 => 100755 indra/llmessage/llmessagereader.h mode change 100644 => 100755 indra/llmessage/llmessagesenderinterface.h mode change 100644 => 100755 indra/llmessage/llmessagetemplate.cpp mode change 100644 => 100755 indra/llmessage/llmessagetemplate.h mode change 100644 => 100755 indra/llmessage/llmessagetemplateparser.cpp mode change 100644 => 100755 indra/llmessage/llmessagetemplateparser.h mode change 100644 => 100755 indra/llmessage/llmessagethrottle.cpp mode change 100644 => 100755 indra/llmessage/llmessagethrottle.h mode change 100644 => 100755 indra/llmessage/llmime.cpp mode change 100644 => 100755 indra/llmessage/llmime.h mode change 100644 => 100755 indra/llmessage/llmsgvariabletype.h mode change 100644 => 100755 indra/llmessage/llnamevalue.cpp mode change 100644 => 100755 indra/llmessage/llnamevalue.h mode change 100644 => 100755 indra/llmessage/llnullcipher.cpp mode change 100644 => 100755 indra/llmessage/llnullcipher.h mode change 100644 => 100755 indra/llmessage/llpacketack.cpp mode change 100644 => 100755 indra/llmessage/llpacketack.h mode change 100644 => 100755 indra/llmessage/llpacketbuffer.cpp mode change 100644 => 100755 indra/llmessage/llpacketbuffer.h mode change 100644 => 100755 indra/llmessage/llpacketring.cpp mode change 100644 => 100755 indra/llmessage/llpacketring.h mode change 100644 => 100755 indra/llmessage/llpartdata.cpp mode change 100644 => 100755 indra/llmessage/llpartdata.h mode change 100644 => 100755 indra/llmessage/llpumpio.cpp mode change 100644 => 100755 indra/llmessage/llpumpio.h mode change 100644 => 100755 indra/llmessage/llqueryflags.h mode change 100644 => 100755 indra/llmessage/llregionflags.h mode change 100644 => 100755 indra/llmessage/llregionhandle.h mode change 100644 => 100755 indra/llmessage/llregionpresenceverifier.cpp mode change 100644 => 100755 indra/llmessage/llregionpresenceverifier.h mode change 100644 => 100755 indra/llmessage/llsdappservices.cpp mode change 100644 => 100755 indra/llmessage/llsdappservices.h mode change 100644 => 100755 indra/llmessage/llsdhttpserver.cpp mode change 100644 => 100755 indra/llmessage/llsdhttpserver.h mode change 100644 => 100755 indra/llmessage/llsdmessage.cpp mode change 100644 => 100755 indra/llmessage/llsdmessage.h mode change 100644 => 100755 indra/llmessage/llsdmessagebuilder.cpp mode change 100644 => 100755 indra/llmessage/llsdmessagebuilder.h mode change 100644 => 100755 indra/llmessage/llsdmessagereader.cpp mode change 100644 => 100755 indra/llmessage/llsdmessagereader.h mode change 100644 => 100755 indra/llmessage/llsdrpcclient.cpp mode change 100644 => 100755 indra/llmessage/llsdrpcclient.h mode change 100644 => 100755 indra/llmessage/llsdrpcserver.cpp mode change 100644 => 100755 indra/llmessage/llsdrpcserver.h mode change 100644 => 100755 indra/llmessage/llservice.cpp mode change 100644 => 100755 indra/llmessage/llservice.h mode change 100644 => 100755 indra/llmessage/llservicebuilder.cpp mode change 100644 => 100755 indra/llmessage/llservicebuilder.h mode change 100644 => 100755 indra/llmessage/llstoredmessage.cpp mode change 100644 => 100755 indra/llmessage/llstoredmessage.h mode change 100644 => 100755 indra/llmessage/lltaskname.h mode change 100644 => 100755 indra/llmessage/llteleportflags.h mode change 100644 => 100755 indra/llmessage/lltemplatemessagebuilder.cpp mode change 100644 => 100755 indra/llmessage/lltemplatemessagebuilder.h mode change 100644 => 100755 indra/llmessage/lltemplatemessagedispatcher.cpp mode change 100644 => 100755 indra/llmessage/lltemplatemessagedispatcher.h mode change 100644 => 100755 indra/llmessage/lltemplatemessagereader.cpp mode change 100644 => 100755 indra/llmessage/lltemplatemessagereader.h mode change 100644 => 100755 indra/llmessage/llthrottle.cpp mode change 100644 => 100755 indra/llmessage/llthrottle.h mode change 100644 => 100755 indra/llmessage/lltransfermanager.cpp mode change 100644 => 100755 indra/llmessage/lltransfermanager.h mode change 100644 => 100755 indra/llmessage/lltransfersourceasset.cpp mode change 100644 => 100755 indra/llmessage/lltransfersourceasset.h mode change 100644 => 100755 indra/llmessage/lltransfersourcefile.cpp mode change 100644 => 100755 indra/llmessage/lltransfersourcefile.h mode change 100644 => 100755 indra/llmessage/lltransfertargetfile.cpp mode change 100644 => 100755 indra/llmessage/lltransfertargetfile.h mode change 100644 => 100755 indra/llmessage/lltransfertargetvfile.cpp mode change 100644 => 100755 indra/llmessage/lltransfertargetvfile.h mode change 100644 => 100755 indra/llmessage/lltrustedmessageservice.cpp mode change 100644 => 100755 indra/llmessage/lltrustedmessageservice.h mode change 100644 => 100755 indra/llmessage/llurlrequest.cpp mode change 100644 => 100755 indra/llmessage/llurlrequest.h mode change 100644 => 100755 indra/llmessage/lluseroperation.cpp mode change 100644 => 100755 indra/llmessage/lluseroperation.h mode change 100644 => 100755 indra/llmessage/llvehicleparams.h mode change 100644 => 100755 indra/llmessage/llxfer.cpp mode change 100644 => 100755 indra/llmessage/llxfer.h mode change 100644 => 100755 indra/llmessage/llxfer_file.cpp mode change 100644 => 100755 indra/llmessage/llxfer_file.h mode change 100644 => 100755 indra/llmessage/llxfer_mem.cpp mode change 100644 => 100755 indra/llmessage/llxfer_mem.h mode change 100644 => 100755 indra/llmessage/llxfer_vfile.cpp mode change 100644 => 100755 indra/llmessage/llxfer_vfile.h mode change 100644 => 100755 indra/llmessage/llxfermanager.cpp mode change 100644 => 100755 indra/llmessage/llxfermanager.h mode change 100644 => 100755 indra/llmessage/llxorcipher.cpp mode change 100644 => 100755 indra/llmessage/llxorcipher.h mode change 100644 => 100755 indra/llmessage/machine.cpp mode change 100644 => 100755 indra/llmessage/machine.h mode change 100644 => 100755 indra/llmessage/mean_collision_data.h mode change 100644 => 100755 indra/llmessage/message.cpp mode change 100644 => 100755 indra/llmessage/message.h mode change 100644 => 100755 indra/llmessage/message_prehash.cpp mode change 100644 => 100755 indra/llmessage/message_prehash.h mode change 100644 => 100755 indra/llmessage/message_string_table.cpp mode change 100644 => 100755 indra/llmessage/net.cpp mode change 100644 => 100755 indra/llmessage/net.h mode change 100644 => 100755 indra/llmessage/partsyspacket.cpp mode change 100644 => 100755 indra/llmessage/partsyspacket.h mode change 100644 => 100755 indra/llmessage/patch_code.cpp mode change 100644 => 100755 indra/llmessage/patch_code.h mode change 100644 => 100755 indra/llmessage/patch_dct.cpp mode change 100644 => 100755 indra/llmessage/patch_dct.h mode change 100644 => 100755 indra/llmessage/patch_idct.cpp mode change 100644 => 100755 indra/llmessage/sound_ids.cpp mode change 100644 => 100755 indra/llmessage/sound_ids.h mode change 100644 => 100755 indra/llmessage/tests/commtest.h mode change 100644 => 100755 indra/llmessage/tests/llareslistener_test.cpp mode change 100644 => 100755 indra/llmessage/tests/llcurl_stub.cpp mode change 100644 => 100755 indra/llmessage/tests/llhost_test.cpp mode change 100644 => 100755 indra/llmessage/tests/llhttpclientadapter_test.cpp mode change 100644 => 100755 indra/llmessage/tests/llmime_test.cpp mode change 100644 => 100755 indra/llmessage/tests/llmockhttpclient.h mode change 100644 => 100755 indra/llmessage/tests/llnamevalue_test.cpp mode change 100644 => 100755 indra/llmessage/tests/llpartdata_test.cpp mode change 100644 => 100755 indra/llmessage/tests/llregionpresenceverifier_test.cpp mode change 100644 => 100755 indra/llmessage/tests/llsdmessage_test.cpp mode change 100644 => 100755 indra/llmessage/tests/lltemplatemessagedispatcher_test.cpp mode change 100644 => 100755 indra/llmessage/tests/lltesthttpclientadapter.cpp mode change 100644 => 100755 indra/llmessage/tests/lltesthttpclientadapter.h mode change 100644 => 100755 indra/llmessage/tests/lltestmessagesender.cpp mode change 100644 => 100755 indra/llmessage/tests/lltestmessagesender.h mode change 100644 => 100755 indra/llmessage/tests/lltrustedmessageservice_test.cpp mode change 100644 => 100755 indra/llmessage/tests/llxfer_file_test.cpp mode change 100644 => 100755 indra/llmessage/tests/networkio.h mode change 100644 => 100755 indra/llmessage/tests/test_llsdmessage_peer.py mode change 100644 => 100755 indra/llmessage/tests/testrunner.py mode change 100644 => 100755 indra/llplugin/CMakeLists.txt mode change 100644 => 100755 indra/llplugin/llpluginclassmedia.cpp mode change 100644 => 100755 indra/llplugin/llpluginclassmedia.h mode change 100644 => 100755 indra/llplugin/llpluginclassmediaowner.h mode change 100644 => 100755 indra/llplugin/llplugincookiestore.cpp mode change 100644 => 100755 indra/llplugin/llplugincookiestore.h mode change 100644 => 100755 indra/llplugin/llplugininstance.cpp mode change 100644 => 100755 indra/llplugin/llplugininstance.h mode change 100644 => 100755 indra/llplugin/llpluginmessage.cpp mode change 100644 => 100755 indra/llplugin/llpluginmessage.h mode change 100644 => 100755 indra/llplugin/llpluginmessageclasses.h mode change 100644 => 100755 indra/llplugin/llpluginmessagepipe.cpp mode change 100644 => 100755 indra/llplugin/llpluginmessagepipe.h mode change 100644 => 100755 indra/llplugin/llpluginprocesschild.cpp mode change 100644 => 100755 indra/llplugin/llpluginprocesschild.h mode change 100644 => 100755 indra/llplugin/llpluginprocessparent.cpp mode change 100644 => 100755 indra/llplugin/llpluginprocessparent.h mode change 100644 => 100755 indra/llplugin/llpluginsharedmemory.cpp mode change 100644 => 100755 indra/llplugin/llpluginsharedmemory.h mode change 100644 => 100755 indra/llplugin/slplugin/CMakeLists.txt mode change 100644 => 100755 indra/llplugin/slplugin/slplugin-objc.h mode change 100644 => 100755 indra/llplugin/slplugin/slplugin-objc.mm mode change 100644 => 100755 indra/llplugin/slplugin/slplugin.cpp mode change 100644 => 100755 indra/llplugin/slplugin/slplugin_info.plist mode change 100644 => 100755 indra/llplugin/tests/llplugincookiestore_test.cpp mode change 100644 => 100755 indra/llprimitive/CMakeLists.txt mode change 100644 => 100755 indra/llprimitive/legacy_object_types.h mode change 100644 => 100755 indra/llprimitive/llmaterialtable.cpp mode change 100644 => 100755 indra/llprimitive/llmaterialtable.h mode change 100644 => 100755 indra/llprimitive/llmediaentry.cpp mode change 100644 => 100755 indra/llprimitive/llmediaentry.h mode change 100644 => 100755 indra/llprimitive/llmodel.cpp mode change 100644 => 100755 indra/llprimitive/llmodel.h mode change 100644 => 100755 indra/llprimitive/llprimitive.cpp mode change 100644 => 100755 indra/llprimitive/llprimitive.h mode change 100644 => 100755 indra/llprimitive/llprimlinkinfo.h mode change 100644 => 100755 indra/llprimitive/llprimtexturelist.cpp mode change 100644 => 100755 indra/llprimitive/llprimtexturelist.h mode change 100644 => 100755 indra/llprimitive/lltextureanim.cpp mode change 100644 => 100755 indra/llprimitive/lltextureanim.h mode change 100644 => 100755 indra/llprimitive/lltextureentry.cpp mode change 100644 => 100755 indra/llprimitive/lltextureentry.h mode change 100644 => 100755 indra/llprimitive/lltree_common.h mode change 100644 => 100755 indra/llprimitive/lltreeparams.cpp mode change 100644 => 100755 indra/llprimitive/lltreeparams.h mode change 100644 => 100755 indra/llprimitive/llvolumemessage.cpp mode change 100644 => 100755 indra/llprimitive/llvolumemessage.h mode change 100644 => 100755 indra/llprimitive/llvolumexml.cpp mode change 100644 => 100755 indra/llprimitive/llvolumexml.h mode change 100644 => 100755 indra/llprimitive/material_codes.cpp mode change 100644 => 100755 indra/llprimitive/material_codes.h mode change 100644 => 100755 indra/llprimitive/object_flags.h mode change 100644 => 100755 indra/llprimitive/tests/llmediaentry_test.cpp mode change 100644 => 100755 indra/llprimitive/tests/llmessagesystem_stub.cpp mode change 100644 => 100755 indra/llprimitive/tests/llprimitive_test.cpp mode change 100644 => 100755 indra/llrender/CMakeLists.txt mode change 100644 => 100755 indra/llrender/llcubemap.cpp mode change 100644 => 100755 indra/llrender/llcubemap.h mode change 100644 => 100755 indra/llrender/llfontbitmapcache.cpp mode change 100644 => 100755 indra/llrender/llfontbitmapcache.h mode change 100644 => 100755 indra/llrender/llfontfreetype.cpp mode change 100644 => 100755 indra/llrender/llfontfreetype.h mode change 100644 => 100755 indra/llrender/llfontgl.cpp mode change 100644 => 100755 indra/llrender/llfontgl.h mode change 100644 => 100755 indra/llrender/llfontregistry.cpp mode change 100644 => 100755 indra/llrender/llfontregistry.h mode change 100644 => 100755 indra/llrender/llgl.cpp mode change 100644 => 100755 indra/llrender/llgl.h mode change 100644 => 100755 indra/llrender/llgldbg.cpp mode change 100644 => 100755 indra/llrender/llgldbg.h mode change 100644 => 100755 indra/llrender/llglheaders.h mode change 100644 => 100755 indra/llrender/llglslshader.cpp mode change 100644 => 100755 indra/llrender/llglslshader.h mode change 100644 => 100755 indra/llrender/llglstates.h mode change 100644 => 100755 indra/llrender/llgltypes.h mode change 100644 => 100755 indra/llrender/llimagegl.cpp mode change 100644 => 100755 indra/llrender/llimagegl.h mode change 100644 => 100755 indra/llrender/llpostprocess.cpp mode change 100644 => 100755 indra/llrender/llpostprocess.h mode change 100644 => 100755 indra/llrender/llrender.cpp mode change 100644 => 100755 indra/llrender/llrender.h mode change 100644 => 100755 indra/llrender/llrendersphere.cpp mode change 100644 => 100755 indra/llrender/llrendersphere.h mode change 100644 => 100755 indra/llrender/llrendertarget.cpp mode change 100644 => 100755 indra/llrender/llrendertarget.h mode change 100644 => 100755 indra/llrender/llshadermgr.cpp mode change 100644 => 100755 indra/llrender/llshadermgr.h mode change 100644 => 100755 indra/llrender/lltexture.cpp mode change 100644 => 100755 indra/llrender/lltexture.h mode change 100644 => 100755 indra/llrender/llvertexbuffer.cpp mode change 100644 => 100755 indra/llrender/llvertexbuffer.h mode change 100644 => 100755 indra/llui/CMakeLists.txt mode change 100644 => 100755 indra/llui/llaccordionctrl.cpp mode change 100644 => 100755 indra/llui/llaccordionctrl.h mode change 100644 => 100755 indra/llui/llaccordionctrltab.cpp mode change 100644 => 100755 indra/llui/llaccordionctrltab.h mode change 100644 => 100755 indra/llui/llbutton.cpp mode change 100644 => 100755 indra/llui/llbutton.h mode change 100644 => 100755 indra/llui/llcallbackmap.h mode change 100644 => 100755 indra/llui/llcheckboxctrl.cpp mode change 100644 => 100755 indra/llui/llcheckboxctrl.h mode change 100644 => 100755 indra/llui/llclipboard.cpp mode change 100644 => 100755 indra/llui/llclipboard.h mode change 100644 => 100755 indra/llui/llcombobox.cpp mode change 100644 => 100755 indra/llui/llcombobox.h mode change 100644 => 100755 indra/llui/llconsole.cpp mode change 100644 => 100755 indra/llui/llconsole.h mode change 100644 => 100755 indra/llui/llcontainerview.cpp mode change 100644 => 100755 indra/llui/llcontainerview.h mode change 100644 => 100755 indra/llui/llctrlselectioninterface.cpp mode change 100644 => 100755 indra/llui/llctrlselectioninterface.h mode change 100644 => 100755 indra/llui/lldockablefloater.cpp mode change 100644 => 100755 indra/llui/lldockablefloater.h mode change 100644 => 100755 indra/llui/lldockcontrol.cpp mode change 100644 => 100755 indra/llui/lldockcontrol.h mode change 100644 => 100755 indra/llui/lldraghandle.cpp mode change 100644 => 100755 indra/llui/lldraghandle.h mode change 100644 => 100755 indra/llui/lleditmenuhandler.cpp mode change 100644 => 100755 indra/llui/lleditmenuhandler.h mode change 100644 => 100755 indra/llui/llf32uictrl.cpp mode change 100644 => 100755 indra/llui/llf32uictrl.h mode change 100644 => 100755 indra/llui/llfiltereditor.cpp mode change 100644 => 100755 indra/llui/llfiltereditor.h mode change 100644 => 100755 indra/llui/llflatlistview.cpp mode change 100644 => 100755 indra/llui/llflatlistview.h mode change 100644 => 100755 indra/llui/llfloater.cpp mode change 100644 => 100755 indra/llui/llfloater.h mode change 100644 => 100755 indra/llui/llfloaterreg.cpp mode change 100644 => 100755 indra/llui/llfloaterreg.h mode change 100644 => 100755 indra/llui/llfloaterreglistener.cpp mode change 100644 => 100755 indra/llui/llfloaterreglistener.h mode change 100644 => 100755 indra/llui/llflyoutbutton.cpp mode change 100644 => 100755 indra/llui/llflyoutbutton.h mode change 100644 => 100755 indra/llui/llfocusmgr.cpp mode change 100644 => 100755 indra/llui/llfocusmgr.h mode change 100644 => 100755 indra/llui/llfunctorregistry.cpp mode change 100644 => 100755 indra/llui/llfunctorregistry.h mode change 100644 => 100755 indra/llui/llhandle.h mode change 100644 => 100755 indra/llui/llhelp.h mode change 100644 => 100755 indra/llui/lliconctrl.cpp mode change 100644 => 100755 indra/llui/lliconctrl.h mode change 100644 => 100755 indra/llui/llkeywords.cpp mode change 100644 => 100755 indra/llui/llkeywords.h mode change 100644 => 100755 indra/llui/lllayoutstack.cpp mode change 100644 => 100755 indra/llui/lllayoutstack.h mode change 100644 => 100755 indra/llui/lllazyvalue.h mode change 100644 => 100755 indra/llui/lllineeditor.cpp mode change 100644 => 100755 indra/llui/lllineeditor.h mode change 100644 => 100755 indra/llui/llloadingindicator.cpp mode change 100644 => 100755 indra/llui/llloadingindicator.h mode change 100644 => 100755 indra/llui/lllocalcliprect.cpp mode change 100644 => 100755 indra/llui/lllocalcliprect.h mode change 100644 => 100755 indra/llui/llmenubutton.cpp mode change 100644 => 100755 indra/llui/llmenubutton.h mode change 100644 => 100755 indra/llui/llmenugl.cpp mode change 100644 => 100755 indra/llui/llmenugl.h mode change 100644 => 100755 indra/llui/llmodaldialog.cpp mode change 100644 => 100755 indra/llui/llmodaldialog.h mode change 100644 => 100755 indra/llui/llmultifloater.cpp mode change 100644 => 100755 indra/llui/llmultifloater.h mode change 100644 => 100755 indra/llui/llmultislider.cpp mode change 100644 => 100755 indra/llui/llmultislider.h mode change 100644 => 100755 indra/llui/llmultisliderctrl.cpp mode change 100644 => 100755 indra/llui/llmultisliderctrl.h mode change 100644 => 100755 indra/llui/llnotificationptr.h mode change 100644 => 100755 indra/llui/llnotifications.cpp mode change 100644 => 100755 indra/llui/llnotifications.h mode change 100644 => 100755 indra/llui/llnotificationslistener.cpp mode change 100644 => 100755 indra/llui/llnotificationslistener.h mode change 100644 => 100755 indra/llui/llnotificationsutil.cpp mode change 100644 => 100755 indra/llui/llnotificationsutil.h mode change 100644 => 100755 indra/llui/llpanel.cpp mode change 100644 => 100755 indra/llui/llpanel.h mode change 100644 => 100755 indra/llui/llprogressbar.cpp mode change 100644 => 100755 indra/llui/llprogressbar.h mode change 100644 => 100755 indra/llui/llradiogroup.cpp mode change 100644 => 100755 indra/llui/llradiogroup.h mode change 100644 => 100755 indra/llui/llresizebar.cpp mode change 100644 => 100755 indra/llui/llresizebar.h mode change 100644 => 100755 indra/llui/llresizehandle.cpp mode change 100644 => 100755 indra/llui/llresizehandle.h mode change 100644 => 100755 indra/llui/llresmgr.cpp mode change 100644 => 100755 indra/llui/llresmgr.h mode change 100644 => 100755 indra/llui/llrngwriter.cpp mode change 100644 => 100755 indra/llui/llrngwriter.h mode change 100644 => 100755 indra/llui/llscrollbar.cpp mode change 100644 => 100755 indra/llui/llscrollbar.h mode change 100644 => 100755 indra/llui/llscrollcontainer.cpp mode change 100644 => 100755 indra/llui/llscrollcontainer.h mode change 100644 => 100755 indra/llui/llscrollingpanellist.cpp mode change 100644 => 100755 indra/llui/llscrollingpanellist.h mode change 100644 => 100755 indra/llui/llscrolllistcell.cpp mode change 100644 => 100755 indra/llui/llscrolllistcell.h mode change 100644 => 100755 indra/llui/llscrolllistcolumn.cpp mode change 100644 => 100755 indra/llui/llscrolllistcolumn.h mode change 100644 => 100755 indra/llui/llscrolllistctrl.cpp mode change 100644 => 100755 indra/llui/llscrolllistctrl.h mode change 100644 => 100755 indra/llui/llscrolllistitem.cpp mode change 100644 => 100755 indra/llui/llscrolllistitem.h mode change 100644 => 100755 indra/llui/llsdparam.cpp mode change 100644 => 100755 indra/llui/llsdparam.h mode change 100644 => 100755 indra/llui/llsearcheditor.cpp mode change 100644 => 100755 indra/llui/llsearcheditor.h mode change 100644 => 100755 indra/llui/llslider.cpp mode change 100644 => 100755 indra/llui/llslider.h mode change 100644 => 100755 indra/llui/llsliderctrl.cpp mode change 100644 => 100755 indra/llui/llsliderctrl.h mode change 100644 => 100755 indra/llui/llspinctrl.cpp mode change 100644 => 100755 indra/llui/llspinctrl.h mode change 100644 => 100755 indra/llui/llstatbar.cpp mode change 100644 => 100755 indra/llui/llstatbar.h mode change 100644 => 100755 indra/llui/llstatgraph.cpp mode change 100644 => 100755 indra/llui/llstatgraph.h mode change 100644 => 100755 indra/llui/llstatview.cpp mode change 100644 => 100755 indra/llui/llstatview.h mode change 100644 => 100755 indra/llui/llstyle.cpp mode change 100644 => 100755 indra/llui/llstyle.h mode change 100644 => 100755 indra/llui/lltabcontainer.cpp mode change 100644 => 100755 indra/llui/lltabcontainer.h mode change 100644 => 100755 indra/llui/lltextbase.cpp mode change 100644 => 100755 indra/llui/lltextbase.h mode change 100644 => 100755 indra/llui/lltextbox.cpp mode change 100644 => 100755 indra/llui/lltextbox.h mode change 100644 => 100755 indra/llui/lltexteditor.cpp mode change 100644 => 100755 indra/llui/lltexteditor.h mode change 100644 => 100755 indra/llui/lltextparser.cpp mode change 100644 => 100755 indra/llui/lltextparser.h mode change 100644 => 100755 indra/llui/lltextutil.cpp mode change 100644 => 100755 indra/llui/lltextutil.h mode change 100644 => 100755 indra/llui/lltextvalidate.cpp mode change 100644 => 100755 indra/llui/lltextvalidate.h mode change 100644 => 100755 indra/llui/lltoggleablemenu.cpp mode change 100644 => 100755 indra/llui/lltoggleablemenu.h mode change 100644 => 100755 indra/llui/lltooltip.cpp mode change 100644 => 100755 indra/llui/lltooltip.h mode change 100644 => 100755 indra/llui/lltransutil.cpp mode change 100644 => 100755 indra/llui/lltransutil.h mode change 100644 => 100755 indra/llui/llui.cpp mode change 100644 => 100755 indra/llui/llui.h mode change 100644 => 100755 indra/llui/lluicolortable.cpp mode change 100644 => 100755 indra/llui/lluicolortable.h mode change 100644 => 100755 indra/llui/lluiconstants.h mode change 100644 => 100755 indra/llui/lluictrl.cpp mode change 100644 => 100755 indra/llui/lluictrl.h mode change 100644 => 100755 indra/llui/lluictrlfactory.cpp mode change 100644 => 100755 indra/llui/lluictrlfactory.h mode change 100644 => 100755 indra/llui/lluifwd.h mode change 100644 => 100755 indra/llui/lluiimage.cpp mode change 100644 => 100755 indra/llui/lluiimage.h mode change 100644 => 100755 indra/llui/lluistring.cpp mode change 100644 => 100755 indra/llui/lluistring.h mode change 100644 => 100755 indra/llui/llundo.cpp mode change 100644 => 100755 indra/llui/llundo.h mode change 100644 => 100755 indra/llui/llurlaction.cpp mode change 100644 => 100755 indra/llui/llurlaction.h mode change 100644 => 100755 indra/llui/llurlentry.cpp mode change 100644 => 100755 indra/llui/llurlentry.h mode change 100644 => 100755 indra/llui/llurlmatch.cpp mode change 100644 => 100755 indra/llui/llurlmatch.h mode change 100644 => 100755 indra/llui/llurlregistry.cpp mode change 100644 => 100755 indra/llui/llurlregistry.h mode change 100644 => 100755 indra/llui/llview.cpp mode change 100644 => 100755 indra/llui/llview.h mode change 100644 => 100755 indra/llui/llviewborder.cpp mode change 100644 => 100755 indra/llui/llviewborder.h mode change 100644 => 100755 indra/llui/llviewmodel.cpp mode change 100644 => 100755 indra/llui/llviewmodel.h mode change 100644 => 100755 indra/llui/llviewquery.cpp mode change 100644 => 100755 indra/llui/llviewquery.h mode change 100644 => 100755 indra/llui/tests/llurlentry_stub.cpp mode change 100644 => 100755 indra/llui/tests/llurlentry_test.cpp mode change 100644 => 100755 indra/llui/tests/llurlmatch_test.cpp mode change 100644 => 100755 indra/llvfs/CMakeLists.txt mode change 100644 => 100755 indra/llvfs/lldir.cpp mode change 100644 => 100755 indra/llvfs/lldir.h mode change 100644 => 100755 indra/llvfs/lldir_linux.cpp mode change 100644 => 100755 indra/llvfs/lldir_linux.h mode change 100644 => 100755 indra/llvfs/lldir_mac.cpp mode change 100644 => 100755 indra/llvfs/lldir_mac.h mode change 100644 => 100755 indra/llvfs/lldir_solaris.cpp mode change 100644 => 100755 indra/llvfs/lldir_solaris.h mode change 100644 => 100755 indra/llvfs/lldir_win32.cpp mode change 100644 => 100755 indra/llvfs/lldir_win32.h mode change 100644 => 100755 indra/llvfs/lldirguard.h mode change 100644 => 100755 indra/llvfs/lllfsthread.cpp mode change 100644 => 100755 indra/llvfs/lllfsthread.h mode change 100644 => 100755 indra/llvfs/llpidlock.cpp mode change 100644 => 100755 indra/llvfs/llpidlock.h mode change 100644 => 100755 indra/llvfs/llvfile.cpp mode change 100644 => 100755 indra/llvfs/llvfile.h mode change 100644 => 100755 indra/llvfs/llvfs.cpp mode change 100644 => 100755 indra/llvfs/llvfs.h mode change 100644 => 100755 indra/llvfs/llvfsthread.cpp mode change 100644 => 100755 indra/llvfs/llvfsthread.h mode change 100644 => 100755 indra/llvfs/tests/lldir_test.cpp mode change 100644 => 100755 indra/llwindow/CMakeLists.txt mode change 100644 => 100755 indra/llwindow/GL/glh_extensions.h mode change 100644 => 100755 indra/llwindow/GL/glh_genext.h mode change 100644 => 100755 indra/llwindow/lldragdropwin32.cpp mode change 100644 => 100755 indra/llwindow/lldragdropwin32.h mode change 100644 => 100755 indra/llwindow/lldxhardware.cpp mode change 100644 => 100755 indra/llwindow/lldxhardware.h mode change 100644 => 100755 indra/llwindow/llkeyboard.cpp mode change 100644 => 100755 indra/llwindow/llkeyboard.h mode change 100644 => 100755 indra/llwindow/llkeyboardmacosx.cpp mode change 100644 => 100755 indra/llwindow/llkeyboardmacosx.h mode change 100644 => 100755 indra/llwindow/llkeyboardsdl.cpp mode change 100644 => 100755 indra/llwindow/llkeyboardsdl.h mode change 100644 => 100755 indra/llwindow/llkeyboardwin32.cpp mode change 100644 => 100755 indra/llwindow/llkeyboardwin32.h mode change 100644 => 100755 indra/llwindow/llmousehandler.cpp mode change 100644 => 100755 indra/llwindow/llmousehandler.h mode change 100644 => 100755 indra/llwindow/llpreeditor.h mode change 100644 => 100755 indra/llwindow/llwindow.cpp mode change 100644 => 100755 indra/llwindow/llwindow.h mode change 100644 => 100755 indra/llwindow/llwindowcallbacks.cpp mode change 100644 => 100755 indra/llwindow/llwindowcallbacks.h mode change 100644 => 100755 indra/llwindow/llwindowheadless.cpp mode change 100644 => 100755 indra/llwindow/llwindowheadless.h mode change 100644 => 100755 indra/llwindow/llwindowmacosx-objc.h mode change 100644 => 100755 indra/llwindow/llwindowmacosx-objc.mm mode change 100644 => 100755 indra/llwindow/llwindowmacosx.cpp mode change 100644 => 100755 indra/llwindow/llwindowmacosx.h mode change 100644 => 100755 indra/llwindow/llwindowmesaheadless.cpp mode change 100644 => 100755 indra/llwindow/llwindowmesaheadless.h mode change 100644 => 100755 indra/llwindow/llwindowsdl.cpp mode change 100644 => 100755 indra/llwindow/llwindowsdl.h mode change 100644 => 100755 indra/llwindow/llwindowwin32.cpp mode change 100644 => 100755 indra/llwindow/llwindowwin32.h mode change 100644 => 100755 indra/llxml/CMakeLists.txt mode change 100644 => 100755 indra/llxml/llcontrol.cpp mode change 100644 => 100755 indra/llxml/llcontrol.h mode change 100644 => 100755 indra/llxml/llcontrolgroupreader.h mode change 100644 => 100755 indra/llxml/llxmlnode.cpp mode change 100644 => 100755 indra/llxml/llxmlnode.h mode change 100644 => 100755 indra/llxml/llxmlparser.cpp mode change 100644 => 100755 indra/llxml/llxmlparser.h mode change 100644 => 100755 indra/llxml/llxmltree.cpp mode change 100644 => 100755 indra/llxml/llxmltree.h mode change 100644 => 100755 indra/llxml/tests/llcontrol_test.cpp mode change 100644 => 100755 indra/llxuixml/CMakeLists.txt mode change 100644 => 100755 indra/llxuixml/llinitparam.cpp mode change 100644 => 100755 indra/llxuixml/llinitparam.h mode change 100644 => 100755 indra/llxuixml/llregistry.h mode change 100644 => 100755 indra/llxuixml/lltrans.cpp mode change 100644 => 100755 indra/llxuixml/lltrans.h mode change 100644 => 100755 indra/llxuixml/lluicolor.cpp mode change 100644 => 100755 indra/llxuixml/lluicolor.h mode change 100644 => 100755 indra/llxuixml/llxuiparser.cpp mode change 100644 => 100755 indra/llxuixml/llxuiparser.h mode change 100644 => 100755 indra/lscript/CMakeLists.txt mode change 100644 => 100755 indra/lscript/llscriptresource.h mode change 100644 => 100755 indra/lscript/llscriptresourceconsumer.h mode change 100644 => 100755 indra/lscript/llscriptresourcepool.h mode change 100644 => 100755 indra/lscript/lscript_alloc.h mode change 100644 => 100755 indra/lscript/lscript_byteconvert.h mode change 100644 => 100755 indra/lscript/lscript_byteformat.h mode change 100644 => 100755 indra/lscript/lscript_compile/CMakeLists.txt mode change 100644 => 100755 indra/lscript/lscript_compile/indra.l mode change 100644 => 100755 indra/lscript/lscript_compile/indra.y mode change 100644 => 100755 indra/lscript/lscript_compile/lscript_alloc.cpp mode change 100644 => 100755 indra/lscript/lscript_compile/lscript_bytecode.cpp mode change 100644 => 100755 indra/lscript/lscript_compile/lscript_bytecode.h mode change 100644 => 100755 indra/lscript/lscript_compile/lscript_error.cpp mode change 100644 => 100755 indra/lscript/lscript_compile/lscript_error.h mode change 100644 => 100755 indra/lscript/lscript_compile/lscript_heap.cpp mode change 100644 => 100755 indra/lscript/lscript_compile/lscript_heap.h mode change 100644 => 100755 indra/lscript/lscript_compile/lscript_resource.cpp mode change 100644 => 100755 indra/lscript/lscript_compile/lscript_resource.h mode change 100644 => 100755 indra/lscript/lscript_compile/lscript_scope.cpp mode change 100644 => 100755 indra/lscript/lscript_compile/lscript_scope.h mode change 100644 => 100755 indra/lscript/lscript_compile/lscript_tree.cpp mode change 100644 => 100755 indra/lscript/lscript_compile/lscript_tree.h mode change 100644 => 100755 indra/lscript/lscript_compile/lscript_typecheck.cpp mode change 100644 => 100755 indra/lscript/lscript_compile/lscript_typecheck.h mode change 100644 => 100755 indra/lscript/lscript_compile/windows/unistd.h mode change 100644 => 100755 indra/lscript/lscript_execute.h mode change 100644 => 100755 indra/lscript/lscript_execute/CMakeLists.txt mode change 100644 => 100755 indra/lscript/lscript_execute/llscriptresource.cpp mode change 100644 => 100755 indra/lscript/lscript_execute/llscriptresourceconsumer.cpp mode change 100644 => 100755 indra/lscript/lscript_execute/llscriptresourcepool.cpp mode change 100644 => 100755 indra/lscript/lscript_execute/lscript_execute.cpp mode change 100644 => 100755 indra/lscript/lscript_execute/lscript_heapruntime.cpp mode change 100644 => 100755 indra/lscript/lscript_execute/lscript_heapruntime.h mode change 100644 => 100755 indra/lscript/lscript_execute/lscript_readlso.cpp mode change 100644 => 100755 indra/lscript/lscript_execute/lscript_readlso.h mode change 100644 => 100755 indra/lscript/lscript_export.h mode change 100644 => 100755 indra/lscript/lscript_http.h mode change 100644 => 100755 indra/lscript/lscript_library.h mode change 100644 => 100755 indra/lscript/lscript_library/CMakeLists.txt mode change 100644 => 100755 indra/lscript/lscript_library/lscript_alloc.cpp mode change 100644 => 100755 indra/lscript/lscript_library/lscript_export.cpp mode change 100644 => 100755 indra/lscript/lscript_library/lscript_library.cpp mode change 100644 => 100755 indra/lscript/lscript_rt_interface.h mode change 100644 => 100755 indra/mac_crash_logger/CMakeLists.txt mode change 100644 => 100755 indra/mac_crash_logger/CrashReporter.nib/classes.nib mode change 100644 => 100755 indra/mac_crash_logger/CrashReporter.nib/info.nib mode change 100644 => 100755 indra/mac_crash_logger/CrashReporter.nib/objects.xib mode change 100644 => 100755 indra/mac_crash_logger/Info.plist mode change 100644 => 100755 indra/mac_crash_logger/llcrashloggermac.cpp mode change 100644 => 100755 indra/mac_crash_logger/llcrashloggermac.h mode change 100644 => 100755 indra/mac_crash_logger/mac_crash_logger.cpp mode change 100644 => 100755 indra/mac_updater/AutoUpdater.nib/classes.nib mode change 100644 => 100755 indra/mac_updater/AutoUpdater.nib/info.nib mode change 100644 => 100755 indra/mac_updater/AutoUpdater.nib/objects.xib mode change 100644 => 100755 indra/mac_updater/CMakeLists.txt mode change 100644 => 100755 indra/mac_updater/Info.plist mode change 100644 => 100755 indra/mac_updater/mac_updater.cpp mode change 100644 => 100755 indra/media_plugins/CMakeLists.txt mode change 100644 => 100755 indra/media_plugins/base/CMakeLists.txt mode change 100644 => 100755 indra/media_plugins/base/media_plugin_base.cpp mode change 100644 => 100755 indra/media_plugins/base/media_plugin_base.exp mode change 100644 => 100755 indra/media_plugins/base/media_plugin_base.h mode change 100644 => 100755 indra/media_plugins/example/CMakeLists.txt mode change 100644 => 100755 indra/media_plugins/example/media_plugin_example.cpp mode change 100644 => 100755 indra/media_plugins/gstreamer010/CMakeLists.txt mode change 100644 => 100755 indra/media_plugins/gstreamer010/llmediaimplgstreamer.h mode change 100644 => 100755 indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp mode change 100644 => 100755 indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.h mode change 100644 => 100755 indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_raw.inc mode change 100644 => 100755 indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_rawv.inc mode change 100644 => 100755 indra/media_plugins/gstreamer010/llmediaimplgstreamertriviallogging.h mode change 100644 => 100755 indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp mode change 100644 => 100755 indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.h mode change 100644 => 100755 indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp mode change 100644 => 100755 indra/media_plugins/quicktime/CMakeLists.txt mode change 100644 => 100755 indra/media_plugins/quicktime/media_plugin_quicktime.cpp mode change 100644 => 100755 indra/media_plugins/webkit/CMakeLists.txt mode change 100644 => 100755 indra/media_plugins/webkit/dummy_volume_catcher.cpp mode change 100644 => 100755 indra/media_plugins/webkit/linux_volume_catcher.cpp mode change 100644 => 100755 indra/media_plugins/webkit/linux_volume_catcher_pa_syms.inc mode change 100644 => 100755 indra/media_plugins/webkit/linux_volume_catcher_paglib_syms.inc mode change 100644 => 100755 indra/media_plugins/webkit/mac_volume_catcher.cpp mode change 100644 => 100755 indra/media_plugins/webkit/media_plugin_webkit.cpp mode change 100644 => 100755 indra/media_plugins/webkit/volume_catcher.h mode change 100644 => 100755 indra/media_plugins/webkit/windows_volume_catcher.cpp mode change 100644 => 100755 indra/media_plugins/winmmshim/CMakeLists.txt mode change 100644 => 100755 indra/media_plugins/winmmshim/forwarding_api.cpp mode change 100644 => 100755 indra/media_plugins/winmmshim/forwarding_api.h mode change 100644 => 100755 indra/media_plugins/winmmshim/winmm.def mode change 100644 => 100755 indra/media_plugins/winmmshim/winmm_shim.cpp mode change 100644 => 100755 indra/newview/CMakeLists.txt mode change 100644 => 100755 indra/newview/English.lproj/InfoPlist.strings mode change 100644 => 100755 indra/newview/English.lproj/language.txt mode change 100644 => 100755 indra/newview/German.lproj/language.txt mode change 100644 => 100755 indra/newview/Info-SecondLife.plist mode change 100644 => 100755 indra/newview/Info-SecondLifeVorbis.plist mode change 100644 => 100755 indra/newview/Japanese.lproj/language.txt mode change 100644 => 100755 indra/newview/Korean.lproj/language.txt mode change 100644 => 100755 indra/newview/SecondLife.nib/classes.nib mode change 100644 => 100755 indra/newview/SecondLife.nib/info.nib mode change 100644 => 100755 indra/newview/SecondLife.nib/objects.xib mode change 100644 => 100755 indra/newview/VertexCache.h mode change 100644 => 100755 indra/newview/ViewerInstall.cmake mode change 100644 => 100755 indra/newview/VorbisFramework.h mode change 100644 => 100755 indra/newview/app_settings/CA.pem mode change 100644 => 100755 indra/newview/app_settings/anim.ini mode change 100644 => 100755 indra/newview/app_settings/cmd_line.xml mode change 100644 => 100755 indra/newview/app_settings/foldertypes.xml mode change 100644 => 100755 indra/newview/app_settings/grass.xml mode change 100644 => 100755 indra/newview/app_settings/high_graphics.xml mode change 100644 => 100755 indra/newview/app_settings/ignorable_dialogs.xml mode change 100644 => 100755 indra/newview/app_settings/keys.ini mode change 100644 => 100755 indra/newview/app_settings/keywords.ini mode change 100644 => 100755 indra/newview/app_settings/logcontrol.xml mode change 100644 => 100755 indra/newview/app_settings/low_graphics.xml mode change 100644 => 100755 indra/newview/app_settings/mid_graphics.xml mode change 100644 => 100755 indra/newview/app_settings/settings.xml mode change 100644 => 100755 indra/newview/app_settings/settings_crash_behavior.xml mode change 100644 => 100755 indra/newview/app_settings/settings_files.xml mode change 100644 => 100755 indra/newview/app_settings/settings_per_account.xml mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/avatarAlphaF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/giF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/giV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/treeF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/treeV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/waterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/deferred/waterV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/effects/glowF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/effects/glowV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/environment/terrainF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/environment/terrainV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/environment/waterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/environment/waterV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/interface/highlightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/interface/highlightV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/lighting/lightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/lighting/lightV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/objects/shinyF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/objects/shinyV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/objects/simpleF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/objects/simpleV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class1/windlight/transportF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/deferred/avatarAlphaF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/deferred/blurLightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/deferred/blurLightV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/deferred/postDeferredF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/deferred/postDeferredV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/effects/blurF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/effects/blurV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/effects/extractF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/effects/nightVisionF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/effects/simpleF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/environment/terrainF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/environment/terrainV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/environment/terrainWaterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/environment/underWaterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/environment/waterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/lighting/lightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/lighting/lightFullbrightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/lighting/lightShinyF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/lighting/lightSpecularV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/lighting/lightV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/lighting/lightWaterF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/objects/shinyV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/windlight/skyF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/windlight/skyV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class2/windlight/transportF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class3/deferred/giF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class3/deferred/giV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class3/deferred/treeF.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl mode change 100644 => 100755 indra/newview/app_settings/shaders/shader_heirarchy.txt mode change 100644 => 100755 indra/newview/app_settings/static_data.db2 mode change 100644 => 100755 indra/newview/app_settings/static_index.db2 mode change 100644 => 100755 indra/newview/app_settings/std_bump.ini mode change 100644 => 100755 indra/newview/app_settings/trees.xml mode change 100644 => 100755 indra/newview/app_settings/ultra_graphics.xml mode change 100644 => 100755 indra/newview/app_settings/viewerart.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/clouds2.tga mode change 100644 => 100755 indra/newview/app_settings/windlight/days/Default.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/postprocesseffects.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/A%2D12AM.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/A%2D12PM.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/A%2D3AM.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/A%2D3PM.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/A%2D6AM.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/A%2D6PM.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/A%2D9AM.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/A%2D9PM.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Barcelona.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Blizzard.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Blue%20Midday.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Coastal%20Afternoon.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Coastal%20Sunset.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Default.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Desert%20Sunset.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Fine%20Day.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Fluffy%20Big%20Clouds.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Foggy.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Funky%20Funky%20Funky.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Funky%20Funky.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Gelatto.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Ghost.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Incongruent%20Truths.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Midday%201.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Midday%202.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Midday%203.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Midday%204.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Night.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Pirate.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Purple.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Sailor%27s%20Delight.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/skies/Sheer%20Surreality.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/water/Default.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/water/Glassy.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/water/Murky.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/water/Pond.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/water/SNAKE%21%21%21.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/water/Second%20Plague.xml mode change 100644 => 100755 indra/newview/app_settings/windlight/water/Valdez.xml mode change 100644 => 100755 indra/newview/build_win32_appConfig.py mode change 100644 => 100755 indra/newview/character/attentions.xml mode change 100644 => 100755 indra/newview/character/attentionsN.xml mode change 100644 => 100755 indra/newview/character/avatar_eye.llm mode change 100644 => 100755 indra/newview/character/avatar_eye_1.llm mode change 100644 => 100755 indra/newview/character/avatar_eyelashes.llm mode change 100644 => 100755 indra/newview/character/avatar_hair.llm mode change 100644 => 100755 indra/newview/character/avatar_hair_1.llm mode change 100644 => 100755 indra/newview/character/avatar_hair_2.llm mode change 100644 => 100755 indra/newview/character/avatar_hair_3.llm mode change 100644 => 100755 indra/newview/character/avatar_hair_4.llm mode change 100644 => 100755 indra/newview/character/avatar_hair_5.llm mode change 100644 => 100755 indra/newview/character/avatar_head.llm mode change 100644 => 100755 indra/newview/character/avatar_head_1.llm mode change 100644 => 100755 indra/newview/character/avatar_head_2.llm mode change 100644 => 100755 indra/newview/character/avatar_head_3.llm mode change 100644 => 100755 indra/newview/character/avatar_head_4.llm mode change 100644 => 100755 indra/newview/character/avatar_lad.xml mode change 100644 => 100755 indra/newview/character/avatar_lower_body.llm mode change 100644 => 100755 indra/newview/character/avatar_lower_body_1.llm mode change 100644 => 100755 indra/newview/character/avatar_lower_body_2.llm mode change 100644 => 100755 indra/newview/character/avatar_lower_body_3.llm mode change 100644 => 100755 indra/newview/character/avatar_lower_body_4.llm mode change 100644 => 100755 indra/newview/character/avatar_skeleton.xml mode change 100644 => 100755 indra/newview/character/avatar_skirt.llm mode change 100644 => 100755 indra/newview/character/avatar_skirt_1.llm mode change 100644 => 100755 indra/newview/character/avatar_skirt_2.llm mode change 100644 => 100755 indra/newview/character/avatar_skirt_3.llm mode change 100644 => 100755 indra/newview/character/avatar_skirt_4.llm mode change 100644 => 100755 indra/newview/character/avatar_upper_body.llm mode change 100644 => 100755 indra/newview/character/avatar_upper_body_1.llm mode change 100644 => 100755 indra/newview/character/avatar_upper_body_2.llm mode change 100644 => 100755 indra/newview/character/avatar_upper_body_3.llm mode change 100644 => 100755 indra/newview/character/avatar_upper_body_4.llm mode change 100644 => 100755 indra/newview/character/blush_alpha.tga mode change 100644 => 100755 indra/newview/character/body_skingrain.tga mode change 100644 => 100755 indra/newview/character/bodyfreckles_alpha.tga mode change 100644 => 100755 indra/newview/character/bump_face_wrinkles.tga mode change 100644 => 100755 indra/newview/character/bump_head_base.tga mode change 100644 => 100755 indra/newview/character/bump_lowerbody_base.tga mode change 100644 => 100755 indra/newview/character/bump_pants_wrinkles.tga mode change 100644 => 100755 indra/newview/character/bump_shirt_wrinkles.tga mode change 100644 => 100755 indra/newview/character/bump_upperbody_base.tga mode change 100644 => 100755 indra/newview/character/checkerboard.tga mode change 100644 => 100755 indra/newview/character/eyebrows_alpha.tga mode change 100644 => 100755 indra/newview/character/eyeliner_alpha.tga mode change 100644 => 100755 indra/newview/character/eyeshadow_inner_alpha.tga mode change 100644 => 100755 indra/newview/character/eyeshadow_outer_alpha.tga mode change 100644 => 100755 indra/newview/character/eyewhite.tga mode change 100644 => 100755 indra/newview/character/facehair_chincurtains_alpha.tga mode change 100644 => 100755 indra/newview/character/facehair_moustache_alpha.tga mode change 100644 => 100755 indra/newview/character/facehair_sideburns_alpha.tga mode change 100644 => 100755 indra/newview/character/facehair_soulpatch_alpha.tga mode change 100644 => 100755 indra/newview/character/freckles_alpha.tga mode change 100644 => 100755 indra/newview/character/genepool.xml mode change 100644 => 100755 indra/newview/character/glove_length_alpha.tga mode change 100644 => 100755 indra/newview/character/gloves_fingers_alpha.tga mode change 100644 => 100755 indra/newview/character/head_alpha.tga mode change 100644 => 100755 indra/newview/character/head_color.tga mode change 100644 => 100755 indra/newview/character/head_hair.tga mode change 100644 => 100755 indra/newview/character/head_highlights_alpha.tga mode change 100644 => 100755 indra/newview/character/head_shading_alpha.tga mode change 100644 => 100755 indra/newview/character/head_skingrain.tga mode change 100644 => 100755 indra/newview/character/jacket_length_lower_alpha.tga mode change 100644 => 100755 indra/newview/character/jacket_length_upper_alpha.tga mode change 100644 => 100755 indra/newview/character/jacket_open_lower_alpha.tga mode change 100644 => 100755 indra/newview/character/jacket_open_upper_alpha.tga mode change 100644 => 100755 indra/newview/character/lipgloss_alpha.tga mode change 100644 => 100755 indra/newview/character/lips_mask.tga mode change 100644 => 100755 indra/newview/character/lipstick_alpha.tga mode change 100644 => 100755 indra/newview/character/lowerbody_color.tga mode change 100644 => 100755 indra/newview/character/lowerbody_highlights_alpha.tga mode change 100644 => 100755 indra/newview/character/lowerbody_shading_alpha.tga mode change 100644 => 100755 indra/newview/character/nailpolish_alpha.tga mode change 100644 => 100755 indra/newview/character/pants_length_alpha.tga mode change 100644 => 100755 indra/newview/character/pants_waist_alpha.tga mode change 100644 => 100755 indra/newview/character/rosyface_alpha.tga mode change 100644 => 100755 indra/newview/character/rouge_alpha.tga mode change 100644 => 100755 indra/newview/character/shirt_bottom_alpha.tga mode change 100644 => 100755 indra/newview/character/shirt_collar_alpha.tga mode change 100644 => 100755 indra/newview/character/shirt_collar_back_alpha.tga mode change 100644 => 100755 indra/newview/character/shirt_sleeve_alpha.tga mode change 100644 => 100755 indra/newview/character/shoe_height_alpha.tga mode change 100644 => 100755 indra/newview/character/skirt_length_alpha.tga mode change 100644 => 100755 indra/newview/character/skirt_slit_back_alpha.tga mode change 100644 => 100755 indra/newview/character/skirt_slit_front_alpha.tga mode change 100644 => 100755 indra/newview/character/skirt_slit_left_alpha.tga mode change 100644 => 100755 indra/newview/character/skirt_slit_right_alpha.tga mode change 100644 => 100755 indra/newview/character/underpants_trial_female.tga mode change 100644 => 100755 indra/newview/character/underpants_trial_male.tga mode change 100644 => 100755 indra/newview/character/undershirt_trial_female.tga mode change 100644 => 100755 indra/newview/character/upperbody_color.tga mode change 100644 => 100755 indra/newview/character/upperbody_highlights_alpha.tga mode change 100644 => 100755 indra/newview/character/upperbody_shading_alpha.tga mode change 100644 => 100755 indra/newview/character/upperbodyfreckles_alpha.tga mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_ARROW.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_ARROWDRAG.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_ARROWLOCKED.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_GRABLOCKED.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_NO.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_NOLOCKED.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_SIZENESW.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_SIZENS.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_SIZENWSE.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_SIZEWE.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_TOOLBUY.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_TOOLCAMERA.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_TOOLCREATE.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_TOOLFOCUS.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_TOOLGRAB.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_TOOLLAND.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_TOOLMEDIAOPEN.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_TOOLOPEN.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_TOOLPAN.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_TOOLPAUSE.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_TOOLPICKOBJECT3.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_TOOLPLAY.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_TOOLROTATE.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_TOOLSCALE.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_TOOLSIT.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_TOOLTRANSLATE.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_TOOLZOOMIN.tif mode change 100644 => 100755 indra/newview/cursors_mac/UI_CURSOR_WORKING.tif mode change 100644 => 100755 indra/newview/da.lproj/language.txt mode change 100644 => 100755 indra/newview/es.lproj/language.txt mode change 100644 => 100755 indra/newview/featuretable.txt mode change 100644 => 100755 indra/newview/featuretable_linux.txt mode change 100644 => 100755 indra/newview/featuretable_mac.txt mode change 100644 => 100755 indra/newview/featuretable_solaris.txt mode change 100644 => 100755 indra/newview/fmod_hidden_symbols.exp mode change 100644 => 100755 indra/newview/fmodwrapper.cpp mode change 100644 => 100755 indra/newview/fonts/DejaVu-license.txt mode change 100644 => 100755 indra/newview/fonts/DejaVuSans-Bold.ttf mode change 100644 => 100755 indra/newview/fonts/DejaVuSans-BoldOblique.ttf mode change 100644 => 100755 indra/newview/fonts/DejaVuSans-Oblique.ttf mode change 100644 => 100755 indra/newview/fonts/DejaVuSans.ttf mode change 100644 => 100755 indra/newview/fonts/DejaVuSansMono.ttf mode change 100644 => 100755 indra/newview/fr.lproj/language.txt mode change 100644 => 100755 indra/newview/generate_breakpad_symbols.py mode change 100644 => 100755 indra/newview/gpu_table.txt mode change 100644 => 100755 indra/newview/hu.lproj/language.txt mode change 100644 => 100755 indra/newview/installers/darwin/dmg-cleanup.applescript mode change 100644 => 100755 indra/newview/installers/darwin/firstlook-dmg/Applications-alias.r mode change 100644 => 100755 indra/newview/installers/darwin/firstlook-dmg/_DS_Store mode change 100644 => 100755 indra/newview/installers/darwin/firstlook-dmg/_VolumeIcon.icns mode change 100644 => 100755 indra/newview/installers/darwin/firstlook-dmg/background.jpg mode change 100644 => 100755 indra/newview/installers/darwin/fix_application_icon_position.sh mode change 100644 => 100755 indra/newview/installers/darwin/publicnightly-dmg/Applications-alias.r mode change 100644 => 100755 indra/newview/installers/darwin/publicnightly-dmg/_DS_Store mode change 100644 => 100755 indra/newview/installers/darwin/publicnightly-dmg/_VolumeIcon.icns mode change 100644 => 100755 indra/newview/installers/darwin/publicnightly-dmg/background.jpg mode change 100644 => 100755 indra/newview/installers/darwin/release-dmg/Applications-alias.r mode change 100644 => 100755 indra/newview/installers/darwin/release-dmg/_DS_Store mode change 100644 => 100755 indra/newview/installers/darwin/release-dmg/_VolumeIcon.icns mode change 100644 => 100755 indra/newview/installers/darwin/release-dmg/background.jpg mode change 100644 => 100755 indra/newview/installers/darwin/releasecandidate-dmg/Applications-alias.r mode change 100644 => 100755 indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store mode change 100644 => 100755 indra/newview/installers/darwin/releasecandidate-dmg/_VolumeIcon.icns mode change 100644 => 100755 indra/newview/installers/darwin/releasecandidate-dmg/background.jpg mode change 100644 => 100755 indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt mode change 100644 => 100755 indra/newview/installers/windows/install_icon.BMP mode change 100644 => 100755 indra/newview/installers/windows/install_icon.ico mode change 100644 => 100755 indra/newview/installers/windows/installer_template.nsi mode change 100644 => 100755 indra/newview/installers/windows/lang_da.nsi mode change 100644 => 100755 indra/newview/installers/windows/lang_de.nsi mode change 100644 => 100755 indra/newview/installers/windows/lang_en-us.nsi mode change 100644 => 100755 indra/newview/installers/windows/lang_es.nsi mode change 100644 => 100755 indra/newview/installers/windows/lang_fr.nsi mode change 100644 => 100755 indra/newview/installers/windows/lang_it.nsi mode change 100644 => 100755 indra/newview/installers/windows/lang_ja.nsi mode change 100644 => 100755 indra/newview/installers/windows/lang_ko.nsi mode change 100644 => 100755 indra/newview/installers/windows/lang_nl.nsi mode change 100644 => 100755 indra/newview/installers/windows/lang_pl.nsi mode change 100644 => 100755 indra/newview/installers/windows/lang_pt-br.nsi mode change 100644 => 100755 indra/newview/installers/windows/lang_zh.nsi mode change 100644 => 100755 indra/newview/installers/windows/language_menu.nsi mode change 100644 => 100755 indra/newview/installers/windows/uninstall_icon.BMP mode change 100644 => 100755 indra/newview/installers/windows/uninstall_icon.ico mode change 100644 => 100755 indra/newview/it.lproj/language.txt mode change 100644 => 100755 indra/newview/licenses-linux.txt mode change 100644 => 100755 indra/newview/licenses-mac.txt mode change 100644 => 100755 indra/newview/licenses-solaris.txt mode change 100644 => 100755 indra/newview/licenses-win32.txt mode change 100644 => 100755 indra/newview/linux_tools/client-readme-joystick.txt mode change 100644 => 100755 indra/newview/linux_tools/client-readme-voice.txt mode change 100644 => 100755 indra/newview/linux_tools/client-readme.txt mode change 100644 => 100755 indra/newview/llagent.cpp mode change 100644 => 100755 indra/newview/llagent.h mode change 100644 => 100755 indra/newview/llagentaccess.cpp mode change 100644 => 100755 indra/newview/llagentaccess.h mode change 100644 => 100755 indra/newview/llagentcamera.cpp mode change 100644 => 100755 indra/newview/llagentcamera.h mode change 100644 => 100755 indra/newview/llagentdata.cpp mode change 100644 => 100755 indra/newview/llagentdata.h mode change 100644 => 100755 indra/newview/llagentlanguage.cpp mode change 100644 => 100755 indra/newview/llagentlanguage.h mode change 100644 => 100755 indra/newview/llagentlistener.cpp mode change 100644 => 100755 indra/newview/llagentlistener.h mode change 100644 => 100755 indra/newview/llagentpicksinfo.cpp mode change 100644 => 100755 indra/newview/llagentpicksinfo.h mode change 100644 => 100755 indra/newview/llagentpilot.cpp mode change 100644 => 100755 indra/newview/llagentpilot.h mode change 100644 => 100755 indra/newview/llagentui.cpp mode change 100644 => 100755 indra/newview/llagentui.h mode change 100644 => 100755 indra/newview/llagentwearables.cpp mode change 100644 => 100755 indra/newview/llagentwearables.h mode change 100644 => 100755 indra/newview/llagentwearablesfetch.cpp mode change 100644 => 100755 indra/newview/llagentwearablesfetch.h mode change 100644 => 100755 indra/newview/llanimstatelabels.cpp mode change 100644 => 100755 indra/newview/llanimstatelabels.h mode change 100644 => 100755 indra/newview/llappearance.h mode change 100644 => 100755 indra/newview/llappearancemgr.cpp mode change 100644 => 100755 indra/newview/llappearancemgr.h mode change 100644 => 100755 indra/newview/llappviewer.cpp mode change 100644 => 100755 indra/newview/llappviewer.h mode change 100644 => 100755 indra/newview/llappviewerlinux.cpp mode change 100644 => 100755 indra/newview/llappviewerlinux.h mode change 100644 => 100755 indra/newview/llappviewerlinux_api.h mode change 100644 => 100755 indra/newview/llappviewerlinux_api.xml mode change 100644 => 100755 indra/newview/llappviewerlinux_api_dbus.cpp mode change 100644 => 100755 indra/newview/llappviewerlinux_api_dbus.h mode change 100644 => 100755 indra/newview/llappviewerlinux_api_dbus_syms_raw.inc mode change 100644 => 100755 indra/newview/llappviewerlistener.cpp mode change 100644 => 100755 indra/newview/llappviewerlistener.h mode change 100644 => 100755 indra/newview/llappviewermacosx.cpp mode change 100644 => 100755 indra/newview/llappviewermacosx.h mode change 100644 => 100755 indra/newview/llappviewerwin32.cpp mode change 100644 => 100755 indra/newview/llappviewerwin32.h mode change 100644 => 100755 indra/newview/llassetuploadqueue.cpp mode change 100644 => 100755 indra/newview/llassetuploadqueue.h mode change 100644 => 100755 indra/newview/llassetuploadresponders.cpp mode change 100644 => 100755 indra/newview/llassetuploadresponders.h mode change 100644 => 100755 indra/newview/llaudiosourcevo.cpp mode change 100644 => 100755 indra/newview/llaudiosourcevo.h mode change 100644 => 100755 indra/newview/llavataractions.cpp mode change 100644 => 100755 indra/newview/llavataractions.h mode change 100644 => 100755 indra/newview/llavatariconctrl.cpp mode change 100644 => 100755 indra/newview/llavatariconctrl.h mode change 100644 => 100755 indra/newview/llavatarlist.cpp mode change 100644 => 100755 indra/newview/llavatarlist.h mode change 100644 => 100755 indra/newview/llavatarlistitem.cpp mode change 100644 => 100755 indra/newview/llavatarlistitem.h mode change 100644 => 100755 indra/newview/llavatarpropertiesprocessor.cpp mode change 100644 => 100755 indra/newview/llavatarpropertiesprocessor.h mode change 100644 => 100755 indra/newview/llbottomtray.cpp mode change 100644 => 100755 indra/newview/llbottomtray.h mode change 100644 => 100755 indra/newview/llbox.cpp mode change 100644 => 100755 indra/newview/llbox.h mode change 100644 => 100755 indra/newview/llbreadcrumbview.cpp mode change 100644 => 100755 indra/newview/llbreadcrumbview.h mode change 100644 => 100755 indra/newview/llbuycurrencyhtml.cpp mode change 100644 => 100755 indra/newview/llbuycurrencyhtml.h mode change 100644 => 100755 indra/newview/llcallbacklist.cpp mode change 100644 => 100755 indra/newview/llcallbacklist.h mode change 100644 => 100755 indra/newview/llcallfloater.cpp mode change 100644 => 100755 indra/newview/llcallfloater.h mode change 100644 => 100755 indra/newview/llcallingcard.cpp mode change 100644 => 100755 indra/newview/llcallingcard.h mode change 100644 => 100755 indra/newview/llcapabilitylistener.cpp mode change 100644 => 100755 indra/newview/llcapabilitylistener.h mode change 100644 => 100755 indra/newview/llcapabilityprovider.h mode change 100644 => 100755 indra/newview/llcaphttpsender.cpp mode change 100644 => 100755 indra/newview/llcaphttpsender.h mode change 100644 => 100755 indra/newview/llchannelmanager.cpp mode change 100644 => 100755 indra/newview/llchannelmanager.h mode change 100644 => 100755 indra/newview/llchatbar.cpp mode change 100644 => 100755 indra/newview/llchatbar.h mode change 100644 => 100755 indra/newview/llchathistory.cpp mode change 100644 => 100755 indra/newview/llchathistory.h mode change 100644 => 100755 indra/newview/llchatitemscontainerctrl.cpp mode change 100644 => 100755 indra/newview/llchatitemscontainerctrl.h mode change 100644 => 100755 indra/newview/llchatmsgbox.cpp mode change 100644 => 100755 indra/newview/llchatmsgbox.h mode change 100644 => 100755 indra/newview/llchiclet.cpp mode change 100644 => 100755 indra/newview/llchiclet.h mode change 100644 => 100755 indra/newview/llclassifiedinfo.cpp mode change 100644 => 100755 indra/newview/llclassifiedinfo.h mode change 100644 => 100755 indra/newview/llclassifiedstatsresponder.cpp mode change 100644 => 100755 indra/newview/llclassifiedstatsresponder.h mode change 100644 => 100755 indra/newview/llcloud.cpp mode change 100644 => 100755 indra/newview/llcloud.h mode change 100644 => 100755 indra/newview/llcofwearables.cpp mode change 100644 => 100755 indra/newview/llcofwearables.h mode change 100644 => 100755 indra/newview/llcolorswatch.cpp mode change 100644 => 100755 indra/newview/llcolorswatch.h mode change 100644 => 100755 indra/newview/llcommanddispatcherlistener.cpp mode change 100644 => 100755 indra/newview/llcommanddispatcherlistener.h mode change 100644 => 100755 indra/newview/llcommandhandler.cpp mode change 100644 => 100755 indra/newview/llcommandhandler.h mode change 100644 => 100755 indra/newview/llcommandlineparser.cpp mode change 100644 => 100755 indra/newview/llcommandlineparser.h mode change 100644 => 100755 indra/newview/llcompilequeue.cpp mode change 100644 => 100755 indra/newview/llcompilequeue.h mode change 100644 => 100755 indra/newview/llconfirmationmanager.cpp mode change 100644 => 100755 indra/newview/llconfirmationmanager.h mode change 100644 => 100755 indra/newview/llcurrencyuimanager.cpp mode change 100644 => 100755 indra/newview/llcurrencyuimanager.h mode change 100644 => 100755 indra/newview/llcylinder.cpp mode change 100644 => 100755 indra/newview/llcylinder.h mode change 100644 => 100755 indra/newview/lldateutil.cpp mode change 100644 => 100755 indra/newview/lldateutil.h mode change 100644 => 100755 indra/newview/lldebugmessagebox.cpp mode change 100644 => 100755 indra/newview/lldebugmessagebox.h mode change 100644 => 100755 indra/newview/lldebugview.cpp mode change 100644 => 100755 indra/newview/lldebugview.h mode change 100644 => 100755 indra/newview/lldelayedgestureerror.cpp mode change 100644 => 100755 indra/newview/lldelayedgestureerror.h mode change 100644 => 100755 indra/newview/lldirpicker.cpp mode change 100644 => 100755 indra/newview/lldirpicker.h mode change 100644 => 100755 indra/newview/lldndbutton.cpp mode change 100644 => 100755 indra/newview/lldndbutton.h mode change 100644 => 100755 indra/newview/lldrawable.cpp mode change 100644 => 100755 indra/newview/lldrawable.h mode change 100644 => 100755 indra/newview/lldrawpool.cpp mode change 100644 => 100755 indra/newview/lldrawpool.h mode change 100644 => 100755 indra/newview/lldrawpoolalpha.cpp mode change 100644 => 100755 indra/newview/lldrawpoolalpha.h mode change 100644 => 100755 indra/newview/lldrawpoolavatar.cpp mode change 100644 => 100755 indra/newview/lldrawpoolavatar.h mode change 100644 => 100755 indra/newview/lldrawpoolbump.cpp mode change 100644 => 100755 indra/newview/lldrawpoolbump.h mode change 100644 => 100755 indra/newview/lldrawpoolclouds.cpp mode change 100644 => 100755 indra/newview/lldrawpoolclouds.h mode change 100644 => 100755 indra/newview/lldrawpoolground.cpp mode change 100644 => 100755 indra/newview/lldrawpoolground.h mode change 100644 => 100755 indra/newview/lldrawpoolsimple.cpp mode change 100644 => 100755 indra/newview/lldrawpoolsimple.h mode change 100644 => 100755 indra/newview/lldrawpoolsky.cpp mode change 100644 => 100755 indra/newview/lldrawpoolsky.h mode change 100644 => 100755 indra/newview/lldrawpoolterrain.cpp mode change 100644 => 100755 indra/newview/lldrawpoolterrain.h mode change 100644 => 100755 indra/newview/lldrawpooltree.cpp mode change 100644 => 100755 indra/newview/lldrawpooltree.h mode change 100644 => 100755 indra/newview/lldrawpoolwater.cpp mode change 100644 => 100755 indra/newview/lldrawpoolwater.h mode change 100644 => 100755 indra/newview/lldrawpoolwlsky.cpp mode change 100644 => 100755 indra/newview/lldrawpoolwlsky.h mode change 100644 => 100755 indra/newview/lldriverparam.cpp mode change 100644 => 100755 indra/newview/lldriverparam.h mode change 100644 => 100755 indra/newview/lldynamictexture.cpp mode change 100644 => 100755 indra/newview/lldynamictexture.h mode change 100644 => 100755 indra/newview/llemote.cpp mode change 100644 => 100755 indra/newview/llemote.h mode change 100644 => 100755 indra/newview/lleventinfo.cpp mode change 100644 => 100755 indra/newview/lleventinfo.h mode change 100644 => 100755 indra/newview/lleventnotifier.cpp mode change 100644 => 100755 indra/newview/lleventnotifier.h mode change 100644 => 100755 indra/newview/lleventpoll.cpp mode change 100644 => 100755 indra/newview/lleventpoll.h mode change 100644 => 100755 indra/newview/llexpandabletextbox.cpp mode change 100644 => 100755 indra/newview/llexpandabletextbox.h mode change 100644 => 100755 indra/newview/llface.cpp mode change 100644 => 100755 indra/newview/llface.h mode change 100644 => 100755 indra/newview/llface.inl mode change 100644 => 100755 indra/newview/llfasttimerview.cpp mode change 100644 => 100755 indra/newview/llfasttimerview.h mode change 100644 => 100755 indra/newview/llfavoritesbar.cpp mode change 100644 => 100755 indra/newview/llfavoritesbar.h mode change 100644 => 100755 indra/newview/llfeaturemanager.cpp mode change 100644 => 100755 indra/newview/llfeaturemanager.h mode change 100644 => 100755 indra/newview/llfilepicker.cpp mode change 100644 => 100755 indra/newview/llfilepicker.h mode change 100644 => 100755 indra/newview/llfilteredwearablelist.cpp mode change 100644 => 100755 indra/newview/llfilteredwearablelist.h mode change 100644 => 100755 indra/newview/llfirstuse.cpp mode change 100644 => 100755 indra/newview/llfirstuse.h mode change 100644 => 100755 indra/newview/llflexibleobject.cpp mode change 100644 => 100755 indra/newview/llflexibleobject.h mode change 100644 => 100755 indra/newview/llfloaterabout.cpp mode change 100644 => 100755 indra/newview/llfloaterabout.h mode change 100644 => 100755 indra/newview/llfloateranimpreview.cpp mode change 100644 => 100755 indra/newview/llfloateranimpreview.h mode change 100644 => 100755 indra/newview/llfloaterauction.cpp mode change 100644 => 100755 indra/newview/llfloaterauction.h mode change 100644 => 100755 indra/newview/llfloateravatarpicker.cpp mode change 100644 => 100755 indra/newview/llfloateravatarpicker.h mode change 100644 => 100755 indra/newview/llfloateravatartextures.cpp mode change 100644 => 100755 indra/newview/llfloateravatartextures.h mode change 100644 => 100755 indra/newview/llfloaterbeacons.cpp mode change 100644 => 100755 indra/newview/llfloaterbeacons.h mode change 100644 => 100755 indra/newview/llfloaterbuildoptions.cpp mode change 100644 => 100755 indra/newview/llfloaterbuildoptions.h mode change 100644 => 100755 indra/newview/llfloaterbulkpermission.cpp mode change 100644 => 100755 indra/newview/llfloaterbulkpermission.h mode change 100644 => 100755 indra/newview/llfloaterbump.cpp mode change 100644 => 100755 indra/newview/llfloaterbump.h mode change 100644 => 100755 indra/newview/llfloaterbuy.cpp mode change 100644 => 100755 indra/newview/llfloaterbuy.h mode change 100644 => 100755 indra/newview/llfloaterbuycontents.cpp mode change 100644 => 100755 indra/newview/llfloaterbuycontents.h mode change 100644 => 100755 indra/newview/llfloaterbuycurrency.cpp mode change 100644 => 100755 indra/newview/llfloaterbuycurrency.h mode change 100644 => 100755 indra/newview/llfloaterbuycurrencyhtml.cpp mode change 100644 => 100755 indra/newview/llfloaterbuycurrencyhtml.h mode change 100644 => 100755 indra/newview/llfloaterbuyland.cpp mode change 100644 => 100755 indra/newview/llfloaterbuyland.h mode change 100644 => 100755 indra/newview/llfloatercamera.cpp mode change 100644 => 100755 indra/newview/llfloatercamera.h mode change 100644 => 100755 indra/newview/llfloaterchat.cpp mode change 100644 => 100755 indra/newview/llfloaterchat.h mode change 100644 => 100755 indra/newview/llfloaterchatterbox.cpp mode change 100644 => 100755 indra/newview/llfloaterchatterbox.h mode change 100644 => 100755 indra/newview/llfloatercolorpicker.cpp mode change 100644 => 100755 indra/newview/llfloatercolorpicker.h mode change 100644 => 100755 indra/newview/llfloaterdaycycle.cpp mode change 100644 => 100755 indra/newview/llfloaterdaycycle.h mode change 100644 => 100755 indra/newview/llfloaterenvsettings.cpp mode change 100644 => 100755 indra/newview/llfloaterenvsettings.h mode change 100644 => 100755 indra/newview/llfloaterevent.cpp mode change 100644 => 100755 indra/newview/llfloaterevent.h mode change 100644 => 100755 indra/newview/llfloaterfonttest.cpp mode change 100644 => 100755 indra/newview/llfloaterfonttest.h mode change 100644 => 100755 indra/newview/llfloaterfriends.cpp mode change 100644 => 100755 indra/newview/llfloaterfriends.h mode change 100644 => 100755 indra/newview/llfloatergesture.cpp mode change 100644 => 100755 indra/newview/llfloatergesture.h mode change 100644 => 100755 indra/newview/llfloatergodtools.cpp mode change 100644 => 100755 indra/newview/llfloatergodtools.h mode change 100644 => 100755 indra/newview/llfloatergroupinvite.cpp mode change 100644 => 100755 indra/newview/llfloatergroupinvite.h mode change 100644 => 100755 indra/newview/llfloatergroups.cpp mode change 100644 => 100755 indra/newview/llfloatergroups.h mode change 100644 => 100755 indra/newview/llfloaterhandler.cpp mode change 100644 => 100755 indra/newview/llfloaterhandler.h mode change 100644 => 100755 indra/newview/llfloaterhardwaresettings.cpp mode change 100644 => 100755 indra/newview/llfloaterhardwaresettings.h mode change 100644 => 100755 indra/newview/llfloaterhelpbrowser.cpp mode change 100644 => 100755 indra/newview/llfloaterhelpbrowser.h mode change 100644 => 100755 indra/newview/llfloaterhud.cpp mode change 100644 => 100755 indra/newview/llfloaterhud.h mode change 100644 => 100755 indra/newview/llfloaterimagepreview.cpp mode change 100644 => 100755 indra/newview/llfloaterimagepreview.h mode change 100644 => 100755 indra/newview/llfloaterimportcollada.cpp mode change 100644 => 100755 indra/newview/llfloaterimportcollada.h mode change 100644 => 100755 indra/newview/llfloaterinspect.cpp mode change 100644 => 100755 indra/newview/llfloaterinspect.h mode change 100644 => 100755 indra/newview/llfloaterinventory.cpp mode change 100644 => 100755 indra/newview/llfloaterinventory.h mode change 100644 => 100755 indra/newview/llfloaterjoystick.cpp mode change 100644 => 100755 indra/newview/llfloaterjoystick.h mode change 100644 => 100755 indra/newview/llfloaterlagmeter.cpp mode change 100644 => 100755 indra/newview/llfloaterlagmeter.h mode change 100644 => 100755 indra/newview/llfloaterland.cpp mode change 100644 => 100755 indra/newview/llfloaterland.h mode change 100644 => 100755 indra/newview/llfloaterlandholdings.cpp mode change 100644 => 100755 indra/newview/llfloaterlandholdings.h mode change 100644 => 100755 indra/newview/llfloatermap.cpp mode change 100644 => 100755 indra/newview/llfloatermap.h mode change 100644 => 100755 indra/newview/llfloatermediabrowser.cpp mode change 100644 => 100755 indra/newview/llfloatermediabrowser.h mode change 100644 => 100755 indra/newview/llfloatermediasettings.cpp mode change 100644 => 100755 indra/newview/llfloatermediasettings.h mode change 100644 => 100755 indra/newview/llfloatermemleak.cpp mode change 100644 => 100755 indra/newview/llfloatermemleak.h mode change 100644 => 100755 indra/newview/llfloatermodelpreview.cpp mode change 100644 => 100755 indra/newview/llfloatermodelpreview.h mode change 100644 => 100755 indra/newview/llfloaternamedesc.cpp mode change 100644 => 100755 indra/newview/llfloaternamedesc.h mode change 100644 => 100755 indra/newview/llfloaternotificationsconsole.cpp mode change 100644 => 100755 indra/newview/llfloaternotificationsconsole.h mode change 100644 => 100755 indra/newview/llfloateropenobject.cpp mode change 100644 => 100755 indra/newview/llfloateropenobject.h mode change 100644 => 100755 indra/newview/llfloaterpay.cpp mode change 100644 => 100755 indra/newview/llfloaterpay.h mode change 100644 => 100755 indra/newview/llfloaterperms.cpp mode change 100644 => 100755 indra/newview/llfloaterperms.h mode change 100644 => 100755 indra/newview/llfloaterpostcard.cpp mode change 100644 => 100755 indra/newview/llfloaterpostcard.h mode change 100644 => 100755 indra/newview/llfloaterpostprocess.cpp mode change 100644 => 100755 indra/newview/llfloaterpostprocess.h mode change 100644 => 100755 indra/newview/llfloaterpreference.cpp mode change 100644 => 100755 indra/newview/llfloaterpreference.h mode change 100644 => 100755 indra/newview/llfloaterproperties.cpp mode change 100644 => 100755 indra/newview/llfloaterproperties.h mode change 100644 => 100755 indra/newview/llfloaterregioninfo.cpp mode change 100644 => 100755 indra/newview/llfloaterregioninfo.h mode change 100644 => 100755 indra/newview/llfloaterreporter.cpp mode change 100644 => 100755 indra/newview/llfloaterreporter.h mode change 100644 => 100755 indra/newview/llfloaterscriptdebug.cpp mode change 100644 => 100755 indra/newview/llfloaterscriptdebug.h mode change 100644 => 100755 indra/newview/llfloaterscriptlimits.cpp mode change 100644 => 100755 indra/newview/llfloaterscriptlimits.h mode change 100644 => 100755 indra/newview/llfloatersearch.cpp mode change 100644 => 100755 indra/newview/llfloatersearch.h mode change 100644 => 100755 indra/newview/llfloatersellland.cpp mode change 100644 => 100755 indra/newview/llfloatersellland.h mode change 100644 => 100755 indra/newview/llfloatersettingsdebug.cpp mode change 100644 => 100755 indra/newview/llfloatersettingsdebug.h mode change 100644 => 100755 indra/newview/llfloatersnapshot.cpp mode change 100644 => 100755 indra/newview/llfloatersnapshot.h mode change 100644 => 100755 indra/newview/llfloatertelehub.cpp mode change 100644 => 100755 indra/newview/llfloatertelehub.h mode change 100644 => 100755 indra/newview/llfloatertestinspectors.cpp mode change 100644 => 100755 indra/newview/llfloatertestinspectors.h mode change 100644 => 100755 indra/newview/llfloatertestlistview.cpp mode change 100644 => 100755 indra/newview/llfloatertestlistview.h mode change 100644 => 100755 indra/newview/llfloatertools.cpp mode change 100644 => 100755 indra/newview/llfloatertools.h mode change 100644 => 100755 indra/newview/llfloatertopobjects.cpp mode change 100644 => 100755 indra/newview/llfloatertopobjects.h mode change 100644 => 100755 indra/newview/llfloatertos.cpp mode change 100644 => 100755 indra/newview/llfloatertos.h mode change 100644 => 100755 indra/newview/llfloateruipreview.cpp mode change 100644 => 100755 indra/newview/llfloateruipreview.h mode change 100644 => 100755 indra/newview/llfloaterurlentry.cpp mode change 100644 => 100755 indra/newview/llfloaterurlentry.h mode change 100644 => 100755 indra/newview/llfloatervoicedevicesettings.cpp mode change 100644 => 100755 indra/newview/llfloatervoicedevicesettings.h mode change 100644 => 100755 indra/newview/llfloatervoiceeffect.cpp mode change 100644 => 100755 indra/newview/llfloatervoiceeffect.h mode change 100644 => 100755 indra/newview/llfloaterwater.cpp mode change 100644 => 100755 indra/newview/llfloaterwater.h mode change 100644 => 100755 indra/newview/llfloaterwhitelistentry.cpp mode change 100644 => 100755 indra/newview/llfloaterwhitelistentry.h mode change 100644 => 100755 indra/newview/llfloaterwindlight.cpp mode change 100644 => 100755 indra/newview/llfloaterwindlight.h mode change 100644 => 100755 indra/newview/llfloaterwindowsize.cpp mode change 100644 => 100755 indra/newview/llfloaterwindowsize.h mode change 100644 => 100755 indra/newview/llfloaterworldmap.cpp mode change 100644 => 100755 indra/newview/llfloaterworldmap.h mode change 100644 => 100755 indra/newview/llfolderview.cpp mode change 100644 => 100755 indra/newview/llfolderview.h mode change 100644 => 100755 indra/newview/llfoldervieweventlistener.h mode change 100644 => 100755 indra/newview/llfolderviewitem.cpp mode change 100644 => 100755 indra/newview/llfolderviewitem.h mode change 100644 => 100755 indra/newview/llfollowcam.cpp mode change 100644 => 100755 indra/newview/llfollowcam.h mode change 100644 => 100755 indra/newview/llfriendcard.cpp mode change 100644 => 100755 indra/newview/llfriendcard.h mode change 100644 => 100755 indra/newview/llgesturemgr.cpp mode change 100644 => 100755 indra/newview/llgesturemgr.h mode change 100644 => 100755 indra/newview/llgiveinventory.cpp mode change 100644 => 100755 indra/newview/llgiveinventory.h mode change 100644 => 100755 indra/newview/llglsandbox.cpp mode change 100644 => 100755 indra/newview/llgroupactions.cpp mode change 100644 => 100755 indra/newview/llgroupactions.h mode change 100644 => 100755 indra/newview/llgroupiconctrl.cpp mode change 100644 => 100755 indra/newview/llgroupiconctrl.h mode change 100644 => 100755 indra/newview/llgrouplist.cpp mode change 100644 => 100755 indra/newview/llgrouplist.h mode change 100644 => 100755 indra/newview/llgroupmgr.cpp mode change 100644 => 100755 indra/newview/llgroupmgr.h mode change 100644 => 100755 indra/newview/llhomelocationresponder.cpp mode change 100644 => 100755 indra/newview/llhomelocationresponder.h mode change 100644 => 100755 indra/newview/llhudeffect.cpp mode change 100644 => 100755 indra/newview/llhudeffect.h mode change 100644 => 100755 indra/newview/llhudeffectbeam.cpp mode change 100644 => 100755 indra/newview/llhudeffectbeam.h mode change 100644 => 100755 indra/newview/llhudeffectlookat.cpp mode change 100644 => 100755 indra/newview/llhudeffectlookat.h mode change 100644 => 100755 indra/newview/llhudeffectpointat.cpp mode change 100644 => 100755 indra/newview/llhudeffectpointat.h mode change 100644 => 100755 indra/newview/llhudeffecttrail.cpp mode change 100644 => 100755 indra/newview/llhudeffecttrail.h mode change 100644 => 100755 indra/newview/llhudicon.cpp mode change 100644 => 100755 indra/newview/llhudicon.h mode change 100644 => 100755 indra/newview/llhudmanager.cpp mode change 100644 => 100755 indra/newview/llhudmanager.h mode change 100644 => 100755 indra/newview/llhudobject.cpp mode change 100644 => 100755 indra/newview/llhudobject.h mode change 100644 => 100755 indra/newview/llhudrender.cpp mode change 100644 => 100755 indra/newview/llhudrender.h mode change 100644 => 100755 indra/newview/llhudtext.cpp mode change 100644 => 100755 indra/newview/llhudtext.h mode change 100644 => 100755 indra/newview/llhudview.cpp mode change 100644 => 100755 indra/newview/llhudview.h mode change 100644 => 100755 indra/newview/llimfloater.cpp mode change 100644 => 100755 indra/newview/llimfloater.h mode change 100644 => 100755 indra/newview/llimfloatercontainer.cpp mode change 100644 => 100755 indra/newview/llimfloatercontainer.h mode change 100644 => 100755 indra/newview/llimhandler.cpp mode change 100644 => 100755 indra/newview/llimpanel.cpp mode change 100644 => 100755 indra/newview/llimpanel.h mode change 100644 => 100755 indra/newview/llimview.cpp mode change 100644 => 100755 indra/newview/llimview.h mode change 100644 => 100755 indra/newview/llinspect.cpp mode change 100644 => 100755 indra/newview/llinspect.h mode change 100644 => 100755 indra/newview/llinspectavatar.cpp mode change 100644 => 100755 indra/newview/llinspectavatar.h mode change 100644 => 100755 indra/newview/llinspectgroup.cpp mode change 100644 => 100755 indra/newview/llinspectgroup.h mode change 100644 => 100755 indra/newview/llinspectobject.cpp mode change 100644 => 100755 indra/newview/llinspectobject.h mode change 100644 => 100755 indra/newview/llinspectremoteobject.cpp mode change 100644 => 100755 indra/newview/llinspectremoteobject.h mode change 100644 => 100755 indra/newview/llinspecttoast.cpp mode change 100644 => 100755 indra/newview/llinspecttoast.h mode change 100644 => 100755 indra/newview/llinventoryactions.h mode change 100644 => 100755 indra/newview/llinventorybridge.cpp mode change 100644 => 100755 indra/newview/llinventorybridge.h mode change 100644 => 100755 indra/newview/llinventoryclipboard.cpp mode change 100644 => 100755 indra/newview/llinventoryclipboard.h mode change 100644 => 100755 indra/newview/llinventoryfilter.cpp mode change 100644 => 100755 indra/newview/llinventoryfilter.h mode change 100644 => 100755 indra/newview/llinventoryfunctions.cpp mode change 100644 => 100755 indra/newview/llinventoryfunctions.h mode change 100644 => 100755 indra/newview/llinventoryicon.cpp mode change 100644 => 100755 indra/newview/llinventoryicon.h mode change 100644 => 100755 indra/newview/llinventoryitemslist.cpp mode change 100644 => 100755 indra/newview/llinventoryitemslist.h mode change 100644 => 100755 indra/newview/llinventorylistitem.cpp mode change 100644 => 100755 indra/newview/llinventorylistitem.h mode change 100644 => 100755 indra/newview/llinventorymodel.cpp mode change 100644 => 100755 indra/newview/llinventorymodel.h mode change 100644 => 100755 indra/newview/llinventorymodelbackgroundfetch.cpp mode change 100644 => 100755 indra/newview/llinventorymodelbackgroundfetch.h mode change 100644 => 100755 indra/newview/llinventoryobserver.cpp mode change 100644 => 100755 indra/newview/llinventoryobserver.h mode change 100644 => 100755 indra/newview/llinventorypanel.cpp mode change 100644 => 100755 indra/newview/llinventorypanel.h mode change 100644 => 100755 indra/newview/lljoystickbutton.cpp mode change 100644 => 100755 indra/newview/lljoystickbutton.h mode change 100644 => 100755 indra/newview/lllandmarkactions.cpp mode change 100644 => 100755 indra/newview/lllandmarkactions.h mode change 100644 => 100755 indra/newview/lllandmarklist.cpp mode change 100644 => 100755 indra/newview/lllandmarklist.h mode change 100644 => 100755 indra/newview/lllightconstants.h mode change 100644 => 100755 indra/newview/lllistbrowser.cpp mode change 100644 => 100755 indra/newview/lllistbrowser.h mode change 100644 => 100755 indra/newview/lllistcontextmenu.cpp mode change 100644 => 100755 indra/newview/lllistcontextmenu.h mode change 100644 => 100755 indra/newview/lllistview.cpp mode change 100644 => 100755 indra/newview/lllistview.h mode change 100644 => 100755 indra/newview/lllocaltextureobject.cpp mode change 100644 => 100755 indra/newview/lllocaltextureobject.h mode change 100644 => 100755 indra/newview/lllocationhistory.cpp mode change 100644 => 100755 indra/newview/lllocationhistory.h mode change 100644 => 100755 indra/newview/lllocationinputctrl.cpp mode change 100644 => 100755 indra/newview/lllocationinputctrl.h mode change 100644 => 100755 indra/newview/lllogchat.cpp mode change 100644 => 100755 indra/newview/lllogchat.h mode change 100644 => 100755 indra/newview/llloginhandler.cpp mode change 100644 => 100755 indra/newview/llloginhandler.h mode change 100644 => 100755 indra/newview/lllogininstance.cpp mode change 100644 => 100755 indra/newview/lllogininstance.h mode change 100644 => 100755 indra/newview/lllookshistorypanel.h mode change 100644 => 100755 indra/newview/llmachineid.cpp mode change 100644 => 100755 indra/newview/llmachineid.h mode change 100644 => 100755 indra/newview/llmanip.cpp mode change 100644 => 100755 indra/newview/llmanip.h mode change 100644 => 100755 indra/newview/llmaniprotate.cpp mode change 100644 => 100755 indra/newview/llmaniprotate.h mode change 100644 => 100755 indra/newview/llmanipscale.cpp mode change 100644 => 100755 indra/newview/llmanipscale.h mode change 100644 => 100755 indra/newview/llmaniptranslate.cpp mode change 100644 => 100755 indra/newview/llmaniptranslate.h mode change 100644 => 100755 indra/newview/llmediactrl.cpp mode change 100644 => 100755 indra/newview/llmediactrl.h mode change 100644 => 100755 indra/newview/llmediadataclient.cpp mode change 100644 => 100755 indra/newview/llmediadataclient.h mode change 100644 => 100755 indra/newview/llmemoryview.cpp mode change 100644 => 100755 indra/newview/llmemoryview.h mode change 100644 => 100755 indra/newview/llmenucommands.cpp mode change 100644 => 100755 indra/newview/llmenucommands.h mode change 100644 => 100755 indra/newview/llmeshreduction.cpp mode change 100644 => 100755 indra/newview/llmeshreduction.h mode change 100644 => 100755 indra/newview/llmeshrepository.cpp mode change 100644 => 100755 indra/newview/llmeshrepository.h mode change 100644 => 100755 indra/newview/llmetricperformancetester.cpp mode change 100644 => 100755 indra/newview/llmetricperformancetester.h mode change 100644 => 100755 indra/newview/llmimetypes.cpp mode change 100644 => 100755 indra/newview/llmimetypes.h mode change 100644 => 100755 indra/newview/llmorphview.cpp mode change 100644 => 100755 indra/newview/llmorphview.h mode change 100644 => 100755 indra/newview/llmoveview.cpp mode change 100644 => 100755 indra/newview/llmoveview.h mode change 100644 => 100755 indra/newview/llmutelist.cpp mode change 100644 => 100755 indra/newview/llmutelist.h mode change 100644 => 100755 indra/newview/llnamebox.cpp mode change 100644 => 100755 indra/newview/llnamebox.h mode change 100644 => 100755 indra/newview/llnameeditor.cpp mode change 100644 => 100755 indra/newview/llnameeditor.h mode change 100644 => 100755 indra/newview/llnamelistctrl.cpp mode change 100644 => 100755 indra/newview/llnamelistctrl.h mode change 100644 => 100755 indra/newview/llnavigationbar.cpp mode change 100644 => 100755 indra/newview/llnavigationbar.h mode change 100644 => 100755 indra/newview/llnearbychat.cpp mode change 100644 => 100755 indra/newview/llnearbychat.h mode change 100644 => 100755 indra/newview/llnearbychatbar.cpp mode change 100644 => 100755 indra/newview/llnearbychatbar.h mode change 100644 => 100755 indra/newview/llnearbychathandler.cpp mode change 100644 => 100755 indra/newview/llnearbychathandler.h mode change 100644 => 100755 indra/newview/llnetmap.cpp mode change 100644 => 100755 indra/newview/llnetmap.h mode change 100644 => 100755 indra/newview/llnotificationalerthandler.cpp mode change 100644 => 100755 indra/newview/llnotificationgrouphandler.cpp mode change 100644 => 100755 indra/newview/llnotificationhandler.h mode change 100644 => 100755 indra/newview/llnotificationhandlerutil.cpp mode change 100644 => 100755 indra/newview/llnotificationmanager.cpp mode change 100644 => 100755 indra/newview/llnotificationmanager.h mode change 100644 => 100755 indra/newview/llnotificationofferhandler.cpp mode change 100644 => 100755 indra/newview/llnotificationscripthandler.cpp mode change 100644 => 100755 indra/newview/llnotificationstorage.cpp mode change 100644 => 100755 indra/newview/llnotificationstorage.h mode change 100644 => 100755 indra/newview/llnotificationtiphandler.cpp mode change 100644 => 100755 indra/newview/lloutfitobserver.cpp mode change 100644 => 100755 indra/newview/lloutfitobserver.h mode change 100644 => 100755 indra/newview/lloutfitslist.cpp mode change 100644 => 100755 indra/newview/lloutfitslist.h mode change 100644 => 100755 indra/newview/lloutputmonitorctrl.cpp mode change 100644 => 100755 indra/newview/lloutputmonitorctrl.h mode change 100644 => 100755 indra/newview/lloverlaybar.cpp mode change 100644 => 100755 indra/newview/lloverlaybar.h mode change 100644 => 100755 indra/newview/llpanelappearancetab.h mode change 100644 => 100755 indra/newview/llpanelavatar.cpp mode change 100644 => 100755 indra/newview/llpanelavatar.h mode change 100644 => 100755 indra/newview/llpanelavatartag.cpp mode change 100644 => 100755 indra/newview/llpanelavatartag.h mode change 100644 => 100755 indra/newview/llpanelblockedlist.cpp mode change 100644 => 100755 indra/newview/llpanelblockedlist.h mode change 100644 => 100755 indra/newview/llpanelclassified.cpp mode change 100644 => 100755 indra/newview/llpanelclassified.h mode change 100644 => 100755 indra/newview/llpanelcontents.cpp mode change 100644 => 100755 indra/newview/llpanelcontents.h mode change 100644 => 100755 indra/newview/llpaneleditwearable.cpp mode change 100644 => 100755 indra/newview/llpaneleditwearable.h mode change 100644 => 100755 indra/newview/llpanelface.cpp mode change 100644 => 100755 indra/newview/llpanelface.h mode change 100644 => 100755 indra/newview/llpanelgenerictip.cpp mode change 100644 => 100755 indra/newview/llpanelgenerictip.h mode change 100644 => 100755 indra/newview/llpanelgroup.cpp mode change 100644 => 100755 indra/newview/llpanelgroup.h mode change 100644 => 100755 indra/newview/llpanelgroupgeneral.cpp mode change 100644 => 100755 indra/newview/llpanelgroupgeneral.h mode change 100644 => 100755 indra/newview/llpanelgroupinvite.cpp mode change 100644 => 100755 indra/newview/llpanelgroupinvite.h mode change 100644 => 100755 indra/newview/llpanelgrouplandmoney.cpp mode change 100644 => 100755 indra/newview/llpanelgrouplandmoney.h mode change 100644 => 100755 indra/newview/llpanelgroupnotices.cpp mode change 100644 => 100755 indra/newview/llpanelgroupnotices.h mode change 100644 => 100755 indra/newview/llpanelgrouproles.cpp mode change 100644 => 100755 indra/newview/llpanelgrouproles.h mode change 100644 => 100755 indra/newview/llpanelhome.cpp mode change 100644 => 100755 indra/newview/llpanelhome.h mode change 100644 => 100755 indra/newview/llpanelimcontrolpanel.cpp mode change 100644 => 100755 indra/newview/llpanelimcontrolpanel.h mode change 100644 => 100755 indra/newview/llpanelland.cpp mode change 100644 => 100755 indra/newview/llpanelland.h mode change 100644 => 100755 indra/newview/llpanellandaudio.cpp mode change 100644 => 100755 indra/newview/llpanellandaudio.h mode change 100644 => 100755 indra/newview/llpanellandmarkinfo.cpp mode change 100644 => 100755 indra/newview/llpanellandmarkinfo.h mode change 100644 => 100755 indra/newview/llpanellandmarks.cpp mode change 100644 => 100755 indra/newview/llpanellandmarks.h mode change 100644 => 100755 indra/newview/llpanellandmedia.cpp mode change 100644 => 100755 indra/newview/llpanellandmedia.h mode change 100644 => 100755 indra/newview/llpanellogin.cpp mode change 100644 => 100755 indra/newview/llpanellogin.h mode change 100644 => 100755 indra/newview/llpanelloginlistener.cpp mode change 100644 => 100755 indra/newview/llpanelloginlistener.h mode change 100644 => 100755 indra/newview/llpanelmaininventory.cpp mode change 100644 => 100755 indra/newview/llpanelmaininventory.h mode change 100644 => 100755 indra/newview/llpanelme.cpp mode change 100644 => 100755 indra/newview/llpanelme.h mode change 100644 => 100755 indra/newview/llpanelmediasettingsgeneral.cpp mode change 100644 => 100755 indra/newview/llpanelmediasettingsgeneral.h mode change 100644 => 100755 indra/newview/llpanelmediasettingspermissions.cpp mode change 100644 => 100755 indra/newview/llpanelmediasettingspermissions.h mode change 100644 => 100755 indra/newview/llpanelmediasettingssecurity.cpp mode change 100644 => 100755 indra/newview/llpanelmediasettingssecurity.h mode change 100644 => 100755 indra/newview/llpanelnearbymedia.cpp mode change 100644 => 100755 indra/newview/llpanelnearbymedia.h mode change 100644 => 100755 indra/newview/llpanelobject.cpp mode change 100644 => 100755 indra/newview/llpanelobject.h mode change 100644 => 100755 indra/newview/llpanelobjectinventory.cpp mode change 100644 => 100755 indra/newview/llpanelobjectinventory.h mode change 100644 => 100755 indra/newview/llpanelonlinestatus.cpp mode change 100644 => 100755 indra/newview/llpanelonlinestatus.h mode change 100644 => 100755 indra/newview/llpaneloutfitedit.cpp mode change 100644 => 100755 indra/newview/llpaneloutfitedit.h mode change 100644 => 100755 indra/newview/llpaneloutfitsinventory.cpp mode change 100644 => 100755 indra/newview/llpaneloutfitsinventory.h mode change 100644 => 100755 indra/newview/llpanelpeople.cpp mode change 100644 => 100755 indra/newview/llpanelpeople.h mode change 100644 => 100755 indra/newview/llpanelpeoplemenus.cpp mode change 100644 => 100755 indra/newview/llpanelpeoplemenus.h mode change 100644 => 100755 indra/newview/llpanelpermissions.cpp mode change 100644 => 100755 indra/newview/llpanelpermissions.h mode change 100644 => 100755 indra/newview/llpanelpick.cpp mode change 100644 => 100755 indra/newview/llpanelpick.h mode change 100644 => 100755 indra/newview/llpanelpicks.cpp mode change 100644 => 100755 indra/newview/llpanelpicks.h mode change 100644 => 100755 indra/newview/llpanelplaceinfo.cpp mode change 100644 => 100755 indra/newview/llpanelplaceinfo.h mode change 100644 => 100755 indra/newview/llpanelplaceprofile.cpp mode change 100644 => 100755 indra/newview/llpanelplaceprofile.h mode change 100644 => 100755 indra/newview/llpanelplaces.cpp mode change 100644 => 100755 indra/newview/llpanelplaces.h mode change 100644 => 100755 indra/newview/llpanelplacestab.cpp mode change 100644 => 100755 indra/newview/llpanelplacestab.h mode change 100644 => 100755 indra/newview/llpanelprimmediacontrols.cpp mode change 100644 => 100755 indra/newview/llpanelprimmediacontrols.h mode change 100644 => 100755 indra/newview/llpanelprofile.cpp mode change 100644 => 100755 indra/newview/llpanelprofile.h mode change 100644 => 100755 indra/newview/llpanelprofileview.cpp mode change 100644 => 100755 indra/newview/llpanelprofileview.h mode change 100644 => 100755 indra/newview/llpanelteleporthistory.cpp mode change 100644 => 100755 indra/newview/llpanelteleporthistory.h mode change 100644 => 100755 indra/newview/llpaneltiptoast.cpp mode change 100644 => 100755 indra/newview/llpaneltiptoast.h mode change 100644 => 100755 indra/newview/llpaneltopinfobar.cpp mode change 100644 => 100755 indra/newview/llpaneltopinfobar.h mode change 100644 => 100755 indra/newview/llpanelvoiceeffect.cpp mode change 100644 => 100755 indra/newview/llpanelvoiceeffect.h mode change 100644 => 100755 indra/newview/llpanelvolume.cpp mode change 100644 => 100755 indra/newview/llpanelvolume.h mode change 100644 => 100755 indra/newview/llpanelvolumepulldown.cpp mode change 100644 => 100755 indra/newview/llpanelvolumepulldown.h mode change 100644 => 100755 indra/newview/llpanelwearing.cpp mode change 100644 => 100755 indra/newview/llpanelwearing.h mode change 100644 => 100755 indra/newview/llparcelselection.cpp mode change 100644 => 100755 indra/newview/llparcelselection.h mode change 100644 => 100755 indra/newview/llparticipantlist.cpp mode change 100644 => 100755 indra/newview/llparticipantlist.h mode change 100644 => 100755 indra/newview/llpatchvertexarray.cpp mode change 100644 => 100755 indra/newview/llpatchvertexarray.h mode change 100644 => 100755 indra/newview/llplacesinventorybridge.cpp mode change 100644 => 100755 indra/newview/llplacesinventorybridge.h mode change 100644 => 100755 indra/newview/llplacesinventorypanel.cpp mode change 100644 => 100755 indra/newview/llplacesinventorypanel.h mode change 100644 => 100755 indra/newview/llpolymesh.cpp mode change 100644 => 100755 indra/newview/llpolymesh.h mode change 100644 => 100755 indra/newview/llpolymorph.cpp mode change 100644 => 100755 indra/newview/llpolymorph.h mode change 100644 => 100755 indra/newview/llpopupview.cpp mode change 100644 => 100755 indra/newview/llpopupview.h mode change 100644 => 100755 indra/newview/llpreview.cpp mode change 100644 => 100755 indra/newview/llpreview.h mode change 100644 => 100755 indra/newview/llpreviewanim.cpp mode change 100644 => 100755 indra/newview/llpreviewanim.h mode change 100644 => 100755 indra/newview/llpreviewgesture.cpp mode change 100644 => 100755 indra/newview/llpreviewgesture.h mode change 100644 => 100755 indra/newview/llpreviewnotecard.cpp mode change 100644 => 100755 indra/newview/llpreviewnotecard.h mode change 100644 => 100755 indra/newview/llpreviewscript.cpp mode change 100644 => 100755 indra/newview/llpreviewscript.h mode change 100644 => 100755 indra/newview/llpreviewsound.cpp mode change 100644 => 100755 indra/newview/llpreviewsound.h mode change 100644 => 100755 indra/newview/llpreviewtexture.cpp mode change 100644 => 100755 indra/newview/llpreviewtexture.h mode change 100644 => 100755 indra/newview/llproductinforequest.cpp mode change 100644 => 100755 indra/newview/llproductinforequest.h mode change 100644 => 100755 indra/newview/llprogressview.cpp mode change 100644 => 100755 indra/newview/llprogressview.h mode change 100644 => 100755 indra/newview/llrecentpeople.cpp mode change 100644 => 100755 indra/newview/llrecentpeople.h mode change 100644 => 100755 indra/newview/llregionposition.cpp mode change 100644 => 100755 indra/newview/llregionposition.h mode change 100644 => 100755 indra/newview/llremoteparcelrequest.cpp mode change 100644 => 100755 indra/newview/llremoteparcelrequest.h mode change 100644 => 100755 indra/newview/llresourcedata.h mode change 100644 => 100755 indra/newview/llrootview.h mode change 100644 => 100755 indra/newview/llsavedsettingsglue.cpp mode change 100644 => 100755 indra/newview/llsavedsettingsglue.h mode change 100644 => 100755 indra/newview/llsaveoutfitcombobtn.cpp mode change 100644 => 100755 indra/newview/llsaveoutfitcombobtn.h mode change 100644 => 100755 indra/newview/llscreenchannel.cpp mode change 100644 => 100755 indra/newview/llscreenchannel.h mode change 100644 => 100755 indra/newview/llscriptfloater.cpp mode change 100644 => 100755 indra/newview/llscriptfloater.h mode change 100644 => 100755 indra/newview/llscrollingpanelparam.cpp mode change 100644 => 100755 indra/newview/llscrollingpanelparam.h mode change 100644 => 100755 indra/newview/llsearchcombobox.cpp mode change 100644 => 100755 indra/newview/llsearchcombobox.h mode change 100644 => 100755 indra/newview/llsearchhistory.cpp mode change 100644 => 100755 indra/newview/llsearchhistory.h mode change 100644 => 100755 indra/newview/llsecapi.cpp mode change 100644 => 100755 indra/newview/llsecapi.h mode change 100644 => 100755 indra/newview/llsechandler_basic.cpp mode change 100644 => 100755 indra/newview/llsechandler_basic.h mode change 100644 => 100755 indra/newview/llselectmgr.cpp mode change 100644 => 100755 indra/newview/llselectmgr.h mode change 100644 => 100755 indra/newview/llsidepanelappearance.cpp mode change 100644 => 100755 indra/newview/llsidepanelappearance.h mode change 100644 => 100755 indra/newview/llsidepanelinventory.cpp mode change 100644 => 100755 indra/newview/llsidepanelinventory.h mode change 100644 => 100755 indra/newview/llsidepanelinventorysubpanel.cpp mode change 100644 => 100755 indra/newview/llsidepanelinventorysubpanel.h mode change 100644 => 100755 indra/newview/llsidepaneliteminfo.cpp mode change 100644 => 100755 indra/newview/llsidepaneliteminfo.h mode change 100644 => 100755 indra/newview/llsidepaneltaskinfo.cpp mode change 100644 => 100755 indra/newview/llsidepaneltaskinfo.h mode change 100644 => 100755 indra/newview/llsidetray.cpp mode change 100644 => 100755 indra/newview/llsidetray.h mode change 100644 => 100755 indra/newview/llsidetraypanelcontainer.cpp mode change 100644 => 100755 indra/newview/llsidetraypanelcontainer.h mode change 100644 => 100755 indra/newview/llsky.cpp mode change 100644 => 100755 indra/newview/llsky.h mode change 100644 => 100755 indra/newview/llslurl.cpp mode change 100644 => 100755 indra/newview/llslurl.h mode change 100644 => 100755 indra/newview/llspatialpartition.cpp mode change 100644 => 100755 indra/newview/llspatialpartition.h mode change 100644 => 100755 indra/newview/llspeakbutton.cpp mode change 100644 => 100755 indra/newview/llspeakbutton.h mode change 100644 => 100755 indra/newview/llspeakers.cpp mode change 100644 => 100755 indra/newview/llspeakers.h mode change 100644 => 100755 indra/newview/llspeakingindicatormanager.cpp mode change 100644 => 100755 indra/newview/llspeakingindicatormanager.h mode change 100644 => 100755 indra/newview/llsplitbutton.cpp mode change 100644 => 100755 indra/newview/llsplitbutton.h mode change 100644 => 100755 indra/newview/llsprite.cpp mode change 100644 => 100755 indra/newview/llsprite.h mode change 100644 => 100755 indra/newview/llsrv.cpp mode change 100644 => 100755 indra/newview/llsrv.h mode change 100644 => 100755 indra/newview/llstartup.cpp mode change 100644 => 100755 indra/newview/llstartup.h mode change 100644 => 100755 indra/newview/llstartuplistener.cpp mode change 100644 => 100755 indra/newview/llstartuplistener.h mode change 100644 => 100755 indra/newview/llstatusbar.cpp mode change 100644 => 100755 indra/newview/llstatusbar.h mode change 100644 => 100755 indra/newview/llstylemap.cpp mode change 100644 => 100755 indra/newview/llstylemap.h mode change 100644 => 100755 indra/newview/llsurface.cpp mode change 100644 => 100755 indra/newview/llsurface.h mode change 100644 => 100755 indra/newview/llsurfacepatch.cpp mode change 100644 => 100755 indra/newview/llsurfacepatch.h mode change 100644 => 100755 indra/newview/llsyswellitem.cpp mode change 100644 => 100755 indra/newview/llsyswellitem.h mode change 100644 => 100755 indra/newview/llsyswellwindow.cpp mode change 100644 => 100755 indra/newview/llsyswellwindow.h mode change 100644 => 100755 indra/newview/lltable.h mode change 100644 => 100755 indra/newview/llteleporthistory.cpp mode change 100644 => 100755 indra/newview/llteleporthistory.h mode change 100644 => 100755 indra/newview/llteleporthistorystorage.cpp mode change 100644 => 100755 indra/newview/llteleporthistorystorage.h mode change 100644 => 100755 indra/newview/lltexglobalcolor.cpp mode change 100644 => 100755 indra/newview/lltexglobalcolor.h mode change 100644 => 100755 indra/newview/lltexlayer.cpp mode change 100644 => 100755 indra/newview/lltexlayer.h mode change 100644 => 100755 indra/newview/lltexlayerparams.cpp mode change 100644 => 100755 indra/newview/lltexlayerparams.h mode change 100644 => 100755 indra/newview/lltextureatlas.cpp mode change 100644 => 100755 indra/newview/lltextureatlas.h mode change 100644 => 100755 indra/newview/lltextureatlasmanager.cpp mode change 100644 => 100755 indra/newview/lltextureatlasmanager.h mode change 100644 => 100755 indra/newview/lltexturecache.cpp mode change 100644 => 100755 indra/newview/lltexturecache.h mode change 100644 => 100755 indra/newview/lltexturectrl.cpp mode change 100644 => 100755 indra/newview/lltexturectrl.h mode change 100644 => 100755 indra/newview/lltexturefetch.cpp mode change 100644 => 100755 indra/newview/lltexturefetch.h mode change 100644 => 100755 indra/newview/lltextureinfo.cpp mode change 100644 => 100755 indra/newview/lltextureinfo.h mode change 100644 => 100755 indra/newview/lltextureinfodetails.cpp mode change 100644 => 100755 indra/newview/lltextureinfodetails.h mode change 100644 => 100755 indra/newview/lltexturestats.cpp mode change 100644 => 100755 indra/newview/lltexturestats.h mode change 100644 => 100755 indra/newview/lltexturestatsuploader.cpp mode change 100644 => 100755 indra/newview/lltexturestatsuploader.h mode change 100644 => 100755 indra/newview/lltextureview.cpp mode change 100644 => 100755 indra/newview/lltextureview.h mode change 100644 => 100755 indra/newview/lltoast.cpp mode change 100644 => 100755 indra/newview/lltoast.h mode change 100644 => 100755 indra/newview/lltoastalertpanel.cpp mode change 100644 => 100755 indra/newview/lltoastalertpanel.h mode change 100644 => 100755 indra/newview/lltoastgroupnotifypanel.cpp mode change 100644 => 100755 indra/newview/lltoastgroupnotifypanel.h mode change 100644 => 100755 indra/newview/lltoastimpanel.cpp mode change 100644 => 100755 indra/newview/lltoastimpanel.h mode change 100644 => 100755 indra/newview/lltoastnotifypanel.cpp mode change 100644 => 100755 indra/newview/lltoastnotifypanel.h mode change 100644 => 100755 indra/newview/lltoastpanel.cpp mode change 100644 => 100755 indra/newview/lltoastpanel.h mode change 100644 => 100755 indra/newview/lltool.cpp mode change 100644 => 100755 indra/newview/lltool.h mode change 100644 => 100755 indra/newview/lltoolbar.cpp mode change 100644 => 100755 indra/newview/lltoolbar.h mode change 100644 => 100755 indra/newview/lltoolbrush.cpp mode change 100644 => 100755 indra/newview/lltoolbrush.h mode change 100644 => 100755 indra/newview/lltoolcomp.cpp mode change 100644 => 100755 indra/newview/lltoolcomp.h mode change 100644 => 100755 indra/newview/lltooldraganddrop.cpp mode change 100644 => 100755 indra/newview/lltooldraganddrop.h mode change 100644 => 100755 indra/newview/lltoolface.cpp mode change 100644 => 100755 indra/newview/lltoolface.h mode change 100644 => 100755 indra/newview/lltoolfocus.cpp mode change 100644 => 100755 indra/newview/lltoolfocus.h mode change 100644 => 100755 indra/newview/lltoolgrab.cpp mode change 100644 => 100755 indra/newview/lltoolgrab.h mode change 100644 => 100755 indra/newview/lltoolgun.cpp mode change 100644 => 100755 indra/newview/lltoolgun.h mode change 100644 => 100755 indra/newview/lltoolindividual.cpp mode change 100644 => 100755 indra/newview/lltoolindividual.h mode change 100644 => 100755 indra/newview/lltoolmgr.cpp mode change 100644 => 100755 indra/newview/lltoolmgr.h mode change 100644 => 100755 indra/newview/lltoolmorph.cpp mode change 100644 => 100755 indra/newview/lltoolmorph.h mode change 100644 => 100755 indra/newview/lltoolobjpicker.cpp mode change 100644 => 100755 indra/newview/lltoolobjpicker.h mode change 100644 => 100755 indra/newview/lltoolpie.cpp mode change 100644 => 100755 indra/newview/lltoolpie.h mode change 100644 => 100755 indra/newview/lltoolpipette.cpp mode change 100644 => 100755 indra/newview/lltoolpipette.h mode change 100644 => 100755 indra/newview/lltoolplacer.cpp mode change 100644 => 100755 indra/newview/lltoolplacer.h mode change 100644 => 100755 indra/newview/lltoolselect.cpp mode change 100644 => 100755 indra/newview/lltoolselect.h mode change 100644 => 100755 indra/newview/lltoolselectland.cpp mode change 100644 => 100755 indra/newview/lltoolselectland.h mode change 100644 => 100755 indra/newview/lltoolselectrect.cpp mode change 100644 => 100755 indra/newview/lltoolselectrect.h mode change 100644 => 100755 indra/newview/lltoolview.cpp mode change 100644 => 100755 indra/newview/lltoolview.h mode change 100644 => 100755 indra/newview/lltracker.cpp mode change 100644 => 100755 indra/newview/lltracker.h mode change 100644 => 100755 indra/newview/lltransientdockablefloater.cpp mode change 100644 => 100755 indra/newview/lltransientdockablefloater.h mode change 100644 => 100755 indra/newview/lltransientfloatermgr.cpp mode change 100644 => 100755 indra/newview/lltransientfloatermgr.h mode change 100644 => 100755 indra/newview/lluiconstants.h mode change 100644 => 100755 indra/newview/lluilistener.cpp mode change 100644 => 100755 indra/newview/lluilistener.h mode change 100644 => 100755 indra/newview/lluploaddialog.cpp mode change 100644 => 100755 indra/newview/lluploaddialog.h mode change 100644 => 100755 indra/newview/llurl.cpp mode change 100644 => 100755 indra/newview/llurl.h mode change 100644 => 100755 indra/newview/llurldispatcher.cpp mode change 100644 => 100755 indra/newview/llurldispatcher.h mode change 100644 => 100755 indra/newview/llurldispatcherlistener.cpp mode change 100644 => 100755 indra/newview/llurldispatcherlistener.h mode change 100644 => 100755 indra/newview/llurlhistory.cpp mode change 100644 => 100755 indra/newview/llurlhistory.h mode change 100644 => 100755 indra/newview/llurllineeditorctrl.cpp mode change 100644 => 100755 indra/newview/llurllineeditorctrl.h mode change 100644 => 100755 indra/newview/llurlwhitelist.cpp mode change 100644 => 100755 indra/newview/llurlwhitelist.h mode change 100644 => 100755 indra/newview/llvectorperfoptions.cpp mode change 100644 => 100755 indra/newview/llvectorperfoptions.h mode change 100644 => 100755 indra/newview/llversioninfo.cpp mode change 100644 => 100755 indra/newview/llversioninfo.h mode change 100644 => 100755 indra/newview/llviewchildren.cpp mode change 100644 => 100755 indra/newview/llviewchildren.h mode change 100644 => 100755 indra/newview/llviewerassetstorage.cpp mode change 100644 => 100755 indra/newview/llviewerassetstorage.h mode change 100644 => 100755 indra/newview/llviewerassettype.cpp mode change 100644 => 100755 indra/newview/llviewerassettype.h mode change 100644 => 100755 indra/newview/llviewerattachmenu.cpp mode change 100644 => 100755 indra/newview/llviewerattachmenu.h mode change 100644 => 100755 indra/newview/llvieweraudio.cpp mode change 100644 => 100755 indra/newview/llvieweraudio.h mode change 100644 => 100755 indra/newview/llviewercamera.cpp mode change 100644 => 100755 indra/newview/llviewercamera.h mode change 100644 => 100755 indra/newview/llviewerchat.cpp mode change 100644 => 100755 indra/newview/llviewerchat.h mode change 100644 => 100755 indra/newview/llviewercontrol.cpp mode change 100644 => 100755 indra/newview/llviewercontrol.h mode change 100644 => 100755 indra/newview/llviewercontrollistener.cpp mode change 100644 => 100755 indra/newview/llviewercontrollistener.h mode change 100644 => 100755 indra/newview/llviewerdisplay.cpp mode change 100644 => 100755 indra/newview/llviewerdisplay.h mode change 100644 => 100755 indra/newview/llviewerfloaterreg.cpp mode change 100644 => 100755 indra/newview/llviewerfloaterreg.h mode change 100644 => 100755 indra/newview/llviewerfoldertype.cpp mode change 100644 => 100755 indra/newview/llviewerfoldertype.h mode change 100644 => 100755 indra/newview/llviewergenericmessage.cpp mode change 100644 => 100755 indra/newview/llviewergenericmessage.h mode change 100644 => 100755 indra/newview/llviewergesture.cpp mode change 100644 => 100755 indra/newview/llviewergesture.h mode change 100644 => 100755 indra/newview/llviewerhelp.cpp mode change 100644 => 100755 indra/newview/llviewerhelp.h mode change 100644 => 100755 indra/newview/llviewerhelputil.cpp mode change 100644 => 100755 indra/newview/llviewerhelputil.h mode change 100644 => 100755 indra/newview/llviewerhome.cpp mode change 100644 => 100755 indra/newview/llviewerhome.h mode change 100644 => 100755 indra/newview/llviewerinventory.cpp mode change 100644 => 100755 indra/newview/llviewerinventory.h mode change 100644 => 100755 indra/newview/llviewerjoint.cpp mode change 100644 => 100755 indra/newview/llviewerjoint.h mode change 100644 => 100755 indra/newview/llviewerjointattachment.cpp mode change 100644 => 100755 indra/newview/llviewerjointattachment.h mode change 100644 => 100755 indra/newview/llviewerjointmesh.cpp mode change 100644 => 100755 indra/newview/llviewerjointmesh.h mode change 100644 => 100755 indra/newview/llviewerjointmesh_sse.cpp mode change 100644 => 100755 indra/newview/llviewerjointmesh_sse2.cpp mode change 100644 => 100755 indra/newview/llviewerjointmesh_vec.cpp mode change 100644 => 100755 indra/newview/llviewerjoystick.cpp mode change 100644 => 100755 indra/newview/llviewerjoystick.h mode change 100644 => 100755 indra/newview/llviewerkeyboard.cpp mode change 100644 => 100755 indra/newview/llviewerkeyboard.h mode change 100644 => 100755 indra/newview/llviewerlayer.cpp mode change 100644 => 100755 indra/newview/llviewerlayer.h mode change 100644 => 100755 indra/newview/llviewermedia.cpp mode change 100644 => 100755 indra/newview/llviewermedia.h mode change 100644 => 100755 indra/newview/llviewermedia_streamingaudio.cpp mode change 100644 => 100755 indra/newview/llviewermedia_streamingaudio.h mode change 100644 => 100755 indra/newview/llviewermediafocus.cpp mode change 100644 => 100755 indra/newview/llviewermediafocus.h mode change 100644 => 100755 indra/newview/llviewermediaobserver.h mode change 100644 => 100755 indra/newview/llviewermenu.cpp mode change 100644 => 100755 indra/newview/llviewermenu.h mode change 100644 => 100755 indra/newview/llviewermenufile.cpp mode change 100644 => 100755 indra/newview/llviewermenufile.h mode change 100644 => 100755 indra/newview/llviewermessage.cpp mode change 100644 => 100755 indra/newview/llviewermessage.h mode change 100644 => 100755 indra/newview/llviewernetwork.cpp mode change 100644 => 100755 indra/newview/llviewernetwork.h mode change 100644 => 100755 indra/newview/llviewerobject.cpp mode change 100644 => 100755 indra/newview/llviewerobject.h mode change 100644 => 100755 indra/newview/llviewerobjectlist.cpp mode change 100644 => 100755 indra/newview/llviewerobjectlist.h mode change 100644 => 100755 indra/newview/llviewerparcelmedia.cpp mode change 100644 => 100755 indra/newview/llviewerparcelmedia.h mode change 100644 => 100755 indra/newview/llviewerparcelmediaautoplay.cpp mode change 100644 => 100755 indra/newview/llviewerparcelmediaautoplay.h mode change 100644 => 100755 indra/newview/llviewerparcelmgr.cpp mode change 100644 => 100755 indra/newview/llviewerparcelmgr.h mode change 100644 => 100755 indra/newview/llviewerparceloverlay.cpp mode change 100644 => 100755 indra/newview/llviewerparceloverlay.h mode change 100644 => 100755 indra/newview/llviewerpartsim.cpp mode change 100644 => 100755 indra/newview/llviewerpartsim.h mode change 100644 => 100755 indra/newview/llviewerpartsource.cpp mode change 100644 => 100755 indra/newview/llviewerpartsource.h mode change 100644 => 100755 indra/newview/llviewerprecompiledheaders.cpp mode change 100644 => 100755 indra/newview/llviewerprecompiledheaders.h mode change 100644 => 100755 indra/newview/llviewerregion.cpp mode change 100644 => 100755 indra/newview/llviewerregion.h mode change 100644 => 100755 indra/newview/llviewershadermgr.cpp mode change 100644 => 100755 indra/newview/llviewershadermgr.h mode change 100644 => 100755 indra/newview/llviewerstats.cpp mode change 100644 => 100755 indra/newview/llviewerstats.h mode change 100644 => 100755 indra/newview/llviewertexteditor.cpp mode change 100644 => 100755 indra/newview/llviewertexteditor.h mode change 100644 => 100755 indra/newview/llviewertexture.cpp mode change 100644 => 100755 indra/newview/llviewertexture.h mode change 100644 => 100755 indra/newview/llviewertextureanim.cpp mode change 100644 => 100755 indra/newview/llviewertextureanim.h mode change 100644 => 100755 indra/newview/llviewertexturelist.cpp mode change 100644 => 100755 indra/newview/llviewertexturelist.h mode change 100644 => 100755 indra/newview/llviewerthrottle.cpp mode change 100644 => 100755 indra/newview/llviewerthrottle.h mode change 100644 => 100755 indra/newview/llviewervisualparam.cpp mode change 100644 => 100755 indra/newview/llviewervisualparam.h mode change 100644 => 100755 indra/newview/llviewerwindow.cpp mode change 100644 => 100755 indra/newview/llviewerwindow.h mode change 100644 => 100755 indra/newview/llviewerwindowlistener.cpp mode change 100644 => 100755 indra/newview/llviewerwindowlistener.h mode change 100644 => 100755 indra/newview/llvlcomposition.cpp mode change 100644 => 100755 indra/newview/llvlcomposition.h mode change 100644 => 100755 indra/newview/llvlmanager.cpp mode change 100644 => 100755 indra/newview/llvlmanager.h mode change 100644 => 100755 indra/newview/llvoavatar.cpp mode change 100644 => 100755 indra/newview/llvoavatar.h mode change 100644 => 100755 indra/newview/llvoavatardefines.cpp mode change 100644 => 100755 indra/newview/llvoavatardefines.h mode change 100644 => 100755 indra/newview/llvoavatarself.cpp mode change 100644 => 100755 indra/newview/llvoavatarself.h mode change 100644 => 100755 indra/newview/llvocache.cpp mode change 100644 => 100755 indra/newview/llvocache.h mode change 100644 => 100755 indra/newview/llvoclouds.cpp mode change 100644 => 100755 indra/newview/llvoclouds.h mode change 100644 => 100755 indra/newview/llvograss.cpp mode change 100644 => 100755 indra/newview/llvograss.h mode change 100644 => 100755 indra/newview/llvoground.cpp mode change 100644 => 100755 indra/newview/llvoground.h mode change 100644 => 100755 indra/newview/llvoicechannel.cpp mode change 100644 => 100755 indra/newview/llvoicechannel.h mode change 100644 => 100755 indra/newview/llvoiceclient.cpp mode change 100644 => 100755 indra/newview/llvoiceclient.h mode change 100644 => 100755 indra/newview/llvoicevisualizer.cpp mode change 100644 => 100755 indra/newview/llvoicevisualizer.h mode change 100644 => 100755 indra/newview/llvoicevivox.cpp mode change 100644 => 100755 indra/newview/llvoicevivox.h mode change 100644 => 100755 indra/newview/llvoinventorylistener.cpp mode change 100644 => 100755 indra/newview/llvoinventorylistener.h mode change 100644 => 100755 indra/newview/llvopartgroup.cpp mode change 100644 => 100755 indra/newview/llvopartgroup.h mode change 100644 => 100755 indra/newview/llvosky.cpp mode change 100644 => 100755 indra/newview/llvosky.h mode change 100644 => 100755 indra/newview/llvosurfacepatch.cpp mode change 100644 => 100755 indra/newview/llvosurfacepatch.h mode change 100644 => 100755 indra/newview/llvotextbubble.cpp mode change 100644 => 100755 indra/newview/llvotextbubble.h mode change 100644 => 100755 indra/newview/llvotree.cpp mode change 100644 => 100755 indra/newview/llvotree.h mode change 100644 => 100755 indra/newview/llvotreenew.h mode change 100644 => 100755 indra/newview/llvovolume.cpp mode change 100644 => 100755 indra/newview/llvovolume.h mode change 100644 => 100755 indra/newview/llvowater.cpp mode change 100644 => 100755 indra/newview/llvowater.h mode change 100644 => 100755 indra/newview/llvowlsky.cpp mode change 100644 => 100755 indra/newview/llvowlsky.h mode change 100644 => 100755 indra/newview/llwatchdog.cpp mode change 100644 => 100755 indra/newview/llwatchdog.h mode change 100644 => 100755 indra/newview/llwaterparammanager.cpp mode change 100644 => 100755 indra/newview/llwaterparammanager.h mode change 100644 => 100755 indra/newview/llwaterparamset.cpp mode change 100644 => 100755 indra/newview/llwaterparamset.h mode change 100644 => 100755 indra/newview/llwearable.cpp mode change 100644 => 100755 indra/newview/llwearable.h mode change 100644 => 100755 indra/newview/llwearableitemslist.cpp mode change 100644 => 100755 indra/newview/llwearableitemslist.h mode change 100644 => 100755 indra/newview/llwearablelist.cpp mode change 100644 => 100755 indra/newview/llwearablelist.h mode change 100644 => 100755 indra/newview/llwearabletype.cpp mode change 100644 => 100755 indra/newview/llwearabletype.h mode change 100644 => 100755 indra/newview/llweb.cpp mode change 100644 => 100755 indra/newview/llweb.h mode change 100644 => 100755 indra/newview/llwebsharing.cpp mode change 100644 => 100755 indra/newview/llwebsharing.h mode change 100644 => 100755 indra/newview/llwind.cpp mode change 100644 => 100755 indra/newview/llwind.h mode change 100644 => 100755 indra/newview/llwindebug.cpp mode change 100644 => 100755 indra/newview/llwindebug.h mode change 100644 => 100755 indra/newview/llwlanimator.cpp mode change 100644 => 100755 indra/newview/llwlanimator.h mode change 100644 => 100755 indra/newview/llwldaycycle.cpp mode change 100644 => 100755 indra/newview/llwldaycycle.h mode change 100644 => 100755 indra/newview/llwlparammanager.cpp mode change 100644 => 100755 indra/newview/llwlparammanager.h mode change 100644 => 100755 indra/newview/llwlparamset.cpp mode change 100644 => 100755 indra/newview/llwlparamset.h mode change 100644 => 100755 indra/newview/llworld.cpp mode change 100644 => 100755 indra/newview/llworld.h mode change 100644 => 100755 indra/newview/llworldmap.cpp mode change 100644 => 100755 indra/newview/llworldmap.h mode change 100644 => 100755 indra/newview/llworldmapmessage.cpp mode change 100644 => 100755 indra/newview/llworldmapmessage.h mode change 100644 => 100755 indra/newview/llworldmapview.cpp mode change 100644 => 100755 indra/newview/llworldmapview.h mode change 100644 => 100755 indra/newview/llworldmipmap.cpp mode change 100644 => 100755 indra/newview/llworldmipmap.h mode change 100644 => 100755 indra/newview/llworldview.cpp mode change 100644 => 100755 indra/newview/llxmlrpclistener.cpp mode change 100644 => 100755 indra/newview/llxmlrpclistener.h mode change 100644 => 100755 indra/newview/llxmlrpctransaction.cpp mode change 100644 => 100755 indra/newview/llxmlrpctransaction.h mode change 100644 => 100755 indra/newview/macmain.h mode change 100644 => 100755 indra/newview/macutil_Prefix.h mode change 100644 => 100755 indra/newview/macview.r mode change 100644 => 100755 indra/newview/macview_Prefix.h mode change 100644 => 100755 indra/newview/nl.lproj/language.txt mode change 100644 => 100755 indra/newview/noise.cpp mode change 100644 => 100755 indra/newview/noise.h mode change 100644 => 100755 indra/newview/pipeline.cpp mode change 100644 => 100755 indra/newview/pipeline.h mode change 100644 => 100755 indra/newview/pl.lproj/language.txt mode change 100644 => 100755 indra/newview/pt.lproj/language.txt mode change 100644 => 100755 indra/newview/res-sdl/arrow.BMP mode change 100644 => 100755 indra/newview/res-sdl/arrowcop.BMP mode change 100644 => 100755 indra/newview/res-sdl/arrowcopmulti.BMP mode change 100644 => 100755 indra/newview/res-sdl/arrowdrag.BMP mode change 100644 => 100755 indra/newview/res-sdl/circleandline.BMP mode change 100644 => 100755 indra/newview/res-sdl/cross.BMP mode change 100644 => 100755 indra/newview/res-sdl/hand.BMP mode change 100644 => 100755 indra/newview/res-sdl/ibeam.BMP mode change 100644 => 100755 indra/newview/res-sdl/ll_icon.BMP mode change 100644 => 100755 indra/newview/res-sdl/llarrow.BMP mode change 100644 => 100755 indra/newview/res-sdl/llarrowdrag.BMP mode change 100644 => 100755 indra/newview/res-sdl/llarrowdragmulti.BMP mode change 100644 => 100755 indra/newview/res-sdl/llarrowlocked.BMP mode change 100644 => 100755 indra/newview/res-sdl/llgrablocked.BMP mode change 100644 => 100755 indra/newview/res-sdl/llno.BMP mode change 100644 => 100755 indra/newview/res-sdl/llnolocked.BMP mode change 100644 => 100755 indra/newview/res-sdl/lltoolcamera.BMP mode change 100644 => 100755 indra/newview/res-sdl/lltoolcreate.BMP mode change 100644 => 100755 indra/newview/res-sdl/lltoolfocus.BMP mode change 100644 => 100755 indra/newview/res-sdl/lltoolgrab.BMP mode change 100644 => 100755 indra/newview/res-sdl/lltoolland.BMP mode change 100644 => 100755 indra/newview/res-sdl/lltoolpan.BMP mode change 100644 => 100755 indra/newview/res-sdl/lltoolpipette.BMP mode change 100644 => 100755 indra/newview/res-sdl/lltoolrotate.BMP mode change 100644 => 100755 indra/newview/res-sdl/lltoolscale.BMP mode change 100644 => 100755 indra/newview/res-sdl/lltooltranslate.BMP mode change 100644 => 100755 indra/newview/res-sdl/lltoolzoomin.BMP mode change 100644 => 100755 indra/newview/res-sdl/lltoolzoomout.BMP mode change 100644 => 100755 indra/newview/res-sdl/sizenesw.BMP mode change 100644 => 100755 indra/newview/res-sdl/sizens.BMP mode change 100644 => 100755 indra/newview/res-sdl/sizenwse.BMP mode change 100644 => 100755 indra/newview/res-sdl/sizewe.BMP mode change 100644 => 100755 indra/newview/res-sdl/toolbuy.BMP mode change 100644 => 100755 indra/newview/res-sdl/toolmediaopen.BMP mode change 100644 => 100755 indra/newview/res-sdl/toolopen.BMP mode change 100644 => 100755 indra/newview/res-sdl/toolpause.BMP mode change 100644 => 100755 indra/newview/res-sdl/toolpickobject.BMP mode change 100644 => 100755 indra/newview/res-sdl/toolpickobject2.BMP mode change 100644 => 100755 indra/newview/res-sdl/toolpickobject3.BMP mode change 100644 => 100755 indra/newview/res-sdl/toolplay.BMP mode change 100644 => 100755 indra/newview/res-sdl/toolsit.BMP mode change 100644 => 100755 indra/newview/res-sdl/wait.BMP mode change 100644 => 100755 indra/newview/res-sdl/working.BMP mode change 100644 => 100755 indra/newview/res/arrow.cur mode change 100644 => 100755 indra/newview/res/arrowcop.cur mode change 100644 => 100755 indra/newview/res/arrowcopmulti.cur mode change 100644 => 100755 indra/newview/res/arrowdrag.cur mode change 100644 => 100755 indra/newview/res/bitmap2.bmp mode change 100644 => 100755 indra/newview/res/circleandline.cur mode change 100644 => 100755 indra/newview/res/have_artwork_bundle.marker mode change 100644 => 100755 indra/newview/res/icon1.ico mode change 100644 => 100755 indra/newview/res/install_icon.BMP mode change 100644 => 100755 indra/newview/res/ll_icon.BMP mode change 100644 => 100755 indra/newview/res/ll_icon.ico mode change 100644 => 100755 indra/newview/res/ll_icon.png mode change 100644 => 100755 indra/newview/res/llarrow.cur mode change 100644 => 100755 indra/newview/res/llarrowdrag.cur mode change 100644 => 100755 indra/newview/res/llarrowdragmulti.cur mode change 100644 => 100755 indra/newview/res/llarrowlocked.cur mode change 100644 => 100755 indra/newview/res/llgrablocked.cur mode change 100644 => 100755 indra/newview/res/llno.cur mode change 100644 => 100755 indra/newview/res/llnolocked.cur mode change 100644 => 100755 indra/newview/res/lltoolcamera.cur mode change 100644 => 100755 indra/newview/res/lltoolcreate.cur mode change 100644 => 100755 indra/newview/res/lltoolfocus.cur mode change 100644 => 100755 indra/newview/res/lltoolgrab.cur mode change 100644 => 100755 indra/newview/res/lltoolland.cur mode change 100644 => 100755 indra/newview/res/lltoolpan.cur mode change 100644 => 100755 indra/newview/res/lltoolpipette.cur mode change 100644 => 100755 indra/newview/res/lltoolrotate.cur mode change 100644 => 100755 indra/newview/res/lltoolscale.cur mode change 100644 => 100755 indra/newview/res/lltooltranslate.cur mode change 100644 => 100755 indra/newview/res/lltoolzoomin.cur mode change 100644 => 100755 indra/newview/res/lltoolzoomout.cur mode change 100644 => 100755 indra/newview/res/loginbackground.bmp mode change 100644 => 100755 indra/newview/res/resource.h mode change 100644 => 100755 indra/newview/res/toolbuy.cur mode change 100644 => 100755 indra/newview/res/toolmediaopen.cur mode change 100644 => 100755 indra/newview/res/toolopen.cur mode change 100644 => 100755 indra/newview/res/toolpause.cur mode change 100644 => 100755 indra/newview/res/toolpickobject.cur mode change 100644 => 100755 indra/newview/res/toolpickobject2.cur mode change 100644 => 100755 indra/newview/res/toolpickobject3.cur mode change 100644 => 100755 indra/newview/res/toolpipette.cur mode change 100644 => 100755 indra/newview/res/toolplay.cur mode change 100644 => 100755 indra/newview/res/toolsit.cur mode change 100644 => 100755 indra/newview/res/uninstall_icon.BMP mode change 100644 => 100755 indra/newview/res/viewerRes.rc mode change 100644 => 100755 indra/newview/ru.lproj/language.txt mode change 100644 => 100755 indra/newview/secondlife-i686.supp mode change 100644 => 100755 indra/newview/secondlife.icns mode change 100644 => 100755 indra/newview/secondlife_firstlook.icns mode change 100644 => 100755 indra/newview/skins/default/colors.xml mode change 100644 => 100755 indra/newview/skins/default/html/btn_purplepill_bg.png mode change 100644 => 100755 indra/newview/skins/default/html/da/loading/loading.html mode change 100644 => 100755 indra/newview/skins/default/html/de/loading-error/index.html mode change 100644 => 100755 indra/newview/skins/default/html/de/loading/loading.html mode change 100644 => 100755 indra/newview/skins/default/html/en-us/help-offline/index.html mode change 100644 => 100755 indra/newview/skins/default/html/en-us/loading-error/index.html mode change 100644 => 100755 indra/newview/skins/default/html/en-us/loading/loading.html mode change 100644 => 100755 indra/newview/skins/default/html/en-us/loading/sl_logo_rotate_black.gif mode change 100644 => 100755 indra/newview/skins/default/html/es/loading-error/index.html mode change 100644 => 100755 indra/newview/skins/default/html/es/loading/loading.html mode change 100644 => 100755 indra/newview/skins/default/html/fr/loading-error/index.html mode change 100644 => 100755 indra/newview/skins/default/html/fr/loading/loading.html mode change 100644 => 100755 indra/newview/skins/default/html/hu/loading/loading.html mode change 100644 => 100755 indra/newview/skins/default/html/it/loading/loading.html mode change 100644 => 100755 indra/newview/skins/default/html/ja/loading-error/index.html mode change 100644 => 100755 indra/newview/skins/default/html/ja/loading/loading.html mode change 100644 => 100755 indra/newview/skins/default/html/ko/loading-error/index.html mode change 100644 => 100755 indra/newview/skins/default/html/nl/loading/loading.html mode change 100644 => 100755 indra/newview/skins/default/html/pl/loading/loading.html mode change 100644 => 100755 indra/newview/skins/default/html/pt/loading-error/index.html mode change 100644 => 100755 indra/newview/skins/default/html/pt/loading/loading.html mode change 100644 => 100755 indra/newview/skins/default/html/ru/loading/loading.html mode change 100644 => 100755 indra/newview/skins/default/html/tr/loading/loading.html mode change 100644 => 100755 indra/newview/skins/default/html/uk/loading/loading.html mode change 100644 => 100755 indra/newview/skins/default/html/unabletoconnect.png mode change 100644 => 100755 indra/newview/skins/default/html/zh/loading-error/index.html mode change 100644 => 100755 indra/newview/skins/default/html/zh/loading/loading.html mode change 100644 => 100755 indra/newview/skins/default/textures/Blank.png mode change 100644 => 100755 indra/newview/skins/default/textures/alpha_gradient.tga mode change 100644 => 100755 indra/newview/skins/default/textures/alpha_gradient_2d.j2c mode change 100644 => 100755 indra/newview/skins/default/textures/arrow_down.tga mode change 100644 => 100755 indra/newview/skins/default/textures/arrow_up.tga mode change 100644 => 100755 indra/newview/skins/default/textures/avatar_thumb_bkgrnd.png mode change 100644 => 100755 indra/newview/skins/default/textures/badge_note.j2c mode change 100644 => 100755 indra/newview/skins/default/textures/badge_ok.j2c mode change 100644 => 100755 indra/newview/skins/default/textures/badge_warn.j2c mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Cam_Avatar_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Cam_FreeCam_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Cam_Orbit_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Cam_Pan_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Cam_Pan_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Eye_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Cam_Rotate_In.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Cam_Rotate_Out.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Cam_Tracking_In.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Cam_Tracking_Out.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/CameraView_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/DownArrow.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Mouselook_View_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Mouselook_View_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Move_Run_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Move_Walk_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Movement_Backward_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Movement_Backward_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Movement_Down_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Movement_Down_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Movement_Forward_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Movement_Forward_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Movement_Left_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Movement_Left_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Movement_Right_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Movement_Right_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Movement_TurnLeft_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Movement_TurnLeft_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Movement_TurnRight_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Movement_TurnRight_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Movement_Up_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Movement_Up_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Notices_Unread.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Object_View_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Object_View_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/PanOrbit_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/PanOrbit_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/PanOrbit_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/PanOrbit_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Unread_Chiclet.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/Unread_IM.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/VoicePTT_Lvl1.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/VoicePTT_Lvl2.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/VoicePTT_Lvl3.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/VoicePTT_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/VoicePTT_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/WellButton_Lit.png mode change 100644 => 100755 indra/newview/skins/default/textures/bottomtray/WellButton_Lit_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Cone.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Cone_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Cube.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Cube_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Cylinder.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Cylinder_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Grass.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Grass_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Hemi_Cone.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Hemi_Cone_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Hemi_Cylinder.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Hemi_Cylinder_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Hemi_Sphere.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Hemi_Sphere_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Prism.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Prism_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Pyramid.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Pyramid_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Ring.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Ring_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Sphere.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Sphere_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Tetrahedron.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Tetrahedron_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Torus.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Torus_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Tree.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Tree_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Tube.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Object_Tube_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Tool_Create.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Tool_Dozer.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Tool_Face.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Tool_Grab.png mode change 100644 => 100755 indra/newview/skins/default/textures/build/Tool_Zoom.png mode change 100644 => 100755 indra/newview/skins/default/textures/button_anim_pause.tga mode change 100644 => 100755 indra/newview/skins/default/textures/button_anim_pause_selected.tga mode change 100644 => 100755 indra/newview/skins/default/textures/button_anim_play.tga mode change 100644 => 100755 indra/newview/skins/default/textures/button_anim_play_selected.tga mode change 100644 => 100755 indra/newview/skins/default/textures/checkerboard_transparency_bg.png mode change 100644 => 100755 indra/newview/skins/default/textures/circle.tga mode change 100644 => 100755 indra/newview/skins/default/textures/cloud-particle.j2c mode change 100644 => 100755 indra/newview/skins/default/textures/color_swatch_alpha.tga mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Accordion_ArrowClosed_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Accordion_ArrowClosed_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Accordion_ArrowClosed_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Accordion_ArrowOpened_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Accordion_ArrowOpened_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Accordion_ArrowOpened_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Accordion_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Accordion_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Accordion_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Accordion_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Container.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/TabTop_Left_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/TabTop_Left_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/TabTop_Left_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/TabTop_Middle_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/TabTop_Middle_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/TabTop_Middle_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/TabTop_Right_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/TabTop_Right_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/TabTop_Right_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Toolbar_Left_Flash.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Toolbar_Left_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Toolbar_Left_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Toolbar_Left_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Toolbar_Middle_Flash.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Toolbar_Middle_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Toolbar_Middle_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Toolbar_Middle_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Toolbar_Right_Flash.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Toolbar_Right_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Toolbar_Right_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/containers/Toolbar_Right_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/crosshairs.tga mode change 100644 => 100755 indra/newview/skins/default/textures/default_land_picture.j2c mode change 100644 => 100755 indra/newview/skins/default/textures/default_profile_picture.j2c mode change 100644 => 100755 indra/newview/skins/default/textures/direction_arrow.tga mode change 100644 => 100755 indra/newview/skins/default/textures/down_arrow.png mode change 100644 => 100755 indra/newview/skins/default/textures/eye_button_active.tga mode change 100644 => 100755 indra/newview/skins/default/textures/eye_button_inactive.tga mode change 100644 => 100755 indra/newview/skins/default/textures/ff_edit_mine.tga mode change 100644 => 100755 indra/newview/skins/default/textures/ff_edit_mine_button.tga mode change 100644 => 100755 indra/newview/skins/default/textures/ff_edit_theirs.tga mode change 100644 => 100755 indra/newview/skins/default/textures/ff_edit_theirs_button.tga mode change 100644 => 100755 indra/newview/skins/default/textures/ff_online_status_button.tga mode change 100644 => 100755 indra/newview/skins/default/textures/ff_visible_map.tga mode change 100644 => 100755 indra/newview/skins/default/textures/ff_visible_map_button.tga mode change 100644 => 100755 indra/newview/skins/default/textures/ff_visible_online.tga mode change 100644 => 100755 indra/newview/skins/default/textures/ff_visible_online_button.tga mode change 100644 => 100755 indra/newview/skins/default/textures/folder_arrow.tga mode change 100644 => 100755 indra/newview/skins/default/textures/foot_shadow.j2c mode change 100644 => 100755 indra/newview/skins/default/textures/icn_label_web.tga mode change 100644 => 100755 indra/newview/skins/default/textures/icn_media.tga mode change 100644 => 100755 indra/newview/skins/default/textures/icn_media_movie.tga mode change 100644 => 100755 indra/newview/skins/default/textures/icn_media_web.tga mode change 100644 => 100755 indra/newview/skins/default/textures/icn_voice-groupfocus.tga mode change 100644 => 100755 indra/newview/skins/default/textures/icn_voice-localchat.tga mode change 100644 => 100755 indra/newview/skins/default/textures/icn_voice-pvtfocus.tga mode change 100644 => 100755 indra/newview/skins/default/textures/icon_avatar_offline.tga mode change 100644 => 100755 indra/newview/skins/default/textures/icon_avatar_online.tga mode change 100644 => 100755 indra/newview/skins/default/textures/icon_day_cycle.tga mode change 100644 => 100755 indra/newview/skins/default/textures/icon_diurnal.tga mode change 100644 => 100755 indra/newview/skins/default/textures/icon_event_adult.tga mode change 100644 => 100755 indra/newview/skins/default/textures/icon_for_sale_adult.tga mode change 100644 => 100755 indra/newview/skins/default/textures/icon_lock.tga mode change 100644 => 100755 indra/newview/skins/default/textures/icon_top_pick.tga mode change 100644 => 100755 indra/newview/skins/default/textures/icons/AddItem_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/AddItem_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/AddItem_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/AddItem_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/AudioMute_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/AudioMute_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Audio_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Audio_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/BackArrow_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/BackArrow_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/DownArrow_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/DragHandle.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Edit_Wrench.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/ExternalBrowser_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Female.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/ForSale_Badge.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/ForwardArrow_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/ForwardArrow_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Generic_Group.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Generic_Group_Large.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Generic_Object.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Generic_Object_Small.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Generic_Person.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Generic_Person_Large.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Hierarchy_View_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Hierarchy_View_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Icon_For_Sale.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Info.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Info_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Info_Small.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Alpha.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Animation.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_BodyShape.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_CallingCard.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Clothing.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Eye.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_FolderClosed.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_FolderOpen.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Gesture.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Gloves.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Hair.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Jacket.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Landmark.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Link.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_LinkFolder.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_LinkItem.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_LookFolderClosed.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_LookFolderOpen.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_LostClosed.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_LostOpen.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Notecard.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Object.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Object_Multi.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Pants.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Script.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Shirt.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Shoe.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Skin.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Skirt.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Snapshot.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Socks.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Sound.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_SysClosed.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_SysOpen.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Tattoo.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Texture.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_TrashClosed.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_TrashOpen.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Underpants.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Inv_Undershirt.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/List_View_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/List_View_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Lock.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Locked_Icon.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Male.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Microphone_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/MinusItem_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/MinusItem_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/MinusItem_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/OptionsMenu_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/OptionsMenu_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/OptionsMenu_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/OptionsMenu_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_BuildNo_Dark.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_BuildNo_Light.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_Build_Dark.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_DamageNo_Dark.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_Damage_Dark.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_Damage_Light_Alt.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_Exp_Color.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_ForSale_Light.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_Health_Dark.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_M_Dark.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_M_Light.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_NoScripts_Light.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_PG_Dark.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_PG_Light.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_PushNo_Dark.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_PushNo_Light.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_Push_Dark.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_R_Dark.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_R_Light.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_ScriptsNo_Dark.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_Scripts_Dark.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_VoiceNo_Dark.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_VoiceNo_Light.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_Voice_Dark.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Parcel_Voice_Light.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Pause_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Pause_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Pause_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Play_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Play_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Play_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Progress_1.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Progress_10.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Progress_11.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Progress_12.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Progress_2.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Progress_3.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Progress_4.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Progress_5.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Progress_6.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Progress_7.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Progress_8.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Progress_9.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Refresh_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/SL_Logo.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Search_Icon.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Shirt_Large.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Shop.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/SkipBackward_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/SkipForward_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/StopReload_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/StopReload_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Stop_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/TrashItem_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/TrashItem_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/TrashItem_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/TrashItem_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/UnZoom_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/UpArrow_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/VoicePTT_Lvl1.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/VoicePTT_Lvl2.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/VoicePTT_Lvl3.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/VoicePTT_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/VoicePTT_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/YouAreHere_Badge.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/Zoom_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/avaline_default_icon.jpg mode change 100644 => 100755 indra/newview/skins/default/textures/icons/back_arrow_off.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/back_arrow_over.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/back_arrow_press.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/object_icon.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/parcel_color_EVRY.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/parcel_color_EXP.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/parcel_color_M.png mode change 100644 => 100755 indra/newview/skins/default/textures/icons/unknown_icon.png mode change 100644 => 100755 indra/newview/skins/default/textures/image_edit_icon.tga mode change 100644 => 100755 indra/newview/skins/default/textures/inv_folder_animation.tga mode change 100644 => 100755 indra/newview/skins/default/textures/inv_folder_inbox.tga mode change 100644 => 100755 indra/newview/skins/default/textures/jump_left_in.tga mode change 100644 => 100755 indra/newview/skins/default/textures/jump_left_out.tga mode change 100644 => 100755 indra/newview/skins/default/textures/jump_right_in.tga mode change 100644 => 100755 indra/newview/skins/default/textures/jump_right_out.tga mode change 100644 => 100755 indra/newview/skins/default/textures/lag_status_critical.tga mode change 100644 => 100755 indra/newview/skins/default/textures/lag_status_good.tga mode change 100644 => 100755 indra/newview/skins/default/textures/lag_status_warning.tga mode change 100644 => 100755 indra/newview/skins/default/textures/legend.tga mode change 100644 => 100755 indra/newview/skins/default/textures/locked_image.j2c mode change 100644 => 100755 indra/newview/skins/default/textures/map_avatar_16.tga mode change 100644 => 100755 indra/newview/skins/default/textures/map_avatar_32.tga mode change 100644 => 100755 indra/newview/skins/default/textures/map_avatar_8.tga mode change 100644 => 100755 indra/newview/skins/default/textures/map_avatar_above_32.tga mode change 100644 => 100755 indra/newview/skins/default/textures/map_avatar_above_8.tga mode change 100644 => 100755 indra/newview/skins/default/textures/map_avatar_below_32.tga mode change 100644 => 100755 indra/newview/skins/default/textures/map_avatar_below_8.tga mode change 100644 => 100755 indra/newview/skins/default/textures/map_avatar_you_32.tga mode change 100644 => 100755 indra/newview/skins/default/textures/map_event.tga mode change 100644 => 100755 indra/newview/skins/default/textures/map_event_adult.tga mode change 100644 => 100755 indra/newview/skins/default/textures/map_event_mature.tga mode change 100644 => 100755 indra/newview/skins/default/textures/map_home.tga mode change 100644 => 100755 indra/newview/skins/default/textures/map_infohub.tga mode change 100644 => 100755 indra/newview/skins/default/textures/map_telehub.tga mode change 100644 => 100755 indra/newview/skins/default/textures/map_track_16.tga mode change 100644 => 100755 indra/newview/skins/default/textures/map_track_8.tga mode change 100644 => 100755 indra/newview/skins/default/textures/menu_separator.png mode change 100644 => 100755 indra/newview/skins/default/textures/missing_asset.tga mode change 100644 => 100755 indra/newview/skins/default/textures/mute_icon.tga mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Arrow_Left_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Arrow_Left_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Arrow_Right_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Arrow_Right_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/BuyArrow_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/BuyArrow_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Favorite_Link_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Favorite_Star_Active.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Favorite_Star_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Favorite_Star_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Favorite_Star_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/FileMenu_Divider.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Flag.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Help_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Help_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Home_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Home_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Info_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Info_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Info_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Lock.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/NavBar_BG.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/NavBar_BG_NoFav_Bevel.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/NavBar_BG_NoNav_Bevel.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Row_Selection.png mode change 100644 => 100755 indra/newview/skins/default/textures/navbar/Search.png mode change 100644 => 100755 indra/newview/skins/default/textures/notify_caution_icon.tga mode change 100644 => 100755 indra/newview/skins/default/textures/pixiesmall.j2c mode change 100644 => 100755 indra/newview/skins/default/textures/places_rating_adult.tga mode change 100644 => 100755 indra/newview/skins/default/textures/places_rating_mature.tga mode change 100644 => 100755 indra/newview/skins/default/textures/places_rating_pg.tga mode change 100644 => 100755 indra/newview/skins/default/textures/propertyline.tga mode change 100644 => 100755 indra/newview/skins/default/textures/quick_tips/avatar_free_mode.png mode change 100644 => 100755 indra/newview/skins/default/textures/quick_tips/camera_free_mode.png mode change 100644 => 100755 indra/newview/skins/default/textures/quick_tips/camera_orbit_mode.png mode change 100644 => 100755 indra/newview/skins/default/textures/quick_tips/camera_pan_mode.png mode change 100644 => 100755 indra/newview/skins/default/textures/quick_tips/camera_preset_front_view.png mode change 100644 => 100755 indra/newview/skins/default/textures/quick_tips/camera_preset_group_view.png mode change 100644 => 100755 indra/newview/skins/default/textures/quick_tips/camera_preset_rear_view.png mode change 100644 => 100755 indra/newview/skins/default/textures/quick_tips/move_fly_first.png mode change 100644 => 100755 indra/newview/skins/default/textures/quick_tips/move_fly_second.png mode change 100644 => 100755 indra/newview/skins/default/textures/quick_tips/move_run_first.png mode change 100644 => 100755 indra/newview/skins/default/textures/quick_tips/move_run_second.png mode change 100644 => 100755 indra/newview/skins/default/textures/quick_tips/move_walk_first.png mode change 100644 => 100755 indra/newview/skins/default/textures/quick_tips/move_walk_second.png mode change 100644 => 100755 indra/newview/skins/default/textures/rounded_square.j2c mode change 100644 => 100755 indra/newview/skins/default/textures/script_error.j2c mode change 100644 => 100755 indra/newview/skins/default/textures/show_btn.tga mode change 100644 => 100755 indra/newview/skins/default/textures/show_btn_selected.tga mode change 100644 => 100755 indra/newview/skins/default/textures/silhouette.j2c mode change 100644 => 100755 indra/newview/skins/default/textures/slim_icon_16_viewer.tga mode change 100644 => 100755 indra/newview/skins/default/textures/smicon_warn.tga mode change 100644 => 100755 indra/newview/skins/default/textures/spacer24.tga mode change 100644 => 100755 indra/newview/skins/default/textures/spacer35.tga mode change 100644 => 100755 indra/newview/skins/default/textures/square_btn_32x128.tga mode change 100644 => 100755 indra/newview/skins/default/textures/square_btn_selected_32x128.tga mode change 100644 => 100755 indra/newview/skins/default/textures/startup_logo.j2c mode change 100644 => 100755 indra/newview/skins/default/textures/status_busy.tga mode change 100644 => 100755 indra/newview/skins/default/textures/tabarea.tga mode change 100644 => 100755 indra/newview/skins/default/textures/taskpanel/Activate_Checkmark.png mode change 100644 => 100755 indra/newview/skins/default/textures/taskpanel/TabIcon_Appearance_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/taskpanel/TabIcon_Appearance_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/taskpanel/TabIcon_Close_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/taskpanel/TabIcon_Me_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/taskpanel/TabIcon_Me_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/taskpanel/TabIcon_Open_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/taskpanel/TabIcon_People_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/taskpanel/TabIcon_People_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Large.png mode change 100644 => 100755 indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/taskpanel/TabIcon_Things_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/taskpanel/TabIcon_Things_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/taskpanel/TaskPanel_Tab_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/taskpanel/TaskPanel_Tab_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/tearoff_pressed.tga mode change 100644 => 100755 indra/newview/skins/default/textures/tearoffbox.tga mode change 100644 => 100755 indra/newview/skins/default/textures/textures.xml mode change 100644 => 100755 indra/newview/skins/default/textures/transparent.j2c mode change 100644 => 100755 indra/newview/skins/default/textures/up_arrow.png mode change 100644 => 100755 indra/newview/skins/default/textures/uv_test1.j2c mode change 100644 => 100755 indra/newview/skins/default/textures/uv_test2.tga mode change 100644 => 100755 indra/newview/skins/default/textures/voice_meter_dot.j2c mode change 100644 => 100755 indra/newview/skins/default/textures/voice_meter_rings.j2c mode change 100644 => 100755 indra/newview/skins/default/textures/white.tga mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Arrow_Down.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Arrow_Small_Left.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Arrow_Up.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Checkbox_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Checkbox_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Checkbox_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Checkbox_On_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Checkbox_On_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Checkbox_On_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Checkbox_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Checkbox_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ComboButton_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ComboButton_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ComboButton_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ComboButton_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ComboButton_UpOff.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ComboButton_UpSelected.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ComboButton_Up_On_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/DisclosureArrow_Closed_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/DisclosureArrow_Opened_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/DisclosureArrow_Opened_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/DropDown_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/DropDown_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/DropDown_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/DropDown_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/DropTarget.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Linden_Dollar_Alert.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ListItem_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ListItem_Select.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ProgressBar.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ProgressTrack.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/PushButton_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/PushButton_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/PushButton_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/PushButton_On_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/PushButton_On_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/PushButton_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/PushButton_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/PushButton_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/PushButton_Selected_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/PushButton_Selected_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/PushButton_Selected_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/RadioButton_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/RadioButton_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/RadioButton_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/RadioButton_On_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/RadioButton_On_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/RadioButton_On_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/RadioButton_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/RadioButton_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollArrow_Down.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Opaque.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Over_Opaque.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollArrow_Left.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Opaque.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Over_Opaque.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollArrow_Right.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Opaque.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Over_Opaque.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollArrow_Up.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Opaque.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Over_Opaque.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollThumb_Horiz.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollThumb_Horiz_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollThumb_Vert.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollThumb_Vert_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollTrack_Horiz.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/ScrollTrack_Vert.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_On_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_On_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_On_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_On_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_On_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Selected_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Selected_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Selected_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_On.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_On_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_On_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Selected.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Selected_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Selected_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Selected_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SliderThumb_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SliderThumb_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SliderThumb_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SliderThumb_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SliderTrack_Horiz.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/SliderTrack_Vert.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Stepper_Down_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Stepper_Down_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Stepper_Down_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Stepper_Up_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Stepper_Up_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Stepper_Up_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/TextField_Active.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/TextField_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/TextField_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/TextField_Search_Active.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/TextField_Search_Disabled.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/TextField_Search_Off.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/Tooltip.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/bevel_background.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/buy_off.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/buy_over.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/buy_press.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/jump_left_in.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/jump_left_out.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/jump_right_in.png mode change 100644 => 100755 indra/newview/skins/default/textures/widgets/jump_right_out.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Dragbar.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Flyout.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Flyout_Pointer.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Flyout_Pointer_Up.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Icon_Close_Foreground.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Icon_Close_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Icon_Close_Toast.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Icon_Dock_Foreground.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Icon_Dock_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Icon_Gear_Background.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Icon_Gear_Foreground.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Icon_Gear_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Icon_Gear_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Icon_Help_Foreground.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Icon_Help_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Icon_Minimize_Foreground.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Icon_Minimize_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Icon_Restore_Foreground.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Icon_Restore_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Icon_Undock_Foreground.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Icon_Undock_Press.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Inspector_Background.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Inspector_Hover.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Inspector_I.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Resize_Corner.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Toast_Background.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Toast_CloseBtn.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Toast_Over.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Volume_Background.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Wearables_Divider.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Window_Background.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Window_Foreground.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Window_NoTitle_Background.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/Window_NoTitle_Foreground.png mode change 100644 => 100755 indra/newview/skins/default/textures/windows/startup_logo.png mode change 100644 => 100755 indra/newview/skins/default/textures/world/BeaconArrow.png mode change 100644 => 100755 indra/newview/skins/default/textures/world/NoEntryLines.png mode change 100644 => 100755 indra/newview/skins/default/textures/world/NoEntryPassLines.png mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_about.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_about_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_activeim.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_animation_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_auction.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_avatar_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_avatar_textures.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_beacons.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_build_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_bulk_perms.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_bumps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_buy_contents.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_buy_currency.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_buy_currency_html.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_buy_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_buy_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_camera.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_choose_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_color_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_critical.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_customize.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_day_cycle_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_device_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_env_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_event.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_font_test.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_god_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_hardware_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_help_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_hud.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_im.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_im_container.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_im_session.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_image_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_incoming_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_inspect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_joystick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_lagmeter.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_land_holdings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_live_lsleditor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_lsl_guide.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_media_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_media_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_mem_leaking.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_moveview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_mute_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_my_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_openobject.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_outfit_save_as.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_outgoing_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_pay.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_pay_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_perm_prefs.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_postcard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_preferences.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_preview_animation.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_preview_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_preview_event.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_preview_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_preview_gesture_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_preview_gesture_shortcut.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_preview_gesture_steps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_preview_notecard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_preview_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_preview_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_publish_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_region_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_report_abuse.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_script_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_script_debug_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_script_limits.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_script_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_script_queue.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_script_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_select_key.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_sell_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_settings_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_snapshot.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_sound_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_statistics.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_stats.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_sys_well.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_telehub.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_texture_ctrl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_top_objects.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_tos.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_url_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_voice_controls.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_voice_effect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_water.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_wearable_save_as.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_whitelist_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_windlight_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_window_size.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/floater_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/inspect_avatar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/inspect_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/inspect_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/inspect_remote_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/language_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_attachment_other.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_attachment_self.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_avatar_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_avatar_other.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_avatar_self.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_bottomtray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_cof_attachment.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_cof_body_part.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_cof_clothing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_cof_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_edit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_favorites.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_gesture_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_group_plus.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_hide_navbar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_im_well_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_imchiclet_adhoc.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_imchiclet_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_imchiclet_p2p.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_inspect_object_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_inv_offer_chiclet.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_inventory_add.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_inventory_gear_default.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_mini_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_navbar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_notification_well_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_object_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_outfit_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_outfit_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_participant_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_people_friends_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_people_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_people_groups_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_people_nearby.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_people_nearby_multiselect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_people_nearby_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_people_recent_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_picks_plus.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_place.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_place_add_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_places_gear_folder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_places_gear_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_profile_overflow.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_save_outfit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_script_chiclet.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_teleport_history_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_teleport_history_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_teleport_history_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_text_editor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_topinfobar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_url_agent.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_url_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_url_http.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_url_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_url_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_url_objectim.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_url_parcel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_url_slapp.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_url_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_url_teleport.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_viewer.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_wearing_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/menu_wearing_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/mime_types.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/mime_types_linux.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/mime_types_mac.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/notifications.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/outfit_accordion_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_active_object_row.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_audio_device.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_avatar_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_block_list_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_body_parts_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_bodyparts_list_button_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_bottomtray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_bottomtray_lite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_classified_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_clothing_list_button_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_cof_wearables.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_deletable_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_dummy_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_alpha.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_eyes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_gloves.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_hair.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_jacket.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_pants.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_pick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_shape.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_shirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_shoes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_skin.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_skirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_socks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_tattoo.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_underpants.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_undershirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_edit_wearable.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_group_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_group_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_group_info_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_group_invite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_group_land_money.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_group_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_group_notices.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_group_notify.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_group_roles.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_im_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_inventory_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_landmark_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_landmarks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_main_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_me.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_media_settings_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_media_settings_permissions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_media_settings_security.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_my_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_navigation_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_nearby_chat_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_nearby_media.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_notes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_online_status.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_online_status_toast.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_outfit_edit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_outfits_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_outfits_inventory_gear_default.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_outfits_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_outfits_wearing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_people.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_pick_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_place_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_places.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_preferences_advanced.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_preferences_alerts.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_preferences_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_preferences_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_preferences_privacy.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_preferences_setup.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_preferences_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_prim_media_controls.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_profile_view.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_region_covenant.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_region_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_region_estate.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_region_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_region_general_layout.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_region_terrain.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_region_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_script_ed.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_script_limits_my_avatar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_script_limits_region_memory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_scrolling_param.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_side_tray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_side_tray_tab_caption.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_stand_stop_flying.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_status_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_teleport_history.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_teleport_history_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_voice_effect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/panel_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/role_actions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/sidepanel_appearance.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/sidepanel_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/sidepanel_item_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/sidepanel_task_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/teleport_strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/da/xui_version.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_about.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_about_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_activeim.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_animation_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_auction.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_avatar_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_avatar_textures.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_beacons.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_build_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_bulk_perms.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_bumps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_buy_contents.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_buy_currency.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_buy_currency_html.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_buy_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_buy_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_camera.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_choose_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_color_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_critical.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_customize.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_day_cycle_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_device_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_env_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_event.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_first_time_tip.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_font_test.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_god_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_hardware_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_help_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_hud.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_im.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_im_container.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_im_session.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_image_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_incoming_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_inspect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_joystick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_lagmeter.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_land_holdings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_live_lsleditor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_lsl_guide.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_media_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_media_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_mem_leaking.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_moveview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_mute_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_my_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_notification.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_notifications_console.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_openobject.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_outfit_save_as.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_outgoing_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_pay.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_pay_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_perm_prefs.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_post_process.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_postcard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_preferences.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_preview_animation.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_preview_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_preview_event.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_preview_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_preview_gesture_shortcut.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_preview_notecard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_preview_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_preview_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_publish_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_region_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_report_abuse.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_script_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_script_debug_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_script_limits.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_script_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_script_queue.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_script_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_select_key.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_sell_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_settings_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_snapshot.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_sound_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_statistics.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_stats.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_sys_well.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_telehub.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_texture_ctrl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_top_objects.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_tos.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_url_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_voice_controls.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_voice_effect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_water.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_wearable_save_as.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_whitelist_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_windlight_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_window_size.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/floater_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/inspect_avatar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/inspect_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/inspect_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/inspect_remote_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/language_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_attachment_other.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_attachment_self.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_avatar_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_avatar_other.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_avatar_self.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_bottomtray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_cof_attachment.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_cof_body_part.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_cof_clothing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_cof_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_edit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_favorites.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_gesture_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_group_plus.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_hide_navbar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_im_well_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_imchiclet_adhoc.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_imchiclet_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_imchiclet_p2p.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_inspect_avatar_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_inspect_object_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_inv_offer_chiclet.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_inventory_add.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_inventory_gear_default.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_mini_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_navbar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_notification_well_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_object_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_outfit_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_outfit_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_participant_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_people_friends_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_people_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_people_groups_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_people_nearby.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_people_nearby_multiselect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_people_recent_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_picks_plus.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_place.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_place_add_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_places_gear_folder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_places_gear_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_profile_overflow.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_save_outfit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_script_chiclet.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_teleport_history_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_teleport_history_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_teleport_history_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_text_editor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_topinfobar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_url_agent.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_url_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_url_http.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_url_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_url_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_url_objectim.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_url_parcel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_url_slapp.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_url_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_url_teleport.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_viewer.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_wearing_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/menu_wearing_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/mime_types.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/mime_types_linux.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/mime_types_mac.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/notifications.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/outfit_accordion_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_active_object_row.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_activeim_row.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_adhoc_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_audio_device.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_avatar_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_avatar_tag.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_block_list_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_body_parts_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_bodyparts_list_button_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_bottomtray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_bottomtray_lite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_chat_header.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_classified_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_clothing_list_button_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_cof_wearables.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_deletable_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_dummy_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_alpha.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_eyes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_gloves.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_hair.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_jacket.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_pants.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_pick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_shape.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_shirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_shoes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_skin.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_skirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_socks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_tattoo.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_underpants.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_undershirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_edit_wearable.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_group_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_group_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_group_invite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_group_land_money.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_group_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_group_notices.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_group_notify.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_group_roles.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_im_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_instant_message.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_inventory_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_landmark_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_landmarks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_main_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_me.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_media_settings_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_media_settings_permissions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_media_settings_security.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_my_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_navigation_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_nearby_media.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_notes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_notifications_channel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_online_status.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_online_status_toast.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_outfit_edit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_outfits_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_outfits_inventory_gear_default.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_outfits_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_outfits_wearing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_people.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_pick_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_place_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_places.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_preferences_advanced.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_preferences_alerts.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_preferences_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_preferences_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_preferences_privacy.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_preferences_setup.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_preferences_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_prim_media_controls.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_profile_view.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_region_covenant.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_region_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_region_estate.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_region_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_region_general_layout.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_region_terrain.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_region_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_script_ed.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_script_limits_my_avatar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_script_limits_region_memory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_scrolling_param.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_side_tray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_side_tray_tab_caption.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_sidetray_home_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_status_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_sys_well_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_teleport_history.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_teleport_history_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_voice_effect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/panel_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/role_actions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/sidepanel_appearance.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/sidepanel_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/sidepanel_item_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/sidepanel_task_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/teleport_strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/de/xui_version.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/accordion_drag.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/accordion_parent.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/alert_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/alert_check_box.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/alert_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/alert_line_editor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/favorites_bar_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_aaa.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_about.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_about_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_activeim.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_animation_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_auction.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_avatar_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_avatar_textures.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_beacons.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_build_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_bulk_perms.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_bumps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_buy_contents.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_buy_currency.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_buy_currency_html.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_buy_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_buy_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_camera.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_choose_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_color_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_critical.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_customize.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_day_cycle_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_device_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_env_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_event.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_first_time_tip.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_font_test.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_god_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_hardware_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_help_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_hud.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_im.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_im_container.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_im_session.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_image_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_import_collada.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_incoming_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_inspect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_joystick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_lagmeter.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_land_holdings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_live_lsleditor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_lsl_guide.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_media_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_media_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_mem_leaking.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_model_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_moveview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_mute_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_my_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_notification.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_notifications_console.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_openobject.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_outfit_save_as.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_outgoing_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_pay.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_pay_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_perm_prefs.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_post_process.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_postcard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_preferences.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_preview_animation.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_preview_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_preview_event.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_preview_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_preview_notecard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_preview_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_preview_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_price_for_listing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_publish_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_region_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_report_abuse.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_script.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_script_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_script_debug_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_script_limits.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_script_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_script_queue.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_script_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_select_key.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_sell_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_settings_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_snapshot.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_sound_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_statistics.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_stats.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_sys_well.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_telehub.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_test_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_test_checkbox.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_test_combobox.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_test_inspectors.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_test_layout.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_test_line_editor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_test_list_view.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_test_navigation_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_test_radiogroup.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_test_slider.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_test_spinner.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_test_text_editor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_test_textbox.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_test_widgets.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_texture_ctrl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_top_objects.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_tos.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_ui_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_url_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_voice_controls.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_voice_effect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_water.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_wearable_save_as.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_whitelist_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_windlight_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_window_size.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/floater_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/fonts.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/inspect_avatar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/inspect_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/inspect_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/inspect_remote_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/inspect_toast.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/inspector_info_ctrl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/language_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/main_view.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_add_wearable_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_attachment_other.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_attachment_self.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_avatar_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_avatar_other.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_avatar_self.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_bottomtray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_cof_attachment.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_cof_body_part.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_cof_clothing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_cof_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_edit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_favorites.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_gesture_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_group_plus.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_hide_navbar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_im_well_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_imchiclet_adhoc.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_imchiclet_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_inv_offer_chiclet.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_inventory_add.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_mini_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_navbar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_notification_well_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_object_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_outfit_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_outfit_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_participant_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_people_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_people_nearby.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_people_nearby_multiselect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_people_recent_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_picks_plus.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_place.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_place_add_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_places_gear_folder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_profile_overflow.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_save_outfit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_script_chiclet.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_teleport_history_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_teleport_history_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_teleport_history_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_text_editor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_topinfobar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_url_agent.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_url_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_url_http.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_url_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_url_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_url_objectim.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_url_parcel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_url_slapp.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_url_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_url_teleport.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_viewer.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_wearing_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/menu_wearing_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/mime_types.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/mime_types_linux.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/mime_types_mac.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/notifications.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/outfit_accordion_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_active_object_row.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_activeim_row.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_audio_device.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_avatar_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_avatar_tag.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_bodyparts_list_button_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_bottomtray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_chat_header.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_chat_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_chat_separator.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_classified_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_clothing_list_button_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_cof_wearables.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_deletable_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_alpha.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_eyes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_gloves.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_hair.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_jacket.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_pants.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_pick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_shape.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_shirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_shoes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_skin.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_skirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_socks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_tattoo.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_underpants.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_undershirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_edit_wearable.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_generic_tip.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_group_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_group_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_group_invite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_group_land_money.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_group_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_group_notices.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_group_notify.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_group_roles.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_hud.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_im_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_instant_message.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_inventory_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_landmark_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_landmarks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_main_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_me.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_media_settings_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_media_settings_permissions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_media_settings_security.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_my_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_navigation_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_nearby_media.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_notes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_notification.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_notifications_channel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_online_status.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_online_status_toast.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_outfit_edit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_outfits_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_outfits_inventory_gear_default.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_outfits_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_outfits_wearing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_people.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_pick_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_pick_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_place_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_places.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_preferences_advanced.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_preferences_alerts.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_preferences_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_preferences_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_preferences_privacy.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_preferences_setup.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_preferences_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_prim_media_controls.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_profile_view.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_progress.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_region_covenant.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_region_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_region_estate.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_region_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_region_general_layout.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_region_terrain.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_region_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_script_ed.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_script_limits_my_avatar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_scrolling_param.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_side_tray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_status_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_sys_well_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_teleport_history.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_teleport_history_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_toast.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_topinfo_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_voice_effect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_volume_pulldown.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/panel_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/role_actions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/sidepanel_appearance.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/sidepanel_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/sidepanel_item_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/sidepanel_task_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/teleport_strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/accordion.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/accordion_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/avatar_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/bodyparts_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/chat_history.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/check_box.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/chiclet_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/chiclet_script.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/color_swatch.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/combo_box.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/context_menu.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/deletable_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/drop_down.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/dummy_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/expandable_text.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/filter_editor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/flat_list_view.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/floater.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/flyout_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/folder_view_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/gesture_combo_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/group_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/inspector.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/inventory_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/line_editor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/list_view.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/loading_indicator.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/location_input.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/menu.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/menu_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/menu_item_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/menu_item_check.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/menu_item_separator.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/menu_item_tear_off.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/multi_slider.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/multi_slider_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/name_editor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/output_monitor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/panel_camera_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/progress_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/radio_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/radio_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/scroll_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/scroll_container.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/scroll_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/search_combo_box.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/search_editor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/side_tray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/slider.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/slider_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/spinner.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/split_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/tab_container.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/talk_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/teleport_history_menu_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/text.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/text_editor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/textbase.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/texture_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/tool_tip.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/ui_ctrl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/view_border.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/widgets/web_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/en/xui_version.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_about.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_about_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_activeim.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_animation_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_auction.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_avatar_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_avatar_textures.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_beacons.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_build_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_bulk_perms.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_bumps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_buy_contents.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_buy_currency.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_buy_currency_html.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_buy_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_buy_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_camera.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_choose_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_color_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_critical.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_customize.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_day_cycle_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_device_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_env_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_event.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_font_test.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_god_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_hardware_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_help_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_hud.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_im.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_im_container.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_im_session.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_image_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_incoming_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_inspect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_joystick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_lagmeter.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_land_holdings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_live_lsleditor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_lsl_guide.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_media_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_media_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_mem_leaking.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_moveview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_mute_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_my_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_openobject.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_outfit_save_as.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_outgoing_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_pay.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_pay_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_perm_prefs.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_post_process.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_postcard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_preferences.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_preview_animation.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_preview_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_preview_event.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_preview_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_preview_gesture_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_preview_gesture_shortcut.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_preview_gesture_steps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_preview_notecard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_preview_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_preview_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_publish_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_region_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_report_abuse.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_script_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_script_debug_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_script_limits.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_script_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_script_queue.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_script_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_select_key.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_sell_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_settings_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_snapshot.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_sound_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_statistics.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_stats.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_sys_well.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_telehub.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_texture_ctrl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_top_objects.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_tos.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_url_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_voice_controls.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_voice_effect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_water.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_wearable_save_as.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_whitelist_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_windlight_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_window_size.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/floater_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/inspect_avatar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/inspect_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/inspect_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/inspect_remote_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/language_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_attachment_other.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_attachment_self.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_avatar_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_avatar_other.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_avatar_self.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_bottomtray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_cof_attachment.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_cof_body_part.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_cof_clothing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_cof_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_edit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_favorites.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_gesture_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_group_plus.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_hide_navbar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_im_well_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_imchiclet_adhoc.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_imchiclet_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_imchiclet_p2p.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_inspect_object_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_inv_offer_chiclet.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_inventory_add.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_inventory_gear_default.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_mini_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_navbar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_notification_well_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_object_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_outfit_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_outfit_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_participant_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_people_friends_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_people_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_people_groups_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_people_nearby.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_people_recent_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_picks_plus.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_place.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_place_add_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_places_gear_folder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_places_gear_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_profile_overflow.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_save_outfit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_script_chiclet.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_teleport_history_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_teleport_history_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_teleport_history_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_text_editor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_topinfobar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_url_agent.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_url_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_url_http.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_url_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_url_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_url_objectim.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_url_parcel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_url_slapp.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_url_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_url_teleport.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_viewer.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_wearing_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/menu_wearing_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/mime_types.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/mime_types_linux.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/mime_types_mac.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/notifications.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/outfit_accordion_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_active_object_row.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_adhoc_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_audio_device.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_avatar_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_block_list_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_body_parts_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_bodyparts_list_button_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_bottomtray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_bottomtray_lite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_classified_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_clothing_list_button_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_cof_wearables.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_deletable_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_dummy_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_alpha.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_eyes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_gloves.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_hair.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_jacket.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_pants.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_pick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_shape.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_shirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_shoes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_skin.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_skirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_socks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_tattoo.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_underpants.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_undershirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_edit_wearable.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_group_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_group_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_group_invite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_group_land_money.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_group_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_group_notices.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_group_notify.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_group_roles.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_im_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_inventory_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_landmark_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_landmarks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_main_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_me.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_media_settings_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_media_settings_permissions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_media_settings_security.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_my_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_navigation_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_nearby_chat_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_nearby_media.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_notes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_online_status.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_online_status_toast.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_outfit_edit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_outfits_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_outfits_inventory_gear_default.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_outfits_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_outfits_wearing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_people.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_pick_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_place_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_places.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_preferences_advanced.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_preferences_alerts.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_preferences_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_preferences_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_preferences_privacy.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_preferences_setup.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_preferences_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_prim_media_controls.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_profile_view.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_region_covenant.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_region_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_region_estate.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_region_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_region_general_layout.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_region_terrain.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_region_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_script_ed.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_script_limits_my_avatar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_script_limits_region_memory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_scrolling_param.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_side_tray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_side_tray_tab_caption.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_stand_stop_flying.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_status_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_teleport_history.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_teleport_history_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_voice_effect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/panel_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/role_actions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/sidepanel_appearance.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/sidepanel_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/sidepanel_item_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/sidepanel_task_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/teleport_strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/es/xui_version.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_about.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_about_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_activeim.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_animation_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_auction.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_avatar_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_avatar_textures.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_beacons.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_build_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_bulk_perms.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_bumps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_buy_contents.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_buy_currency.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_buy_currency_html.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_buy_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_buy_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_camera.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_choose_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_color_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_critical.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_customize.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_device_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_env_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_event.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_first_time_tip.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_font_test.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_god_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_hardware_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_help_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_hud.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_im.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_im_container.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_im_session.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_image_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_incoming_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_inspect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_joystick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_lagmeter.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_land_holdings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_lsl_guide.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_media_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_media_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_mem_leaking.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_moveview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_mute_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_my_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_notification.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_notifications_console.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_openobject.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_outfit_save_as.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_outgoing_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_pay.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_pay_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_perm_prefs.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_post_process.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_postcard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_preferences.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_preview_animation.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_preview_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_preview_event.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_preview_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_preview_gesture_shortcut.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_preview_notecard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_preview_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_preview_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_publish_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_region_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_report_abuse.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_script_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_script_debug_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_script_limits.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_script_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_script_queue.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_script_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_select_key.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_sell_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_settings_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_snapshot.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_sound_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_statistics.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_stats.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_sys_well.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_telehub.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_top_objects.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_tos.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_url_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_voice_controls.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_voice_effect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_water.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_whitelist_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_windlight_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_window_size.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/floater_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/fonts.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/inspect_avatar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/inspect_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/inspect_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/inspect_remote_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/language_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_attachment_other.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_attachment_self.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_avatar_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_avatar_other.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_avatar_self.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_bottomtray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_cof_attachment.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_cof_body_part.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_cof_clothing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_cof_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_edit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_favorites.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_gesture_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_group_plus.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_hide_navbar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_im_well_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_imchiclet_adhoc.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_imchiclet_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_imchiclet_p2p.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_inspect_object_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_inv_offer_chiclet.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_inventory_add.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_inventory_gear_default.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_mini_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_navbar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_notification_well_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_object_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_outfit_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_outfit_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_participant_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_people_friends_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_people_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_people_groups_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_people_nearby.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_people_nearby_multiselect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_people_recent_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_picks_plus.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_place.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_place_add_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_places_gear_folder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_places_gear_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_profile_overflow.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_save_outfit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_script_chiclet.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_teleport_history_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_teleport_history_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_teleport_history_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_text_editor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_topinfobar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_url_agent.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_url_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_url_http.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_url_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_url_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_url_objectim.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_url_parcel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_url_slapp.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_url_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_url_teleport.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_viewer.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_wearing_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/menu_wearing_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/mime_types.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/mime_types_linux.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/mime_types_mac.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/notifications.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/outfit_accordion_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_active_object_row.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_activeim_row.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_adhoc_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_audio_device.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_avatar_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_avatar_tag.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_block_list_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_body_parts_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_bodyparts_list_button_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_bottomtray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_bottomtray_lite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_chat_header.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_classified_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_clothing_list_button_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_cof_wearables.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_deletable_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_dummy_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_alpha.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_eyes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_gloves.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_hair.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_jacket.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_pants.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_pick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_shape.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_shirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_shoes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_skin.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_skirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_socks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_tattoo.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_underpants.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_undershirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_edit_wearable.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_group_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_group_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_group_invite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_group_land_money.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_group_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_group_notices.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_group_notify.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_group_roles.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_im_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_instant_message.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_inventory_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_landmark_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_landmarks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_main_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_me.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_media_settings_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_media_settings_permissions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_media_settings_security.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_my_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_navigation_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_nearby_media.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_notes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_notifications_channel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_online_status.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_online_status_toast.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_outfit_edit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_outfits_inventory_gear_default.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_outfits_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_outfits_wearing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_people.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_pick_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_place_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_places.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_preferences_alerts.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_preferences_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_preferences_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_preferences_setup.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_preferences_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_profile_view.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_region_covenant.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_region_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_region_estate.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_region_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_region_general_layout.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_region_terrain.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_region_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_script_ed.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_script_limits_my_avatar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_script_limits_region_memory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_scrolling_param.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_side_tray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_side_tray_tab_caption.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_sidetray_home_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_stand_stop_flying.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_status_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_sys_well_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_teleport_history.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_teleport_history_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_voice_effect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/panel_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/role_actions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/sidepanel_appearance.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/sidepanel_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/sidepanel_item_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/sidepanel_task_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/teleport_strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/fr/xui_version.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_about.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_about_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_activeim.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_animation_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_auction.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_avatar_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_avatar_textures.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_beacons.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_build_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_bulk_perms.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_bumps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_buy_contents.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_buy_currency.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_buy_currency_html.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_buy_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_buy_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_camera.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_choose_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_color_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_critical.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_customize.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_day_cycle_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_device_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_env_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_event.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_font_test.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_god_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_hardware_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_help_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_hud.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_im.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_im_container.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_im_session.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_image_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_incoming_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_inspect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_joystick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_lagmeter.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_land_holdings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_live_lsleditor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_lsl_guide.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_media_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_media_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_mem_leaking.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_moveview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_mute_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_my_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_openobject.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_outfit_save_as.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_outgoing_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_pay.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_pay_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_perm_prefs.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_post_process.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_postcard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_preferences.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_preview_animation.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_preview_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_preview_event.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_preview_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_preview_notecard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_preview_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_preview_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_publish_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_region_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_report_abuse.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_script_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_script_debug_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_script_limits.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_script_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_script_queue.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_script_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_select_key.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_sell_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_settings_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_snapshot.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_sound_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_statistics.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_stats.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_sys_well.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_telehub.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_texture_ctrl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_top_objects.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_tos.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_url_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_voice_controls.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_voice_effect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_water.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_wearable_save_as.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_whitelist_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_windlight_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_window_size.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/floater_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/inspect_avatar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/inspect_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/inspect_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/inspect_remote_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/language_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_attachment_other.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_attachment_self.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_avatar_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_avatar_other.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_avatar_self.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_bottomtray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_cof_attachment.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_cof_body_part.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_cof_clothing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_cof_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_edit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_favorites.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_gesture_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_group_plus.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_hide_navbar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_im_well_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_imchiclet_adhoc.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_imchiclet_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_imchiclet_p2p.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_inv_offer_chiclet.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_inventory_add.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_inventory_gear_default.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_mini_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_navbar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_notification_well_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_object_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_outfit_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_outfit_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_participant_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_people_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_people_groups_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_people_nearby.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_picks_plus.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_place.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_place_add_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_places_gear_folder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_places_gear_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_profile_overflow.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_save_outfit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_script_chiclet.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_teleport_history_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_teleport_history_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_teleport_history_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_text_editor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_topinfobar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_url_agent.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_url_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_url_http.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_url_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_url_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_url_objectim.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_url_parcel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_url_slapp.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_url_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_url_teleport.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_viewer.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_wearing_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/menu_wearing_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/mime_types.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/mime_types_linux.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/mime_types_mac.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/notifications.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/outfit_accordion_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_active_object_row.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_audio_device.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_avatar_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_body_parts_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_bodyparts_list_button_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_bottomtray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_bottomtray_lite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_classified_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_clothing_list_button_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_cof_wearables.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_deletable_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_dummy_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_alpha.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_eyes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_gloves.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_hair.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_jacket.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_pants.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_pick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_shape.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_shirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_shoes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_skin.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_skirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_socks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_tattoo.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_underpants.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_undershirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_edit_wearable.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_group_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_group_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_group_invite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_group_land_money.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_group_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_group_notices.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_group_notify.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_group_roles.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_im_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_inventory_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_landmark_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_landmarks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_main_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_me.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_media_settings_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_media_settings_permissions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_media_settings_security.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_my_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_navigation_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_nearby_chat_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_nearby_media.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_notes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_online_status.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_online_status_toast.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_outfit_edit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_outfits_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_outfits_inventory_gear_default.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_outfits_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_outfits_wearing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_people.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_pick_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_place_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_places.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_preferences_advanced.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_preferences_alerts.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_preferences_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_preferences_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_preferences_privacy.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_preferences_setup.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_preferences_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_prim_media_controls.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_profile_view.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_region_covenant.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_region_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_region_estate.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_region_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_region_general_layout.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_region_terrain.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_region_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_script_ed.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_script_limits_my_avatar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_script_limits_region_memory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_scrolling_param.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_side_tray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_side_tray_tab_caption.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_stand_stop_flying.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_status_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_teleport_history.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_teleport_history_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_voice_effect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/panel_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/role_actions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/sidepanel_appearance.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/sidepanel_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/sidepanel_item_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/sidepanel_task_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/it/teleport_strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_about.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_about_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_activeim.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_animation_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_auction.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_avatar_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_avatar_textures.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_beacons.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_build_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_bulk_perms.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_bumps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_buy_contents.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_buy_currency.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_buy_currency_html.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_buy_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_buy_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_camera.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_choose_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_color_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_critical.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_customize.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_device_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_env_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_event.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_first_time_tip.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_font_test.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_god_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_hardware_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_help_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_hud.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_im.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_im_container.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_im_session.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_image_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_incoming_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_inspect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_joystick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_lagmeter.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_land_holdings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_lsl_guide.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_media_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_media_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_mem_leaking.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_moveview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_mute_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_my_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_notification.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_notifications_console.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_openobject.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_outfit_save_as.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_outgoing_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_pay.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_pay_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_perm_prefs.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_post_process.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_postcard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_preferences.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_preview_animation.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_preview_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_preview_event.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_preview_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_preview_gesture_shortcut.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_preview_notecard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_preview_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_preview_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_publish_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_region_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_report_abuse.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_script_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_script_debug_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_script_limits.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_script_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_script_queue.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_script_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_select_key.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_sell_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_settings_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_snapshot.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_sound_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_statistics.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_stats.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_sys_well.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_telehub.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_texture_ctrl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_top_objects.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_tos.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_url_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_voice_controls.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_voice_effect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_water.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_whitelist_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_windlight_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_window_size.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/floater_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/inspect_avatar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/inspect_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/inspect_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/inspect_remote_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/language_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_attachment_other.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_attachment_self.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_avatar_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_avatar_other.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_avatar_self.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_bottomtray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_cof_attachment.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_cof_body_part.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_cof_clothing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_cof_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_edit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_favorites.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_gesture_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_group_plus.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_hide_navbar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_im_well_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_imchiclet_adhoc.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_imchiclet_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_imchiclet_p2p.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_inspect_avatar_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_inv_offer_chiclet.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_inventory_add.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_mini_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_navbar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_notification_well_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_object_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_outfit_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_outfit_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_participant_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_people_friends_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_people_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_people_groups_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_people_nearby.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_people_recent_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_picks_plus.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_place.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_place_add_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_profile_overflow.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_save_outfit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_script_chiclet.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_teleport_history_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_teleport_history_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_text_editor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_topinfobar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_url_agent.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_url_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_url_http.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_url_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_url_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_url_objectim.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_url_parcel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_url_slapp.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_url_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_url_teleport.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_viewer.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_wearing_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/menu_wearing_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/mime_types.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/mime_types_linux.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/mime_types_mac.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/notifications.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/outfit_accordion_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_active_object_row.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_activeim_row.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_adhoc_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_audio_device.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_avatar_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_avatar_tag.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_block_list_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_body_parts_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_bodyparts_list_button_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_bottomtray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_bottomtray_lite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_chat_header.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_classified_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_clothing_list_button_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_cof_wearables.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_deletable_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_dummy_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_alpha.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_eyes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_gloves.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_hair.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_jacket.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_pants.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_pick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_shape.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_shirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_shoes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_skin.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_skirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_socks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_underpants.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_undershirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_edit_wearable.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_group_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_group_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_group_invite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_group_land_money.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_group_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_group_notices.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_group_notify.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_group_roles.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_im_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_instant_message.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_inventory_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_landmark_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_landmarks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_main_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_me.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_media_settings_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_media_settings_permissions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_media_settings_security.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_my_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_navigation_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_nearby_media.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_notes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_notifications_channel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_online_status.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_online_status_toast.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_outfit_edit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_outfits_inventory_gear_default.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_outfits_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_outfits_wearing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_people.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_pick_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_place_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_places.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_preferences_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_preferences_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_preferences_setup.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_preferences_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_profile_view.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_region_covenant.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_region_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_region_estate.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_region_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_region_general_layout.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_region_terrain.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_region_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_script_ed.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_script_limits_my_avatar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_script_limits_region_memory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_scrolling_param.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_side_tray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_side_tray_tab_caption.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_sidetray_home_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_stand_stop_flying.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_status_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_sys_well_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_teleport_history.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_teleport_history_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_voice_effect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/panel_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/role_actions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/sidepanel_appearance.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/sidepanel_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/sidepanel_item_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/sidepanel_task_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/teleport_strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/ja/xui_version.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_about.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_about_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_animation_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_auction.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_avatar_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_avatar_textures.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_beacons.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_build_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_bulk_perms.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_bumps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_buy_contents.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_buy_currency.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_buy_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_buy_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_camera.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_choose_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_color_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_critical.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_customize.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_day_cycle_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_env_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_font_test.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_hardware_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_hud.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_im.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_image_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_inspect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_inventory_item_properties.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_inventory_view_finder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_joystick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_lagmeter.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_land_holdings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_live_lsleditor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_lsl_guide.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_media_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_mem_leaking.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_moveview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_mute_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_my_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_openobject.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_pay.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_pay_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_perm_prefs.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_post_process.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_postcard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_preferences.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_preview_animation.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_preview_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_preview_notecard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_preview_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_preview_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_region_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_report_abuse.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_script_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_script_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_script_queue.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_script_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_select_key.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_sell_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_settings_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_snapshot.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_sound_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_statistics.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_stats.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_telehub.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_top_objects.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_tos.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_url_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_water.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_windlight_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/floater_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/language_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/menu_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/menu_inventory_add.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/menu_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/menu_mini_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/menu_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/menu_places_gear_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/menu_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/menu_viewer.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/mime_types.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/notifications.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_audio_device.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_block_list_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_edit_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_group_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_group_invite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_group_land_money.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_group_notices.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_group_roles.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_main_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_preferences_advanced.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_preferences_alerts.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_preferences_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_preferences_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_preferences_graphics1.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_preferences_privacy.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_preferences_setup.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_preferences_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_region_covenant.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_region_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_region_estate.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_region_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_region_terrain.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_region_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_scrolling_param.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_status_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/panel_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/role_actions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/nl/teleport_strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_about.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_about_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_activeim.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_animation_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_auction.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_avatar_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_avatar_textures.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_beacons.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_build_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_bulk_perms.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_bumps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_buy_contents.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_buy_currency.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_buy_currency_html.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_buy_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_buy_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_camera.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_choose_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_color_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_critical.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_customize.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_device_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_env_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_event.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_font_test.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_god_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_hardware_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_help_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_hud.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_im.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_im_container.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_im_session.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_image_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_incoming_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_inspect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_joystick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_lagmeter.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_land_holdings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_lsl_guide.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_media_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_media_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_mem_leaking.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_moveview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_mute_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_my_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_openobject.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_outgoing_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_pay.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_pay_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_perm_prefs.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_post_process.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_postcard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_preferences.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_preview_animation.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_preview_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_preview_event.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_preview_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_preview_notecard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_preview_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_preview_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_publish_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_region_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_report_abuse.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_script_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_script_debug_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_script_limits.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_script_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_script_queue.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_script_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_select_key.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_sell_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_settings_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_snapshot.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_sound_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_statistics.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_stats.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_sys_well.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_telehub.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_top_objects.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_tos.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_url_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_voice_controls.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_voice_effect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_water.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_whitelist_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_windlight_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_window_size.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/floater_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/inspect_avatar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/inspect_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/inspect_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/inspect_remote_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/language_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_attachment_other.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_attachment_self.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_avatar_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_avatar_other.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_avatar_self.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_bottomtray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_cof_attachment.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_cof_body_part.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_cof_clothing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_cof_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_edit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_favorites.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_gesture_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_group_plus.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_hide_navbar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_im_well_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_imchiclet_adhoc.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_inspect_object_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_inspect_self_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_inv_offer_chiclet.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_inventory_add.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_mini_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_navbar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_notification_well_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_object_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_outfit_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_outfit_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_participant_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_people_friends_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_people_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_people_nearby.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_people_nearby_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_people_recent_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_picks_plus.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_place.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_place_add_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_profile_overflow.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_save_outfit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_script_chiclet.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_teleport_history_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_teleport_history_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_teleport_history_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_text_editor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_topinfobar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_url_agent.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_url_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_url_http.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_url_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_url_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_url_objectim.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_url_parcel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_url_slapp.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_url_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_url_teleport.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_viewer.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_wearing_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/menu_wearing_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/mime_types.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/mime_types_linux.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/mime_types_mac.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/notifications.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/outfit_accordion_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_active_object_row.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_audio_device.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_body_parts_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_bodyparts_list_button_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_bottomtray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_classified_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_clothing_list_button_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_cof_wearables.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_deletable_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_dummy_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_alpha.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_eyes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_gloves.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_hair.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_jacket.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_pants.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_pick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_shape.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_shirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_shoes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_skin.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_skirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_socks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_tattoo.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_underpants.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_undershirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_edit_wearable.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_group_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_group_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_group_invite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_group_land_money.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_group_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_group_notices.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_group_notify.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_group_roles.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_im_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_inventory_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_landmark_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_landmarks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_main_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_me.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_media_settings_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_media_settings_security.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_my_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_navigation_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_nearby_media.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_notes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_online_status.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_online_status_toast.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_outfit_edit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_outfits_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_outfits_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_outfits_wearing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_people.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_pick_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_place_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_places.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_preferences_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_preferences_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_preferences_setup.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_preferences_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_profile_view.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_region_covenant.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_region_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_region_estate.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_region_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_region_general_layout.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_region_terrain.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_region_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_script_ed.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_scrolling_param.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_side_tray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_side_tray_tab_caption.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_status_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_teleport_history.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_teleport_history_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_voice_effect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/panel_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/role_actions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/sidepanel_appearance.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/sidepanel_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/sidepanel_item_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/sidepanel_task_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/teleport_strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pl/xui_version.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_about.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_about_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_activeim.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_animation_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_auction.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_avatar_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_avatar_textures.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_beacons.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_build_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_bulk_perms.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_bumps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_buy_contents.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_buy_currency.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_buy_currency_html.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_buy_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_buy_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_camera.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_choose_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_color_picker.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_critical.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_customize.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_device_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_env_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_event.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_font_test.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_god_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_hardware_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_help_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_hud.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_im.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_im_container.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_im_session.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_image_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_incoming_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_inspect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_joystick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_lagmeter.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_land_holdings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_lsl_guide.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_media_browser.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_media_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_mem_leaking.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_moveview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_mute_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_my_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_openobject.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_outgoing_call.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_pay.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_pay_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_perm_prefs.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_post_process.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_postcard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_preferences.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_preview_animation.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_preview_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_preview_event.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_preview_gesture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_preview_gesture_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_preview_gesture_shortcut.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_preview_gesture_steps.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_preview_notecard.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_preview_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_preview_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_publish_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_region_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_report_abuse.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_script_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_script_debug_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_script_limits.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_script_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_script_queue.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_script_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_search.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_select_key.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_sell_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_settings_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_snapshot.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_sound_preview.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_statistics.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_stats.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_sys_well.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_telehub.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_tools.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_top_objects.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_tos.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_url_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_voice_controls.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_voice_effect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_water.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_whitelist_entry.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_windlight_options.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_window_size.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/floater_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/inspect_avatar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/inspect_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/inspect_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/inspect_remote_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/language_settings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_attachment_other.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_attachment_self.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_avatar_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_avatar_other.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_avatar_self.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_bottomtray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_cof_attachment.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_cof_body_part.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_cof_clothing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_cof_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_edit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_favorites.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_gesture_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_group_plus.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_hide_navbar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_im_well_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_imchiclet_adhoc.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_imchiclet_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_imchiclet_p2p.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_inspect_object_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_inv_offer_chiclet.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_inventory_add.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_inventory_gear_default.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_land.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_mini_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_navbar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_notification_well_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_object.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_object_icon.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_outfit_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_outfit_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_participant_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_people_friends_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_people_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_people_groups_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_people_nearby.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_people_nearby_multiselect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_people_recent_view_sort.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_picks_plus.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_place.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_place_add_button.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_places_gear_folder.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_places_gear_landmark.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_profile_overflow.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_save_outfit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_script_chiclet.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_teleport_history_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_teleport_history_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_text_editor.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_topinfobar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_url_agent.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_url_group.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_url_http.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_url_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_url_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_url_objectim.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_url_parcel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_url_slapp.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_url_slurl.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_url_teleport.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_viewer.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_wearing_gear.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/menu_wearing_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/mime_types.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/mime_types_linux.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/mime_types_mac.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/notifications.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/outfit_accordion_tab.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_active_object_row.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_adhoc_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_audio_device.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_avatar_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_block_list_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_body_parts_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_bodyparts_list_button_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_bottomtray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_bottomtray_lite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_classified_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_clothing_list_button_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_cof_wearables.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_deletable_wearable_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_dummy_clothing_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_alpha.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_classified.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_eyes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_gloves.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_hair.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_jacket.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_pants.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_pick.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_shape.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_shirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_shoes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_skin.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_skirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_socks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_tattoo.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_underpants.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_undershirt.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_edit_wearable.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_friends.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_group_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_group_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_group_invite.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_group_land_money.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_group_list_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_group_notices.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_group_notify.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_group_roles.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_groups.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_im_control_panel.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_inventory_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_landmark_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_landmarks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_login.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_main_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_me.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_media_settings_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_media_settings_permissions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_media_settings_security.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_my_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_navigation_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_nearby_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_nearby_chat_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_nearby_media.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_notes.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_online_status.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_online_status_toast.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_outfit_edit.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_outfits_inventory_gear_default.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_outfits_list.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_outfits_wearing.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_people.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_pick_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_picks.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_place_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_places.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_preferences_chat.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_preferences_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_preferences_setup.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_preferences_sound.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_profile.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_profile_view.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_region_covenant.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_region_debug.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_region_estate.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_region_general.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_region_general_layout.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_region_terrain.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_region_texture.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_script_ed.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_script_limits_my_avatar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_script_limits_region_memory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_scrolling_param.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_side_tray.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_side_tray_tab_caption.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_stand_stop_flying.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_status_bar.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_teleport_history.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_teleport_history_item.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_voice_effect.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/panel_world_map.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/role_actions.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/sidepanel_appearance.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/sidepanel_inventory.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/sidepanel_item_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/sidepanel_task_info.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/teleport_strings.xml mode change 100644 => 100755 indra/newview/skins/default/xui/pt/xui_version.xml mode change 100644 => 100755 indra/newview/skins/paths.xml mode change 100644 => 100755 indra/newview/tests/llagentaccess_test.cpp mode change 100644 => 100755 indra/newview/tests/llcapabilitylistener_test.cpp mode change 100644 => 100755 indra/newview/tests/lldateutil_test.cpp mode change 100644 => 100755 indra/newview/tests/lllogininstance_test.cpp mode change 100644 => 100755 indra/newview/tests/llmediadataclient_test.cpp mode change 100644 => 100755 indra/newview/tests/llsecapi_test.cpp mode change 100644 => 100755 indra/newview/tests/llsechandler_basic_test.cpp mode change 100644 => 100755 indra/newview/tests/llslurl_test.cpp mode change 100644 => 100755 indra/newview/tests/lltextureinfo_test.cpp mode change 100644 => 100755 indra/newview/tests/lltextureinfodetails_test.cpp mode change 100644 => 100755 indra/newview/tests/lltexturestatsuploader_test.cpp mode change 100644 => 100755 indra/newview/tests/llviewerhelputil_test.cpp mode change 100644 => 100755 indra/newview/tests/llviewernetwork_test.cpp mode change 100644 => 100755 indra/newview/tests/llworldmap_test.cpp mode change 100644 => 100755 indra/newview/tests/llworldmipmap_test.cpp mode change 100644 => 100755 indra/newview/tests/llxmlrpclistener_test.cpp mode change 100644 => 100755 indra/newview/tests/test_llxmlrpc_peer.py mode change 100644 => 100755 indra/newview/tr.lproj/language.txt mode change 100644 => 100755 indra/newview/uk.lproj/language.txt mode change 100644 => 100755 indra/newview/viewer_manifest.py mode change 100644 => 100755 indra/newview/zh-Hans.lproj/language.txt mode change 100644 => 100755 indra/test/CMakeLists.txt mode change 100644 => 100755 indra/test/blowfish.1.bin mode change 100644 => 100755 indra/test/blowfish.2.bin mode change 100644 => 100755 indra/test/blowfish.digits.txt mode change 100644 => 100755 indra/test/debug.h mode change 100644 => 100755 indra/test/io.cpp mode change 100644 => 100755 indra/test/llassetuploadqueue_tut.cpp mode change 100644 => 100755 indra/test/llblowfish_tut.cpp mode change 100644 => 100755 indra/test/llbuffer_tut.cpp mode change 100644 => 100755 indra/test/lldatapacker_tut.cpp mode change 100644 => 100755 indra/test/lldoubledispatch_tut.cpp mode change 100644 => 100755 indra/test/llevents_tut.cpp mode change 100644 => 100755 indra/test/llhttpclient_tut.cpp mode change 100644 => 100755 indra/test/llhttpdate_tut.cpp mode change 100644 => 100755 indra/test/llhttpnode_tut.cpp mode change 100644 => 100755 indra/test/lliohttpserver_tut.cpp mode change 100644 => 100755 indra/test/llmessageconfig_tut.cpp mode change 100644 => 100755 indra/test/llmessagetemplateparser_tut.cpp mode change 100644 => 100755 indra/test/llpermissions_tut.cpp mode change 100644 => 100755 indra/test/llpipeutil.cpp mode change 100644 => 100755 indra/test/llpipeutil.h mode change 100644 => 100755 indra/test/llsaleinfo_tut.cpp mode change 100644 => 100755 indra/test/llscriptresource_tut.cpp mode change 100644 => 100755 indra/test/llsd_new_tut.cpp mode change 100644 => 100755 indra/test/llsdmessagebuilder_tut.cpp mode change 100644 => 100755 indra/test/llsdmessagereader_tut.cpp mode change 100644 => 100755 indra/test/llsdtraits.h mode change 100644 => 100755 indra/test/llsdutil_tut.cpp mode change 100644 => 100755 indra/test/llservicebuilder_tut.cpp mode change 100644 => 100755 indra/test/llstreamtools_tut.cpp mode change 100644 => 100755 indra/test/lltemplatemessagebuilder_tut.cpp mode change 100644 => 100755 indra/test/lltimestampcache_tut.cpp mode change 100644 => 100755 indra/test/lltranscode_tut.cpp mode change 100644 => 100755 indra/test/lltut.cpp mode change 100644 => 100755 indra/test/lltut.h mode change 100644 => 100755 indra/test/lluserrelations_tut.cpp mode change 100644 => 100755 indra/test/lluuidhashmap_tut.cpp mode change 100644 => 100755 indra/test/llxorcipher_tut.cpp mode change 100644 => 100755 indra/test/message_tut.cpp mode change 100644 => 100755 indra/test/mock_http_client.cpp mode change 100644 => 100755 indra/test/mock_http_client.h mode change 100644 => 100755 indra/test/prim_linkability_tut.cpp mode change 100644 => 100755 indra/test/test.cpp mode change 100644 => 100755 indra/test/test.h mode change 100644 => 100755 indra/test/test_llmanifest.py mode change 100644 => 100755 indra/test_apps/llplugintest/CMakeLists.txt mode change 100644 => 100755 indra/test_apps/llplugintest/bookmarks.txt mode change 100644 => 100755 indra/test_apps/llplugintest/llmediaplugintest.cpp mode change 100644 => 100755 indra/test_apps/llplugintest/llmediaplugintest.h mode change 100644 => 100755 indra/tools/vstool/README.txt mode change 100644 => 100755 indra/tools/vstool/VSTool.csproj mode change 100644 => 100755 indra/tools/vstool/VSTool.sln mode change 100644 => 100755 indra/tools/vstool/main.cs mode change 100644 => 100755 indra/viewer_components/CMakeLists.txt mode change 100644 => 100755 indra/viewer_components/login/CMakeLists.txt mode change 100644 => 100755 indra/viewer_components/login/lllogin.cpp mode change 100644 => 100755 indra/viewer_components/login/lllogin.h mode change 100644 => 100755 indra/viewer_components/login/tests/lllogin_test.cpp mode change 100644 => 100755 indra/win_crash_logger/CMakeLists.txt mode change 100644 => 100755 indra/win_crash_logger/StdAfx.cpp mode change 100644 => 100755 indra/win_crash_logger/StdAfx.h mode change 100644 => 100755 indra/win_crash_logger/ll_icon.ico mode change 100644 => 100755 indra/win_crash_logger/llcrashloggerwindows.cpp mode change 100644 => 100755 indra/win_crash_logger/llcrashloggerwindows.h mode change 100644 => 100755 indra/win_crash_logger/resource.h mode change 100644 => 100755 indra/win_crash_logger/win_crash_logger.cpp mode change 100644 => 100755 indra/win_crash_logger/win_crash_logger.h mode change 100644 => 100755 indra/win_crash_logger/win_crash_logger.ico mode change 100644 => 100755 indra/win_crash_logger/win_crash_logger.rc mode change 100644 => 100755 indra/win_updater/CMakeLists.txt mode change 100644 => 100755 indra/win_updater/updater.cpp mode change 100644 => 100755 install.xml mode change 100644 => 100755 scripts/messages/message_template.msg mode change 100644 => 100755 scripts/setup-path.py mode change 100644 => 100755 scripts/template_verifier.py mode change 100644 => 100755 viewer-hg-convert.shamap (limited to 'indra/llmath') diff --git a/.hgignore b/.hgignore old mode 100644 new mode 100755 diff --git a/.hgtags b/.hgtags old mode 100644 new mode 100755 diff --git a/BuildParams b/BuildParams old mode 100644 new mode 100755 diff --git a/build.sh b/build.sh old mode 100644 new mode 100755 diff --git a/doc/FLOSS-exception.txt b/doc/FLOSS-exception.txt old mode 100644 new mode 100755 diff --git a/doc/GPL-license.txt b/doc/GPL-license.txt old mode 100644 new mode 100755 diff --git a/doc/LICENSE-logos.txt b/doc/LICENSE-logos.txt old mode 100644 new mode 100755 diff --git a/doc/LICENSE-source.txt b/doc/LICENSE-source.txt old mode 100644 new mode 100755 diff --git a/doc/contributions.txt b/doc/contributions.txt old mode 100644 new mode 100755 diff --git a/doc/releasenotes-where.txt b/doc/releasenotes-where.txt old mode 100644 new mode 100755 diff --git a/etc/message.xml b/etc/message.xml old mode 100644 new mode 100755 diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/Audio.cmake b/indra/cmake/Audio.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/BerkeleyDB.cmake b/indra/cmake/BerkeleyDB.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/BuildVersion.cmake b/indra/cmake/BuildVersion.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/CARes.cmake b/indra/cmake/CARes.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/CMakeCopyIfDifferent.cmake b/indra/cmake/CMakeCopyIfDifferent.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/cmake/CSharpMacros.cmake b/indra/cmake/CSharpMacros.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/CURL.cmake b/indra/cmake/CURL.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/CopyBackToSource.cmake b/indra/cmake/CopyBackToSource.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/DBusGlib.cmake b/indra/cmake/DBusGlib.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/DeploySharedLibs.cmake b/indra/cmake/DeploySharedLibs.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/DirectX.cmake b/indra/cmake/DirectX.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/DragDrop.cmake b/indra/cmake/DragDrop.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/ELFIO.cmake b/indra/cmake/ELFIO.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/EXPAT.cmake b/indra/cmake/EXPAT.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/ExamplePlugin.cmake b/indra/cmake/ExamplePlugin.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/Externals.cmake b/indra/cmake/Externals.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/FMOD.cmake b/indra/cmake/FMOD.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/FindAPR.cmake b/indra/cmake/FindAPR.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/FindBerkeleyDB.cmake b/indra/cmake/FindBerkeleyDB.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/FindCARes.cmake b/indra/cmake/FindCARes.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/FindELFIO.cmake b/indra/cmake/FindELFIO.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/FindGooglePerfTools.cmake b/indra/cmake/FindGooglePerfTools.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/FindMT.cmake b/indra/cmake/FindMT.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/FindMono.cmake b/indra/cmake/FindMono.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/FindMySQL.cmake b/indra/cmake/FindMySQL.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/FindOpenJPEG.cmake b/indra/cmake/FindOpenJPEG.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/FindSCP.cmake b/indra/cmake/FindSCP.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/FindSVN.cmake b/indra/cmake/FindSVN.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/FindXmlRpcEpi.cmake b/indra/cmake/FindXmlRpcEpi.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/FreeType.cmake b/indra/cmake/FreeType.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/GLOD.cmake b/indra/cmake/GLOD.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/GStreamer010Plugin.cmake b/indra/cmake/GStreamer010Plugin.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/GetPrerequisites_2_8.cmake b/indra/cmake/GetPrerequisites_2_8.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/Glui.cmake b/indra/cmake/Glui.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/Glut.cmake b/indra/cmake/Glut.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/GoogleBreakpad.cmake b/indra/cmake/GoogleBreakpad.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/GoogleMock.cmake b/indra/cmake/GoogleMock.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/GooglePerfTools.cmake b/indra/cmake/GooglePerfTools.cmake old mode 100644 new mode 100755 index ee231dcde6..dc6d013bf2 --- a/indra/cmake/GooglePerfTools.cmake +++ b/indra/cmake/GooglePerfTools.cmake @@ -33,7 +33,7 @@ if (WINDOWS) endif (WINDOWS) if (USE_GOOGLE_PERFTOOLS) - set(TCMALLOC_FLAG -DLL_USE_TCMALLOC=1) + set(TCMALLOC_FLAG -ULL_USE_TCMALLOC=1) include_directories(${GOOGLE_PERFTOOLS_INCLUDE_DIR}) set(GOOGLE_PERFTOOLS_LIBRARIES ${TCMALLOC_LIBRARIES} ${STACKTRACE_LIBRARIES} ${PROFILER_LIBRARIES}) else (USE_GOOGLE_PERFTOOLS) diff --git a/indra/cmake/JPEG.cmake b/indra/cmake/JPEG.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLAudio.cmake b/indra/cmake/LLAudio.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLCharacter.cmake b/indra/cmake/LLCharacter.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLCommon.cmake b/indra/cmake/LLCommon.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLConvexDecomposition.cmake b/indra/cmake/LLConvexDecomposition.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLCrashLogger.cmake b/indra/cmake/LLCrashLogger.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLDatabase.cmake b/indra/cmake/LLDatabase.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLImage.cmake b/indra/cmake/LLImage.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLImageJ2COJ.cmake b/indra/cmake/LLImageJ2COJ.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLInventory.cmake b/indra/cmake/LLInventory.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLKDU.cmake b/indra/cmake/LLKDU.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLLogin.cmake b/indra/cmake/LLLogin.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLMath.cmake b/indra/cmake/LLMath.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLMessage.cmake b/indra/cmake/LLMessage.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLPlugin.cmake b/indra/cmake/LLPlugin.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLPrimitive.cmake b/indra/cmake/LLPrimitive.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLRender.cmake b/indra/cmake/LLRender.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLScene.cmake b/indra/cmake/LLScene.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLSharedLibs.cmake b/indra/cmake/LLSharedLibs.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLTestCommand.cmake b/indra/cmake/LLTestCommand.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLUI.cmake b/indra/cmake/LLUI.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLVFS.cmake b/indra/cmake/LLVFS.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLWindow.cmake b/indra/cmake/LLWindow.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLXML.cmake b/indra/cmake/LLXML.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LLXUIXML.cmake b/indra/cmake/LLXUIXML.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/LScript.cmake b/indra/cmake/LScript.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/MediaPluginBase.cmake b/indra/cmake/MediaPluginBase.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/MonoDeps.cmake b/indra/cmake/MonoDeps.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/MonoEmbed.cmake b/indra/cmake/MonoEmbed.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/MySQL.cmake b/indra/cmake/MySQL.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/NDOF.cmake b/indra/cmake/NDOF.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/OPENAL.cmake b/indra/cmake/OPENAL.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/OpenGL.cmake b/indra/cmake/OpenGL.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/OpenJPEG.cmake b/indra/cmake/OpenJPEG.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/OpenSSL.cmake b/indra/cmake/OpenSSL.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/PNG.cmake b/indra/cmake/PNG.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/PluginAPI.cmake b/indra/cmake/PluginAPI.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/Prebuilt.cmake b/indra/cmake/Prebuilt.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/Pth.cmake b/indra/cmake/Pth.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/PulseAudio.cmake b/indra/cmake/PulseAudio.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/Python.cmake b/indra/cmake/Python.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/QuickTimePlugin.cmake b/indra/cmake/QuickTimePlugin.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/TemplateCheck.cmake b/indra/cmake/TemplateCheck.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/Tut.cmake b/indra/cmake/Tut.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/UI.cmake b/indra/cmake/UI.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/UnixInstall.cmake b/indra/cmake/UnixInstall.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/ViewerMiscLibs.cmake b/indra/cmake/ViewerMiscLibs.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/WebKitLibPlugin.cmake b/indra/cmake/WebKitLibPlugin.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/XmlRpcEpi.cmake b/indra/cmake/XmlRpcEpi.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/ZLIB.cmake b/indra/cmake/ZLIB.cmake old mode 100644 new mode 100755 diff --git a/indra/cmake/cmake_dummy.cpp b/indra/cmake/cmake_dummy.cpp old mode 100644 new mode 100755 diff --git a/indra/cmake/run_build_test.py b/indra/cmake/run_build_test.py old mode 100644 new mode 100755 diff --git a/indra/copy_win_scripts/CMakeLists.txt b/indra/copy_win_scripts/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/copy_win_scripts/start-client.py b/indra/copy_win_scripts/start-client.py old mode 100644 new mode 100755 diff --git a/indra/integration_tests/CMakeLists.txt b/indra/integration_tests/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/integration_tests/llui_libtest/CMakeLists.txt b/indra/integration_tests/llui_libtest/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/integration_tests/llui_libtest/llui_libtest.cpp b/indra/integration_tests/llui_libtest/llui_libtest.cpp old mode 100644 new mode 100755 diff --git a/indra/integration_tests/llui_libtest/llui_libtest.h b/indra/integration_tests/llui_libtest/llui_libtest.h old mode 100644 new mode 100755 diff --git a/indra/integration_tests/llui_libtest/llwidgetreg.cpp b/indra/integration_tests/llui_libtest/llwidgetreg.cpp old mode 100644 new mode 100755 diff --git a/indra/integration_tests/llui_libtest/llwidgetreg.h b/indra/integration_tests/llui_libtest/llwidgetreg.h old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/__init__.py b/indra/lib/python/indra/__init__.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/base/__init__.py b/indra/lib/python/indra/base/__init__.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/base/cllsd_test.py b/indra/lib/python/indra/base/cllsd_test.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/base/config.py b/indra/lib/python/indra/base/config.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/base/llsd.py b/indra/lib/python/indra/base/llsd.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/base/lluuid.py b/indra/lib/python/indra/base/lluuid.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/base/metrics.py b/indra/lib/python/indra/base/metrics.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/ipc/__init__.py b/indra/lib/python/indra/ipc/__init__.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/ipc/compatibility.py b/indra/lib/python/indra/ipc/compatibility.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/ipc/httputil.py b/indra/lib/python/indra/ipc/httputil.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/ipc/llmessage.py b/indra/lib/python/indra/ipc/llmessage.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/ipc/llsdhttp.py b/indra/lib/python/indra/ipc/llsdhttp.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/ipc/mysql_pool.py b/indra/lib/python/indra/ipc/mysql_pool.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/ipc/russ.py b/indra/lib/python/indra/ipc/russ.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/ipc/servicebuilder.py b/indra/lib/python/indra/ipc/servicebuilder.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/ipc/siesta.py b/indra/lib/python/indra/ipc/siesta.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/ipc/siesta_test.py b/indra/lib/python/indra/ipc/siesta_test.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/ipc/tokenstream.py b/indra/lib/python/indra/ipc/tokenstream.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/ipc/webdav.py b/indra/lib/python/indra/ipc/webdav.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/ipc/xml_rpc.py b/indra/lib/python/indra/ipc/xml_rpc.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/util/__init__.py b/indra/lib/python/indra/util/__init__.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/util/fastest_elementtree.py b/indra/lib/python/indra/util/fastest_elementtree.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/util/helpformatter.py b/indra/lib/python/indra/util/helpformatter.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/util/iterators.py b/indra/lib/python/indra/util/iterators.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/util/llsubprocess.py b/indra/lib/python/indra/util/llsubprocess.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/util/llversion.py b/indra/lib/python/indra/util/llversion.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/util/named_query.py b/indra/lib/python/indra/util/named_query.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/util/shutil2.py b/indra/lib/python/indra/util/shutil2.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/util/term.py b/indra/lib/python/indra/util/term.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/indra/util/test_win32_manifest.py b/indra/lib/python/indra/util/test_win32_manifest.py old mode 100644 new mode 100755 diff --git a/indra/lib/python/uuid.py b/indra/lib/python/uuid.py old mode 100644 new mode 100755 diff --git a/indra/linux_crash_logger/CMakeLists.txt b/indra/linux_crash_logger/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/linux_crash_logger/linux_crash_logger.cpp b/indra/linux_crash_logger/linux_crash_logger.cpp old mode 100644 new mode 100755 diff --git a/indra/linux_crash_logger/llcrashloggerlinux.cpp b/indra/linux_crash_logger/llcrashloggerlinux.cpp old mode 100644 new mode 100755 diff --git a/indra/linux_crash_logger/llcrashloggerlinux.h b/indra/linux_crash_logger/llcrashloggerlinux.h old mode 100644 new mode 100755 diff --git a/indra/linux_updater/CMakeLists.txt b/indra/linux_updater/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/linux_updater/linux_updater.cpp b/indra/linux_updater/linux_updater.cpp old mode 100644 new mode 100755 diff --git a/indra/llaudio/CMakeLists.txt b/indra/llaudio/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp old mode 100644 new mode 100755 diff --git a/indra/llaudio/llaudiodecodemgr.h b/indra/llaudio/llaudiodecodemgr.h old mode 100644 new mode 100755 diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp old mode 100644 new mode 100755 diff --git a/indra/llaudio/llaudioengine.h b/indra/llaudio/llaudioengine.h old mode 100644 new mode 100755 diff --git a/indra/llaudio/llaudioengine_fmod.cpp b/indra/llaudio/llaudioengine_fmod.cpp old mode 100644 new mode 100755 diff --git a/indra/llaudio/llaudioengine_fmod.h b/indra/llaudio/llaudioengine_fmod.h old mode 100644 new mode 100755 diff --git a/indra/llaudio/llaudioengine_openal.cpp b/indra/llaudio/llaudioengine_openal.cpp old mode 100644 new mode 100755 diff --git a/indra/llaudio/llaudioengine_openal.h b/indra/llaudio/llaudioengine_openal.h old mode 100644 new mode 100755 diff --git a/indra/llaudio/lllistener.cpp b/indra/llaudio/lllistener.cpp old mode 100644 new mode 100755 diff --git a/indra/llaudio/lllistener.h b/indra/llaudio/lllistener.h old mode 100644 new mode 100755 diff --git a/indra/llaudio/lllistener_ds3d.h b/indra/llaudio/lllistener_ds3d.h old mode 100644 new mode 100755 diff --git a/indra/llaudio/lllistener_fmod.cpp b/indra/llaudio/lllistener_fmod.cpp old mode 100644 new mode 100755 diff --git a/indra/llaudio/lllistener_fmod.h b/indra/llaudio/lllistener_fmod.h old mode 100644 new mode 100755 diff --git a/indra/llaudio/lllistener_openal.cpp b/indra/llaudio/lllistener_openal.cpp old mode 100644 new mode 100755 diff --git a/indra/llaudio/lllistener_openal.h b/indra/llaudio/lllistener_openal.h old mode 100644 new mode 100755 diff --git a/indra/llaudio/llstreamingaudio.h b/indra/llaudio/llstreamingaudio.h old mode 100644 new mode 100755 diff --git a/indra/llaudio/llstreamingaudio_fmod.cpp b/indra/llaudio/llstreamingaudio_fmod.cpp old mode 100644 new mode 100755 diff --git a/indra/llaudio/llstreamingaudio_fmod.h b/indra/llaudio/llstreamingaudio_fmod.h old mode 100644 new mode 100755 diff --git a/indra/llaudio/llvorbisencode.cpp b/indra/llaudio/llvorbisencode.cpp old mode 100644 new mode 100755 diff --git a/indra/llaudio/llvorbisencode.h b/indra/llaudio/llvorbisencode.h old mode 100644 new mode 100755 diff --git a/indra/llaudio/llwindgen.h b/indra/llaudio/llwindgen.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/CMakeLists.txt b/indra/llcharacter/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llanimationstates.cpp b/indra/llcharacter/llanimationstates.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llanimationstates.h b/indra/llcharacter/llanimationstates.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llbvhconsts.h b/indra/llcharacter/llbvhconsts.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llbvhloader.cpp b/indra/llcharacter/llbvhloader.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llbvhloader.h b/indra/llcharacter/llbvhloader.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llcharacter.cpp b/indra/llcharacter/llcharacter.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llcharacter.h b/indra/llcharacter/llcharacter.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/lleditingmotion.cpp b/indra/llcharacter/lleditingmotion.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/lleditingmotion.h b/indra/llcharacter/lleditingmotion.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llgesture.cpp b/indra/llcharacter/llgesture.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llgesture.h b/indra/llcharacter/llgesture.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llhandmotion.cpp b/indra/llcharacter/llhandmotion.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llhandmotion.h b/indra/llcharacter/llhandmotion.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llheadrotmotion.cpp b/indra/llcharacter/llheadrotmotion.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llheadrotmotion.h b/indra/llcharacter/llheadrotmotion.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/lljoint.cpp b/indra/llcharacter/lljoint.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/lljoint.h b/indra/llcharacter/lljoint.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/lljointsolverrp3.cpp b/indra/llcharacter/lljointsolverrp3.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/lljointsolverrp3.h b/indra/llcharacter/lljointsolverrp3.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/lljointstate.h b/indra/llcharacter/lljointstate.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llkeyframefallmotion.cpp b/indra/llcharacter/llkeyframefallmotion.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llkeyframefallmotion.h b/indra/llcharacter/llkeyframefallmotion.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llkeyframemotion.cpp b/indra/llcharacter/llkeyframemotion.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llkeyframemotion.h b/indra/llcharacter/llkeyframemotion.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llkeyframemotionparam.cpp b/indra/llcharacter/llkeyframemotionparam.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llkeyframemotionparam.h b/indra/llcharacter/llkeyframemotionparam.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llkeyframestandmotion.cpp b/indra/llcharacter/llkeyframestandmotion.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llkeyframestandmotion.h b/indra/llcharacter/llkeyframestandmotion.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llkeyframewalkmotion.cpp b/indra/llcharacter/llkeyframewalkmotion.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llkeyframewalkmotion.h b/indra/llcharacter/llkeyframewalkmotion.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llmotion.cpp b/indra/llcharacter/llmotion.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llmotion.h b/indra/llcharacter/llmotion.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llmotioncontroller.cpp b/indra/llcharacter/llmotioncontroller.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llmotioncontroller.h b/indra/llcharacter/llmotioncontroller.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llmultigesture.cpp b/indra/llcharacter/llmultigesture.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llmultigesture.h b/indra/llcharacter/llmultigesture.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llpose.cpp b/indra/llcharacter/llpose.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llpose.h b/indra/llcharacter/llpose.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llstatemachine.cpp b/indra/llcharacter/llstatemachine.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llstatemachine.h b/indra/llcharacter/llstatemachine.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/lltargetingmotion.cpp b/indra/llcharacter/lltargetingmotion.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/lltargetingmotion.h b/indra/llcharacter/lltargetingmotion.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llvisualparam.cpp b/indra/llcharacter/llvisualparam.cpp old mode 100644 new mode 100755 diff --git a/indra/llcharacter/llvisualparam.h b/indra/llcharacter/llvisualparam.h old mode 100644 new mode 100755 diff --git a/indra/llcharacter/tests/lljoint_test.cpp b/indra/llcharacter/tests/lljoint_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/llcommon/bitpack.cpp b/indra/llcommon/bitpack.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/bitpack.h b/indra/llcommon/bitpack.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/ctype_workaround.h b/indra/llcommon/ctype_workaround.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/doublelinkedlist.h b/indra/llcommon/doublelinkedlist.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/imageids.cpp b/indra/llcommon/imageids.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/imageids.h b/indra/llcommon/imageids.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/indra_constants.cpp b/indra/llcommon/indra_constants.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/indra_constants.h b/indra/llcommon/indra_constants.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/is_approx_equal_fraction.h b/indra/llcommon/is_approx_equal_fraction.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/linden_common.h b/indra/llcommon/linden_common.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/linked_lists.h b/indra/llcommon/linked_lists.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/ll_template_cast.h b/indra/llcommon/ll_template_cast.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llagentconstants.h b/indra/llcommon/llagentconstants.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llallocator.cpp b/indra/llcommon/llallocator.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llallocator.h b/indra/llcommon/llallocator.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llallocator_heap_profile.cpp b/indra/llcommon/llallocator_heap_profile.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llallocator_heap_profile.h b/indra/llcommon/llallocator_heap_profile.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llapp.h b/indra/llcommon/llapp.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llapr.cpp b/indra/llcommon/llapr.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llapr.h b/indra/llcommon/llapr.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llassettype.cpp b/indra/llcommon/llassettype.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llassettype.h b/indra/llcommon/llassettype.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llassoclist.h b/indra/llcommon/llassoclist.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llavatarconstants.h b/indra/llcommon/llavatarconstants.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llbase32.cpp b/indra/llcommon/llbase32.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llbase32.h b/indra/llcommon/llbase32.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llbase64.cpp b/indra/llcommon/llbase64.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llbase64.h b/indra/llcommon/llbase64.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llboost.h b/indra/llcommon/llboost.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llchat.h b/indra/llcommon/llchat.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llclickaction.h b/indra/llcommon/llclickaction.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llcommon.cpp b/indra/llcommon/llcommon.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llcommon.h b/indra/llcommon/llcommon.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llcommonutils.cpp b/indra/llcommon/llcommonutils.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llcommonutils.h b/indra/llcommon/llcommonutils.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llcoros.cpp b/indra/llcommon/llcoros.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llcoros.h b/indra/llcommon/llcoros.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llcrc.cpp b/indra/llcommon/llcrc.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llcrc.h b/indra/llcommon/llcrc.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llcriticaldamp.cpp b/indra/llcommon/llcriticaldamp.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llcriticaldamp.h b/indra/llcommon/llcriticaldamp.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llcursortypes.cpp b/indra/llcommon/llcursortypes.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llcursortypes.h b/indra/llcommon/llcursortypes.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lldarray.h b/indra/llcommon/lldarray.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lldarrayptr.h b/indra/llcommon/lldarrayptr.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lldate.cpp b/indra/llcommon/lldate.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/lldate.h b/indra/llcommon/lldate.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lldefs.h b/indra/llcommon/lldefs.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lldeleteutils.h b/indra/llcommon/lldeleteutils.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lldependencies.cpp b/indra/llcommon/lldependencies.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/lldependencies.h b/indra/llcommon/lldependencies.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lldepthstack.h b/indra/llcommon/lldepthstack.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lldictionary.cpp b/indra/llcommon/lldictionary.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/lldictionary.h b/indra/llcommon/lldictionary.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lldlinked.h b/indra/llcommon/lldlinked.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lldoubledispatch.h b/indra/llcommon/lldoubledispatch.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lldqueueptr.h b/indra/llcommon/lldqueueptr.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llendianswizzle.h b/indra/llcommon/llendianswizzle.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llenum.h b/indra/llcommon/llenum.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llerror.h b/indra/llcommon/llerror.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llerrorcontrol.h b/indra/llcommon/llerrorcontrol.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llerrorlegacy.h b/indra/llcommon/llerrorlegacy.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llerrorthread.cpp b/indra/llcommon/llerrorthread.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llerrorthread.h b/indra/llcommon/llerrorthread.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llevent.cpp b/indra/llcommon/llevent.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llevent.h b/indra/llcommon/llevent.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lleventapi.cpp b/indra/llcommon/lleventapi.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/lleventapi.h b/indra/llcommon/lleventapi.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lleventcoro.cpp b/indra/llcommon/lleventcoro.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/lleventcoro.h b/indra/llcommon/lleventcoro.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lleventdispatcher.cpp b/indra/llcommon/lleventdispatcher.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/lleventdispatcher.h b/indra/llcommon/lleventdispatcher.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lleventemitter.h b/indra/llcommon/lleventemitter.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lleventfilter.cpp b/indra/llcommon/lleventfilter.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/lleventfilter.h b/indra/llcommon/lleventfilter.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llevents.cpp b/indra/llcommon/llevents.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llevents.h b/indra/llcommon/llevents.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lleventtimer.cpp b/indra/llcommon/lleventtimer.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/lleventtimer.h b/indra/llcommon/lleventtimer.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llextendedstatus.h b/indra/llcommon/llextendedstatus.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llfasttimer_class.cpp b/indra/llcommon/llfasttimer_class.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llfasttimer_class.h b/indra/llcommon/llfasttimer_class.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llfile.cpp b/indra/llcommon/llfile.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llfile.h b/indra/llcommon/llfile.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llfindlocale.cpp b/indra/llcommon/llfindlocale.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llfindlocale.h b/indra/llcommon/llfindlocale.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llfixedbuffer.cpp b/indra/llcommon/llfixedbuffer.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llfixedbuffer.h b/indra/llcommon/llfixedbuffer.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llfoldertype.cpp b/indra/llcommon/llfoldertype.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llfoldertype.h b/indra/llcommon/llfoldertype.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llformat.cpp b/indra/llcommon/llformat.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llformat.h b/indra/llcommon/llformat.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llframetimer.cpp b/indra/llcommon/llframetimer.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llframetimer.h b/indra/llcommon/llframetimer.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llhash.h b/indra/llcommon/llhash.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llheartbeat.cpp b/indra/llcommon/llheartbeat.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llheartbeat.h b/indra/llcommon/llheartbeat.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llhttpstatuscodes.h b/indra/llcommon/llhttpstatuscodes.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llindexedqueue.h b/indra/llcommon/llindexedqueue.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llinstancetracker.cpp b/indra/llcommon/llinstancetracker.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llinstancetracker.h b/indra/llcommon/llinstancetracker.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llkeythrottle.h b/indra/llcommon/llkeythrottle.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llkeyusetracker.h b/indra/llcommon/llkeyusetracker.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lllazy.cpp b/indra/llcommon/lllazy.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/lllazy.h b/indra/llcommon/lllazy.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lllinkedqueue.h b/indra/llcommon/lllinkedqueue.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lllistenerwrapper.h b/indra/llcommon/lllistenerwrapper.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llliveappconfig.cpp b/indra/llcommon/llliveappconfig.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llliveappconfig.h b/indra/llcommon/llliveappconfig.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lllivefile.cpp b/indra/llcommon/lllivefile.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/lllivefile.h b/indra/llcommon/lllivefile.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lllocalidhashmap.h b/indra/llcommon/lllocalidhashmap.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lllog.cpp b/indra/llcommon/lllog.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/lllog.h b/indra/llcommon/lllog.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lllslconstants.h b/indra/llcommon/lllslconstants.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llmap.h b/indra/llcommon/llmap.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llmd5.cpp b/indra/llcommon/llmd5.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llmd5.h b/indra/llcommon/llmd5.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llmemory.cpp b/indra/llcommon/llmemory.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llmemory.h b/indra/llcommon/llmemory.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llmemorystream.cpp b/indra/llcommon/llmemorystream.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llmemorystream.h b/indra/llcommon/llmemorystream.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llmemtype.cpp b/indra/llcommon/llmemtype.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llmemtype.h b/indra/llcommon/llmemtype.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llmetrics.cpp b/indra/llcommon/llmetrics.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llmetrics.h b/indra/llcommon/llmetrics.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llmortician.cpp b/indra/llcommon/llmortician.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llmortician.h b/indra/llcommon/llmortician.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llnametable.h b/indra/llcommon/llnametable.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lloptioninterface.cpp b/indra/llcommon/lloptioninterface.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/lloptioninterface.h b/indra/llcommon/lloptioninterface.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llpointer.h b/indra/llcommon/llpointer.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llpreprocessor.h b/indra/llcommon/llpreprocessor.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llpriqueuemap.h b/indra/llcommon/llpriqueuemap.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llprocesslauncher.cpp b/indra/llcommon/llprocesslauncher.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llprocesslauncher.h b/indra/llcommon/llprocesslauncher.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llprocessor.cpp b/indra/llcommon/llprocessor.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llprocessor.h b/indra/llcommon/llprocessor.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llptrskiplist.h b/indra/llcommon/llptrskiplist.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llptrskipmap.h b/indra/llcommon/llptrskipmap.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llptrto.cpp b/indra/llcommon/llptrto.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llptrto.h b/indra/llcommon/llptrto.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llqueuedthread.h b/indra/llcommon/llqueuedthread.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llrand.cpp b/indra/llcommon/llrand.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llrand.h b/indra/llcommon/llrand.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llrefcount.cpp b/indra/llcommon/llrefcount.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llrefcount.h b/indra/llcommon/llrefcount.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llrun.cpp b/indra/llcommon/llrun.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llrun.h b/indra/llcommon/llrun.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llsafehandle.h b/indra/llcommon/llsafehandle.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llsd.cpp b/indra/llcommon/llsd.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llsd.h b/indra/llcommon/llsd.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llsdserialize.cpp b/indra/llcommon/llsdserialize.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llsdserialize.h b/indra/llcommon/llsdserialize.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llsdserialize_xml.cpp b/indra/llcommon/llsdserialize_xml.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llsdserialize_xml.h b/indra/llcommon/llsdserialize_xml.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llsdutil.cpp b/indra/llcommon/llsdutil.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llsdutil.h b/indra/llcommon/llsdutil.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llsecondlifeurls.cpp b/indra/llcommon/llsecondlifeurls.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llsecondlifeurls.h b/indra/llcommon/llsecondlifeurls.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llsimplehash.h b/indra/llcommon/llsimplehash.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llsingleton.cpp b/indra/llcommon/llsingleton.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llsingleton.h b/indra/llcommon/llsingleton.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llskiplist.h b/indra/llcommon/llskiplist.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llskipmap.h b/indra/llcommon/llskipmap.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llsmoothstep.h b/indra/llcommon/llsmoothstep.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llstack.h b/indra/llcommon/llstack.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llstacktrace.cpp b/indra/llcommon/llstacktrace.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llstacktrace.h b/indra/llcommon/llstacktrace.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llstat.cpp b/indra/llcommon/llstat.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llstat.h b/indra/llcommon/llstat.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llstatenums.h b/indra/llcommon/llstatenums.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llstl.h b/indra/llcommon/llstl.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llstreamtools.cpp b/indra/llcommon/llstreamtools.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llstreamtools.h b/indra/llcommon/llstreamtools.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llstrider.h b/indra/llcommon/llstrider.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llstringtable.cpp b/indra/llcommon/llstringtable.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llstringtable.h b/indra/llcommon/llstringtable.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llsys.h b/indra/llcommon/llsys.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lltimer.cpp b/indra/llcommon/lltimer.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/lltimer.h b/indra/llcommon/lltimer.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lltreeiterators.h b/indra/llcommon/lltreeiterators.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lluri.cpp b/indra/llcommon/lluri.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/lluri.h b/indra/llcommon/lluri.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lluuid.cpp b/indra/llcommon/lluuid.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/lluuid.h b/indra/llcommon/lluuid.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/lluuidhashmap.h b/indra/llcommon/lluuidhashmap.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llversionserver.h b/indra/llcommon/llversionserver.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/llworkerthread.h b/indra/llcommon/llworkerthread.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/metaclass.cpp b/indra/llcommon/metaclass.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/metaclass.h b/indra/llcommon/metaclass.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/metaclasst.h b/indra/llcommon/metaclasst.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/metaproperty.cpp b/indra/llcommon/metaproperty.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/metaproperty.h b/indra/llcommon/metaproperty.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/metapropertyt.h b/indra/llcommon/metapropertyt.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/reflective.cpp b/indra/llcommon/reflective.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/reflective.h b/indra/llcommon/reflective.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/reflectivet.h b/indra/llcommon/reflectivet.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/roles_constants.h b/indra/llcommon/roles_constants.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/stdenums.h b/indra/llcommon/stdenums.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/stdtypes.h b/indra/llcommon/stdtypes.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/string_table.h b/indra/llcommon/string_table.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/stringize.h b/indra/llcommon/stringize.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/bitpack_test.cpp b/indra/llcommon/tests/bitpack_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/commonmisc_test.cpp b/indra/llcommon/tests/commonmisc_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/listener.h b/indra/llcommon/tests/listener.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/llallocator_heap_profile_test.cpp b/indra/llcommon/tests/llallocator_heap_profile_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/llallocator_test.cpp b/indra/llcommon/tests/llallocator_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/llbase64_test.cpp b/indra/llcommon/tests/llbase64_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/lldate_test.cpp b/indra/llcommon/tests/lldate_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/lldependencies_test.cpp b/indra/llcommon/tests/lldependencies_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/llerror_test.cpp b/indra/llcommon/tests/llerror_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/lleventcoro_test.cpp b/indra/llcommon/tests/lleventcoro_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/lleventfilter_test.cpp b/indra/llcommon/tests/lleventfilter_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/llframetimer_test.cpp b/indra/llcommon/tests/llframetimer_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/llinstancetracker_test.cpp b/indra/llcommon/tests/llinstancetracker_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/lllazy_test.cpp b/indra/llcommon/tests/lllazy_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/llmemtype_test.cpp b/indra/llcommon/tests/llmemtype_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/llprocessor_test.cpp b/indra/llcommon/tests/llprocessor_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/llrand_test.cpp b/indra/llcommon/tests/llrand_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/llstring_test.cpp b/indra/llcommon/tests/llstring_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/lltreeiterators_test.cpp b/indra/llcommon/tests/lltreeiterators_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/lluri_test.cpp b/indra/llcommon/tests/lluri_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/reflection_test.cpp b/indra/llcommon/tests/reflection_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/stringize_test.cpp b/indra/llcommon/tests/stringize_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/tests/wrapllerrs.h b/indra/llcommon/tests/wrapllerrs.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/timer.h b/indra/llcommon/timer.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/timing.cpp b/indra/llcommon/timing.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/timing.h b/indra/llcommon/timing.h old mode 100644 new mode 100755 diff --git a/indra/llcommon/u64.cpp b/indra/llcommon/u64.cpp old mode 100644 new mode 100755 diff --git a/indra/llcommon/u64.h b/indra/llcommon/u64.h old mode 100644 new mode 100755 diff --git a/indra/llcrashlogger/CMakeLists.txt b/indra/llcrashlogger/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp old mode 100644 new mode 100755 diff --git a/indra/llcrashlogger/llcrashlogger.h b/indra/llcrashlogger/llcrashlogger.h old mode 100644 new mode 100755 diff --git a/indra/llimage/CMakeLists.txt b/indra/llimage/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp old mode 100644 new mode 100755 diff --git a/indra/llimage/llimage.h b/indra/llimage/llimage.h old mode 100644 new mode 100755 diff --git a/indra/llimage/llimagebmp.cpp b/indra/llimage/llimagebmp.cpp old mode 100644 new mode 100755 diff --git a/indra/llimage/llimagebmp.h b/indra/llimage/llimagebmp.h old mode 100644 new mode 100755 diff --git a/indra/llimage/llimagedimensionsinfo.cpp b/indra/llimage/llimagedimensionsinfo.cpp old mode 100644 new mode 100755 diff --git a/indra/llimage/llimagedimensionsinfo.h b/indra/llimage/llimagedimensionsinfo.h old mode 100644 new mode 100755 diff --git a/indra/llimage/llimagedxt.cpp b/indra/llimage/llimagedxt.cpp old mode 100644 new mode 100755 diff --git a/indra/llimage/llimagedxt.h b/indra/llimage/llimagedxt.h old mode 100644 new mode 100755 diff --git a/indra/llimage/llimagej2c.cpp b/indra/llimage/llimagej2c.cpp old mode 100644 new mode 100755 diff --git a/indra/llimage/llimagej2c.h b/indra/llimage/llimagej2c.h old mode 100644 new mode 100755 diff --git a/indra/llimage/llimagejpeg.cpp b/indra/llimage/llimagejpeg.cpp old mode 100644 new mode 100755 diff --git a/indra/llimage/llimagejpeg.h b/indra/llimage/llimagejpeg.h old mode 100644 new mode 100755 diff --git a/indra/llimage/llimagepng.cpp b/indra/llimage/llimagepng.cpp old mode 100644 new mode 100755 diff --git a/indra/llimage/llimagepng.h b/indra/llimage/llimagepng.h old mode 100644 new mode 100755 diff --git a/indra/llimage/llimagetga.cpp b/indra/llimage/llimagetga.cpp old mode 100644 new mode 100755 diff --git a/indra/llimage/llimagetga.h b/indra/llimage/llimagetga.h old mode 100644 new mode 100755 diff --git a/indra/llimage/llimageworker.cpp b/indra/llimage/llimageworker.cpp old mode 100644 new mode 100755 diff --git a/indra/llimage/llimageworker.h b/indra/llimage/llimageworker.h old mode 100644 new mode 100755 diff --git a/indra/llimage/llmapimagetype.h b/indra/llimage/llmapimagetype.h old mode 100644 new mode 100755 diff --git a/indra/llimage/llpngwrapper.cpp b/indra/llimage/llpngwrapper.cpp old mode 100644 new mode 100755 diff --git a/indra/llimage/llpngwrapper.h b/indra/llimage/llpngwrapper.h old mode 100644 new mode 100755 diff --git a/indra/llimage/tests/llimageworker_test.cpp b/indra/llimage/tests/llimageworker_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llimagej2coj/CMakeLists.txt b/indra/llimagej2coj/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/llimagej2coj/llimagej2coj.cpp b/indra/llimagej2coj/llimagej2coj.cpp old mode 100644 new mode 100755 diff --git a/indra/llimagej2coj/llimagej2coj.h b/indra/llimagej2coj/llimagej2coj.h old mode 100644 new mode 100755 diff --git a/indra/llinventory/CMakeLists.txt b/indra/llinventory/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/llinventory/llcategory.cpp b/indra/llinventory/llcategory.cpp old mode 100644 new mode 100755 diff --git a/indra/llinventory/llcategory.h b/indra/llinventory/llcategory.h old mode 100644 new mode 100755 diff --git a/indra/llinventory/lleconomy.cpp b/indra/llinventory/lleconomy.cpp old mode 100644 new mode 100755 diff --git a/indra/llinventory/lleconomy.h b/indra/llinventory/lleconomy.h old mode 100644 new mode 100755 diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp old mode 100644 new mode 100755 diff --git a/indra/llinventory/llinventory.h b/indra/llinventory/llinventory.h old mode 100644 new mode 100755 diff --git a/indra/llinventory/llinventorydefines.cpp b/indra/llinventory/llinventorydefines.cpp old mode 100644 new mode 100755 diff --git a/indra/llinventory/llinventorydefines.h b/indra/llinventory/llinventorydefines.h old mode 100644 new mode 100755 diff --git a/indra/llinventory/llinventorytype.cpp b/indra/llinventory/llinventorytype.cpp old mode 100644 new mode 100755 diff --git a/indra/llinventory/llinventorytype.h b/indra/llinventory/llinventorytype.h old mode 100644 new mode 100755 diff --git a/indra/llinventory/lllandmark.cpp b/indra/llinventory/lllandmark.cpp old mode 100644 new mode 100755 diff --git a/indra/llinventory/lllandmark.h b/indra/llinventory/lllandmark.h old mode 100644 new mode 100755 diff --git a/indra/llinventory/llnotecard.cpp b/indra/llinventory/llnotecard.cpp old mode 100644 new mode 100755 diff --git a/indra/llinventory/llnotecard.h b/indra/llinventory/llnotecard.h old mode 100644 new mode 100755 diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp old mode 100644 new mode 100755 diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h old mode 100644 new mode 100755 diff --git a/indra/llinventory/llparcelflags.h b/indra/llinventory/llparcelflags.h old mode 100644 new mode 100755 diff --git a/indra/llinventory/llpermissions.cpp b/indra/llinventory/llpermissions.cpp old mode 100644 new mode 100755 diff --git a/indra/llinventory/llpermissions.h b/indra/llinventory/llpermissions.h old mode 100644 new mode 100755 diff --git a/indra/llinventory/llpermissionsflags.h b/indra/llinventory/llpermissionsflags.h old mode 100644 new mode 100755 diff --git a/indra/llinventory/llsaleinfo.cpp b/indra/llinventory/llsaleinfo.cpp old mode 100644 new mode 100755 diff --git a/indra/llinventory/llsaleinfo.h b/indra/llinventory/llsaleinfo.h old mode 100644 new mode 100755 diff --git a/indra/llinventory/lltransactionflags.cpp b/indra/llinventory/lltransactionflags.cpp old mode 100644 new mode 100755 diff --git a/indra/llinventory/lltransactionflags.h b/indra/llinventory/lltransactionflags.h old mode 100644 new mode 100755 diff --git a/indra/llinventory/lltransactiontypes.h b/indra/llinventory/lltransactiontypes.h old mode 100644 new mode 100755 diff --git a/indra/llinventory/lluserrelations.cpp b/indra/llinventory/lluserrelations.cpp old mode 100644 new mode 100755 diff --git a/indra/llinventory/lluserrelations.h b/indra/llinventory/lluserrelations.h old mode 100644 new mode 100755 diff --git a/indra/llinventory/tests/inventorymisc_test.cpp b/indra/llinventory/tests/inventorymisc_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llinventory/tests/llparcel_test.cpp b/indra/llinventory/tests/llparcel_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/llmath/camera.h b/indra/llmath/camera.h old mode 100644 new mode 100755 diff --git a/indra/llmath/coordframe.h b/indra/llmath/coordframe.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llbbox.cpp b/indra/llmath/llbbox.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/llbbox.h b/indra/llmath/llbbox.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llbboxlocal.cpp b/indra/llmath/llbboxlocal.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/llbboxlocal.h b/indra/llmath/llbboxlocal.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llcamera.cpp b/indra/llmath/llcamera.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/llcamera.h b/indra/llmath/llcamera.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llcoord.h b/indra/llmath/llcoord.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llcoordframe.cpp b/indra/llmath/llcoordframe.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/llcoordframe.h b/indra/llmath/llcoordframe.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llinterp.h b/indra/llmath/llinterp.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llline.cpp b/indra/llmath/llline.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/llline.h b/indra/llmath/llline.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llmath.h b/indra/llmath/llmath.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llmatrix3a.cpp b/indra/llmath/llmatrix3a.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/llmatrix3a.h b/indra/llmath/llmatrix3a.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llmatrix3a.inl b/indra/llmath/llmatrix3a.inl old mode 100644 new mode 100755 diff --git a/indra/llmath/llmatrix4a.h b/indra/llmath/llmatrix4a.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llmodularmath.cpp b/indra/llmath/llmodularmath.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/llmodularmath.h b/indra/llmath/llmodularmath.h old mode 100644 new mode 100755 diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llperlin.cpp b/indra/llmath/llperlin.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/llperlin.h b/indra/llmath/llperlin.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llplane.h b/indra/llmath/llplane.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llquantize.h b/indra/llmath/llquantize.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llquaternion.cpp b/indra/llmath/llquaternion.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/llquaternion.h b/indra/llmath/llquaternion.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llquaternion2.h b/indra/llmath/llquaternion2.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llquaternion2.inl b/indra/llmath/llquaternion2.inl old mode 100644 new mode 100755 diff --git a/indra/llmath/llrect.cpp b/indra/llmath/llrect.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/llrect.h b/indra/llmath/llrect.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llsdutil_math.cpp b/indra/llmath/llsdutil_math.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/llsdutil_math.h b/indra/llmath/llsdutil_math.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llsimdmath.h b/indra/llmath/llsimdmath.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llsimdtypes.h b/indra/llmath/llsimdtypes.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llsimdtypes.inl b/indra/llmath/llsimdtypes.inl old mode 100644 new mode 100755 diff --git a/indra/llmath/llsphere.cpp b/indra/llmath/llsphere.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/llsphere.h b/indra/llmath/llsphere.h old mode 100644 new mode 100755 diff --git a/indra/llmath/lltreenode.h b/indra/llmath/lltreenode.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llv4math.h b/indra/llmath/llv4math.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llv4matrix3.h b/indra/llmath/llv4matrix3.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llv4matrix4.h b/indra/llmath/llv4matrix4.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llv4vector3.h b/indra/llmath/llv4vector3.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llvector4a.cpp b/indra/llmath/llvector4a.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/llvector4a.h b/indra/llmath/llvector4a.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llvector4a.inl b/indra/llmath/llvector4a.inl old mode 100644 new mode 100755 diff --git a/indra/llmath/llvector4logical.h b/indra/llmath/llvector4logical.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llvolumemgr.cpp b/indra/llmath/llvolumemgr.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/llvolumemgr.h b/indra/llmath/llvolumemgr.h old mode 100644 new mode 100755 diff --git a/indra/llmath/llvolumeoctree.cpp b/indra/llmath/llvolumeoctree.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/llvolumeoctree.h b/indra/llmath/llvolumeoctree.h old mode 100644 new mode 100755 diff --git a/indra/llmath/m3math.cpp b/indra/llmath/m3math.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/m3math.h b/indra/llmath/m3math.h old mode 100644 new mode 100755 diff --git a/indra/llmath/m4math.cpp b/indra/llmath/m4math.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/m4math.h b/indra/llmath/m4math.h old mode 100644 new mode 100755 diff --git a/indra/llmath/raytrace.cpp b/indra/llmath/raytrace.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/raytrace.h b/indra/llmath/raytrace.h old mode 100644 new mode 100755 diff --git a/indra/llmath/tests/llbbox_test.cpp b/indra/llmath/tests/llbbox_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/tests/llbboxlocal_test.cpp b/indra/llmath/tests/llbboxlocal_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/tests/llmodularmath_test.cpp b/indra/llmath/tests/llmodularmath_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/tests/llquaternion_test.cpp b/indra/llmath/tests/llquaternion_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/tests/llrect_test.cpp b/indra/llmath/tests/llrect_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/tests/m3math_test.cpp b/indra/llmath/tests/m3math_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/tests/mathmisc_test.cpp b/indra/llmath/tests/mathmisc_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/tests/v2math_test.cpp b/indra/llmath/tests/v2math_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/tests/v3color_test.cpp b/indra/llmath/tests/v3color_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/tests/v3dmath_test.cpp b/indra/llmath/tests/v3dmath_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/tests/v3math_test.cpp b/indra/llmath/tests/v3math_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/tests/v4color_test.cpp b/indra/llmath/tests/v4color_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/tests/v4coloru_test.cpp b/indra/llmath/tests/v4coloru_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/tests/v4math_test.cpp b/indra/llmath/tests/v4math_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/tests/xform_test.cpp b/indra/llmath/tests/xform_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/v2math.cpp b/indra/llmath/v2math.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/v2math.h b/indra/llmath/v2math.h old mode 100644 new mode 100755 diff --git a/indra/llmath/v3color.cpp b/indra/llmath/v3color.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/v3color.h b/indra/llmath/v3color.h old mode 100644 new mode 100755 diff --git a/indra/llmath/v3dmath.cpp b/indra/llmath/v3dmath.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/v3dmath.h b/indra/llmath/v3dmath.h old mode 100644 new mode 100755 diff --git a/indra/llmath/v3math.cpp b/indra/llmath/v3math.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/v3math.h b/indra/llmath/v3math.h old mode 100644 new mode 100755 diff --git a/indra/llmath/v4color.cpp b/indra/llmath/v4color.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/v4color.h b/indra/llmath/v4color.h old mode 100644 new mode 100755 diff --git a/indra/llmath/v4coloru.cpp b/indra/llmath/v4coloru.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/v4coloru.h b/indra/llmath/v4coloru.h old mode 100644 new mode 100755 diff --git a/indra/llmath/v4math.cpp b/indra/llmath/v4math.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/v4math.h b/indra/llmath/v4math.h old mode 100644 new mode 100755 diff --git a/indra/llmath/xform.cpp b/indra/llmath/xform.cpp old mode 100644 new mode 100755 diff --git a/indra/llmath/xform.h b/indra/llmath/xform.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/CMakeLists.txt b/indra/llmessage/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/llmessage/llares.cpp b/indra/llmessage/llares.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llares.h b/indra/llmessage/llares.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llareslistener.cpp b/indra/llmessage/llareslistener.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llareslistener.h b/indra/llmessage/llareslistener.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llassetstorage.cpp b/indra/llmessage/llassetstorage.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llassetstorage.h b/indra/llmessage/llassetstorage.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llblowfishcipher.cpp b/indra/llmessage/llblowfishcipher.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llblowfishcipher.h b/indra/llmessage/llblowfishcipher.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llbuffer.cpp b/indra/llmessage/llbuffer.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llbuffer.h b/indra/llmessage/llbuffer.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llbufferstream.cpp b/indra/llmessage/llbufferstream.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llbufferstream.h b/indra/llmessage/llbufferstream.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llcachename.cpp b/indra/llmessage/llcachename.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llcachename.h b/indra/llmessage/llcachename.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llchainio.cpp b/indra/llmessage/llchainio.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llchainio.h b/indra/llmessage/llchainio.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llcipher.h b/indra/llmessage/llcipher.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llcircuit.cpp b/indra/llmessage/llcircuit.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llcircuit.h b/indra/llmessage/llcircuit.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llclassifiedflags.cpp b/indra/llmessage/llclassifiedflags.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llclassifiedflags.h b/indra/llmessage/llclassifiedflags.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lldatapacker.cpp b/indra/llmessage/lldatapacker.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/lldatapacker.h b/indra/llmessage/lldatapacker.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lldbstrings.h b/indra/llmessage/lldbstrings.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lldispatcher.cpp b/indra/llmessage/lldispatcher.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/lldispatcher.h b/indra/llmessage/lldispatcher.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lleventflags.h b/indra/llmessage/lleventflags.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llfiltersd2xmlrpc.cpp b/indra/llmessage/llfiltersd2xmlrpc.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llfiltersd2xmlrpc.h b/indra/llmessage/llfiltersd2xmlrpc.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llfollowcamparams.h b/indra/llmessage/llfollowcamparams.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llhost.cpp b/indra/llmessage/llhost.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llhost.h b/indra/llmessage/llhost.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llhttpassetstorage.cpp b/indra/llmessage/llhttpassetstorage.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llhttpassetstorage.h b/indra/llmessage/llhttpassetstorage.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llhttpclient.cpp b/indra/llmessage/llhttpclient.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llhttpclient.h b/indra/llmessage/llhttpclient.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llhttpclientadapter.cpp b/indra/llmessage/llhttpclientadapter.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llhttpclientadapter.h b/indra/llmessage/llhttpclientadapter.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llhttpclientinterface.h b/indra/llmessage/llhttpclientinterface.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llhttpnode.cpp b/indra/llmessage/llhttpnode.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llhttpnode.h b/indra/llmessage/llhttpnode.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llhttpnodeadapter.h b/indra/llmessage/llhttpnodeadapter.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llhttpsender.cpp b/indra/llmessage/llhttpsender.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llhttpsender.h b/indra/llmessage/llhttpsender.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llinstantmessage.cpp b/indra/llmessage/llinstantmessage.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llinstantmessage.h b/indra/llmessage/llinstantmessage.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llinvite.h b/indra/llmessage/llinvite.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lliobuffer.cpp b/indra/llmessage/lliobuffer.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/lliobuffer.h b/indra/llmessage/lliobuffer.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lliohttpserver.cpp b/indra/llmessage/lliohttpserver.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/lliohttpserver.h b/indra/llmessage/lliohttpserver.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lliopipe.cpp b/indra/llmessage/lliopipe.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/lliopipe.h b/indra/llmessage/lliopipe.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lliosocket.cpp b/indra/llmessage/lliosocket.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/lliosocket.h b/indra/llmessage/lliosocket.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llioutil.cpp b/indra/llmessage/llioutil.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llioutil.h b/indra/llmessage/llioutil.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llloginflags.h b/indra/llmessage/llloginflags.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llmail.cpp b/indra/llmessage/llmail.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llmail.h b/indra/llmessage/llmail.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llmessagebuilder.cpp b/indra/llmessage/llmessagebuilder.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llmessagebuilder.h b/indra/llmessage/llmessagebuilder.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llmessageconfig.cpp b/indra/llmessage/llmessageconfig.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llmessageconfig.h b/indra/llmessage/llmessageconfig.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llmessagereader.cpp b/indra/llmessage/llmessagereader.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llmessagereader.h b/indra/llmessage/llmessagereader.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llmessagesenderinterface.h b/indra/llmessage/llmessagesenderinterface.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llmessagetemplate.cpp b/indra/llmessage/llmessagetemplate.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llmessagetemplate.h b/indra/llmessage/llmessagetemplate.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llmessagetemplateparser.cpp b/indra/llmessage/llmessagetemplateparser.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llmessagetemplateparser.h b/indra/llmessage/llmessagetemplateparser.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llmessagethrottle.cpp b/indra/llmessage/llmessagethrottle.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llmessagethrottle.h b/indra/llmessage/llmessagethrottle.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llmime.cpp b/indra/llmessage/llmime.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llmime.h b/indra/llmessage/llmime.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llmsgvariabletype.h b/indra/llmessage/llmsgvariabletype.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llnamevalue.cpp b/indra/llmessage/llnamevalue.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llnamevalue.h b/indra/llmessage/llnamevalue.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llnullcipher.cpp b/indra/llmessage/llnullcipher.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llnullcipher.h b/indra/llmessage/llnullcipher.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llpacketack.cpp b/indra/llmessage/llpacketack.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llpacketack.h b/indra/llmessage/llpacketack.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llpacketbuffer.cpp b/indra/llmessage/llpacketbuffer.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llpacketbuffer.h b/indra/llmessage/llpacketbuffer.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llpacketring.cpp b/indra/llmessage/llpacketring.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llpacketring.h b/indra/llmessage/llpacketring.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llpartdata.cpp b/indra/llmessage/llpartdata.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llpartdata.h b/indra/llmessage/llpartdata.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llpumpio.cpp b/indra/llmessage/llpumpio.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llpumpio.h b/indra/llmessage/llpumpio.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llqueryflags.h b/indra/llmessage/llqueryflags.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llregionflags.h b/indra/llmessage/llregionflags.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llregionhandle.h b/indra/llmessage/llregionhandle.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llregionpresenceverifier.cpp b/indra/llmessage/llregionpresenceverifier.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llregionpresenceverifier.h b/indra/llmessage/llregionpresenceverifier.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llsdappservices.cpp b/indra/llmessage/llsdappservices.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llsdappservices.h b/indra/llmessage/llsdappservices.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llsdhttpserver.cpp b/indra/llmessage/llsdhttpserver.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llsdhttpserver.h b/indra/llmessage/llsdhttpserver.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llsdmessage.cpp b/indra/llmessage/llsdmessage.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llsdmessage.h b/indra/llmessage/llsdmessage.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llsdmessagebuilder.cpp b/indra/llmessage/llsdmessagebuilder.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llsdmessagebuilder.h b/indra/llmessage/llsdmessagebuilder.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llsdmessagereader.cpp b/indra/llmessage/llsdmessagereader.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llsdmessagereader.h b/indra/llmessage/llsdmessagereader.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llsdrpcclient.cpp b/indra/llmessage/llsdrpcclient.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llsdrpcclient.h b/indra/llmessage/llsdrpcclient.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llsdrpcserver.cpp b/indra/llmessage/llsdrpcserver.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llsdrpcserver.h b/indra/llmessage/llsdrpcserver.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llservice.cpp b/indra/llmessage/llservice.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llservice.h b/indra/llmessage/llservice.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llservicebuilder.cpp b/indra/llmessage/llservicebuilder.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llservicebuilder.h b/indra/llmessage/llservicebuilder.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llstoredmessage.cpp b/indra/llmessage/llstoredmessage.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llstoredmessage.h b/indra/llmessage/llstoredmessage.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltaskname.h b/indra/llmessage/lltaskname.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llteleportflags.h b/indra/llmessage/llteleportflags.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltemplatemessagebuilder.cpp b/indra/llmessage/lltemplatemessagebuilder.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltemplatemessagebuilder.h b/indra/llmessage/lltemplatemessagebuilder.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltemplatemessagedispatcher.cpp b/indra/llmessage/lltemplatemessagedispatcher.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltemplatemessagedispatcher.h b/indra/llmessage/lltemplatemessagedispatcher.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltemplatemessagereader.cpp b/indra/llmessage/lltemplatemessagereader.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltemplatemessagereader.h b/indra/llmessage/lltemplatemessagereader.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llthrottle.cpp b/indra/llmessage/llthrottle.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llthrottle.h b/indra/llmessage/llthrottle.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltransfermanager.cpp b/indra/llmessage/lltransfermanager.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltransfermanager.h b/indra/llmessage/lltransfermanager.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltransfersourceasset.cpp b/indra/llmessage/lltransfersourceasset.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltransfersourceasset.h b/indra/llmessage/lltransfersourceasset.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltransfersourcefile.cpp b/indra/llmessage/lltransfersourcefile.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltransfersourcefile.h b/indra/llmessage/lltransfersourcefile.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltransfertargetfile.cpp b/indra/llmessage/lltransfertargetfile.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltransfertargetfile.h b/indra/llmessage/lltransfertargetfile.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltransfertargetvfile.cpp b/indra/llmessage/lltransfertargetvfile.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltransfertargetvfile.h b/indra/llmessage/lltransfertargetvfile.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltrustedmessageservice.cpp b/indra/llmessage/lltrustedmessageservice.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/lltrustedmessageservice.h b/indra/llmessage/lltrustedmessageservice.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llurlrequest.cpp b/indra/llmessage/llurlrequest.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llurlrequest.h b/indra/llmessage/llurlrequest.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/lluseroperation.cpp b/indra/llmessage/lluseroperation.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/lluseroperation.h b/indra/llmessage/lluseroperation.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llvehicleparams.h b/indra/llmessage/llvehicleparams.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llxfer.cpp b/indra/llmessage/llxfer.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llxfer.h b/indra/llmessage/llxfer.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llxfer_file.cpp b/indra/llmessage/llxfer_file.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llxfer_file.h b/indra/llmessage/llxfer_file.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llxfer_mem.cpp b/indra/llmessage/llxfer_mem.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llxfer_mem.h b/indra/llmessage/llxfer_mem.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llxfer_vfile.cpp b/indra/llmessage/llxfer_vfile.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llxfer_vfile.h b/indra/llmessage/llxfer_vfile.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llxfermanager.cpp b/indra/llmessage/llxfermanager.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llxfermanager.h b/indra/llmessage/llxfermanager.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/llxorcipher.cpp b/indra/llmessage/llxorcipher.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/llxorcipher.h b/indra/llmessage/llxorcipher.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/machine.cpp b/indra/llmessage/machine.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/machine.h b/indra/llmessage/machine.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/mean_collision_data.h b/indra/llmessage/mean_collision_data.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/message.cpp b/indra/llmessage/message.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/message.h b/indra/llmessage/message.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/message_string_table.cpp b/indra/llmessage/message_string_table.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/net.cpp b/indra/llmessage/net.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/net.h b/indra/llmessage/net.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/partsyspacket.cpp b/indra/llmessage/partsyspacket.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/partsyspacket.h b/indra/llmessage/partsyspacket.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/patch_code.cpp b/indra/llmessage/patch_code.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/patch_code.h b/indra/llmessage/patch_code.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/patch_dct.cpp b/indra/llmessage/patch_dct.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/patch_dct.h b/indra/llmessage/patch_dct.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/patch_idct.cpp b/indra/llmessage/patch_idct.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/sound_ids.cpp b/indra/llmessage/sound_ids.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/sound_ids.h b/indra/llmessage/sound_ids.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/commtest.h b/indra/llmessage/tests/commtest.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/llareslistener_test.cpp b/indra/llmessage/tests/llareslistener_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/llcurl_stub.cpp b/indra/llmessage/tests/llcurl_stub.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/llhost_test.cpp b/indra/llmessage/tests/llhost_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/llhttpclientadapter_test.cpp b/indra/llmessage/tests/llhttpclientadapter_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/llmime_test.cpp b/indra/llmessage/tests/llmime_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/llmockhttpclient.h b/indra/llmessage/tests/llmockhttpclient.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/llnamevalue_test.cpp b/indra/llmessage/tests/llnamevalue_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/llpartdata_test.cpp b/indra/llmessage/tests/llpartdata_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/llregionpresenceverifier_test.cpp b/indra/llmessage/tests/llregionpresenceverifier_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/llsdmessage_test.cpp b/indra/llmessage/tests/llsdmessage_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/lltemplatemessagedispatcher_test.cpp b/indra/llmessage/tests/lltemplatemessagedispatcher_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/lltesthttpclientadapter.cpp b/indra/llmessage/tests/lltesthttpclientadapter.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/lltesthttpclientadapter.h b/indra/llmessage/tests/lltesthttpclientadapter.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/lltestmessagesender.cpp b/indra/llmessage/tests/lltestmessagesender.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/lltestmessagesender.h b/indra/llmessage/tests/lltestmessagesender.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/lltrustedmessageservice_test.cpp b/indra/llmessage/tests/lltrustedmessageservice_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/llxfer_file_test.cpp b/indra/llmessage/tests/llxfer_file_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/networkio.h b/indra/llmessage/tests/networkio.h old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/test_llsdmessage_peer.py b/indra/llmessage/tests/test_llsdmessage_peer.py old mode 100644 new mode 100755 diff --git a/indra/llmessage/tests/testrunner.py b/indra/llmessage/tests/testrunner.py old mode 100644 new mode 100755 diff --git a/indra/llplugin/CMakeLists.txt b/indra/llplugin/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp old mode 100644 new mode 100755 diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h old mode 100644 new mode 100755 diff --git a/indra/llplugin/llpluginclassmediaowner.h b/indra/llplugin/llpluginclassmediaowner.h old mode 100644 new mode 100755 diff --git a/indra/llplugin/llplugincookiestore.cpp b/indra/llplugin/llplugincookiestore.cpp old mode 100644 new mode 100755 diff --git a/indra/llplugin/llplugincookiestore.h b/indra/llplugin/llplugincookiestore.h old mode 100644 new mode 100755 diff --git a/indra/llplugin/llplugininstance.cpp b/indra/llplugin/llplugininstance.cpp old mode 100644 new mode 100755 diff --git a/indra/llplugin/llplugininstance.h b/indra/llplugin/llplugininstance.h old mode 100644 new mode 100755 diff --git a/indra/llplugin/llpluginmessage.cpp b/indra/llplugin/llpluginmessage.cpp old mode 100644 new mode 100755 diff --git a/indra/llplugin/llpluginmessage.h b/indra/llplugin/llpluginmessage.h old mode 100644 new mode 100755 diff --git a/indra/llplugin/llpluginmessageclasses.h b/indra/llplugin/llpluginmessageclasses.h old mode 100644 new mode 100755 diff --git a/indra/llplugin/llpluginmessagepipe.cpp b/indra/llplugin/llpluginmessagepipe.cpp old mode 100644 new mode 100755 diff --git a/indra/llplugin/llpluginmessagepipe.h b/indra/llplugin/llpluginmessagepipe.h old mode 100644 new mode 100755 diff --git a/indra/llplugin/llpluginprocesschild.cpp b/indra/llplugin/llpluginprocesschild.cpp old mode 100644 new mode 100755 diff --git a/indra/llplugin/llpluginprocesschild.h b/indra/llplugin/llpluginprocesschild.h old mode 100644 new mode 100755 diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp old mode 100644 new mode 100755 diff --git a/indra/llplugin/llpluginprocessparent.h b/indra/llplugin/llpluginprocessparent.h old mode 100644 new mode 100755 diff --git a/indra/llplugin/llpluginsharedmemory.cpp b/indra/llplugin/llpluginsharedmemory.cpp old mode 100644 new mode 100755 diff --git a/indra/llplugin/llpluginsharedmemory.h b/indra/llplugin/llpluginsharedmemory.h old mode 100644 new mode 100755 diff --git a/indra/llplugin/slplugin/CMakeLists.txt b/indra/llplugin/slplugin/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/llplugin/slplugin/slplugin-objc.h b/indra/llplugin/slplugin/slplugin-objc.h old mode 100644 new mode 100755 diff --git a/indra/llplugin/slplugin/slplugin-objc.mm b/indra/llplugin/slplugin/slplugin-objc.mm old mode 100644 new mode 100755 diff --git a/indra/llplugin/slplugin/slplugin.cpp b/indra/llplugin/slplugin/slplugin.cpp old mode 100644 new mode 100755 diff --git a/indra/llplugin/slplugin/slplugin_info.plist b/indra/llplugin/slplugin/slplugin_info.plist old mode 100644 new mode 100755 diff --git a/indra/llplugin/tests/llplugincookiestore_test.cpp b/indra/llplugin/tests/llplugincookiestore_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llprimitive/CMakeLists.txt b/indra/llprimitive/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/llprimitive/legacy_object_types.h b/indra/llprimitive/legacy_object_types.h old mode 100644 new mode 100755 diff --git a/indra/llprimitive/llmaterialtable.cpp b/indra/llprimitive/llmaterialtable.cpp old mode 100644 new mode 100755 diff --git a/indra/llprimitive/llmaterialtable.h b/indra/llprimitive/llmaterialtable.h old mode 100644 new mode 100755 diff --git a/indra/llprimitive/llmediaentry.cpp b/indra/llprimitive/llmediaentry.cpp old mode 100644 new mode 100755 diff --git a/indra/llprimitive/llmediaentry.h b/indra/llprimitive/llmediaentry.h old mode 100644 new mode 100755 diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp old mode 100644 new mode 100755 diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h old mode 100644 new mode 100755 diff --git a/indra/llprimitive/llprimitive.cpp b/indra/llprimitive/llprimitive.cpp old mode 100644 new mode 100755 diff --git a/indra/llprimitive/llprimitive.h b/indra/llprimitive/llprimitive.h old mode 100644 new mode 100755 diff --git a/indra/llprimitive/llprimlinkinfo.h b/indra/llprimitive/llprimlinkinfo.h old mode 100644 new mode 100755 diff --git a/indra/llprimitive/llprimtexturelist.cpp b/indra/llprimitive/llprimtexturelist.cpp old mode 100644 new mode 100755 diff --git a/indra/llprimitive/llprimtexturelist.h b/indra/llprimitive/llprimtexturelist.h old mode 100644 new mode 100755 diff --git a/indra/llprimitive/lltextureanim.cpp b/indra/llprimitive/lltextureanim.cpp old mode 100644 new mode 100755 diff --git a/indra/llprimitive/lltextureanim.h b/indra/llprimitive/lltextureanim.h old mode 100644 new mode 100755 diff --git a/indra/llprimitive/lltextureentry.cpp b/indra/llprimitive/lltextureentry.cpp old mode 100644 new mode 100755 diff --git a/indra/llprimitive/lltextureentry.h b/indra/llprimitive/lltextureentry.h old mode 100644 new mode 100755 diff --git a/indra/llprimitive/lltree_common.h b/indra/llprimitive/lltree_common.h old mode 100644 new mode 100755 diff --git a/indra/llprimitive/lltreeparams.cpp b/indra/llprimitive/lltreeparams.cpp old mode 100644 new mode 100755 diff --git a/indra/llprimitive/lltreeparams.h b/indra/llprimitive/lltreeparams.h old mode 100644 new mode 100755 diff --git a/indra/llprimitive/llvolumemessage.cpp b/indra/llprimitive/llvolumemessage.cpp old mode 100644 new mode 100755 diff --git a/indra/llprimitive/llvolumemessage.h b/indra/llprimitive/llvolumemessage.h old mode 100644 new mode 100755 diff --git a/indra/llprimitive/llvolumexml.cpp b/indra/llprimitive/llvolumexml.cpp old mode 100644 new mode 100755 diff --git a/indra/llprimitive/llvolumexml.h b/indra/llprimitive/llvolumexml.h old mode 100644 new mode 100755 diff --git a/indra/llprimitive/material_codes.cpp b/indra/llprimitive/material_codes.cpp old mode 100644 new mode 100755 diff --git a/indra/llprimitive/material_codes.h b/indra/llprimitive/material_codes.h old mode 100644 new mode 100755 diff --git a/indra/llprimitive/object_flags.h b/indra/llprimitive/object_flags.h old mode 100644 new mode 100755 diff --git a/indra/llprimitive/tests/llmediaentry_test.cpp b/indra/llprimitive/tests/llmediaentry_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llprimitive/tests/llmessagesystem_stub.cpp b/indra/llprimitive/tests/llmessagesystem_stub.cpp old mode 100644 new mode 100755 diff --git a/indra/llprimitive/tests/llprimitive_test.cpp b/indra/llprimitive/tests/llprimitive_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llrender/CMakeLists.txt b/indra/llrender/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/llrender/llcubemap.cpp b/indra/llrender/llcubemap.cpp old mode 100644 new mode 100755 diff --git a/indra/llrender/llcubemap.h b/indra/llrender/llcubemap.h old mode 100644 new mode 100755 diff --git a/indra/llrender/llfontbitmapcache.cpp b/indra/llrender/llfontbitmapcache.cpp old mode 100644 new mode 100755 diff --git a/indra/llrender/llfontbitmapcache.h b/indra/llrender/llfontbitmapcache.h old mode 100644 new mode 100755 diff --git a/indra/llrender/llfontfreetype.cpp b/indra/llrender/llfontfreetype.cpp old mode 100644 new mode 100755 diff --git a/indra/llrender/llfontfreetype.h b/indra/llrender/llfontfreetype.h old mode 100644 new mode 100755 diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp old mode 100644 new mode 100755 diff --git a/indra/llrender/llfontgl.h b/indra/llrender/llfontgl.h old mode 100644 new mode 100755 diff --git a/indra/llrender/llfontregistry.cpp b/indra/llrender/llfontregistry.cpp old mode 100644 new mode 100755 diff --git a/indra/llrender/llfontregistry.h b/indra/llrender/llfontregistry.h old mode 100644 new mode 100755 diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp old mode 100644 new mode 100755 diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h old mode 100644 new mode 100755 diff --git a/indra/llrender/llgldbg.cpp b/indra/llrender/llgldbg.cpp old mode 100644 new mode 100755 diff --git a/indra/llrender/llgldbg.h b/indra/llrender/llgldbg.h old mode 100644 new mode 100755 diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h old mode 100644 new mode 100755 diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp old mode 100644 new mode 100755 diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h old mode 100644 new mode 100755 diff --git a/indra/llrender/llglstates.h b/indra/llrender/llglstates.h old mode 100644 new mode 100755 diff --git a/indra/llrender/llgltypes.h b/indra/llrender/llgltypes.h old mode 100644 new mode 100755 diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp old mode 100644 new mode 100755 diff --git a/indra/llrender/llimagegl.h b/indra/llrender/llimagegl.h old mode 100644 new mode 100755 diff --git a/indra/llrender/llpostprocess.cpp b/indra/llrender/llpostprocess.cpp old mode 100644 new mode 100755 diff --git a/indra/llrender/llpostprocess.h b/indra/llrender/llpostprocess.h old mode 100644 new mode 100755 diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp old mode 100644 new mode 100755 diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h old mode 100644 new mode 100755 diff --git a/indra/llrender/llrendersphere.cpp b/indra/llrender/llrendersphere.cpp old mode 100644 new mode 100755 diff --git a/indra/llrender/llrendersphere.h b/indra/llrender/llrendersphere.h old mode 100644 new mode 100755 diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp old mode 100644 new mode 100755 diff --git a/indra/llrender/llrendertarget.h b/indra/llrender/llrendertarget.h old mode 100644 new mode 100755 diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp old mode 100644 new mode 100755 diff --git a/indra/llrender/llshadermgr.h b/indra/llrender/llshadermgr.h old mode 100644 new mode 100755 diff --git a/indra/llrender/lltexture.cpp b/indra/llrender/lltexture.cpp old mode 100644 new mode 100755 diff --git a/indra/llrender/lltexture.h b/indra/llrender/lltexture.h old mode 100644 new mode 100755 diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp old mode 100644 new mode 100755 diff --git a/indra/llrender/llvertexbuffer.h b/indra/llrender/llvertexbuffer.h old mode 100644 new mode 100755 diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llaccordionctrl.h b/indra/llui/llaccordionctrl.h old mode 100644 new mode 100755 diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llaccordionctrltab.h b/indra/llui/llaccordionctrltab.h old mode 100644 new mode 100755 diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h old mode 100644 new mode 100755 diff --git a/indra/llui/llcallbackmap.h b/indra/llui/llcallbackmap.h old mode 100644 new mode 100755 diff --git a/indra/llui/llcheckboxctrl.cpp b/indra/llui/llcheckboxctrl.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llcheckboxctrl.h b/indra/llui/llcheckboxctrl.h old mode 100644 new mode 100755 diff --git a/indra/llui/llclipboard.cpp b/indra/llui/llclipboard.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llclipboard.h b/indra/llui/llclipboard.h old mode 100644 new mode 100755 diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llcombobox.h b/indra/llui/llcombobox.h old mode 100644 new mode 100755 diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llconsole.h b/indra/llui/llconsole.h old mode 100644 new mode 100755 diff --git a/indra/llui/llcontainerview.cpp b/indra/llui/llcontainerview.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llcontainerview.h b/indra/llui/llcontainerview.h old mode 100644 new mode 100755 diff --git a/indra/llui/llctrlselectioninterface.cpp b/indra/llui/llctrlselectioninterface.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llctrlselectioninterface.h b/indra/llui/llctrlselectioninterface.h old mode 100644 new mode 100755 diff --git a/indra/llui/lldockablefloater.cpp b/indra/llui/lldockablefloater.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lldockablefloater.h b/indra/llui/lldockablefloater.h old mode 100644 new mode 100755 diff --git a/indra/llui/lldockcontrol.cpp b/indra/llui/lldockcontrol.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lldockcontrol.h b/indra/llui/lldockcontrol.h old mode 100644 new mode 100755 diff --git a/indra/llui/lldraghandle.cpp b/indra/llui/lldraghandle.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lldraghandle.h b/indra/llui/lldraghandle.h old mode 100644 new mode 100755 diff --git a/indra/llui/lleditmenuhandler.cpp b/indra/llui/lleditmenuhandler.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lleditmenuhandler.h b/indra/llui/lleditmenuhandler.h old mode 100644 new mode 100755 diff --git a/indra/llui/llf32uictrl.cpp b/indra/llui/llf32uictrl.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llf32uictrl.h b/indra/llui/llf32uictrl.h old mode 100644 new mode 100755 diff --git a/indra/llui/llfiltereditor.cpp b/indra/llui/llfiltereditor.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llfiltereditor.h b/indra/llui/llfiltereditor.h old mode 100644 new mode 100755 diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h old mode 100644 new mode 100755 diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h old mode 100644 new mode 100755 diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llfloaterreg.h b/indra/llui/llfloaterreg.h old mode 100644 new mode 100755 diff --git a/indra/llui/llfloaterreglistener.cpp b/indra/llui/llfloaterreglistener.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llfloaterreglistener.h b/indra/llui/llfloaterreglistener.h old mode 100644 new mode 100755 diff --git a/indra/llui/llflyoutbutton.cpp b/indra/llui/llflyoutbutton.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llflyoutbutton.h b/indra/llui/llflyoutbutton.h old mode 100644 new mode 100755 diff --git a/indra/llui/llfocusmgr.cpp b/indra/llui/llfocusmgr.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llfocusmgr.h b/indra/llui/llfocusmgr.h old mode 100644 new mode 100755 diff --git a/indra/llui/llfunctorregistry.cpp b/indra/llui/llfunctorregistry.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llfunctorregistry.h b/indra/llui/llfunctorregistry.h old mode 100644 new mode 100755 diff --git a/indra/llui/llhandle.h b/indra/llui/llhandle.h old mode 100644 new mode 100755 diff --git a/indra/llui/llhelp.h b/indra/llui/llhelp.h old mode 100644 new mode 100755 diff --git a/indra/llui/lliconctrl.cpp b/indra/llui/lliconctrl.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lliconctrl.h b/indra/llui/lliconctrl.h old mode 100644 new mode 100755 diff --git a/indra/llui/llkeywords.cpp b/indra/llui/llkeywords.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llkeywords.h b/indra/llui/llkeywords.h old mode 100644 new mode 100755 diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h old mode 100644 new mode 100755 diff --git a/indra/llui/lllazyvalue.h b/indra/llui/lllazyvalue.h old mode 100644 new mode 100755 diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h old mode 100644 new mode 100755 diff --git a/indra/llui/llloadingindicator.cpp b/indra/llui/llloadingindicator.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llloadingindicator.h b/indra/llui/llloadingindicator.h old mode 100644 new mode 100755 diff --git a/indra/llui/lllocalcliprect.cpp b/indra/llui/lllocalcliprect.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lllocalcliprect.h b/indra/llui/lllocalcliprect.h old mode 100644 new mode 100755 diff --git a/indra/llui/llmenubutton.cpp b/indra/llui/llmenubutton.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llmenubutton.h b/indra/llui/llmenubutton.h old mode 100644 new mode 100755 diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h old mode 100644 new mode 100755 diff --git a/indra/llui/llmodaldialog.cpp b/indra/llui/llmodaldialog.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llmodaldialog.h b/indra/llui/llmodaldialog.h old mode 100644 new mode 100755 diff --git a/indra/llui/llmultifloater.cpp b/indra/llui/llmultifloater.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llmultifloater.h b/indra/llui/llmultifloater.h old mode 100644 new mode 100755 diff --git a/indra/llui/llmultislider.cpp b/indra/llui/llmultislider.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llmultislider.h b/indra/llui/llmultislider.h old mode 100644 new mode 100755 diff --git a/indra/llui/llmultisliderctrl.cpp b/indra/llui/llmultisliderctrl.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llmultisliderctrl.h b/indra/llui/llmultisliderctrl.h old mode 100644 new mode 100755 diff --git a/indra/llui/llnotificationptr.h b/indra/llui/llnotificationptr.h old mode 100644 new mode 100755 diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h old mode 100644 new mode 100755 diff --git a/indra/llui/llnotificationslistener.cpp b/indra/llui/llnotificationslistener.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llnotificationslistener.h b/indra/llui/llnotificationslistener.h old mode 100644 new mode 100755 diff --git a/indra/llui/llnotificationsutil.cpp b/indra/llui/llnotificationsutil.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llnotificationsutil.h b/indra/llui/llnotificationsutil.h old mode 100644 new mode 100755 diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h old mode 100644 new mode 100755 diff --git a/indra/llui/llprogressbar.cpp b/indra/llui/llprogressbar.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llprogressbar.h b/indra/llui/llprogressbar.h old mode 100644 new mode 100755 diff --git a/indra/llui/llradiogroup.cpp b/indra/llui/llradiogroup.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llradiogroup.h b/indra/llui/llradiogroup.h old mode 100644 new mode 100755 diff --git a/indra/llui/llresizebar.cpp b/indra/llui/llresizebar.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llresizebar.h b/indra/llui/llresizebar.h old mode 100644 new mode 100755 diff --git a/indra/llui/llresizehandle.cpp b/indra/llui/llresizehandle.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llresizehandle.h b/indra/llui/llresizehandle.h old mode 100644 new mode 100755 diff --git a/indra/llui/llresmgr.cpp b/indra/llui/llresmgr.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llresmgr.h b/indra/llui/llresmgr.h old mode 100644 new mode 100755 diff --git a/indra/llui/llrngwriter.cpp b/indra/llui/llrngwriter.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llrngwriter.h b/indra/llui/llrngwriter.h old mode 100644 new mode 100755 diff --git a/indra/llui/llscrollbar.cpp b/indra/llui/llscrollbar.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llscrollbar.h b/indra/llui/llscrollbar.h old mode 100644 new mode 100755 diff --git a/indra/llui/llscrollcontainer.cpp b/indra/llui/llscrollcontainer.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llscrollcontainer.h b/indra/llui/llscrollcontainer.h old mode 100644 new mode 100755 diff --git a/indra/llui/llscrollingpanellist.cpp b/indra/llui/llscrollingpanellist.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llscrollingpanellist.h b/indra/llui/llscrollingpanellist.h old mode 100644 new mode 100755 diff --git a/indra/llui/llscrolllistcell.cpp b/indra/llui/llscrolllistcell.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llscrolllistcell.h b/indra/llui/llscrolllistcell.h old mode 100644 new mode 100755 diff --git a/indra/llui/llscrolllistcolumn.cpp b/indra/llui/llscrolllistcolumn.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llscrolllistcolumn.h b/indra/llui/llscrolllistcolumn.h old mode 100644 new mode 100755 diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h old mode 100644 new mode 100755 diff --git a/indra/llui/llscrolllistitem.cpp b/indra/llui/llscrolllistitem.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llscrolllistitem.h b/indra/llui/llscrolllistitem.h old mode 100644 new mode 100755 diff --git a/indra/llui/llsdparam.cpp b/indra/llui/llsdparam.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h old mode 100644 new mode 100755 diff --git a/indra/llui/llsearcheditor.cpp b/indra/llui/llsearcheditor.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llsearcheditor.h b/indra/llui/llsearcheditor.h old mode 100644 new mode 100755 diff --git a/indra/llui/llslider.cpp b/indra/llui/llslider.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llslider.h b/indra/llui/llslider.h old mode 100644 new mode 100755 diff --git a/indra/llui/llsliderctrl.cpp b/indra/llui/llsliderctrl.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llsliderctrl.h b/indra/llui/llsliderctrl.h old mode 100644 new mode 100755 diff --git a/indra/llui/llspinctrl.cpp b/indra/llui/llspinctrl.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llspinctrl.h b/indra/llui/llspinctrl.h old mode 100644 new mode 100755 diff --git a/indra/llui/llstatbar.cpp b/indra/llui/llstatbar.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llstatbar.h b/indra/llui/llstatbar.h old mode 100644 new mode 100755 diff --git a/indra/llui/llstatgraph.cpp b/indra/llui/llstatgraph.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llstatgraph.h b/indra/llui/llstatgraph.h old mode 100644 new mode 100755 diff --git a/indra/llui/llstatview.cpp b/indra/llui/llstatview.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llstatview.h b/indra/llui/llstatview.h old mode 100644 new mode 100755 diff --git a/indra/llui/llstyle.cpp b/indra/llui/llstyle.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llstyle.h b/indra/llui/llstyle.h old mode 100644 new mode 100755 diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lltabcontainer.h b/indra/llui/lltabcontainer.h old mode 100644 new mode 100755 diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h old mode 100644 new mode 100755 diff --git a/indra/llui/lltextbox.cpp b/indra/llui/lltextbox.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lltextbox.h b/indra/llui/lltextbox.h old mode 100644 new mode 100755 diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h old mode 100644 new mode 100755 diff --git a/indra/llui/lltextparser.cpp b/indra/llui/lltextparser.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lltextparser.h b/indra/llui/lltextparser.h old mode 100644 new mode 100755 diff --git a/indra/llui/lltextutil.cpp b/indra/llui/lltextutil.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lltextutil.h b/indra/llui/lltextutil.h old mode 100644 new mode 100755 diff --git a/indra/llui/lltextvalidate.cpp b/indra/llui/lltextvalidate.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lltextvalidate.h b/indra/llui/lltextvalidate.h old mode 100644 new mode 100755 diff --git a/indra/llui/lltoggleablemenu.cpp b/indra/llui/lltoggleablemenu.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lltoggleablemenu.h b/indra/llui/lltoggleablemenu.h old mode 100644 new mode 100755 diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lltooltip.h b/indra/llui/lltooltip.h old mode 100644 new mode 100755 diff --git a/indra/llui/lltransutil.cpp b/indra/llui/lltransutil.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lltransutil.h b/indra/llui/lltransutil.h old mode 100644 new mode 100755 diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llui.h b/indra/llui/llui.h old mode 100644 new mode 100755 diff --git a/indra/llui/lluicolortable.cpp b/indra/llui/lluicolortable.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lluicolortable.h b/indra/llui/lluicolortable.h old mode 100644 new mode 100755 diff --git a/indra/llui/lluiconstants.h b/indra/llui/lluiconstants.h old mode 100644 new mode 100755 diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lluictrl.h b/indra/llui/lluictrl.h old mode 100644 new mode 100755 diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h old mode 100644 new mode 100755 diff --git a/indra/llui/lluifwd.h b/indra/llui/lluifwd.h old mode 100644 new mode 100755 diff --git a/indra/llui/lluiimage.cpp b/indra/llui/lluiimage.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lluiimage.h b/indra/llui/lluiimage.h old mode 100644 new mode 100755 diff --git a/indra/llui/lluistring.cpp b/indra/llui/lluistring.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/lluistring.h b/indra/llui/lluistring.h old mode 100644 new mode 100755 diff --git a/indra/llui/llundo.cpp b/indra/llui/llundo.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llundo.h b/indra/llui/llundo.h old mode 100644 new mode 100755 diff --git a/indra/llui/llurlaction.cpp b/indra/llui/llurlaction.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llurlaction.h b/indra/llui/llurlaction.h old mode 100644 new mode 100755 diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h old mode 100644 new mode 100755 diff --git a/indra/llui/llurlmatch.cpp b/indra/llui/llurlmatch.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llurlmatch.h b/indra/llui/llurlmatch.h old mode 100644 new mode 100755 diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llurlregistry.h b/indra/llui/llurlregistry.h old mode 100644 new mode 100755 diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llview.h b/indra/llui/llview.h old mode 100644 new mode 100755 diff --git a/indra/llui/llviewborder.cpp b/indra/llui/llviewborder.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llviewborder.h b/indra/llui/llviewborder.h old mode 100644 new mode 100755 diff --git a/indra/llui/llviewmodel.cpp b/indra/llui/llviewmodel.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llviewmodel.h b/indra/llui/llviewmodel.h old mode 100644 new mode 100755 diff --git a/indra/llui/llviewquery.cpp b/indra/llui/llviewquery.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/llviewquery.h b/indra/llui/llviewquery.h old mode 100644 new mode 100755 diff --git a/indra/llui/tests/llurlentry_stub.cpp b/indra/llui/tests/llurlentry_stub.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/tests/llurlentry_test.cpp b/indra/llui/tests/llurlentry_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llui/tests/llurlmatch_test.cpp b/indra/llui/tests/llurlmatch_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llvfs/CMakeLists.txt b/indra/llvfs/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp old mode 100644 new mode 100755 diff --git a/indra/llvfs/lldir.h b/indra/llvfs/lldir.h old mode 100644 new mode 100755 diff --git a/indra/llvfs/lldir_linux.cpp b/indra/llvfs/lldir_linux.cpp old mode 100644 new mode 100755 diff --git a/indra/llvfs/lldir_linux.h b/indra/llvfs/lldir_linux.h old mode 100644 new mode 100755 diff --git a/indra/llvfs/lldir_mac.cpp b/indra/llvfs/lldir_mac.cpp old mode 100644 new mode 100755 diff --git a/indra/llvfs/lldir_mac.h b/indra/llvfs/lldir_mac.h old mode 100644 new mode 100755 diff --git a/indra/llvfs/lldir_solaris.cpp b/indra/llvfs/lldir_solaris.cpp old mode 100644 new mode 100755 diff --git a/indra/llvfs/lldir_solaris.h b/indra/llvfs/lldir_solaris.h old mode 100644 new mode 100755 diff --git a/indra/llvfs/lldir_win32.cpp b/indra/llvfs/lldir_win32.cpp old mode 100644 new mode 100755 diff --git a/indra/llvfs/lldir_win32.h b/indra/llvfs/lldir_win32.h old mode 100644 new mode 100755 diff --git a/indra/llvfs/lldirguard.h b/indra/llvfs/lldirguard.h old mode 100644 new mode 100755 diff --git a/indra/llvfs/lllfsthread.cpp b/indra/llvfs/lllfsthread.cpp old mode 100644 new mode 100755 diff --git a/indra/llvfs/lllfsthread.h b/indra/llvfs/lllfsthread.h old mode 100644 new mode 100755 diff --git a/indra/llvfs/llpidlock.cpp b/indra/llvfs/llpidlock.cpp old mode 100644 new mode 100755 diff --git a/indra/llvfs/llpidlock.h b/indra/llvfs/llpidlock.h old mode 100644 new mode 100755 diff --git a/indra/llvfs/llvfile.cpp b/indra/llvfs/llvfile.cpp old mode 100644 new mode 100755 diff --git a/indra/llvfs/llvfile.h b/indra/llvfs/llvfile.h old mode 100644 new mode 100755 diff --git a/indra/llvfs/llvfs.cpp b/indra/llvfs/llvfs.cpp old mode 100644 new mode 100755 diff --git a/indra/llvfs/llvfs.h b/indra/llvfs/llvfs.h old mode 100644 new mode 100755 diff --git a/indra/llvfs/llvfsthread.cpp b/indra/llvfs/llvfsthread.cpp old mode 100644 new mode 100755 diff --git a/indra/llvfs/llvfsthread.h b/indra/llvfs/llvfsthread.h old mode 100644 new mode 100755 diff --git a/indra/llvfs/tests/lldir_test.cpp b/indra/llvfs/tests/lldir_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llwindow/CMakeLists.txt b/indra/llwindow/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/llwindow/GL/glh_extensions.h b/indra/llwindow/GL/glh_extensions.h old mode 100644 new mode 100755 diff --git a/indra/llwindow/GL/glh_genext.h b/indra/llwindow/GL/glh_genext.h old mode 100644 new mode 100755 diff --git a/indra/llwindow/lldragdropwin32.cpp b/indra/llwindow/lldragdropwin32.cpp old mode 100644 new mode 100755 diff --git a/indra/llwindow/lldragdropwin32.h b/indra/llwindow/lldragdropwin32.h old mode 100644 new mode 100755 diff --git a/indra/llwindow/lldxhardware.cpp b/indra/llwindow/lldxhardware.cpp old mode 100644 new mode 100755 diff --git a/indra/llwindow/lldxhardware.h b/indra/llwindow/lldxhardware.h old mode 100644 new mode 100755 diff --git a/indra/llwindow/llkeyboard.cpp b/indra/llwindow/llkeyboard.cpp old mode 100644 new mode 100755 diff --git a/indra/llwindow/llkeyboard.h b/indra/llwindow/llkeyboard.h old mode 100644 new mode 100755 diff --git a/indra/llwindow/llkeyboardmacosx.cpp b/indra/llwindow/llkeyboardmacosx.cpp old mode 100644 new mode 100755 diff --git a/indra/llwindow/llkeyboardmacosx.h b/indra/llwindow/llkeyboardmacosx.h old mode 100644 new mode 100755 diff --git a/indra/llwindow/llkeyboardsdl.cpp b/indra/llwindow/llkeyboardsdl.cpp old mode 100644 new mode 100755 diff --git a/indra/llwindow/llkeyboardsdl.h b/indra/llwindow/llkeyboardsdl.h old mode 100644 new mode 100755 diff --git a/indra/llwindow/llkeyboardwin32.cpp b/indra/llwindow/llkeyboardwin32.cpp old mode 100644 new mode 100755 diff --git a/indra/llwindow/llkeyboardwin32.h b/indra/llwindow/llkeyboardwin32.h old mode 100644 new mode 100755 diff --git a/indra/llwindow/llmousehandler.cpp b/indra/llwindow/llmousehandler.cpp old mode 100644 new mode 100755 diff --git a/indra/llwindow/llmousehandler.h b/indra/llwindow/llmousehandler.h old mode 100644 new mode 100755 diff --git a/indra/llwindow/llpreeditor.h b/indra/llwindow/llpreeditor.h old mode 100644 new mode 100755 diff --git a/indra/llwindow/llwindow.cpp b/indra/llwindow/llwindow.cpp old mode 100644 new mode 100755 diff --git a/indra/llwindow/llwindow.h b/indra/llwindow/llwindow.h old mode 100644 new mode 100755 diff --git a/indra/llwindow/llwindowcallbacks.cpp b/indra/llwindow/llwindowcallbacks.cpp old mode 100644 new mode 100755 diff --git a/indra/llwindow/llwindowcallbacks.h b/indra/llwindow/llwindowcallbacks.h old mode 100644 new mode 100755 diff --git a/indra/llwindow/llwindowheadless.cpp b/indra/llwindow/llwindowheadless.cpp old mode 100644 new mode 100755 diff --git a/indra/llwindow/llwindowheadless.h b/indra/llwindow/llwindowheadless.h old mode 100644 new mode 100755 diff --git a/indra/llwindow/llwindowmacosx-objc.h b/indra/llwindow/llwindowmacosx-objc.h old mode 100644 new mode 100755 diff --git a/indra/llwindow/llwindowmacosx-objc.mm b/indra/llwindow/llwindowmacosx-objc.mm old mode 100644 new mode 100755 diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp old mode 100644 new mode 100755 diff --git a/indra/llwindow/llwindowmacosx.h b/indra/llwindow/llwindowmacosx.h old mode 100644 new mode 100755 diff --git a/indra/llwindow/llwindowmesaheadless.cpp b/indra/llwindow/llwindowmesaheadless.cpp old mode 100644 new mode 100755 diff --git a/indra/llwindow/llwindowmesaheadless.h b/indra/llwindow/llwindowmesaheadless.h old mode 100644 new mode 100755 diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp old mode 100644 new mode 100755 diff --git a/indra/llwindow/llwindowsdl.h b/indra/llwindow/llwindowsdl.h old mode 100644 new mode 100755 diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp old mode 100644 new mode 100755 diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h old mode 100644 new mode 100755 diff --git a/indra/llxml/CMakeLists.txt b/indra/llxml/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/llxml/llcontrol.cpp b/indra/llxml/llcontrol.cpp old mode 100644 new mode 100755 diff --git a/indra/llxml/llcontrol.h b/indra/llxml/llcontrol.h old mode 100644 new mode 100755 diff --git a/indra/llxml/llcontrolgroupreader.h b/indra/llxml/llcontrolgroupreader.h old mode 100644 new mode 100755 diff --git a/indra/llxml/llxmlnode.cpp b/indra/llxml/llxmlnode.cpp old mode 100644 new mode 100755 diff --git a/indra/llxml/llxmlnode.h b/indra/llxml/llxmlnode.h old mode 100644 new mode 100755 diff --git a/indra/llxml/llxmlparser.cpp b/indra/llxml/llxmlparser.cpp old mode 100644 new mode 100755 diff --git a/indra/llxml/llxmlparser.h b/indra/llxml/llxmlparser.h old mode 100644 new mode 100755 diff --git a/indra/llxml/llxmltree.cpp b/indra/llxml/llxmltree.cpp old mode 100644 new mode 100755 diff --git a/indra/llxml/llxmltree.h b/indra/llxml/llxmltree.h old mode 100644 new mode 100755 diff --git a/indra/llxml/tests/llcontrol_test.cpp b/indra/llxml/tests/llcontrol_test.cpp old mode 100644 new mode 100755 diff --git a/indra/llxuixml/CMakeLists.txt b/indra/llxuixml/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/llxuixml/llinitparam.cpp b/indra/llxuixml/llinitparam.cpp old mode 100644 new mode 100755 diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h old mode 100644 new mode 100755 diff --git a/indra/llxuixml/llregistry.h b/indra/llxuixml/llregistry.h old mode 100644 new mode 100755 diff --git a/indra/llxuixml/lltrans.cpp b/indra/llxuixml/lltrans.cpp old mode 100644 new mode 100755 diff --git a/indra/llxuixml/lltrans.h b/indra/llxuixml/lltrans.h old mode 100644 new mode 100755 diff --git a/indra/llxuixml/lluicolor.cpp b/indra/llxuixml/lluicolor.cpp old mode 100644 new mode 100755 diff --git a/indra/llxuixml/lluicolor.h b/indra/llxuixml/lluicolor.h old mode 100644 new mode 100755 diff --git a/indra/llxuixml/llxuiparser.cpp b/indra/llxuixml/llxuiparser.cpp old mode 100644 new mode 100755 diff --git a/indra/llxuixml/llxuiparser.h b/indra/llxuixml/llxuiparser.h old mode 100644 new mode 100755 diff --git a/indra/lscript/CMakeLists.txt b/indra/lscript/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/lscript/llscriptresource.h b/indra/lscript/llscriptresource.h old mode 100644 new mode 100755 diff --git a/indra/lscript/llscriptresourceconsumer.h b/indra/lscript/llscriptresourceconsumer.h old mode 100644 new mode 100755 diff --git a/indra/lscript/llscriptresourcepool.h b/indra/lscript/llscriptresourcepool.h old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_alloc.h b/indra/lscript/lscript_alloc.h old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_byteconvert.h b/indra/lscript/lscript_byteconvert.h old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_byteformat.h b/indra/lscript/lscript_byteformat.h old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/CMakeLists.txt b/indra/lscript/lscript_compile/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/indra.l b/indra/lscript/lscript_compile/indra.l old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/indra.y b/indra/lscript/lscript_compile/indra.y old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/lscript_alloc.cpp b/indra/lscript/lscript_compile/lscript_alloc.cpp old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/lscript_bytecode.cpp b/indra/lscript/lscript_compile/lscript_bytecode.cpp old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/lscript_bytecode.h b/indra/lscript/lscript_compile/lscript_bytecode.h old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/lscript_error.cpp b/indra/lscript/lscript_compile/lscript_error.cpp old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/lscript_error.h b/indra/lscript/lscript_compile/lscript_error.h old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/lscript_heap.cpp b/indra/lscript/lscript_compile/lscript_heap.cpp old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/lscript_heap.h b/indra/lscript/lscript_compile/lscript_heap.h old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/lscript_resource.cpp b/indra/lscript/lscript_compile/lscript_resource.cpp old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/lscript_resource.h b/indra/lscript/lscript_compile/lscript_resource.h old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/lscript_scope.cpp b/indra/lscript/lscript_compile/lscript_scope.cpp old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/lscript_scope.h b/indra/lscript/lscript_compile/lscript_scope.h old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/lscript_tree.cpp b/indra/lscript/lscript_compile/lscript_tree.cpp old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/lscript_tree.h b/indra/lscript/lscript_compile/lscript_tree.h old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/lscript_typecheck.cpp b/indra/lscript/lscript_compile/lscript_typecheck.cpp old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/lscript_typecheck.h b/indra/lscript/lscript_compile/lscript_typecheck.h old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_compile/windows/unistd.h b/indra/lscript/lscript_compile/windows/unistd.h old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_execute.h b/indra/lscript/lscript_execute.h old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_execute/CMakeLists.txt b/indra/lscript/lscript_execute/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_execute/llscriptresource.cpp b/indra/lscript/lscript_execute/llscriptresource.cpp old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_execute/llscriptresourceconsumer.cpp b/indra/lscript/lscript_execute/llscriptresourceconsumer.cpp old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_execute/llscriptresourcepool.cpp b/indra/lscript/lscript_execute/llscriptresourcepool.cpp old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_execute/lscript_execute.cpp b/indra/lscript/lscript_execute/lscript_execute.cpp old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_execute/lscript_heapruntime.cpp b/indra/lscript/lscript_execute/lscript_heapruntime.cpp old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_execute/lscript_heapruntime.h b/indra/lscript/lscript_execute/lscript_heapruntime.h old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_execute/lscript_readlso.cpp b/indra/lscript/lscript_execute/lscript_readlso.cpp old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_execute/lscript_readlso.h b/indra/lscript/lscript_execute/lscript_readlso.h old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_export.h b/indra/lscript/lscript_export.h old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_http.h b/indra/lscript/lscript_http.h old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_library.h b/indra/lscript/lscript_library.h old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_library/CMakeLists.txt b/indra/lscript/lscript_library/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_library/lscript_alloc.cpp b/indra/lscript/lscript_library/lscript_alloc.cpp old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_library/lscript_export.cpp b/indra/lscript/lscript_library/lscript_export.cpp old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_library/lscript_library.cpp b/indra/lscript/lscript_library/lscript_library.cpp old mode 100644 new mode 100755 diff --git a/indra/lscript/lscript_rt_interface.h b/indra/lscript/lscript_rt_interface.h old mode 100644 new mode 100755 diff --git a/indra/mac_crash_logger/CMakeLists.txt b/indra/mac_crash_logger/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/mac_crash_logger/CrashReporter.nib/classes.nib b/indra/mac_crash_logger/CrashReporter.nib/classes.nib old mode 100644 new mode 100755 diff --git a/indra/mac_crash_logger/CrashReporter.nib/info.nib b/indra/mac_crash_logger/CrashReporter.nib/info.nib old mode 100644 new mode 100755 diff --git a/indra/mac_crash_logger/CrashReporter.nib/objects.xib b/indra/mac_crash_logger/CrashReporter.nib/objects.xib old mode 100644 new mode 100755 diff --git a/indra/mac_crash_logger/Info.plist b/indra/mac_crash_logger/Info.plist old mode 100644 new mode 100755 diff --git a/indra/mac_crash_logger/llcrashloggermac.cpp b/indra/mac_crash_logger/llcrashloggermac.cpp old mode 100644 new mode 100755 diff --git a/indra/mac_crash_logger/llcrashloggermac.h b/indra/mac_crash_logger/llcrashloggermac.h old mode 100644 new mode 100755 diff --git a/indra/mac_crash_logger/mac_crash_logger.cpp b/indra/mac_crash_logger/mac_crash_logger.cpp old mode 100644 new mode 100755 diff --git a/indra/mac_updater/AutoUpdater.nib/classes.nib b/indra/mac_updater/AutoUpdater.nib/classes.nib old mode 100644 new mode 100755 diff --git a/indra/mac_updater/AutoUpdater.nib/info.nib b/indra/mac_updater/AutoUpdater.nib/info.nib old mode 100644 new mode 100755 diff --git a/indra/mac_updater/AutoUpdater.nib/objects.xib b/indra/mac_updater/AutoUpdater.nib/objects.xib old mode 100644 new mode 100755 diff --git a/indra/mac_updater/CMakeLists.txt b/indra/mac_updater/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/mac_updater/Info.plist b/indra/mac_updater/Info.plist old mode 100644 new mode 100755 diff --git a/indra/mac_updater/mac_updater.cpp b/indra/mac_updater/mac_updater.cpp old mode 100644 new mode 100755 diff --git a/indra/media_plugins/CMakeLists.txt b/indra/media_plugins/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/media_plugins/base/CMakeLists.txt b/indra/media_plugins/base/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/media_plugins/base/media_plugin_base.cpp b/indra/media_plugins/base/media_plugin_base.cpp old mode 100644 new mode 100755 diff --git a/indra/media_plugins/base/media_plugin_base.exp b/indra/media_plugins/base/media_plugin_base.exp old mode 100644 new mode 100755 diff --git a/indra/media_plugins/base/media_plugin_base.h b/indra/media_plugins/base/media_plugin_base.h old mode 100644 new mode 100755 diff --git a/indra/media_plugins/example/CMakeLists.txt b/indra/media_plugins/example/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/media_plugins/example/media_plugin_example.cpp b/indra/media_plugins/example/media_plugin_example.cpp old mode 100644 new mode 100755 diff --git a/indra/media_plugins/gstreamer010/CMakeLists.txt b/indra/media_plugins/gstreamer010/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h b/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h old mode 100644 new mode 100755 diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp old mode 100644 new mode 100755 diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.h b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.h old mode 100644 new mode 100755 diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_raw.inc b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_raw.inc old mode 100644 new mode 100755 diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_rawv.inc b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_rawv.inc old mode 100644 new mode 100755 diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamertriviallogging.h b/indra/media_plugins/gstreamer010/llmediaimplgstreamertriviallogging.h old mode 100644 new mode 100755 diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp b/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp old mode 100644 new mode 100755 diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.h b/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.h old mode 100644 new mode 100755 diff --git a/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp b/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp old mode 100644 new mode 100755 diff --git a/indra/media_plugins/quicktime/CMakeLists.txt b/indra/media_plugins/quicktime/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp old mode 100644 new mode 100755 diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/media_plugins/webkit/dummy_volume_catcher.cpp b/indra/media_plugins/webkit/dummy_volume_catcher.cpp old mode 100644 new mode 100755 diff --git a/indra/media_plugins/webkit/linux_volume_catcher.cpp b/indra/media_plugins/webkit/linux_volume_catcher.cpp old mode 100644 new mode 100755 diff --git a/indra/media_plugins/webkit/linux_volume_catcher_pa_syms.inc b/indra/media_plugins/webkit/linux_volume_catcher_pa_syms.inc old mode 100644 new mode 100755 diff --git a/indra/media_plugins/webkit/linux_volume_catcher_paglib_syms.inc b/indra/media_plugins/webkit/linux_volume_catcher_paglib_syms.inc old mode 100644 new mode 100755 diff --git a/indra/media_plugins/webkit/mac_volume_catcher.cpp b/indra/media_plugins/webkit/mac_volume_catcher.cpp old mode 100644 new mode 100755 diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp old mode 100644 new mode 100755 diff --git a/indra/media_plugins/webkit/volume_catcher.h b/indra/media_plugins/webkit/volume_catcher.h old mode 100644 new mode 100755 diff --git a/indra/media_plugins/webkit/windows_volume_catcher.cpp b/indra/media_plugins/webkit/windows_volume_catcher.cpp old mode 100644 new mode 100755 diff --git a/indra/media_plugins/winmmshim/CMakeLists.txt b/indra/media_plugins/winmmshim/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/media_plugins/winmmshim/forwarding_api.cpp b/indra/media_plugins/winmmshim/forwarding_api.cpp old mode 100644 new mode 100755 diff --git a/indra/media_plugins/winmmshim/forwarding_api.h b/indra/media_plugins/winmmshim/forwarding_api.h old mode 100644 new mode 100755 diff --git a/indra/media_plugins/winmmshim/winmm.def b/indra/media_plugins/winmmshim/winmm.def old mode 100644 new mode 100755 diff --git a/indra/media_plugins/winmmshim/winmm_shim.cpp b/indra/media_plugins/winmmshim/winmm_shim.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings old mode 100644 new mode 100755 diff --git a/indra/newview/English.lproj/language.txt b/indra/newview/English.lproj/language.txt old mode 100644 new mode 100755 diff --git a/indra/newview/German.lproj/language.txt b/indra/newview/German.lproj/language.txt old mode 100644 new mode 100755 diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist old mode 100644 new mode 100755 diff --git a/indra/newview/Info-SecondLifeVorbis.plist b/indra/newview/Info-SecondLifeVorbis.plist old mode 100644 new mode 100755 diff --git a/indra/newview/Japanese.lproj/language.txt b/indra/newview/Japanese.lproj/language.txt old mode 100644 new mode 100755 diff --git a/indra/newview/Korean.lproj/language.txt b/indra/newview/Korean.lproj/language.txt old mode 100644 new mode 100755 diff --git a/indra/newview/SecondLife.nib/classes.nib b/indra/newview/SecondLife.nib/classes.nib old mode 100644 new mode 100755 diff --git a/indra/newview/SecondLife.nib/info.nib b/indra/newview/SecondLife.nib/info.nib old mode 100644 new mode 100755 diff --git a/indra/newview/SecondLife.nib/objects.xib b/indra/newview/SecondLife.nib/objects.xib old mode 100644 new mode 100755 diff --git a/indra/newview/VertexCache.h b/indra/newview/VertexCache.h old mode 100644 new mode 100755 diff --git a/indra/newview/ViewerInstall.cmake b/indra/newview/ViewerInstall.cmake old mode 100644 new mode 100755 diff --git a/indra/newview/VorbisFramework.h b/indra/newview/VorbisFramework.h old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/CA.pem b/indra/newview/app_settings/CA.pem old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/anim.ini b/indra/newview/app_settings/anim.ini old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/foldertypes.xml b/indra/newview/app_settings/foldertypes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/grass.xml b/indra/newview/app_settings/grass.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/high_graphics.xml b/indra/newview/app_settings/high_graphics.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/ignorable_dialogs.xml b/indra/newview/app_settings/ignorable_dialogs.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/keys.ini b/indra/newview/app_settings/keys.ini old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/logcontrol.xml b/indra/newview/app_settings/logcontrol.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/low_graphics.xml b/indra/newview/app_settings/low_graphics.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/mid_graphics.xml b/indra/newview/app_settings/mid_graphics.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/settings_crash_behavior.xml b/indra/newview/app_settings/settings_crash_behavior.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/settings_files.xml b/indra/newview/app_settings/settings_files.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl b/indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl b/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/giF.glsl b/indra/newview/app_settings/shaders/class1/deferred/giF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/giV.glsl b/indra/newview/app_settings/shaders/class1/deferred/giV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl b/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl b/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl b/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl b/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/effects/glowF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/effects/glowV.glsl b/indra/newview/app_settings/shaders/class1/effects/glowV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl b/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl b/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl b/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl b/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/environment/waterF.glsl b/indra/newview/app_settings/shaders/class1/environment/waterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl b/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl b/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl b/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl b/indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl b/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl b/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleF.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl b/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl b/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl b/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/blurLightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/deferred/blurLightV.glsl b/indra/newview/app_settings/shaders/class2/deferred/blurLightV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl b/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl b/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/deferred/postDeferredF.glsl b/indra/newview/app_settings/shaders/class2/deferred/postDeferredF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/deferred/postDeferredV.glsl b/indra/newview/app_settings/shaders/class2/deferred/postDeferredV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/effects/blurF.glsl b/indra/newview/app_settings/shaders/class2/effects/blurF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/effects/blurV.glsl b/indra/newview/app_settings/shaders/class2/effects/blurV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl b/indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl b/indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/effects/extractF.glsl b/indra/newview/app_settings/shaders/class2/effects/extractF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/effects/nightVisionF.glsl b/indra/newview/app_settings/shaders/class2/effects/nightVisionF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/effects/simpleF.glsl b/indra/newview/app_settings/shaders/class2/effects/simpleF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/environment/terrainF.glsl b/indra/newview/app_settings/shaders/class2/environment/terrainF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/environment/terrainV.glsl b/indra/newview/app_settings/shaders/class2/environment/terrainV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/environment/terrainWaterF.glsl b/indra/newview/app_settings/shaders/class2/environment/terrainWaterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/environment/underWaterF.glsl b/indra/newview/app_settings/shaders/class2/environment/underWaterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/environment/waterF.glsl b/indra/newview/app_settings/shaders/class2/environment/waterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl b/indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightShinyF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightShinyF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightSpecularV.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightSpecularV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightV.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightWaterF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightWaterF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl b/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/objects/shinyV.glsl b/indra/newview/app_settings/shaders/class2/objects/shinyV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl b/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl b/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl b/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl b/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class3/deferred/giF.glsl b/indra/newview/app_settings/shaders/class3/deferred/giF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl b/indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl b/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class3/deferred/giV.glsl b/indra/newview/app_settings/shaders/class3/deferred/giV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl b/indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl b/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl b/indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl b/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl b/indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl b/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl b/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl b/indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/shaders/shader_heirarchy.txt b/indra/newview/app_settings/shaders/shader_heirarchy.txt old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/static_data.db2 b/indra/newview/app_settings/static_data.db2 old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/static_index.db2 b/indra/newview/app_settings/static_index.db2 old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/std_bump.ini b/indra/newview/app_settings/std_bump.ini old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/trees.xml b/indra/newview/app_settings/trees.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/ultra_graphics.xml b/indra/newview/app_settings/ultra_graphics.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/viewerart.xml b/indra/newview/app_settings/viewerart.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/clouds2.tga b/indra/newview/app_settings/windlight/clouds2.tga old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/days/Default.xml b/indra/newview/app_settings/windlight/days/Default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/postprocesseffects.xml b/indra/newview/app_settings/windlight/postprocesseffects.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/A%2D12AM.xml b/indra/newview/app_settings/windlight/skies/A%2D12AM.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/A%2D12PM.xml b/indra/newview/app_settings/windlight/skies/A%2D12PM.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/A%2D3AM.xml b/indra/newview/app_settings/windlight/skies/A%2D3AM.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/A%2D3PM.xml b/indra/newview/app_settings/windlight/skies/A%2D3PM.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/A%2D6AM.xml b/indra/newview/app_settings/windlight/skies/A%2D6AM.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/A%2D6PM.xml b/indra/newview/app_settings/windlight/skies/A%2D6PM.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/A%2D9AM.xml b/indra/newview/app_settings/windlight/skies/A%2D9AM.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/A%2D9PM.xml b/indra/newview/app_settings/windlight/skies/A%2D9PM.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Barcelona.xml b/indra/newview/app_settings/windlight/skies/Barcelona.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Blizzard.xml b/indra/newview/app_settings/windlight/skies/Blizzard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Blue%20Midday.xml b/indra/newview/app_settings/windlight/skies/Blue%20Midday.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Coastal%20Afternoon.xml b/indra/newview/app_settings/windlight/skies/Coastal%20Afternoon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Coastal%20Sunset.xml b/indra/newview/app_settings/windlight/skies/Coastal%20Sunset.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Default.xml b/indra/newview/app_settings/windlight/skies/Default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Desert%20Sunset.xml b/indra/newview/app_settings/windlight/skies/Desert%20Sunset.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Fine%20Day.xml b/indra/newview/app_settings/windlight/skies/Fine%20Day.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Fluffy%20Big%20Clouds.xml b/indra/newview/app_settings/windlight/skies/Fluffy%20Big%20Clouds.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Foggy.xml b/indra/newview/app_settings/windlight/skies/Foggy.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Funky%20Funky%20Funky.xml b/indra/newview/app_settings/windlight/skies/Funky%20Funky%20Funky.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Funky%20Funky.xml b/indra/newview/app_settings/windlight/skies/Funky%20Funky.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Gelatto.xml b/indra/newview/app_settings/windlight/skies/Gelatto.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Ghost.xml b/indra/newview/app_settings/windlight/skies/Ghost.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Incongruent%20Truths.xml b/indra/newview/app_settings/windlight/skies/Incongruent%20Truths.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Midday%201.xml b/indra/newview/app_settings/windlight/skies/Midday%201.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Midday%202.xml b/indra/newview/app_settings/windlight/skies/Midday%202.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Midday%203.xml b/indra/newview/app_settings/windlight/skies/Midday%203.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Midday%204.xml b/indra/newview/app_settings/windlight/skies/Midday%204.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Night.xml b/indra/newview/app_settings/windlight/skies/Night.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Pirate.xml b/indra/newview/app_settings/windlight/skies/Pirate.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Purple.xml b/indra/newview/app_settings/windlight/skies/Purple.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Sailor%27s%20Delight.xml b/indra/newview/app_settings/windlight/skies/Sailor%27s%20Delight.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/skies/Sheer%20Surreality.xml b/indra/newview/app_settings/windlight/skies/Sheer%20Surreality.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/water/Default.xml b/indra/newview/app_settings/windlight/water/Default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/water/Glassy.xml b/indra/newview/app_settings/windlight/water/Glassy.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/water/Murky.xml b/indra/newview/app_settings/windlight/water/Murky.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/water/Pond.xml b/indra/newview/app_settings/windlight/water/Pond.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/water/SNAKE%21%21%21.xml b/indra/newview/app_settings/windlight/water/SNAKE%21%21%21.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/water/Second%20Plague.xml b/indra/newview/app_settings/windlight/water/Second%20Plague.xml old mode 100644 new mode 100755 diff --git a/indra/newview/app_settings/windlight/water/Valdez.xml b/indra/newview/app_settings/windlight/water/Valdez.xml old mode 100644 new mode 100755 diff --git a/indra/newview/build_win32_appConfig.py b/indra/newview/build_win32_appConfig.py old mode 100644 new mode 100755 diff --git a/indra/newview/character/attentions.xml b/indra/newview/character/attentions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/character/attentionsN.xml b/indra/newview/character/attentionsN.xml old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_eye.llm b/indra/newview/character/avatar_eye.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_eye_1.llm b/indra/newview/character/avatar_eye_1.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_eyelashes.llm b/indra/newview/character/avatar_eyelashes.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_hair.llm b/indra/newview/character/avatar_hair.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_hair_1.llm b/indra/newview/character/avatar_hair_1.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_hair_2.llm b/indra/newview/character/avatar_hair_2.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_hair_3.llm b/indra/newview/character/avatar_hair_3.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_hair_4.llm b/indra/newview/character/avatar_hair_4.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_hair_5.llm b/indra/newview/character/avatar_hair_5.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_head.llm b/indra/newview/character/avatar_head.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_head_1.llm b/indra/newview/character/avatar_head_1.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_head_2.llm b/indra/newview/character/avatar_head_2.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_head_3.llm b/indra/newview/character/avatar_head_3.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_head_4.llm b/indra/newview/character/avatar_head_4.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_lower_body.llm b/indra/newview/character/avatar_lower_body.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_lower_body_1.llm b/indra/newview/character/avatar_lower_body_1.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_lower_body_2.llm b/indra/newview/character/avatar_lower_body_2.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_lower_body_3.llm b/indra/newview/character/avatar_lower_body_3.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_lower_body_4.llm b/indra/newview/character/avatar_lower_body_4.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_skeleton.xml b/indra/newview/character/avatar_skeleton.xml old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_skirt.llm b/indra/newview/character/avatar_skirt.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_skirt_1.llm b/indra/newview/character/avatar_skirt_1.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_skirt_2.llm b/indra/newview/character/avatar_skirt_2.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_skirt_3.llm b/indra/newview/character/avatar_skirt_3.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_skirt_4.llm b/indra/newview/character/avatar_skirt_4.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_upper_body.llm b/indra/newview/character/avatar_upper_body.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_upper_body_1.llm b/indra/newview/character/avatar_upper_body_1.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_upper_body_2.llm b/indra/newview/character/avatar_upper_body_2.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_upper_body_3.llm b/indra/newview/character/avatar_upper_body_3.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/avatar_upper_body_4.llm b/indra/newview/character/avatar_upper_body_4.llm old mode 100644 new mode 100755 diff --git a/indra/newview/character/blush_alpha.tga b/indra/newview/character/blush_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/body_skingrain.tga b/indra/newview/character/body_skingrain.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/bodyfreckles_alpha.tga b/indra/newview/character/bodyfreckles_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/bump_face_wrinkles.tga b/indra/newview/character/bump_face_wrinkles.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/bump_head_base.tga b/indra/newview/character/bump_head_base.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/bump_lowerbody_base.tga b/indra/newview/character/bump_lowerbody_base.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/bump_pants_wrinkles.tga b/indra/newview/character/bump_pants_wrinkles.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/bump_shirt_wrinkles.tga b/indra/newview/character/bump_shirt_wrinkles.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/bump_upperbody_base.tga b/indra/newview/character/bump_upperbody_base.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/checkerboard.tga b/indra/newview/character/checkerboard.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/eyebrows_alpha.tga b/indra/newview/character/eyebrows_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/eyeliner_alpha.tga b/indra/newview/character/eyeliner_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/eyeshadow_inner_alpha.tga b/indra/newview/character/eyeshadow_inner_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/eyeshadow_outer_alpha.tga b/indra/newview/character/eyeshadow_outer_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/eyewhite.tga b/indra/newview/character/eyewhite.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/facehair_chincurtains_alpha.tga b/indra/newview/character/facehair_chincurtains_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/facehair_moustache_alpha.tga b/indra/newview/character/facehair_moustache_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/facehair_sideburns_alpha.tga b/indra/newview/character/facehair_sideburns_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/facehair_soulpatch_alpha.tga b/indra/newview/character/facehair_soulpatch_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/freckles_alpha.tga b/indra/newview/character/freckles_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/genepool.xml b/indra/newview/character/genepool.xml old mode 100644 new mode 100755 diff --git a/indra/newview/character/glove_length_alpha.tga b/indra/newview/character/glove_length_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/gloves_fingers_alpha.tga b/indra/newview/character/gloves_fingers_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/head_alpha.tga b/indra/newview/character/head_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/head_color.tga b/indra/newview/character/head_color.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/head_hair.tga b/indra/newview/character/head_hair.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/head_highlights_alpha.tga b/indra/newview/character/head_highlights_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/head_shading_alpha.tga b/indra/newview/character/head_shading_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/head_skingrain.tga b/indra/newview/character/head_skingrain.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/jacket_length_lower_alpha.tga b/indra/newview/character/jacket_length_lower_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/jacket_length_upper_alpha.tga b/indra/newview/character/jacket_length_upper_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/jacket_open_lower_alpha.tga b/indra/newview/character/jacket_open_lower_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/jacket_open_upper_alpha.tga b/indra/newview/character/jacket_open_upper_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/lipgloss_alpha.tga b/indra/newview/character/lipgloss_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/lips_mask.tga b/indra/newview/character/lips_mask.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/lipstick_alpha.tga b/indra/newview/character/lipstick_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/lowerbody_color.tga b/indra/newview/character/lowerbody_color.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/lowerbody_highlights_alpha.tga b/indra/newview/character/lowerbody_highlights_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/lowerbody_shading_alpha.tga b/indra/newview/character/lowerbody_shading_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/nailpolish_alpha.tga b/indra/newview/character/nailpolish_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/pants_length_alpha.tga b/indra/newview/character/pants_length_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/pants_waist_alpha.tga b/indra/newview/character/pants_waist_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/rosyface_alpha.tga b/indra/newview/character/rosyface_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/rouge_alpha.tga b/indra/newview/character/rouge_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/shirt_bottom_alpha.tga b/indra/newview/character/shirt_bottom_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/shirt_collar_alpha.tga b/indra/newview/character/shirt_collar_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/shirt_collar_back_alpha.tga b/indra/newview/character/shirt_collar_back_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/shirt_sleeve_alpha.tga b/indra/newview/character/shirt_sleeve_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/shoe_height_alpha.tga b/indra/newview/character/shoe_height_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/skirt_length_alpha.tga b/indra/newview/character/skirt_length_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/skirt_slit_back_alpha.tga b/indra/newview/character/skirt_slit_back_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/skirt_slit_front_alpha.tga b/indra/newview/character/skirt_slit_front_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/skirt_slit_left_alpha.tga b/indra/newview/character/skirt_slit_left_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/skirt_slit_right_alpha.tga b/indra/newview/character/skirt_slit_right_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/underpants_trial_female.tga b/indra/newview/character/underpants_trial_female.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/underpants_trial_male.tga b/indra/newview/character/underpants_trial_male.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/undershirt_trial_female.tga b/indra/newview/character/undershirt_trial_female.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/upperbody_color.tga b/indra/newview/character/upperbody_color.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/upperbody_highlights_alpha.tga b/indra/newview/character/upperbody_highlights_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/upperbody_shading_alpha.tga b/indra/newview/character/upperbody_shading_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/character/upperbodyfreckles_alpha.tga b/indra/newview/character/upperbodyfreckles_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_ARROW.tif b/indra/newview/cursors_mac/UI_CURSOR_ARROW.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_ARROWDRAG.tif b/indra/newview/cursors_mac/UI_CURSOR_ARROWDRAG.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_ARROWLOCKED.tif b/indra/newview/cursors_mac/UI_CURSOR_ARROWLOCKED.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_GRABLOCKED.tif b/indra/newview/cursors_mac/UI_CURSOR_GRABLOCKED.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_NO.tif b/indra/newview/cursors_mac/UI_CURSOR_NO.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_NOLOCKED.tif b/indra/newview/cursors_mac/UI_CURSOR_NOLOCKED.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_SIZENESW.tif b/indra/newview/cursors_mac/UI_CURSOR_SIZENESW.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_SIZENS.tif b/indra/newview/cursors_mac/UI_CURSOR_SIZENS.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_SIZENWSE.tif b/indra/newview/cursors_mac/UI_CURSOR_SIZENWSE.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_SIZEWE.tif b/indra/newview/cursors_mac/UI_CURSOR_SIZEWE.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLBUY.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLBUY.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLCAMERA.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLCAMERA.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLCREATE.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLCREATE.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLFOCUS.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLFOCUS.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLGRAB.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLGRAB.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLLAND.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLLAND.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLMEDIAOPEN.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLMEDIAOPEN.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLOPEN.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLOPEN.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLPAN.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLPAN.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLPAUSE.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLPAUSE.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLPICKOBJECT3.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLPICKOBJECT3.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLPLAY.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLPLAY.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLROTATE.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLROTATE.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLSCALE.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLSCALE.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLSIT.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLSIT.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLTRANSLATE.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLTRANSLATE.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLZOOMIN.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLZOOMIN.tif old mode 100644 new mode 100755 diff --git a/indra/newview/cursors_mac/UI_CURSOR_WORKING.tif b/indra/newview/cursors_mac/UI_CURSOR_WORKING.tif old mode 100644 new mode 100755 diff --git a/indra/newview/da.lproj/language.txt b/indra/newview/da.lproj/language.txt old mode 100644 new mode 100755 diff --git a/indra/newview/es.lproj/language.txt b/indra/newview/es.lproj/language.txt old mode 100644 new mode 100755 diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt old mode 100644 new mode 100755 diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt old mode 100644 new mode 100755 diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt old mode 100644 new mode 100755 diff --git a/indra/newview/featuretable_solaris.txt b/indra/newview/featuretable_solaris.txt old mode 100644 new mode 100755 diff --git a/indra/newview/fmod_hidden_symbols.exp b/indra/newview/fmod_hidden_symbols.exp old mode 100644 new mode 100755 diff --git a/indra/newview/fmodwrapper.cpp b/indra/newview/fmodwrapper.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/fonts/DejaVu-license.txt b/indra/newview/fonts/DejaVu-license.txt old mode 100644 new mode 100755 diff --git a/indra/newview/fonts/DejaVuSans-Bold.ttf b/indra/newview/fonts/DejaVuSans-Bold.ttf old mode 100644 new mode 100755 diff --git a/indra/newview/fonts/DejaVuSans-BoldOblique.ttf b/indra/newview/fonts/DejaVuSans-BoldOblique.ttf old mode 100644 new mode 100755 diff --git a/indra/newview/fonts/DejaVuSans-Oblique.ttf b/indra/newview/fonts/DejaVuSans-Oblique.ttf old mode 100644 new mode 100755 diff --git a/indra/newview/fonts/DejaVuSans.ttf b/indra/newview/fonts/DejaVuSans.ttf old mode 100644 new mode 100755 diff --git a/indra/newview/fonts/DejaVuSansMono.ttf b/indra/newview/fonts/DejaVuSansMono.ttf old mode 100644 new mode 100755 diff --git a/indra/newview/fr.lproj/language.txt b/indra/newview/fr.lproj/language.txt old mode 100644 new mode 100755 diff --git a/indra/newview/generate_breakpad_symbols.py b/indra/newview/generate_breakpad_symbols.py old mode 100644 new mode 100755 diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt old mode 100644 new mode 100755 diff --git a/indra/newview/hu.lproj/language.txt b/indra/newview/hu.lproj/language.txt old mode 100644 new mode 100755 diff --git a/indra/newview/installers/darwin/dmg-cleanup.applescript b/indra/newview/installers/darwin/dmg-cleanup.applescript old mode 100644 new mode 100755 diff --git a/indra/newview/installers/darwin/firstlook-dmg/Applications-alias.r b/indra/newview/installers/darwin/firstlook-dmg/Applications-alias.r old mode 100644 new mode 100755 diff --git a/indra/newview/installers/darwin/firstlook-dmg/_DS_Store b/indra/newview/installers/darwin/firstlook-dmg/_DS_Store old mode 100644 new mode 100755 diff --git a/indra/newview/installers/darwin/firstlook-dmg/_VolumeIcon.icns b/indra/newview/installers/darwin/firstlook-dmg/_VolumeIcon.icns old mode 100644 new mode 100755 diff --git a/indra/newview/installers/darwin/firstlook-dmg/background.jpg b/indra/newview/installers/darwin/firstlook-dmg/background.jpg old mode 100644 new mode 100755 diff --git a/indra/newview/installers/darwin/fix_application_icon_position.sh b/indra/newview/installers/darwin/fix_application_icon_position.sh old mode 100644 new mode 100755 diff --git a/indra/newview/installers/darwin/publicnightly-dmg/Applications-alias.r b/indra/newview/installers/darwin/publicnightly-dmg/Applications-alias.r old mode 100644 new mode 100755 diff --git a/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store b/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store old mode 100644 new mode 100755 diff --git a/indra/newview/installers/darwin/publicnightly-dmg/_VolumeIcon.icns b/indra/newview/installers/darwin/publicnightly-dmg/_VolumeIcon.icns old mode 100644 new mode 100755 diff --git a/indra/newview/installers/darwin/publicnightly-dmg/background.jpg b/indra/newview/installers/darwin/publicnightly-dmg/background.jpg old mode 100644 new mode 100755 diff --git a/indra/newview/installers/darwin/release-dmg/Applications-alias.r b/indra/newview/installers/darwin/release-dmg/Applications-alias.r old mode 100644 new mode 100755 diff --git a/indra/newview/installers/darwin/release-dmg/_DS_Store b/indra/newview/installers/darwin/release-dmg/_DS_Store old mode 100644 new mode 100755 diff --git a/indra/newview/installers/darwin/release-dmg/_VolumeIcon.icns b/indra/newview/installers/darwin/release-dmg/_VolumeIcon.icns old mode 100644 new mode 100755 diff --git a/indra/newview/installers/darwin/release-dmg/background.jpg b/indra/newview/installers/darwin/release-dmg/background.jpg old mode 100644 new mode 100755 diff --git a/indra/newview/installers/darwin/releasecandidate-dmg/Applications-alias.r b/indra/newview/installers/darwin/releasecandidate-dmg/Applications-alias.r old mode 100644 new mode 100755 diff --git a/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store b/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store old mode 100644 new mode 100755 diff --git a/indra/newview/installers/darwin/releasecandidate-dmg/_VolumeIcon.icns b/indra/newview/installers/darwin/releasecandidate-dmg/_VolumeIcon.icns old mode 100644 new mode 100755 diff --git a/indra/newview/installers/darwin/releasecandidate-dmg/background.jpg b/indra/newview/installers/darwin/releasecandidate-dmg/background.jpg old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt b/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/install_icon.BMP b/indra/newview/installers/windows/install_icon.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/install_icon.ico b/indra/newview/installers/windows/install_icon.ico old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/lang_da.nsi b/indra/newview/installers/windows/lang_da.nsi old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/lang_de.nsi b/indra/newview/installers/windows/lang_de.nsi old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/lang_en-us.nsi b/indra/newview/installers/windows/lang_en-us.nsi old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/lang_es.nsi b/indra/newview/installers/windows/lang_es.nsi old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/lang_fr.nsi b/indra/newview/installers/windows/lang_fr.nsi old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/lang_it.nsi b/indra/newview/installers/windows/lang_it.nsi old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/lang_ja.nsi b/indra/newview/installers/windows/lang_ja.nsi old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/lang_ko.nsi b/indra/newview/installers/windows/lang_ko.nsi old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/lang_nl.nsi b/indra/newview/installers/windows/lang_nl.nsi old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/lang_pl.nsi b/indra/newview/installers/windows/lang_pl.nsi old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/lang_pt-br.nsi b/indra/newview/installers/windows/lang_pt-br.nsi old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/lang_zh.nsi b/indra/newview/installers/windows/lang_zh.nsi old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/language_menu.nsi b/indra/newview/installers/windows/language_menu.nsi old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/uninstall_icon.BMP b/indra/newview/installers/windows/uninstall_icon.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/installers/windows/uninstall_icon.ico b/indra/newview/installers/windows/uninstall_icon.ico old mode 100644 new mode 100755 diff --git a/indra/newview/it.lproj/language.txt b/indra/newview/it.lproj/language.txt old mode 100644 new mode 100755 diff --git a/indra/newview/licenses-linux.txt b/indra/newview/licenses-linux.txt old mode 100644 new mode 100755 diff --git a/indra/newview/licenses-mac.txt b/indra/newview/licenses-mac.txt old mode 100644 new mode 100755 diff --git a/indra/newview/licenses-solaris.txt b/indra/newview/licenses-solaris.txt old mode 100644 new mode 100755 diff --git a/indra/newview/licenses-win32.txt b/indra/newview/licenses-win32.txt old mode 100644 new mode 100755 diff --git a/indra/newview/linux_tools/client-readme-joystick.txt b/indra/newview/linux_tools/client-readme-joystick.txt old mode 100644 new mode 100755 diff --git a/indra/newview/linux_tools/client-readme-voice.txt b/indra/newview/linux_tools/client-readme-voice.txt old mode 100644 new mode 100755 diff --git a/indra/newview/linux_tools/client-readme.txt b/indra/newview/linux_tools/client-readme.txt old mode 100644 new mode 100755 diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h old mode 100644 new mode 100755 diff --git a/indra/newview/llagentaccess.cpp b/indra/newview/llagentaccess.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llagentaccess.h b/indra/newview/llagentaccess.h old mode 100644 new mode 100755 diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h old mode 100644 new mode 100755 diff --git a/indra/newview/llagentdata.cpp b/indra/newview/llagentdata.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llagentdata.h b/indra/newview/llagentdata.h old mode 100644 new mode 100755 diff --git a/indra/newview/llagentlanguage.cpp b/indra/newview/llagentlanguage.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llagentlanguage.h b/indra/newview/llagentlanguage.h old mode 100644 new mode 100755 diff --git a/indra/newview/llagentlistener.cpp b/indra/newview/llagentlistener.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llagentlistener.h b/indra/newview/llagentlistener.h old mode 100644 new mode 100755 diff --git a/indra/newview/llagentpicksinfo.cpp b/indra/newview/llagentpicksinfo.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llagentpicksinfo.h b/indra/newview/llagentpicksinfo.h old mode 100644 new mode 100755 diff --git a/indra/newview/llagentpilot.cpp b/indra/newview/llagentpilot.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llagentpilot.h b/indra/newview/llagentpilot.h old mode 100644 new mode 100755 diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llagentui.h b/indra/newview/llagentui.h old mode 100644 new mode 100755 diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h old mode 100644 new mode 100755 diff --git a/indra/newview/llagentwearablesfetch.cpp b/indra/newview/llagentwearablesfetch.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llagentwearablesfetch.h b/indra/newview/llagentwearablesfetch.h old mode 100644 new mode 100755 diff --git a/indra/newview/llanimstatelabels.cpp b/indra/newview/llanimstatelabels.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llanimstatelabels.h b/indra/newview/llanimstatelabels.h old mode 100644 new mode 100755 diff --git a/indra/newview/llappearance.h b/indra/newview/llappearance.h old mode 100644 new mode 100755 diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h old mode 100644 new mode 100755 diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h old mode 100644 new mode 100755 diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llappviewerlinux.h b/indra/newview/llappviewerlinux.h old mode 100644 new mode 100755 diff --git a/indra/newview/llappviewerlinux_api.h b/indra/newview/llappviewerlinux_api.h old mode 100644 new mode 100755 diff --git a/indra/newview/llappviewerlinux_api.xml b/indra/newview/llappviewerlinux_api.xml old mode 100644 new mode 100755 diff --git a/indra/newview/llappviewerlinux_api_dbus.cpp b/indra/newview/llappviewerlinux_api_dbus.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llappviewerlinux_api_dbus.h b/indra/newview/llappviewerlinux_api_dbus.h old mode 100644 new mode 100755 diff --git a/indra/newview/llappviewerlinux_api_dbus_syms_raw.inc b/indra/newview/llappviewerlinux_api_dbus_syms_raw.inc old mode 100644 new mode 100755 diff --git a/indra/newview/llappviewerlistener.cpp b/indra/newview/llappviewerlistener.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llappviewerlistener.h b/indra/newview/llappviewerlistener.h old mode 100644 new mode 100755 diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llappviewermacosx.h b/indra/newview/llappviewermacosx.h old mode 100644 new mode 100755 diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llappviewerwin32.h b/indra/newview/llappviewerwin32.h old mode 100644 new mode 100755 diff --git a/indra/newview/llassetuploadqueue.cpp b/indra/newview/llassetuploadqueue.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llassetuploadqueue.h b/indra/newview/llassetuploadqueue.h old mode 100644 new mode 100755 diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llassetuploadresponders.h b/indra/newview/llassetuploadresponders.h old mode 100644 new mode 100755 diff --git a/indra/newview/llaudiosourcevo.cpp b/indra/newview/llaudiosourcevo.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llaudiosourcevo.h b/indra/newview/llaudiosourcevo.h old mode 100644 new mode 100755 diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h old mode 100644 new mode 100755 diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llavatariconctrl.h b/indra/newview/llavatariconctrl.h old mode 100644 new mode 100755 diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h old mode 100644 new mode 100755 diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h old mode 100644 new mode 100755 diff --git a/indra/newview/llavatarpropertiesprocessor.cpp b/indra/newview/llavatarpropertiesprocessor.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llavatarpropertiesprocessor.h b/indra/newview/llavatarpropertiesprocessor.h old mode 100644 new mode 100755 diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h old mode 100644 new mode 100755 diff --git a/indra/newview/llbox.cpp b/indra/newview/llbox.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llbox.h b/indra/newview/llbox.h old mode 100644 new mode 100755 diff --git a/indra/newview/llbreadcrumbview.cpp b/indra/newview/llbreadcrumbview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llbreadcrumbview.h b/indra/newview/llbreadcrumbview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llbuycurrencyhtml.cpp b/indra/newview/llbuycurrencyhtml.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llbuycurrencyhtml.h b/indra/newview/llbuycurrencyhtml.h old mode 100644 new mode 100755 diff --git a/indra/newview/llcallbacklist.cpp b/indra/newview/llcallbacklist.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llcallbacklist.h b/indra/newview/llcallbacklist.h old mode 100644 new mode 100755 diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llcallfloater.h b/indra/newview/llcallfloater.h old mode 100644 new mode 100755 diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llcallingcard.h b/indra/newview/llcallingcard.h old mode 100644 new mode 100755 diff --git a/indra/newview/llcapabilitylistener.cpp b/indra/newview/llcapabilitylistener.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llcapabilitylistener.h b/indra/newview/llcapabilitylistener.h old mode 100644 new mode 100755 diff --git a/indra/newview/llcapabilityprovider.h b/indra/newview/llcapabilityprovider.h old mode 100644 new mode 100755 diff --git a/indra/newview/llcaphttpsender.cpp b/indra/newview/llcaphttpsender.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llcaphttpsender.h b/indra/newview/llcaphttpsender.h old mode 100644 new mode 100755 diff --git a/indra/newview/llchannelmanager.cpp b/indra/newview/llchannelmanager.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llchannelmanager.h b/indra/newview/llchannelmanager.h old mode 100644 new mode 100755 diff --git a/indra/newview/llchatbar.cpp b/indra/newview/llchatbar.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llchatbar.h b/indra/newview/llchatbar.h old mode 100644 new mode 100755 diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h old mode 100644 new mode 100755 diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llchatitemscontainerctrl.h b/indra/newview/llchatitemscontainerctrl.h old mode 100644 new mode 100755 diff --git a/indra/newview/llchatmsgbox.cpp b/indra/newview/llchatmsgbox.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llchatmsgbox.h b/indra/newview/llchatmsgbox.h old mode 100644 new mode 100755 diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h old mode 100644 new mode 100755 diff --git a/indra/newview/llclassifiedinfo.cpp b/indra/newview/llclassifiedinfo.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llclassifiedinfo.h b/indra/newview/llclassifiedinfo.h old mode 100644 new mode 100755 diff --git a/indra/newview/llclassifiedstatsresponder.cpp b/indra/newview/llclassifiedstatsresponder.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llclassifiedstatsresponder.h b/indra/newview/llclassifiedstatsresponder.h old mode 100644 new mode 100755 diff --git a/indra/newview/llcloud.cpp b/indra/newview/llcloud.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llcloud.h b/indra/newview/llcloud.h old mode 100644 new mode 100755 diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llcofwearables.h b/indra/newview/llcofwearables.h old mode 100644 new mode 100755 diff --git a/indra/newview/llcolorswatch.cpp b/indra/newview/llcolorswatch.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llcolorswatch.h b/indra/newview/llcolorswatch.h old mode 100644 new mode 100755 diff --git a/indra/newview/llcommanddispatcherlistener.cpp b/indra/newview/llcommanddispatcherlistener.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llcommanddispatcherlistener.h b/indra/newview/llcommanddispatcherlistener.h old mode 100644 new mode 100755 diff --git a/indra/newview/llcommandhandler.cpp b/indra/newview/llcommandhandler.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llcommandhandler.h b/indra/newview/llcommandhandler.h old mode 100644 new mode 100755 diff --git a/indra/newview/llcommandlineparser.cpp b/indra/newview/llcommandlineparser.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llcommandlineparser.h b/indra/newview/llcommandlineparser.h old mode 100644 new mode 100755 diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llcompilequeue.h b/indra/newview/llcompilequeue.h old mode 100644 new mode 100755 diff --git a/indra/newview/llconfirmationmanager.cpp b/indra/newview/llconfirmationmanager.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llconfirmationmanager.h b/indra/newview/llconfirmationmanager.h old mode 100644 new mode 100755 diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llcurrencyuimanager.h b/indra/newview/llcurrencyuimanager.h old mode 100644 new mode 100755 diff --git a/indra/newview/llcylinder.cpp b/indra/newview/llcylinder.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llcylinder.h b/indra/newview/llcylinder.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldateutil.cpp b/indra/newview/lldateutil.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldateutil.h b/indra/newview/lldateutil.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldebugmessagebox.cpp b/indra/newview/lldebugmessagebox.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldebugmessagebox.h b/indra/newview/lldebugmessagebox.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldebugview.cpp b/indra/newview/lldebugview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldebugview.h b/indra/newview/lldebugview.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldelayedgestureerror.cpp b/indra/newview/lldelayedgestureerror.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldelayedgestureerror.h b/indra/newview/lldelayedgestureerror.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldirpicker.cpp b/indra/newview/lldirpicker.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldirpicker.h b/indra/newview/lldirpicker.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldndbutton.cpp b/indra/newview/lldndbutton.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldndbutton.h b/indra/newview/lldndbutton.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawable.h b/indra/newview/lldrawable.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpool.h b/indra/newview/lldrawpool.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolalpha.h b/indra/newview/lldrawpoolalpha.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolavatar.h b/indra/newview/lldrawpoolavatar.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolbump.h b/indra/newview/lldrawpoolbump.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolclouds.cpp b/indra/newview/lldrawpoolclouds.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolclouds.h b/indra/newview/lldrawpoolclouds.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolground.cpp b/indra/newview/lldrawpoolground.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolground.h b/indra/newview/lldrawpoolground.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolsimple.cpp b/indra/newview/lldrawpoolsimple.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolsimple.h b/indra/newview/lldrawpoolsimple.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolsky.cpp b/indra/newview/lldrawpoolsky.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolsky.h b/indra/newview/lldrawpoolsky.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolterrain.h b/indra/newview/lldrawpoolterrain.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpooltree.h b/indra/newview/lldrawpooltree.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolwater.h b/indra/newview/lldrawpoolwater.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldrawpoolwlsky.h b/indra/newview/lldrawpoolwlsky.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldriverparam.cpp b/indra/newview/lldriverparam.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldriverparam.h b/indra/newview/lldriverparam.h old mode 100644 new mode 100755 diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lldynamictexture.h b/indra/newview/lldynamictexture.h old mode 100644 new mode 100755 diff --git a/indra/newview/llemote.cpp b/indra/newview/llemote.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llemote.h b/indra/newview/llemote.h old mode 100644 new mode 100755 diff --git a/indra/newview/lleventinfo.cpp b/indra/newview/lleventinfo.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lleventinfo.h b/indra/newview/lleventinfo.h old mode 100644 new mode 100755 diff --git a/indra/newview/lleventnotifier.cpp b/indra/newview/lleventnotifier.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lleventnotifier.h b/indra/newview/lleventnotifier.h old mode 100644 new mode 100755 diff --git a/indra/newview/lleventpoll.cpp b/indra/newview/lleventpoll.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lleventpoll.h b/indra/newview/lleventpoll.h old mode 100644 new mode 100755 diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h old mode 100644 new mode 100755 diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llface.h b/indra/newview/llface.h old mode 100644 new mode 100755 diff --git a/indra/newview/llface.inl b/indra/newview/llface.inl old mode 100644 new mode 100755 diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfasttimerview.h b/indra/newview/llfasttimerview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfeaturemanager.h b/indra/newview/llfeaturemanager.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfilepicker.cpp b/indra/newview/llfilepicker.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfilepicker.h b/indra/newview/llfilepicker.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfilteredwearablelist.cpp b/indra/newview/llfilteredwearablelist.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfilteredwearablelist.h b/indra/newview/llfilteredwearablelist.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfirstuse.h b/indra/newview/llfirstuse.h old mode 100644 new mode 100755 diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llflexibleobject.h b/indra/newview/llflexibleobject.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterabout.h b/indra/newview/llfloaterabout.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloateranimpreview.h b/indra/newview/llfloateranimpreview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterauction.h b/indra/newview/llfloaterauction.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloateravatarpicker.h b/indra/newview/llfloateravatarpicker.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloateravatartextures.cpp b/indra/newview/llfloateravatartextures.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloateravatartextures.h b/indra/newview/llfloateravatartextures.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterbeacons.cpp b/indra/newview/llfloaterbeacons.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterbeacons.h b/indra/newview/llfloaterbeacons.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterbuildoptions.cpp b/indra/newview/llfloaterbuildoptions.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterbuildoptions.h b/indra/newview/llfloaterbuildoptions.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterbulkpermission.h b/indra/newview/llfloaterbulkpermission.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterbump.cpp b/indra/newview/llfloaterbump.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterbump.h b/indra/newview/llfloaterbump.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterbuy.h b/indra/newview/llfloaterbuy.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterbuycontents.h b/indra/newview/llfloaterbuycontents.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterbuycurrency.cpp b/indra/newview/llfloaterbuycurrency.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterbuycurrency.h b/indra/newview/llfloaterbuycurrency.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterbuycurrencyhtml.cpp b/indra/newview/llfloaterbuycurrencyhtml.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterbuycurrencyhtml.h b/indra/newview/llfloaterbuycurrencyhtml.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterbuyland.h b/indra/newview/llfloaterbuyland.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterchat.cpp b/indra/newview/llfloaterchat.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterchat.h b/indra/newview/llfloaterchat.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterchatterbox.cpp b/indra/newview/llfloaterchatterbox.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterchatterbox.h b/indra/newview/llfloaterchatterbox.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatercolorpicker.h b/indra/newview/llfloatercolorpicker.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterdaycycle.cpp b/indra/newview/llfloaterdaycycle.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterdaycycle.h b/indra/newview/llfloaterdaycycle.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterenvsettings.cpp b/indra/newview/llfloaterenvsettings.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterenvsettings.h b/indra/newview/llfloaterenvsettings.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterevent.cpp b/indra/newview/llfloaterevent.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterevent.h b/indra/newview/llfloaterevent.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterfonttest.cpp b/indra/newview/llfloaterfonttest.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterfonttest.h b/indra/newview/llfloaterfonttest.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterfriends.cpp b/indra/newview/llfloaterfriends.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterfriends.h b/indra/newview/llfloaterfriends.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatergesture.h b/indra/newview/llfloatergesture.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatergodtools.h b/indra/newview/llfloatergodtools.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatergroupinvite.cpp b/indra/newview/llfloatergroupinvite.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatergroupinvite.h b/indra/newview/llfloatergroupinvite.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatergroups.cpp b/indra/newview/llfloatergroups.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatergroups.h b/indra/newview/llfloatergroups.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterhandler.cpp b/indra/newview/llfloaterhandler.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterhandler.h b/indra/newview/llfloaterhandler.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterhardwaresettings.h b/indra/newview/llfloaterhardwaresettings.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterhelpbrowser.cpp b/indra/newview/llfloaterhelpbrowser.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterhelpbrowser.h b/indra/newview/llfloaterhelpbrowser.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterhud.cpp b/indra/newview/llfloaterhud.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterhud.h b/indra/newview/llfloaterhud.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterimagepreview.h b/indra/newview/llfloaterimagepreview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterimportcollada.cpp b/indra/newview/llfloaterimportcollada.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterimportcollada.h b/indra/newview/llfloaterimportcollada.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterinspect.h b/indra/newview/llfloaterinspect.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterinventory.h b/indra/newview/llfloaterinventory.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterjoystick.cpp b/indra/newview/llfloaterjoystick.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterjoystick.h b/indra/newview/llfloaterjoystick.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterlagmeter.cpp b/indra/newview/llfloaterlagmeter.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterlagmeter.h b/indra/newview/llfloaterlagmeter.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterlandholdings.cpp b/indra/newview/llfloaterlandholdings.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterlandholdings.h b/indra/newview/llfloaterlandholdings.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatermap.h b/indra/newview/llfloatermap.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatermediabrowser.cpp b/indra/newview/llfloatermediabrowser.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatermediabrowser.h b/indra/newview/llfloatermediabrowser.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatermediasettings.cpp b/indra/newview/llfloatermediasettings.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatermediasettings.h b/indra/newview/llfloatermediasettings.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatermemleak.cpp b/indra/newview/llfloatermemleak.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatermemleak.h b/indra/newview/llfloatermemleak.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaternamedesc.h b/indra/newview/llfloaternamedesc.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaternotificationsconsole.cpp b/indra/newview/llfloaternotificationsconsole.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaternotificationsconsole.h b/indra/newview/llfloaternotificationsconsole.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloateropenobject.h b/indra/newview/llfloateropenobject.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterpay.cpp b/indra/newview/llfloaterpay.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterpay.h b/indra/newview/llfloaterpay.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterperms.cpp b/indra/newview/llfloaterperms.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterperms.h b/indra/newview/llfloaterperms.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterpostcard.h b/indra/newview/llfloaterpostcard.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterpostprocess.cpp b/indra/newview/llfloaterpostprocess.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterpostprocess.h b/indra/newview/llfloaterpostprocess.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterproperties.h b/indra/newview/llfloaterproperties.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterreporter.h b/indra/newview/llfloaterreporter.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterscriptdebug.cpp b/indra/newview/llfloaterscriptdebug.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterscriptdebug.h b/indra/newview/llfloaterscriptdebug.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterscriptlimits.h b/indra/newview/llfloaterscriptlimits.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatersearch.h b/indra/newview/llfloatersearch.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatersellland.h b/indra/newview/llfloatersellland.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatersettingsdebug.cpp b/indra/newview/llfloatersettingsdebug.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatersettingsdebug.h b/indra/newview/llfloatersettingsdebug.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatersnapshot.h b/indra/newview/llfloatersnapshot.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatertelehub.cpp b/indra/newview/llfloatertelehub.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatertelehub.h b/indra/newview/llfloatertelehub.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatertestinspectors.cpp b/indra/newview/llfloatertestinspectors.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatertestinspectors.h b/indra/newview/llfloatertestinspectors.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatertestlistview.cpp b/indra/newview/llfloatertestlistview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatertestlistview.h b/indra/newview/llfloatertestlistview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatertopobjects.h b/indra/newview/llfloatertopobjects.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatertos.cpp b/indra/newview/llfloatertos.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatertos.h b/indra/newview/llfloatertos.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloateruipreview.h b/indra/newview/llfloateruipreview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterurlentry.cpp b/indra/newview/llfloaterurlentry.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterurlentry.h b/indra/newview/llfloaterurlentry.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatervoicedevicesettings.cpp b/indra/newview/llfloatervoicedevicesettings.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatervoicedevicesettings.h b/indra/newview/llfloatervoicedevicesettings.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatervoiceeffect.cpp b/indra/newview/llfloatervoiceeffect.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloatervoiceeffect.h b/indra/newview/llfloatervoiceeffect.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterwater.cpp b/indra/newview/llfloaterwater.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterwater.h b/indra/newview/llfloaterwater.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterwhitelistentry.cpp b/indra/newview/llfloaterwhitelistentry.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterwhitelistentry.h b/indra/newview/llfloaterwhitelistentry.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterwindlight.cpp b/indra/newview/llfloaterwindlight.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterwindlight.h b/indra/newview/llfloaterwindlight.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterwindowsize.cpp b/indra/newview/llfloaterwindowsize.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterwindowsize.h b/indra/newview/llfloaterwindowsize.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfoldervieweventlistener.h b/indra/newview/llfoldervieweventlistener.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfollowcam.cpp b/indra/newview/llfollowcam.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfollowcam.h b/indra/newview/llfollowcam.h old mode 100644 new mode 100755 diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llfriendcard.h b/indra/newview/llfriendcard.h old mode 100644 new mode 100755 diff --git a/indra/newview/llgesturemgr.cpp b/indra/newview/llgesturemgr.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llgesturemgr.h b/indra/newview/llgesturemgr.h old mode 100644 new mode 100755 diff --git a/indra/newview/llgiveinventory.cpp b/indra/newview/llgiveinventory.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llgiveinventory.h b/indra/newview/llgiveinventory.h old mode 100644 new mode 100755 diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llgroupactions.h b/indra/newview/llgroupactions.h old mode 100644 new mode 100755 diff --git a/indra/newview/llgroupiconctrl.cpp b/indra/newview/llgroupiconctrl.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llgroupiconctrl.h b/indra/newview/llgroupiconctrl.h old mode 100644 new mode 100755 diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llgrouplist.h b/indra/newview/llgrouplist.h old mode 100644 new mode 100755 diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llgroupmgr.h b/indra/newview/llgroupmgr.h old mode 100644 new mode 100755 diff --git a/indra/newview/llhomelocationresponder.cpp b/indra/newview/llhomelocationresponder.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llhomelocationresponder.h b/indra/newview/llhomelocationresponder.h old mode 100644 new mode 100755 diff --git a/indra/newview/llhudeffect.cpp b/indra/newview/llhudeffect.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llhudeffect.h b/indra/newview/llhudeffect.h old mode 100644 new mode 100755 diff --git a/indra/newview/llhudeffectbeam.cpp b/indra/newview/llhudeffectbeam.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llhudeffectbeam.h b/indra/newview/llhudeffectbeam.h old mode 100644 new mode 100755 diff --git a/indra/newview/llhudeffectlookat.cpp b/indra/newview/llhudeffectlookat.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llhudeffectlookat.h b/indra/newview/llhudeffectlookat.h old mode 100644 new mode 100755 diff --git a/indra/newview/llhudeffectpointat.cpp b/indra/newview/llhudeffectpointat.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llhudeffectpointat.h b/indra/newview/llhudeffectpointat.h old mode 100644 new mode 100755 diff --git a/indra/newview/llhudeffecttrail.cpp b/indra/newview/llhudeffecttrail.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llhudeffecttrail.h b/indra/newview/llhudeffecttrail.h old mode 100644 new mode 100755 diff --git a/indra/newview/llhudicon.cpp b/indra/newview/llhudicon.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llhudicon.h b/indra/newview/llhudicon.h old mode 100644 new mode 100755 diff --git a/indra/newview/llhudmanager.cpp b/indra/newview/llhudmanager.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llhudmanager.h b/indra/newview/llhudmanager.h old mode 100644 new mode 100755 diff --git a/indra/newview/llhudobject.cpp b/indra/newview/llhudobject.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llhudobject.h b/indra/newview/llhudobject.h old mode 100644 new mode 100755 diff --git a/indra/newview/llhudrender.cpp b/indra/newview/llhudrender.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llhudrender.h b/indra/newview/llhudrender.h old mode 100644 new mode 100755 diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llhudtext.h b/indra/newview/llhudtext.h old mode 100644 new mode 100755 diff --git a/indra/newview/llhudview.cpp b/indra/newview/llhudview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llhudview.h b/indra/newview/llhudview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h old mode 100644 new mode 100755 diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llimfloatercontainer.h b/indra/newview/llimfloatercontainer.h old mode 100644 new mode 100755 diff --git a/indra/newview/llimhandler.cpp b/indra/newview/llimhandler.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llimpanel.h b/indra/newview/llimpanel.h old mode 100644 new mode 100755 diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llinspect.cpp b/indra/newview/llinspect.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llinspect.h b/indra/newview/llinspect.h old mode 100644 new mode 100755 diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llinspectavatar.h b/indra/newview/llinspectavatar.h old mode 100644 new mode 100755 diff --git a/indra/newview/llinspectgroup.cpp b/indra/newview/llinspectgroup.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llinspectgroup.h b/indra/newview/llinspectgroup.h old mode 100644 new mode 100755 diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llinspectobject.h b/indra/newview/llinspectobject.h old mode 100644 new mode 100755 diff --git a/indra/newview/llinspectremoteobject.cpp b/indra/newview/llinspectremoteobject.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llinspectremoteobject.h b/indra/newview/llinspectremoteobject.h old mode 100644 new mode 100755 diff --git a/indra/newview/llinspecttoast.cpp b/indra/newview/llinspecttoast.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llinspecttoast.h b/indra/newview/llinspecttoast.h old mode 100644 new mode 100755 diff --git a/indra/newview/llinventoryactions.h b/indra/newview/llinventoryactions.h old mode 100644 new mode 100755 diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h old mode 100644 new mode 100755 diff --git a/indra/newview/llinventoryclipboard.cpp b/indra/newview/llinventoryclipboard.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llinventoryclipboard.h b/indra/newview/llinventoryclipboard.h old mode 100644 new mode 100755 diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h old mode 100644 new mode 100755 diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h old mode 100644 new mode 100755 diff --git a/indra/newview/llinventoryicon.cpp b/indra/newview/llinventoryicon.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llinventoryicon.h b/indra/newview/llinventoryicon.h old mode 100644 new mode 100755 diff --git a/indra/newview/llinventoryitemslist.cpp b/indra/newview/llinventoryitemslist.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llinventoryitemslist.h b/indra/newview/llinventoryitemslist.h old mode 100644 new mode 100755 diff --git a/indra/newview/llinventorylistitem.cpp b/indra/newview/llinventorylistitem.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llinventorylistitem.h b/indra/newview/llinventorylistitem.h old mode 100644 new mode 100755 diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h old mode 100644 new mode 100755 diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llinventorymodelbackgroundfetch.h b/indra/newview/llinventorymodelbackgroundfetch.h old mode 100644 new mode 100755 diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h old mode 100644 new mode 100755 diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h old mode 100644 new mode 100755 diff --git a/indra/newview/lljoystickbutton.cpp b/indra/newview/lljoystickbutton.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lljoystickbutton.h b/indra/newview/lljoystickbutton.h old mode 100644 new mode 100755 diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lllandmarkactions.h b/indra/newview/lllandmarkactions.h old mode 100644 new mode 100755 diff --git a/indra/newview/lllandmarklist.cpp b/indra/newview/lllandmarklist.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lllandmarklist.h b/indra/newview/lllandmarklist.h old mode 100644 new mode 100755 diff --git a/indra/newview/lllightconstants.h b/indra/newview/lllightconstants.h old mode 100644 new mode 100755 diff --git a/indra/newview/lllistbrowser.cpp b/indra/newview/lllistbrowser.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lllistbrowser.h b/indra/newview/lllistbrowser.h old mode 100644 new mode 100755 diff --git a/indra/newview/lllistcontextmenu.cpp b/indra/newview/lllistcontextmenu.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lllistcontextmenu.h b/indra/newview/lllistcontextmenu.h old mode 100644 new mode 100755 diff --git a/indra/newview/lllistview.cpp b/indra/newview/lllistview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lllistview.h b/indra/newview/lllistview.h old mode 100644 new mode 100755 diff --git a/indra/newview/lllocaltextureobject.cpp b/indra/newview/lllocaltextureobject.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lllocaltextureobject.h b/indra/newview/lllocaltextureobject.h old mode 100644 new mode 100755 diff --git a/indra/newview/lllocationhistory.cpp b/indra/newview/lllocationhistory.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lllocationhistory.h b/indra/newview/lllocationhistory.h old mode 100644 new mode 100755 diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h old mode 100644 new mode 100755 diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lllogchat.h b/indra/newview/lllogchat.h old mode 100644 new mode 100755 diff --git a/indra/newview/llloginhandler.cpp b/indra/newview/llloginhandler.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llloginhandler.h b/indra/newview/llloginhandler.h old mode 100644 new mode 100755 diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lllogininstance.h b/indra/newview/lllogininstance.h old mode 100644 new mode 100755 diff --git a/indra/newview/lllookshistorypanel.h b/indra/newview/lllookshistorypanel.h old mode 100644 new mode 100755 diff --git a/indra/newview/llmachineid.cpp b/indra/newview/llmachineid.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llmachineid.h b/indra/newview/llmachineid.h old mode 100644 new mode 100755 diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llmanip.h b/indra/newview/llmanip.h old mode 100644 new mode 100755 diff --git a/indra/newview/llmaniprotate.cpp b/indra/newview/llmaniprotate.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llmaniprotate.h b/indra/newview/llmaniprotate.h old mode 100644 new mode 100755 diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llmanipscale.h b/indra/newview/llmanipscale.h old mode 100644 new mode 100755 diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llmaniptranslate.h b/indra/newview/llmaniptranslate.h old mode 100644 new mode 100755 diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h old mode 100644 new mode 100755 diff --git a/indra/newview/llmediadataclient.cpp b/indra/newview/llmediadataclient.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llmediadataclient.h b/indra/newview/llmediadataclient.h old mode 100644 new mode 100755 diff --git a/indra/newview/llmemoryview.cpp b/indra/newview/llmemoryview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llmemoryview.h b/indra/newview/llmemoryview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llmenucommands.cpp b/indra/newview/llmenucommands.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llmenucommands.h b/indra/newview/llmenucommands.h old mode 100644 new mode 100755 diff --git a/indra/newview/llmeshreduction.cpp b/indra/newview/llmeshreduction.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llmeshreduction.h b/indra/newview/llmeshreduction.h old mode 100644 new mode 100755 diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h old mode 100644 new mode 100755 diff --git a/indra/newview/llmetricperformancetester.cpp b/indra/newview/llmetricperformancetester.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llmetricperformancetester.h b/indra/newview/llmetricperformancetester.h old mode 100644 new mode 100755 diff --git a/indra/newview/llmimetypes.cpp b/indra/newview/llmimetypes.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llmimetypes.h b/indra/newview/llmimetypes.h old mode 100644 new mode 100755 diff --git a/indra/newview/llmorphview.cpp b/indra/newview/llmorphview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llmorphview.h b/indra/newview/llmorphview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llmoveview.h b/indra/newview/llmoveview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llmutelist.h b/indra/newview/llmutelist.h old mode 100644 new mode 100755 diff --git a/indra/newview/llnamebox.cpp b/indra/newview/llnamebox.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llnamebox.h b/indra/newview/llnamebox.h old mode 100644 new mode 100755 diff --git a/indra/newview/llnameeditor.cpp b/indra/newview/llnameeditor.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llnameeditor.h b/indra/newview/llnameeditor.h old mode 100644 new mode 100755 diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llnamelistctrl.h b/indra/newview/llnamelistctrl.h old mode 100644 new mode 100755 diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h old mode 100644 new mode 100755 diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llnearbychat.h b/indra/newview/llnearbychat.h old mode 100644 new mode 100755 diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h old mode 100644 new mode 100755 diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llnearbychathandler.h b/indra/newview/llnearbychathandler.h old mode 100644 new mode 100755 diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llnetmap.h b/indra/newview/llnetmap.h old mode 100644 new mode 100755 diff --git a/indra/newview/llnotificationalerthandler.cpp b/indra/newview/llnotificationalerthandler.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llnotificationgrouphandler.cpp b/indra/newview/llnotificationgrouphandler.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h old mode 100644 new mode 100755 diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llnotificationmanager.cpp b/indra/newview/llnotificationmanager.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llnotificationmanager.h b/indra/newview/llnotificationmanager.h old mode 100644 new mode 100755 diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llnotificationstorage.cpp b/indra/newview/llnotificationstorage.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llnotificationstorage.h b/indra/newview/llnotificationstorage.h old mode 100644 new mode 100755 diff --git a/indra/newview/llnotificationtiphandler.cpp b/indra/newview/llnotificationtiphandler.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lloutfitobserver.cpp b/indra/newview/lloutfitobserver.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lloutfitobserver.h b/indra/newview/lloutfitobserver.h old mode 100644 new mode 100755 diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h old mode 100644 new mode 100755 diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lloutputmonitorctrl.h b/indra/newview/lloutputmonitorctrl.h old mode 100644 new mode 100755 diff --git a/indra/newview/lloverlaybar.cpp b/indra/newview/lloverlaybar.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lloverlaybar.h b/indra/newview/lloverlaybar.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelappearancetab.h b/indra/newview/llpanelappearancetab.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelavatar.h b/indra/newview/llpanelavatar.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelavatartag.cpp b/indra/newview/llpanelavatartag.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelavatartag.h b/indra/newview/llpanelavatartag.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelblockedlist.cpp b/indra/newview/llpanelblockedlist.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelblockedlist.h b/indra/newview/llpanelblockedlist.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelclassified.h b/indra/newview/llpanelclassified.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelcontents.h b/indra/newview/llpanelcontents.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpaneleditwearable.h b/indra/newview/llpaneleditwearable.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelface.h b/indra/newview/llpanelface.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelgenerictip.cpp b/indra/newview/llpanelgenerictip.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelgenerictip.h b/indra/newview/llpanelgenerictip.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelgroup.h b/indra/newview/llpanelgroup.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelgroupgeneral.h b/indra/newview/llpanelgroupgeneral.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelgroupinvite.h b/indra/newview/llpanelgroupinvite.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelgrouplandmoney.h b/indra/newview/llpanelgrouplandmoney.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelgroupnotices.h b/indra/newview/llpanelgroupnotices.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelgrouproles.h b/indra/newview/llpanelgrouproles.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelhome.cpp b/indra/newview/llpanelhome.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelhome.h b/indra/newview/llpanelhome.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelland.cpp b/indra/newview/llpanelland.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelland.h b/indra/newview/llpanelland.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanellandaudio.cpp b/indra/newview/llpanellandaudio.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanellandaudio.h b/indra/newview/llpanellandaudio.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanellandmarkinfo.h b/indra/newview/llpanellandmarkinfo.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanellandmedia.cpp b/indra/newview/llpanellandmedia.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanellandmedia.h b/indra/newview/llpanellandmedia.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelloginlistener.cpp b/indra/newview/llpanelloginlistener.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelloginlistener.h b/indra/newview/llpanelloginlistener.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelme.h b/indra/newview/llpanelme.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelmediasettingsgeneral.h b/indra/newview/llpanelmediasettingsgeneral.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelmediasettingspermissions.cpp b/indra/newview/llpanelmediasettingspermissions.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelmediasettingspermissions.h b/indra/newview/llpanelmediasettingspermissions.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelmediasettingssecurity.cpp b/indra/newview/llpanelmediasettingssecurity.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelmediasettingssecurity.h b/indra/newview/llpanelmediasettingssecurity.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelnearbymedia.h b/indra/newview/llpanelnearbymedia.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelobject.h b/indra/newview/llpanelobject.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelobjectinventory.h b/indra/newview/llpanelobjectinventory.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelonlinestatus.cpp b/indra/newview/llpanelonlinestatus.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelonlinestatus.h b/indra/newview/llpanelonlinestatus.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelpeoplemenus.h b/indra/newview/llpanelpeoplemenus.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelpermissions.h b/indra/newview/llpanelpermissions.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelpick.h b/indra/newview/llpanelpick.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelplaceinfo.h b/indra/newview/llpanelplaceinfo.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelplacestab.cpp b/indra/newview/llpanelplacestab.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelplacestab.h b/indra/newview/llpanelplacestab.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelprimmediacontrols.h b/indra/newview/llpanelprimmediacontrols.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelprofile.h b/indra/newview/llpanelprofile.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelprofileview.h b/indra/newview/llpanelprofileview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelteleporthistory.h b/indra/newview/llpanelteleporthistory.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpaneltiptoast.cpp b/indra/newview/llpaneltiptoast.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpaneltiptoast.h b/indra/newview/llpaneltiptoast.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpaneltopinfobar.h b/indra/newview/llpaneltopinfobar.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelvoiceeffect.cpp b/indra/newview/llpanelvoiceeffect.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelvoiceeffect.h b/indra/newview/llpanelvoiceeffect.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelvolume.h b/indra/newview/llpanelvolume.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelvolumepulldown.cpp b/indra/newview/llpanelvolumepulldown.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelvolumepulldown.h b/indra/newview/llpanelvolumepulldown.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpanelwearing.h b/indra/newview/llpanelwearing.h old mode 100644 new mode 100755 diff --git a/indra/newview/llparcelselection.cpp b/indra/newview/llparcelselection.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llparcelselection.h b/indra/newview/llparcelselection.h old mode 100644 new mode 100755 diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpatchvertexarray.cpp b/indra/newview/llpatchvertexarray.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpatchvertexarray.h b/indra/newview/llpatchvertexarray.h old mode 100644 new mode 100755 diff --git a/indra/newview/llplacesinventorybridge.cpp b/indra/newview/llplacesinventorybridge.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llplacesinventorybridge.h b/indra/newview/llplacesinventorybridge.h old mode 100644 new mode 100755 diff --git a/indra/newview/llplacesinventorypanel.cpp b/indra/newview/llplacesinventorypanel.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llplacesinventorypanel.h b/indra/newview/llplacesinventorypanel.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpolymesh.cpp b/indra/newview/llpolymesh.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpolymesh.h b/indra/newview/llpolymesh.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpolymorph.cpp b/indra/newview/llpolymorph.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpolymorph.h b/indra/newview/llpolymorph.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpopupview.cpp b/indra/newview/llpopupview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpopupview.h b/indra/newview/llpopupview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpreview.h b/indra/newview/llpreview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpreviewanim.cpp b/indra/newview/llpreviewanim.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpreviewanim.h b/indra/newview/llpreviewanim.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpreviewgesture.h b/indra/newview/llpreviewgesture.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpreviewnotecard.h b/indra/newview/llpreviewnotecard.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpreviewsound.cpp b/indra/newview/llpreviewsound.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpreviewsound.h b/indra/newview/llpreviewsound.h old mode 100644 new mode 100755 diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llpreviewtexture.h b/indra/newview/llpreviewtexture.h old mode 100644 new mode 100755 diff --git a/indra/newview/llproductinforequest.cpp b/indra/newview/llproductinforequest.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llproductinforequest.h b/indra/newview/llproductinforequest.h old mode 100644 new mode 100755 diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llprogressview.h b/indra/newview/llprogressview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llrecentpeople.cpp b/indra/newview/llrecentpeople.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llrecentpeople.h b/indra/newview/llrecentpeople.h old mode 100644 new mode 100755 diff --git a/indra/newview/llregionposition.cpp b/indra/newview/llregionposition.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llregionposition.h b/indra/newview/llregionposition.h old mode 100644 new mode 100755 diff --git a/indra/newview/llremoteparcelrequest.cpp b/indra/newview/llremoteparcelrequest.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llremoteparcelrequest.h b/indra/newview/llremoteparcelrequest.h old mode 100644 new mode 100755 diff --git a/indra/newview/llresourcedata.h b/indra/newview/llresourcedata.h old mode 100644 new mode 100755 diff --git a/indra/newview/llrootview.h b/indra/newview/llrootview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsavedsettingsglue.cpp b/indra/newview/llsavedsettingsglue.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsavedsettingsglue.h b/indra/newview/llsavedsettingsglue.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsaveoutfitcombobtn.cpp b/indra/newview/llsaveoutfitcombobtn.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsaveoutfitcombobtn.h b/indra/newview/llsaveoutfitcombobtn.h old mode 100644 new mode 100755 diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h old mode 100644 new mode 100755 diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llscriptfloater.h b/indra/newview/llscriptfloater.h old mode 100644 new mode 100755 diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llscrollingpanelparam.h b/indra/newview/llscrollingpanelparam.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsearchcombobox.cpp b/indra/newview/llsearchcombobox.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsearchcombobox.h b/indra/newview/llsearchcombobox.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsearchhistory.cpp b/indra/newview/llsearchhistory.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsearchhistory.h b/indra/newview/llsearchhistory.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsecapi.cpp b/indra/newview/llsecapi.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsecapi.h b/indra/newview/llsecapi.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsechandler_basic.cpp b/indra/newview/llsechandler_basic.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsechandler_basic.h b/indra/newview/llsechandler_basic.h old mode 100644 new mode 100755 diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsidepanelinventorysubpanel.cpp b/indra/newview/llsidepanelinventorysubpanel.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsidepanelinventorysubpanel.h b/indra/newview/llsidepanelinventorysubpanel.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsidepaneltaskinfo.h b/indra/newview/llsidepaneltaskinfo.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsidetraypanelcontainer.cpp b/indra/newview/llsidetraypanelcontainer.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsidetraypanelcontainer.h b/indra/newview/llsidetraypanelcontainer.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsky.cpp b/indra/newview/llsky.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsky.h b/indra/newview/llsky.h old mode 100644 new mode 100755 diff --git a/indra/newview/llslurl.cpp b/indra/newview/llslurl.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llslurl.h b/indra/newview/llslurl.h old mode 100644 new mode 100755 diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h old mode 100644 new mode 100755 diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llspeakbutton.h b/indra/newview/llspeakbutton.h old mode 100644 new mode 100755 diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h old mode 100644 new mode 100755 diff --git a/indra/newview/llspeakingindicatormanager.cpp b/indra/newview/llspeakingindicatormanager.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llspeakingindicatormanager.h b/indra/newview/llspeakingindicatormanager.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsplitbutton.cpp b/indra/newview/llsplitbutton.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsplitbutton.h b/indra/newview/llsplitbutton.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsprite.cpp b/indra/newview/llsprite.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsprite.h b/indra/newview/llsprite.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsrv.cpp b/indra/newview/llsrv.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsrv.h b/indra/newview/llsrv.h old mode 100644 new mode 100755 diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h old mode 100644 new mode 100755 diff --git a/indra/newview/llstartuplistener.cpp b/indra/newview/llstartuplistener.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llstartuplistener.h b/indra/newview/llstartuplistener.h old mode 100644 new mode 100755 diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h old mode 100644 new mode 100755 diff --git a/indra/newview/llstylemap.cpp b/indra/newview/llstylemap.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llstylemap.h b/indra/newview/llstylemap.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsurface.h b/indra/newview/llsurface.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsurfacepatch.cpp b/indra/newview/llsurfacepatch.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsurfacepatch.h b/indra/newview/llsurfacepatch.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsyswellitem.cpp b/indra/newview/llsyswellitem.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsyswellitem.h b/indra/newview/llsyswellitem.h old mode 100644 new mode 100755 diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llsyswellwindow.h b/indra/newview/llsyswellwindow.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltable.h b/indra/newview/lltable.h old mode 100644 new mode 100755 diff --git a/indra/newview/llteleporthistory.cpp b/indra/newview/llteleporthistory.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llteleporthistory.h b/indra/newview/llteleporthistory.h old mode 100644 new mode 100755 diff --git a/indra/newview/llteleporthistorystorage.cpp b/indra/newview/llteleporthistorystorage.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llteleporthistorystorage.h b/indra/newview/llteleporthistorystorage.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltexglobalcolor.cpp b/indra/newview/lltexglobalcolor.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltexglobalcolor.h b/indra/newview/lltexglobalcolor.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltexlayer.h b/indra/newview/lltexlayer.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltexlayerparams.cpp b/indra/newview/lltexlayerparams.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltexlayerparams.h b/indra/newview/lltexlayerparams.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltextureatlas.cpp b/indra/newview/lltextureatlas.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltextureatlas.h b/indra/newview/lltextureatlas.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltextureatlasmanager.cpp b/indra/newview/lltextureatlasmanager.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltextureatlasmanager.h b/indra/newview/lltextureatlasmanager.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltexturectrl.h b/indra/newview/lltexturectrl.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltextureinfo.cpp b/indra/newview/lltextureinfo.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltextureinfo.h b/indra/newview/lltextureinfo.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltextureinfodetails.cpp b/indra/newview/lltextureinfodetails.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltextureinfodetails.h b/indra/newview/lltextureinfodetails.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltexturestats.cpp b/indra/newview/lltexturestats.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltexturestats.h b/indra/newview/lltexturestats.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltexturestatsuploader.cpp b/indra/newview/lltexturestatsuploader.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltexturestatsuploader.h b/indra/newview/lltexturestatsuploader.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltextureview.h b/indra/newview/lltextureview.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoastalertpanel.h b/indra/newview/lltoastalertpanel.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoastgroupnotifypanel.h b/indra/newview/lltoastgroupnotifypanel.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoastimpanel.h b/indra/newview/lltoastimpanel.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoastnotifypanel.h b/indra/newview/lltoastnotifypanel.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoastpanel.cpp b/indra/newview/lltoastpanel.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoastpanel.h b/indra/newview/lltoastpanel.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltool.cpp b/indra/newview/lltool.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltool.h b/indra/newview/lltool.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolbar.cpp b/indra/newview/lltoolbar.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolbar.h b/indra/newview/lltoolbar.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolbrush.cpp b/indra/newview/lltoolbrush.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolbrush.h b/indra/newview/lltoolbrush.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolcomp.cpp b/indra/newview/lltoolcomp.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolcomp.h b/indra/newview/lltoolcomp.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltooldraganddrop.h b/indra/newview/lltooldraganddrop.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolface.cpp b/indra/newview/lltoolface.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolface.h b/indra/newview/lltoolface.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolfocus.cpp b/indra/newview/lltoolfocus.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolfocus.h b/indra/newview/lltoolfocus.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolgrab.cpp b/indra/newview/lltoolgrab.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolgrab.h b/indra/newview/lltoolgrab.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolgun.cpp b/indra/newview/lltoolgun.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolgun.h b/indra/newview/lltoolgun.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolindividual.cpp b/indra/newview/lltoolindividual.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolindividual.h b/indra/newview/lltoolindividual.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolmgr.h b/indra/newview/lltoolmgr.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolmorph.cpp b/indra/newview/lltoolmorph.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolmorph.h b/indra/newview/lltoolmorph.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolobjpicker.cpp b/indra/newview/lltoolobjpicker.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolobjpicker.h b/indra/newview/lltoolobjpicker.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolpie.h b/indra/newview/lltoolpie.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolpipette.cpp b/indra/newview/lltoolpipette.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolpipette.h b/indra/newview/lltoolpipette.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolplacer.cpp b/indra/newview/lltoolplacer.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolplacer.h b/indra/newview/lltoolplacer.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolselect.cpp b/indra/newview/lltoolselect.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolselect.h b/indra/newview/lltoolselect.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolselectland.cpp b/indra/newview/lltoolselectland.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolselectland.h b/indra/newview/lltoolselectland.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolselectrect.cpp b/indra/newview/lltoolselectrect.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolselectrect.h b/indra/newview/lltoolselectrect.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolview.cpp b/indra/newview/lltoolview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltoolview.h b/indra/newview/lltoolview.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltracker.h b/indra/newview/lltracker.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltransientdockablefloater.cpp b/indra/newview/lltransientdockablefloater.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltransientdockablefloater.h b/indra/newview/lltransientdockablefloater.h old mode 100644 new mode 100755 diff --git a/indra/newview/lltransientfloatermgr.cpp b/indra/newview/lltransientfloatermgr.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lltransientfloatermgr.h b/indra/newview/lltransientfloatermgr.h old mode 100644 new mode 100755 diff --git a/indra/newview/lluiconstants.h b/indra/newview/lluiconstants.h old mode 100644 new mode 100755 diff --git a/indra/newview/lluilistener.cpp b/indra/newview/lluilistener.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lluilistener.h b/indra/newview/lluilistener.h old mode 100644 new mode 100755 diff --git a/indra/newview/lluploaddialog.cpp b/indra/newview/lluploaddialog.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/lluploaddialog.h b/indra/newview/lluploaddialog.h old mode 100644 new mode 100755 diff --git a/indra/newview/llurl.cpp b/indra/newview/llurl.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llurl.h b/indra/newview/llurl.h old mode 100644 new mode 100755 diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llurldispatcher.h b/indra/newview/llurldispatcher.h old mode 100644 new mode 100755 diff --git a/indra/newview/llurldispatcherlistener.cpp b/indra/newview/llurldispatcherlistener.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llurldispatcherlistener.h b/indra/newview/llurldispatcherlistener.h old mode 100644 new mode 100755 diff --git a/indra/newview/llurlhistory.cpp b/indra/newview/llurlhistory.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llurlhistory.h b/indra/newview/llurlhistory.h old mode 100644 new mode 100755 diff --git a/indra/newview/llurllineeditorctrl.cpp b/indra/newview/llurllineeditorctrl.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llurllineeditorctrl.h b/indra/newview/llurllineeditorctrl.h old mode 100644 new mode 100755 diff --git a/indra/newview/llurlwhitelist.cpp b/indra/newview/llurlwhitelist.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llurlwhitelist.h b/indra/newview/llurlwhitelist.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvectorperfoptions.cpp b/indra/newview/llvectorperfoptions.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvectorperfoptions.h b/indra/newview/llvectorperfoptions.h old mode 100644 new mode 100755 diff --git a/indra/newview/llversioninfo.cpp b/indra/newview/llversioninfo.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llversioninfo.h b/indra/newview/llversioninfo.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewchildren.cpp b/indra/newview/llviewchildren.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewchildren.h b/indra/newview/llviewchildren.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerassetstorage.cpp b/indra/newview/llviewerassetstorage.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerassetstorage.h b/indra/newview/llviewerassetstorage.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerassettype.cpp b/indra/newview/llviewerassettype.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerassettype.h b/indra/newview/llviewerassettype.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerattachmenu.cpp b/indra/newview/llviewerattachmenu.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerattachmenu.h b/indra/newview/llviewerattachmenu.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvieweraudio.h b/indra/newview/llvieweraudio.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewercamera.h b/indra/newview/llviewercamera.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerchat.cpp b/indra/newview/llviewerchat.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerchat.h b/indra/newview/llviewerchat.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewercontrol.h b/indra/newview/llviewercontrol.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewercontrollistener.cpp b/indra/newview/llviewercontrollistener.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewercontrollistener.h b/indra/newview/llviewercontrollistener.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerdisplay.h b/indra/newview/llviewerdisplay.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerfloaterreg.h b/indra/newview/llviewerfloaterreg.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerfoldertype.h b/indra/newview/llviewerfoldertype.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewergenericmessage.cpp b/indra/newview/llviewergenericmessage.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewergenericmessage.h b/indra/newview/llviewergenericmessage.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewergesture.cpp b/indra/newview/llviewergesture.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewergesture.h b/indra/newview/llviewergesture.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerhelp.cpp b/indra/newview/llviewerhelp.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerhelp.h b/indra/newview/llviewerhelp.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerhelputil.cpp b/indra/newview/llviewerhelputil.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerhelputil.h b/indra/newview/llviewerhelputil.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerhome.cpp b/indra/newview/llviewerhome.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerhome.h b/indra/newview/llviewerhome.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerjoint.cpp b/indra/newview/llviewerjoint.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerjoint.h b/indra/newview/llviewerjoint.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerjointattachment.cpp b/indra/newview/llviewerjointattachment.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerjointattachment.h b/indra/newview/llviewerjointattachment.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerjointmesh.h b/indra/newview/llviewerjointmesh.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerjointmesh_sse.cpp b/indra/newview/llviewerjointmesh_sse.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerjointmesh_sse2.cpp b/indra/newview/llviewerjointmesh_sse2.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerjointmesh_vec.cpp b/indra/newview/llviewerjointmesh_vec.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerjoystick.cpp b/indra/newview/llviewerjoystick.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerjoystick.h b/indra/newview/llviewerjoystick.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerkeyboard.h b/indra/newview/llviewerkeyboard.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerlayer.cpp b/indra/newview/llviewerlayer.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerlayer.h b/indra/newview/llviewerlayer.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewermedia_streamingaudio.cpp b/indra/newview/llviewermedia_streamingaudio.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewermedia_streamingaudio.h b/indra/newview/llviewermedia_streamingaudio.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewermediafocus.h b/indra/newview/llviewermediafocus.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewermediaobserver.h b/indra/newview/llviewermediaobserver.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewermessage.h b/indra/newview/llviewermessage.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewernetwork.h b/indra/newview/llviewernetwork.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerparcelmedia.h b/indra/newview/llviewerparcelmedia.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerparcelmediaautoplay.cpp b/indra/newview/llviewerparcelmediaautoplay.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerparcelmediaautoplay.h b/indra/newview/llviewerparcelmediaautoplay.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerparceloverlay.cpp b/indra/newview/llviewerparceloverlay.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerparceloverlay.h b/indra/newview/llviewerparceloverlay.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerpartsim.cpp b/indra/newview/llviewerpartsim.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerpartsim.h b/indra/newview/llviewerpartsim.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerpartsource.cpp b/indra/newview/llviewerpartsource.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerpartsource.h b/indra/newview/llviewerpartsource.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerprecompiledheaders.cpp b/indra/newview/llviewerprecompiledheaders.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerprecompiledheaders.h b/indra/newview/llviewerprecompiledheaders.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewershadermgr.h b/indra/newview/llviewershadermgr.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerstats.h b/indra/newview/llviewerstats.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewertexteditor.h b/indra/newview/llviewertexteditor.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewertextureanim.cpp b/indra/newview/llviewertextureanim.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewertextureanim.h b/indra/newview/llviewertextureanim.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerthrottle.cpp b/indra/newview/llviewerthrottle.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerthrottle.h b/indra/newview/llviewerthrottle.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewervisualparam.cpp b/indra/newview/llviewervisualparam.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewervisualparam.h b/indra/newview/llviewervisualparam.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerwindowlistener.cpp b/indra/newview/llviewerwindowlistener.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llviewerwindowlistener.h b/indra/newview/llviewerwindowlistener.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvlcomposition.cpp b/indra/newview/llvlcomposition.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvlcomposition.h b/indra/newview/llvlcomposition.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvlmanager.cpp b/indra/newview/llvlmanager.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvlmanager.h b/indra/newview/llvlmanager.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvoavatardefines.cpp b/indra/newview/llvoavatardefines.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvoavatardefines.h b/indra/newview/llvoavatardefines.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvocache.h b/indra/newview/llvocache.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvoclouds.cpp b/indra/newview/llvoclouds.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvoclouds.h b/indra/newview/llvoclouds.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvograss.h b/indra/newview/llvograss.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvoground.cpp b/indra/newview/llvoground.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvoground.h b/indra/newview/llvoground.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvoicevisualizer.cpp b/indra/newview/llvoicevisualizer.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvoicevisualizer.h b/indra/newview/llvoicevisualizer.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvoinventorylistener.cpp b/indra/newview/llvoinventorylistener.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvoinventorylistener.h b/indra/newview/llvoinventorylistener.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvopartgroup.h b/indra/newview/llvopartgroup.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvosky.h b/indra/newview/llvosky.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvosurfacepatch.h b/indra/newview/llvosurfacepatch.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvotextbubble.cpp b/indra/newview/llvotextbubble.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvotextbubble.h b/indra/newview/llvotextbubble.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvotree.h b/indra/newview/llvotree.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvotreenew.h b/indra/newview/llvotreenew.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvowater.h b/indra/newview/llvowater.h old mode 100644 new mode 100755 diff --git a/indra/newview/llvowlsky.cpp b/indra/newview/llvowlsky.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llvowlsky.h b/indra/newview/llvowlsky.h old mode 100644 new mode 100755 diff --git a/indra/newview/llwatchdog.cpp b/indra/newview/llwatchdog.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llwatchdog.h b/indra/newview/llwatchdog.h old mode 100644 new mode 100755 diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llwaterparammanager.h b/indra/newview/llwaterparammanager.h old mode 100644 new mode 100755 diff --git a/indra/newview/llwaterparamset.cpp b/indra/newview/llwaterparamset.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llwaterparamset.h b/indra/newview/llwaterparamset.h old mode 100644 new mode 100755 diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llwearable.h b/indra/newview/llwearable.h old mode 100644 new mode 100755 diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h old mode 100644 new mode 100755 diff --git a/indra/newview/llwearablelist.cpp b/indra/newview/llwearablelist.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llwearablelist.h b/indra/newview/llwearablelist.h old mode 100644 new mode 100755 diff --git a/indra/newview/llwearabletype.cpp b/indra/newview/llwearabletype.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llwearabletype.h b/indra/newview/llwearabletype.h old mode 100644 new mode 100755 diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h old mode 100644 new mode 100755 diff --git a/indra/newview/llwebsharing.cpp b/indra/newview/llwebsharing.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llwebsharing.h b/indra/newview/llwebsharing.h old mode 100644 new mode 100755 diff --git a/indra/newview/llwind.cpp b/indra/newview/llwind.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llwind.h b/indra/newview/llwind.h old mode 100644 new mode 100755 diff --git a/indra/newview/llwindebug.cpp b/indra/newview/llwindebug.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llwindebug.h b/indra/newview/llwindebug.h old mode 100644 new mode 100755 diff --git a/indra/newview/llwlanimator.cpp b/indra/newview/llwlanimator.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llwlanimator.h b/indra/newview/llwlanimator.h old mode 100644 new mode 100755 diff --git a/indra/newview/llwldaycycle.cpp b/indra/newview/llwldaycycle.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llwldaycycle.h b/indra/newview/llwldaycycle.h old mode 100644 new mode 100755 diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llwlparammanager.h b/indra/newview/llwlparammanager.h old mode 100644 new mode 100755 diff --git a/indra/newview/llwlparamset.cpp b/indra/newview/llwlparamset.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llwlparamset.h b/indra/newview/llwlparamset.h old mode 100644 new mode 100755 diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llworld.h b/indra/newview/llworld.h old mode 100644 new mode 100755 diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llworldmap.h b/indra/newview/llworldmap.h old mode 100644 new mode 100755 diff --git a/indra/newview/llworldmapmessage.cpp b/indra/newview/llworldmapmessage.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llworldmapmessage.h b/indra/newview/llworldmapmessage.h old mode 100644 new mode 100755 diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llworldmapview.h b/indra/newview/llworldmapview.h old mode 100644 new mode 100755 diff --git a/indra/newview/llworldmipmap.cpp b/indra/newview/llworldmipmap.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llworldmipmap.h b/indra/newview/llworldmipmap.h old mode 100644 new mode 100755 diff --git a/indra/newview/llworldview.cpp b/indra/newview/llworldview.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llxmlrpclistener.cpp b/indra/newview/llxmlrpclistener.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llxmlrpclistener.h b/indra/newview/llxmlrpclistener.h old mode 100644 new mode 100755 diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/llxmlrpctransaction.h b/indra/newview/llxmlrpctransaction.h old mode 100644 new mode 100755 diff --git a/indra/newview/macmain.h b/indra/newview/macmain.h old mode 100644 new mode 100755 diff --git a/indra/newview/macutil_Prefix.h b/indra/newview/macutil_Prefix.h old mode 100644 new mode 100755 diff --git a/indra/newview/macview.r b/indra/newview/macview.r old mode 100644 new mode 100755 diff --git a/indra/newview/macview_Prefix.h b/indra/newview/macview_Prefix.h old mode 100644 new mode 100755 diff --git a/indra/newview/nl.lproj/language.txt b/indra/newview/nl.lproj/language.txt old mode 100644 new mode 100755 diff --git a/indra/newview/noise.cpp b/indra/newview/noise.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/noise.h b/indra/newview/noise.h old mode 100644 new mode 100755 diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h old mode 100644 new mode 100755 diff --git a/indra/newview/pl.lproj/language.txt b/indra/newview/pl.lproj/language.txt old mode 100644 new mode 100755 diff --git a/indra/newview/pt.lproj/language.txt b/indra/newview/pt.lproj/language.txt old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/arrow.BMP b/indra/newview/res-sdl/arrow.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/arrowcop.BMP b/indra/newview/res-sdl/arrowcop.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/arrowcopmulti.BMP b/indra/newview/res-sdl/arrowcopmulti.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/arrowdrag.BMP b/indra/newview/res-sdl/arrowdrag.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/circleandline.BMP b/indra/newview/res-sdl/circleandline.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/cross.BMP b/indra/newview/res-sdl/cross.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/hand.BMP b/indra/newview/res-sdl/hand.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/ibeam.BMP b/indra/newview/res-sdl/ibeam.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/ll_icon.BMP b/indra/newview/res-sdl/ll_icon.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/llarrow.BMP b/indra/newview/res-sdl/llarrow.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/llarrowdrag.BMP b/indra/newview/res-sdl/llarrowdrag.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/llarrowdragmulti.BMP b/indra/newview/res-sdl/llarrowdragmulti.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/llarrowlocked.BMP b/indra/newview/res-sdl/llarrowlocked.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/llgrablocked.BMP b/indra/newview/res-sdl/llgrablocked.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/llno.BMP b/indra/newview/res-sdl/llno.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/llnolocked.BMP b/indra/newview/res-sdl/llnolocked.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/lltoolcamera.BMP b/indra/newview/res-sdl/lltoolcamera.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/lltoolcreate.BMP b/indra/newview/res-sdl/lltoolcreate.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/lltoolfocus.BMP b/indra/newview/res-sdl/lltoolfocus.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/lltoolgrab.BMP b/indra/newview/res-sdl/lltoolgrab.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/lltoolland.BMP b/indra/newview/res-sdl/lltoolland.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/lltoolpan.BMP b/indra/newview/res-sdl/lltoolpan.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/lltoolpipette.BMP b/indra/newview/res-sdl/lltoolpipette.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/lltoolrotate.BMP b/indra/newview/res-sdl/lltoolrotate.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/lltoolscale.BMP b/indra/newview/res-sdl/lltoolscale.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/lltooltranslate.BMP b/indra/newview/res-sdl/lltooltranslate.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/lltoolzoomin.BMP b/indra/newview/res-sdl/lltoolzoomin.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/lltoolzoomout.BMP b/indra/newview/res-sdl/lltoolzoomout.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/sizenesw.BMP b/indra/newview/res-sdl/sizenesw.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/sizens.BMP b/indra/newview/res-sdl/sizens.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/sizenwse.BMP b/indra/newview/res-sdl/sizenwse.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/sizewe.BMP b/indra/newview/res-sdl/sizewe.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/toolbuy.BMP b/indra/newview/res-sdl/toolbuy.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/toolmediaopen.BMP b/indra/newview/res-sdl/toolmediaopen.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/toolopen.BMP b/indra/newview/res-sdl/toolopen.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/toolpause.BMP b/indra/newview/res-sdl/toolpause.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/toolpickobject.BMP b/indra/newview/res-sdl/toolpickobject.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/toolpickobject2.BMP b/indra/newview/res-sdl/toolpickobject2.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/toolpickobject3.BMP b/indra/newview/res-sdl/toolpickobject3.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/toolplay.BMP b/indra/newview/res-sdl/toolplay.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/toolsit.BMP b/indra/newview/res-sdl/toolsit.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/wait.BMP b/indra/newview/res-sdl/wait.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res-sdl/working.BMP b/indra/newview/res-sdl/working.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res/arrow.cur b/indra/newview/res/arrow.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/arrowcop.cur b/indra/newview/res/arrowcop.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/arrowcopmulti.cur b/indra/newview/res/arrowcopmulti.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/arrowdrag.cur b/indra/newview/res/arrowdrag.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/bitmap2.bmp b/indra/newview/res/bitmap2.bmp old mode 100644 new mode 100755 diff --git a/indra/newview/res/circleandline.cur b/indra/newview/res/circleandline.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/have_artwork_bundle.marker b/indra/newview/res/have_artwork_bundle.marker old mode 100644 new mode 100755 diff --git a/indra/newview/res/icon1.ico b/indra/newview/res/icon1.ico old mode 100644 new mode 100755 diff --git a/indra/newview/res/install_icon.BMP b/indra/newview/res/install_icon.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res/ll_icon.BMP b/indra/newview/res/ll_icon.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res/ll_icon.ico b/indra/newview/res/ll_icon.ico old mode 100644 new mode 100755 diff --git a/indra/newview/res/ll_icon.png b/indra/newview/res/ll_icon.png old mode 100644 new mode 100755 diff --git a/indra/newview/res/llarrow.cur b/indra/newview/res/llarrow.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/llarrowdrag.cur b/indra/newview/res/llarrowdrag.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/llarrowdragmulti.cur b/indra/newview/res/llarrowdragmulti.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/llarrowlocked.cur b/indra/newview/res/llarrowlocked.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/llgrablocked.cur b/indra/newview/res/llgrablocked.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/llno.cur b/indra/newview/res/llno.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/llnolocked.cur b/indra/newview/res/llnolocked.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/lltoolcamera.cur b/indra/newview/res/lltoolcamera.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/lltoolcreate.cur b/indra/newview/res/lltoolcreate.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/lltoolfocus.cur b/indra/newview/res/lltoolfocus.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/lltoolgrab.cur b/indra/newview/res/lltoolgrab.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/lltoolland.cur b/indra/newview/res/lltoolland.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/lltoolpan.cur b/indra/newview/res/lltoolpan.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/lltoolpipette.cur b/indra/newview/res/lltoolpipette.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/lltoolrotate.cur b/indra/newview/res/lltoolrotate.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/lltoolscale.cur b/indra/newview/res/lltoolscale.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/lltooltranslate.cur b/indra/newview/res/lltooltranslate.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/lltoolzoomin.cur b/indra/newview/res/lltoolzoomin.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/lltoolzoomout.cur b/indra/newview/res/lltoolzoomout.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/loginbackground.bmp b/indra/newview/res/loginbackground.bmp old mode 100644 new mode 100755 diff --git a/indra/newview/res/resource.h b/indra/newview/res/resource.h old mode 100644 new mode 100755 diff --git a/indra/newview/res/toolbuy.cur b/indra/newview/res/toolbuy.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/toolmediaopen.cur b/indra/newview/res/toolmediaopen.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/toolopen.cur b/indra/newview/res/toolopen.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/toolpause.cur b/indra/newview/res/toolpause.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/toolpickobject.cur b/indra/newview/res/toolpickobject.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/toolpickobject2.cur b/indra/newview/res/toolpickobject2.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/toolpickobject3.cur b/indra/newview/res/toolpickobject3.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/toolpipette.cur b/indra/newview/res/toolpipette.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/toolplay.cur b/indra/newview/res/toolplay.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/toolsit.cur b/indra/newview/res/toolsit.cur old mode 100644 new mode 100755 diff --git a/indra/newview/res/uninstall_icon.BMP b/indra/newview/res/uninstall_icon.BMP old mode 100644 new mode 100755 diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc old mode 100644 new mode 100755 diff --git a/indra/newview/ru.lproj/language.txt b/indra/newview/ru.lproj/language.txt old mode 100644 new mode 100755 diff --git a/indra/newview/secondlife-i686.supp b/indra/newview/secondlife-i686.supp old mode 100644 new mode 100755 diff --git a/indra/newview/secondlife.icns b/indra/newview/secondlife.icns old mode 100644 new mode 100755 diff --git a/indra/newview/secondlife_firstlook.icns b/indra/newview/secondlife_firstlook.icns old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/btn_purplepill_bg.png b/indra/newview/skins/default/html/btn_purplepill_bg.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/da/loading/loading.html b/indra/newview/skins/default/html/da/loading/loading.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/de/loading-error/index.html b/indra/newview/skins/default/html/de/loading-error/index.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/de/loading/loading.html b/indra/newview/skins/default/html/de/loading/loading.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/en-us/help-offline/index.html b/indra/newview/skins/default/html/en-us/help-offline/index.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/en-us/loading-error/index.html b/indra/newview/skins/default/html/en-us/loading-error/index.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/en-us/loading/loading.html b/indra/newview/skins/default/html/en-us/loading/loading.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/en-us/loading/sl_logo_rotate_black.gif b/indra/newview/skins/default/html/en-us/loading/sl_logo_rotate_black.gif old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/es/loading-error/index.html b/indra/newview/skins/default/html/es/loading-error/index.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/es/loading/loading.html b/indra/newview/skins/default/html/es/loading/loading.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/fr/loading-error/index.html b/indra/newview/skins/default/html/fr/loading-error/index.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/fr/loading/loading.html b/indra/newview/skins/default/html/fr/loading/loading.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/hu/loading/loading.html b/indra/newview/skins/default/html/hu/loading/loading.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/it/loading/loading.html b/indra/newview/skins/default/html/it/loading/loading.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/ja/loading-error/index.html b/indra/newview/skins/default/html/ja/loading-error/index.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/ja/loading/loading.html b/indra/newview/skins/default/html/ja/loading/loading.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/ko/loading-error/index.html b/indra/newview/skins/default/html/ko/loading-error/index.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/nl/loading/loading.html b/indra/newview/skins/default/html/nl/loading/loading.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/pl/loading/loading.html b/indra/newview/skins/default/html/pl/loading/loading.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/pt/loading-error/index.html b/indra/newview/skins/default/html/pt/loading-error/index.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/pt/loading/loading.html b/indra/newview/skins/default/html/pt/loading/loading.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/ru/loading/loading.html b/indra/newview/skins/default/html/ru/loading/loading.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/tr/loading/loading.html b/indra/newview/skins/default/html/tr/loading/loading.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/uk/loading/loading.html b/indra/newview/skins/default/html/uk/loading/loading.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/unabletoconnect.png b/indra/newview/skins/default/html/unabletoconnect.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/zh/loading-error/index.html b/indra/newview/skins/default/html/zh/loading-error/index.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/html/zh/loading/loading.html b/indra/newview/skins/default/html/zh/loading/loading.html old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/Blank.png b/indra/newview/skins/default/textures/Blank.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/alpha_gradient.tga b/indra/newview/skins/default/textures/alpha_gradient.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/alpha_gradient_2d.j2c b/indra/newview/skins/default/textures/alpha_gradient_2d.j2c old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/arrow_down.tga b/indra/newview/skins/default/textures/arrow_down.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/arrow_up.tga b/indra/newview/skins/default/textures/arrow_up.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/avatar_thumb_bkgrnd.png b/indra/newview/skins/default/textures/avatar_thumb_bkgrnd.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/badge_note.j2c b/indra/newview/skins/default/textures/badge_note.j2c old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/badge_ok.j2c b/indra/newview/skins/default/textures/badge_ok.j2c old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/badge_warn.j2c b/indra/newview/skins/default/textures/badge_warn.j2c old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Avatar_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Avatar_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_FreeCam_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_FreeCam_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Orbit_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Orbit_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Pan_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Pan_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Pan_Over.png b/indra/newview/skins/default/textures/bottomtray/Cam_Pan_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Eye_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Eye_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Rotate_In.png b/indra/newview/skins/default/textures/bottomtray/Cam_Rotate_In.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Rotate_Out.png b/indra/newview/skins/default/textures/bottomtray/Cam_Rotate_Out.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Tracking_In.png b/indra/newview/skins/default/textures/bottomtray/Cam_Tracking_In.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Tracking_Out.png b/indra/newview/skins/default/textures/bottomtray/Cam_Tracking_Out.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/CameraView_Press.png b/indra/newview/skins/default/textures/bottomtray/CameraView_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/DownArrow.png b/indra/newview/skins/default/textures/bottomtray/DownArrow.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Mouselook_View_Off.png b/indra/newview/skins/default/textures/bottomtray/Mouselook_View_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Mouselook_View_On.png b/indra/newview/skins/default/textures/bottomtray/Mouselook_View_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png b/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Move_Run_Off.png b/indra/newview/skins/default/textures/bottomtray/Move_Run_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Move_Walk_Off.png b/indra/newview/skins/default/textures/bottomtray/Move_Walk_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Backward_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_Backward_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Backward_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_Backward_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Down_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_Down_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Down_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_Down_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Forward_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_Forward_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Forward_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_Forward_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Left_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_Left_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Left_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_Left_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Right_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_Right_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Right_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_Right_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_TurnLeft_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_TurnLeft_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_TurnLeft_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_TurnLeft_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_TurnRight_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_TurnRight_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_TurnRight_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_TurnRight_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Up_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_Up_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Up_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_Up_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Object_View_Off.png b/indra/newview/skins/default/textures/bottomtray/Object_View_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Object_View_On.png b/indra/newview/skins/default/textures/bottomtray/Object_View_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/PanOrbit_Disabled.png b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/PanOrbit_Off.png b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/PanOrbit_Over.png b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/PanOrbit_Press.png b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png b/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Unread_Chiclet.png b/indra/newview/skins/default/textures/bottomtray/Unread_Chiclet.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/Unread_IM.png b/indra/newview/skins/default/textures/bottomtray/Unread_IM.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/VoicePTT_Lvl1.png b/indra/newview/skins/default/textures/bottomtray/VoicePTT_Lvl1.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/VoicePTT_Lvl2.png b/indra/newview/skins/default/textures/bottomtray/VoicePTT_Lvl2.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/VoicePTT_Lvl3.png b/indra/newview/skins/default/textures/bottomtray/VoicePTT_Lvl3.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/VoicePTT_Off.png b/indra/newview/skins/default/textures/bottomtray/VoicePTT_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/VoicePTT_On.png b/indra/newview/skins/default/textures/bottomtray/VoicePTT_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/WellButton_Lit.png b/indra/newview/skins/default/textures/bottomtray/WellButton_Lit.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/bottomtray/WellButton_Lit_Selected.png b/indra/newview/skins/default/textures/bottomtray/WellButton_Lit_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Cone.png b/indra/newview/skins/default/textures/build/Object_Cone.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Cone_Selected.png b/indra/newview/skins/default/textures/build/Object_Cone_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Cube.png b/indra/newview/skins/default/textures/build/Object_Cube.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Cube_Selected.png b/indra/newview/skins/default/textures/build/Object_Cube_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Cylinder.png b/indra/newview/skins/default/textures/build/Object_Cylinder.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Cylinder_Selected.png b/indra/newview/skins/default/textures/build/Object_Cylinder_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Grass.png b/indra/newview/skins/default/textures/build/Object_Grass.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Grass_Selected.png b/indra/newview/skins/default/textures/build/Object_Grass_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Cone.png b/indra/newview/skins/default/textures/build/Object_Hemi_Cone.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Cone_Selected.png b/indra/newview/skins/default/textures/build/Object_Hemi_Cone_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Cylinder.png b/indra/newview/skins/default/textures/build/Object_Hemi_Cylinder.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Cylinder_Selected.png b/indra/newview/skins/default/textures/build/Object_Hemi_Cylinder_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Sphere.png b/indra/newview/skins/default/textures/build/Object_Hemi_Sphere.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Sphere_Selected.png b/indra/newview/skins/default/textures/build/Object_Hemi_Sphere_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Prism.png b/indra/newview/skins/default/textures/build/Object_Prism.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Prism_Selected.png b/indra/newview/skins/default/textures/build/Object_Prism_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Pyramid.png b/indra/newview/skins/default/textures/build/Object_Pyramid.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Pyramid_Selected.png b/indra/newview/skins/default/textures/build/Object_Pyramid_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Ring.png b/indra/newview/skins/default/textures/build/Object_Ring.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Ring_Selected.png b/indra/newview/skins/default/textures/build/Object_Ring_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Sphere.png b/indra/newview/skins/default/textures/build/Object_Sphere.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Sphere_Selected.png b/indra/newview/skins/default/textures/build/Object_Sphere_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Tetrahedron.png b/indra/newview/skins/default/textures/build/Object_Tetrahedron.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Tetrahedron_Selected.png b/indra/newview/skins/default/textures/build/Object_Tetrahedron_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Torus.png b/indra/newview/skins/default/textures/build/Object_Torus.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Torus_Selected.png b/indra/newview/skins/default/textures/build/Object_Torus_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Tree.png b/indra/newview/skins/default/textures/build/Object_Tree.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Tree_Selected.png b/indra/newview/skins/default/textures/build/Object_Tree_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Tube.png b/indra/newview/skins/default/textures/build/Object_Tube.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Object_Tube_Selected.png b/indra/newview/skins/default/textures/build/Object_Tube_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Tool_Create.png b/indra/newview/skins/default/textures/build/Tool_Create.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Tool_Dozer.png b/indra/newview/skins/default/textures/build/Tool_Dozer.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Tool_Face.png b/indra/newview/skins/default/textures/build/Tool_Face.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Tool_Grab.png b/indra/newview/skins/default/textures/build/Tool_Grab.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/build/Tool_Zoom.png b/indra/newview/skins/default/textures/build/Tool_Zoom.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/button_anim_pause.tga b/indra/newview/skins/default/textures/button_anim_pause.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/button_anim_pause_selected.tga b/indra/newview/skins/default/textures/button_anim_pause_selected.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/button_anim_play.tga b/indra/newview/skins/default/textures/button_anim_play.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/button_anim_play_selected.tga b/indra/newview/skins/default/textures/button_anim_play_selected.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/checkerboard_transparency_bg.png b/indra/newview/skins/default/textures/checkerboard_transparency_bg.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/circle.tga b/indra/newview/skins/default/textures/circle.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/cloud-particle.j2c b/indra/newview/skins/default/textures/cloud-particle.j2c old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/color_swatch_alpha.tga b/indra/newview/skins/default/textures/color_swatch_alpha.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Accordion_ArrowClosed_Off.png b/indra/newview/skins/default/textures/containers/Accordion_ArrowClosed_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Accordion_ArrowClosed_Over.png b/indra/newview/skins/default/textures/containers/Accordion_ArrowClosed_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Accordion_ArrowClosed_Press.png b/indra/newview/skins/default/textures/containers/Accordion_ArrowClosed_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Accordion_ArrowOpened_Off.png b/indra/newview/skins/default/textures/containers/Accordion_ArrowOpened_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Accordion_ArrowOpened_Over.png b/indra/newview/skins/default/textures/containers/Accordion_ArrowOpened_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Accordion_ArrowOpened_Press.png b/indra/newview/skins/default/textures/containers/Accordion_ArrowOpened_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Accordion_Off.png b/indra/newview/skins/default/textures/containers/Accordion_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Accordion_Over.png b/indra/newview/skins/default/textures/containers/Accordion_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Accordion_Press.png b/indra/newview/skins/default/textures/containers/Accordion_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Accordion_Selected.png b/indra/newview/skins/default/textures/containers/Accordion_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Container.png b/indra/newview/skins/default/textures/containers/Container.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/TabTop_Left_Off.png b/indra/newview/skins/default/textures/containers/TabTop_Left_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/TabTop_Left_Over.png b/indra/newview/skins/default/textures/containers/TabTop_Left_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/TabTop_Left_Selected.png b/indra/newview/skins/default/textures/containers/TabTop_Left_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/TabTop_Middle_Off.png b/indra/newview/skins/default/textures/containers/TabTop_Middle_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/TabTop_Middle_Over.png b/indra/newview/skins/default/textures/containers/TabTop_Middle_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/TabTop_Middle_Selected.png b/indra/newview/skins/default/textures/containers/TabTop_Middle_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/TabTop_Right_Off.png b/indra/newview/skins/default/textures/containers/TabTop_Right_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/TabTop_Right_Over.png b/indra/newview/skins/default/textures/containers/TabTop_Right_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/TabTop_Right_Selected.png b/indra/newview/skins/default/textures/containers/TabTop_Right_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Left_Flash.png b/indra/newview/skins/default/textures/containers/Toolbar_Left_Flash.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Left_Off.png b/indra/newview/skins/default/textures/containers/Toolbar_Left_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Left_Over.png b/indra/newview/skins/default/textures/containers/Toolbar_Left_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Left_Selected.png b/indra/newview/skins/default/textures/containers/Toolbar_Left_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Middle_Flash.png b/indra/newview/skins/default/textures/containers/Toolbar_Middle_Flash.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Middle_Off.png b/indra/newview/skins/default/textures/containers/Toolbar_Middle_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Middle_Over.png b/indra/newview/skins/default/textures/containers/Toolbar_Middle_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Middle_Selected.png b/indra/newview/skins/default/textures/containers/Toolbar_Middle_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Right_Flash.png b/indra/newview/skins/default/textures/containers/Toolbar_Right_Flash.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Right_Off.png b/indra/newview/skins/default/textures/containers/Toolbar_Right_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Right_Over.png b/indra/newview/skins/default/textures/containers/Toolbar_Right_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Right_Selected.png b/indra/newview/skins/default/textures/containers/Toolbar_Right_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/crosshairs.tga b/indra/newview/skins/default/textures/crosshairs.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/default_land_picture.j2c b/indra/newview/skins/default/textures/default_land_picture.j2c old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/default_profile_picture.j2c b/indra/newview/skins/default/textures/default_profile_picture.j2c old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/direction_arrow.tga b/indra/newview/skins/default/textures/direction_arrow.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/down_arrow.png b/indra/newview/skins/default/textures/down_arrow.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/eye_button_active.tga b/indra/newview/skins/default/textures/eye_button_active.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/eye_button_inactive.tga b/indra/newview/skins/default/textures/eye_button_inactive.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/ff_edit_mine.tga b/indra/newview/skins/default/textures/ff_edit_mine.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/ff_edit_mine_button.tga b/indra/newview/skins/default/textures/ff_edit_mine_button.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/ff_edit_theirs.tga b/indra/newview/skins/default/textures/ff_edit_theirs.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/ff_edit_theirs_button.tga b/indra/newview/skins/default/textures/ff_edit_theirs_button.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/ff_online_status_button.tga b/indra/newview/skins/default/textures/ff_online_status_button.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/ff_visible_map.tga b/indra/newview/skins/default/textures/ff_visible_map.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/ff_visible_map_button.tga b/indra/newview/skins/default/textures/ff_visible_map_button.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/ff_visible_online.tga b/indra/newview/skins/default/textures/ff_visible_online.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/ff_visible_online_button.tga b/indra/newview/skins/default/textures/ff_visible_online_button.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/folder_arrow.tga b/indra/newview/skins/default/textures/folder_arrow.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/foot_shadow.j2c b/indra/newview/skins/default/textures/foot_shadow.j2c old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icn_label_web.tga b/indra/newview/skins/default/textures/icn_label_web.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icn_media.tga b/indra/newview/skins/default/textures/icn_media.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icn_media_movie.tga b/indra/newview/skins/default/textures/icn_media_movie.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icn_media_web.tga b/indra/newview/skins/default/textures/icn_media_web.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icn_voice-groupfocus.tga b/indra/newview/skins/default/textures/icn_voice-groupfocus.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icn_voice-localchat.tga b/indra/newview/skins/default/textures/icn_voice-localchat.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icn_voice-pvtfocus.tga b/indra/newview/skins/default/textures/icn_voice-pvtfocus.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icon_avatar_offline.tga b/indra/newview/skins/default/textures/icon_avatar_offline.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icon_avatar_online.tga b/indra/newview/skins/default/textures/icon_avatar_online.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icon_day_cycle.tga b/indra/newview/skins/default/textures/icon_day_cycle.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icon_diurnal.tga b/indra/newview/skins/default/textures/icon_diurnal.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icon_event_adult.tga b/indra/newview/skins/default/textures/icon_event_adult.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icon_for_sale_adult.tga b/indra/newview/skins/default/textures/icon_for_sale_adult.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icon_lock.tga b/indra/newview/skins/default/textures/icon_lock.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icon_top_pick.tga b/indra/newview/skins/default/textures/icon_top_pick.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/AddItem_Disabled.png b/indra/newview/skins/default/textures/icons/AddItem_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/AddItem_Off.png b/indra/newview/skins/default/textures/icons/AddItem_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/AddItem_Over.png b/indra/newview/skins/default/textures/icons/AddItem_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/AddItem_Press.png b/indra/newview/skins/default/textures/icons/AddItem_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/AudioMute_Off.png b/indra/newview/skins/default/textures/icons/AudioMute_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/AudioMute_Over.png b/indra/newview/skins/default/textures/icons/AudioMute_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Audio_Off.png b/indra/newview/skins/default/textures/icons/Audio_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Audio_Press.png b/indra/newview/skins/default/textures/icons/Audio_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/BackArrow_Off.png b/indra/newview/skins/default/textures/icons/BackArrow_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/BackArrow_Over.png b/indra/newview/skins/default/textures/icons/BackArrow_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/DownArrow_Off.png b/indra/newview/skins/default/textures/icons/DownArrow_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/DragHandle.png b/indra/newview/skins/default/textures/icons/DragHandle.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Edit_Wrench.png b/indra/newview/skins/default/textures/icons/Edit_Wrench.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/ExternalBrowser_Off.png b/indra/newview/skins/default/textures/icons/ExternalBrowser_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Female.png b/indra/newview/skins/default/textures/icons/Female.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/ForSale_Badge.png b/indra/newview/skins/default/textures/icons/ForSale_Badge.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/ForwardArrow_Off.png b/indra/newview/skins/default/textures/icons/ForwardArrow_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/ForwardArrow_Press.png b/indra/newview/skins/default/textures/icons/ForwardArrow_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Generic_Group.png b/indra/newview/skins/default/textures/icons/Generic_Group.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Generic_Group_Large.png b/indra/newview/skins/default/textures/icons/Generic_Group_Large.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Generic_Object.png b/indra/newview/skins/default/textures/icons/Generic_Object.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Generic_Object_Small.png b/indra/newview/skins/default/textures/icons/Generic_Object_Small.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Generic_Person.png b/indra/newview/skins/default/textures/icons/Generic_Person.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Generic_Person_Large.png b/indra/newview/skins/default/textures/icons/Generic_Person_Large.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Hierarchy_View_Disabled.png b/indra/newview/skins/default/textures/icons/Hierarchy_View_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Hierarchy_View_On.png b/indra/newview/skins/default/textures/icons/Hierarchy_View_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Icon_For_Sale.png b/indra/newview/skins/default/textures/icons/Icon_For_Sale.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Info.png b/indra/newview/skins/default/textures/icons/Info.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Info_Over.png b/indra/newview/skins/default/textures/icons/Info_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Info_Small.png b/indra/newview/skins/default/textures/icons/Info_Small.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Alpha.png b/indra/newview/skins/default/textures/icons/Inv_Alpha.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Animation.png b/indra/newview/skins/default/textures/icons/Inv_Animation.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_BodyShape.png b/indra/newview/skins/default/textures/icons/Inv_BodyShape.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_CallingCard.png b/indra/newview/skins/default/textures/icons/Inv_CallingCard.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Clothing.png b/indra/newview/skins/default/textures/icons/Inv_Clothing.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Eye.png b/indra/newview/skins/default/textures/icons/Inv_Eye.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_FolderClosed.png b/indra/newview/skins/default/textures/icons/Inv_FolderClosed.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_FolderOpen.png b/indra/newview/skins/default/textures/icons/Inv_FolderOpen.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Gesture.png b/indra/newview/skins/default/textures/icons/Inv_Gesture.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Gloves.png b/indra/newview/skins/default/textures/icons/Inv_Gloves.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Hair.png b/indra/newview/skins/default/textures/icons/Inv_Hair.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Jacket.png b/indra/newview/skins/default/textures/icons/Inv_Jacket.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Landmark.png b/indra/newview/skins/default/textures/icons/Inv_Landmark.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Link.png b/indra/newview/skins/default/textures/icons/Inv_Link.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_LinkFolder.png b/indra/newview/skins/default/textures/icons/Inv_LinkFolder.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_LinkItem.png b/indra/newview/skins/default/textures/icons/Inv_LinkItem.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_LookFolderClosed.png b/indra/newview/skins/default/textures/icons/Inv_LookFolderClosed.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_LookFolderOpen.png b/indra/newview/skins/default/textures/icons/Inv_LookFolderOpen.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_LostClosed.png b/indra/newview/skins/default/textures/icons/Inv_LostClosed.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_LostOpen.png b/indra/newview/skins/default/textures/icons/Inv_LostOpen.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Notecard.png b/indra/newview/skins/default/textures/icons/Inv_Notecard.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Object.png b/indra/newview/skins/default/textures/icons/Inv_Object.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Object_Multi.png b/indra/newview/skins/default/textures/icons/Inv_Object_Multi.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Pants.png b/indra/newview/skins/default/textures/icons/Inv_Pants.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Script.png b/indra/newview/skins/default/textures/icons/Inv_Script.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Shirt.png b/indra/newview/skins/default/textures/icons/Inv_Shirt.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Shoe.png b/indra/newview/skins/default/textures/icons/Inv_Shoe.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Skin.png b/indra/newview/skins/default/textures/icons/Inv_Skin.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Skirt.png b/indra/newview/skins/default/textures/icons/Inv_Skirt.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Snapshot.png b/indra/newview/skins/default/textures/icons/Inv_Snapshot.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Socks.png b/indra/newview/skins/default/textures/icons/Inv_Socks.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Sound.png b/indra/newview/skins/default/textures/icons/Inv_Sound.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_SysClosed.png b/indra/newview/skins/default/textures/icons/Inv_SysClosed.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_SysOpen.png b/indra/newview/skins/default/textures/icons/Inv_SysOpen.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Tattoo.png b/indra/newview/skins/default/textures/icons/Inv_Tattoo.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Texture.png b/indra/newview/skins/default/textures/icons/Inv_Texture.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_TrashClosed.png b/indra/newview/skins/default/textures/icons/Inv_TrashClosed.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_TrashOpen.png b/indra/newview/skins/default/textures/icons/Inv_TrashOpen.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Underpants.png b/indra/newview/skins/default/textures/icons/Inv_Underpants.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Inv_Undershirt.png b/indra/newview/skins/default/textures/icons/Inv_Undershirt.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/List_View_Disabled.png b/indra/newview/skins/default/textures/icons/List_View_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/List_View_On.png b/indra/newview/skins/default/textures/icons/List_View_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Lock.png b/indra/newview/skins/default/textures/icons/Lock.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Locked_Icon.png b/indra/newview/skins/default/textures/icons/Locked_Icon.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Male.png b/indra/newview/skins/default/textures/icons/Male.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Microphone_On.png b/indra/newview/skins/default/textures/icons/Microphone_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/MinusItem_Disabled.png b/indra/newview/skins/default/textures/icons/MinusItem_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/MinusItem_Off.png b/indra/newview/skins/default/textures/icons/MinusItem_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/MinusItem_Press.png b/indra/newview/skins/default/textures/icons/MinusItem_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/OptionsMenu_Disabled.png b/indra/newview/skins/default/textures/icons/OptionsMenu_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/OptionsMenu_Off.png b/indra/newview/skins/default/textures/icons/OptionsMenu_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/OptionsMenu_Over.png b/indra/newview/skins/default/textures/icons/OptionsMenu_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/OptionsMenu_Press.png b/indra/newview/skins/default/textures/icons/OptionsMenu_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_BuildNo_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_BuildNo_Dark.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_BuildNo_Light.png b/indra/newview/skins/default/textures/icons/Parcel_BuildNo_Light.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_Build_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Build_Dark.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_DamageNo_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_DamageNo_Dark.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_Damage_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Damage_Dark.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_Damage_Light_Alt.png b/indra/newview/skins/default/textures/icons/Parcel_Damage_Light_Alt.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_Exp_Color.png b/indra/newview/skins/default/textures/icons/Parcel_Exp_Color.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_ForSale_Light.png b/indra/newview/skins/default/textures/icons/Parcel_ForSale_Light.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_Health_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Health_Dark.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_M_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_M_Dark.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_M_Light.png b/indra/newview/skins/default/textures/icons/Parcel_M_Light.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_NoScripts_Light.png b/indra/newview/skins/default/textures/icons/Parcel_NoScripts_Light.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_PG_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_PG_Dark.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_PG_Light.png b/indra/newview/skins/default/textures/icons/Parcel_PG_Light.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_PushNo_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_PushNo_Dark.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_PushNo_Light.png b/indra/newview/skins/default/textures/icons/Parcel_PushNo_Light.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_Push_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Push_Dark.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_R_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_R_Dark.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_R_Light.png b/indra/newview/skins/default/textures/icons/Parcel_R_Light.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_ScriptsNo_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_ScriptsNo_Dark.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_Scripts_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Scripts_Dark.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_VoiceNo_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_VoiceNo_Dark.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_VoiceNo_Light.png b/indra/newview/skins/default/textures/icons/Parcel_VoiceNo_Light.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_Voice_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Voice_Dark.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Parcel_Voice_Light.png b/indra/newview/skins/default/textures/icons/Parcel_Voice_Light.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Pause_Off.png b/indra/newview/skins/default/textures/icons/Pause_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Pause_Over.png b/indra/newview/skins/default/textures/icons/Pause_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Pause_Press.png b/indra/newview/skins/default/textures/icons/Pause_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Play_Off.png b/indra/newview/skins/default/textures/icons/Play_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Play_Over.png b/indra/newview/skins/default/textures/icons/Play_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Play_Press.png b/indra/newview/skins/default/textures/icons/Play_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Progress_1.png b/indra/newview/skins/default/textures/icons/Progress_1.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Progress_10.png b/indra/newview/skins/default/textures/icons/Progress_10.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Progress_11.png b/indra/newview/skins/default/textures/icons/Progress_11.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Progress_12.png b/indra/newview/skins/default/textures/icons/Progress_12.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Progress_2.png b/indra/newview/skins/default/textures/icons/Progress_2.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Progress_3.png b/indra/newview/skins/default/textures/icons/Progress_3.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Progress_4.png b/indra/newview/skins/default/textures/icons/Progress_4.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Progress_5.png b/indra/newview/skins/default/textures/icons/Progress_5.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Progress_6.png b/indra/newview/skins/default/textures/icons/Progress_6.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Progress_7.png b/indra/newview/skins/default/textures/icons/Progress_7.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Progress_8.png b/indra/newview/skins/default/textures/icons/Progress_8.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Progress_9.png b/indra/newview/skins/default/textures/icons/Progress_9.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Refresh_Off.png b/indra/newview/skins/default/textures/icons/Refresh_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/SL_Logo.png b/indra/newview/skins/default/textures/icons/SL_Logo.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Search_Icon.png b/indra/newview/skins/default/textures/icons/Search_Icon.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Shirt_Large.png b/indra/newview/skins/default/textures/icons/Shirt_Large.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Shop.png b/indra/newview/skins/default/textures/icons/Shop.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/SkipBackward_Off.png b/indra/newview/skins/default/textures/icons/SkipBackward_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/SkipForward_Off.png b/indra/newview/skins/default/textures/icons/SkipForward_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/StopReload_Off.png b/indra/newview/skins/default/textures/icons/StopReload_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/StopReload_Over.png b/indra/newview/skins/default/textures/icons/StopReload_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Stop_Off.png b/indra/newview/skins/default/textures/icons/Stop_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/TrashItem_Disabled.png b/indra/newview/skins/default/textures/icons/TrashItem_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/TrashItem_Off.png b/indra/newview/skins/default/textures/icons/TrashItem_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/TrashItem_Over.png b/indra/newview/skins/default/textures/icons/TrashItem_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/TrashItem_Press.png b/indra/newview/skins/default/textures/icons/TrashItem_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/UnZoom_Off.png b/indra/newview/skins/default/textures/icons/UnZoom_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/UpArrow_Off.png b/indra/newview/skins/default/textures/icons/UpArrow_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/VoicePTT_Lvl1.png b/indra/newview/skins/default/textures/icons/VoicePTT_Lvl1.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/VoicePTT_Lvl2.png b/indra/newview/skins/default/textures/icons/VoicePTT_Lvl2.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/VoicePTT_Lvl3.png b/indra/newview/skins/default/textures/icons/VoicePTT_Lvl3.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/VoicePTT_Off.png b/indra/newview/skins/default/textures/icons/VoicePTT_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/VoicePTT_On.png b/indra/newview/skins/default/textures/icons/VoicePTT_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/YouAreHere_Badge.png b/indra/newview/skins/default/textures/icons/YouAreHere_Badge.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/Zoom_Off.png b/indra/newview/skins/default/textures/icons/Zoom_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/avaline_default_icon.jpg b/indra/newview/skins/default/textures/icons/avaline_default_icon.jpg old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/back_arrow_off.png b/indra/newview/skins/default/textures/icons/back_arrow_off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/back_arrow_over.png b/indra/newview/skins/default/textures/icons/back_arrow_over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/back_arrow_press.png b/indra/newview/skins/default/textures/icons/back_arrow_press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/object_icon.png b/indra/newview/skins/default/textures/icons/object_icon.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/parcel_color_EVRY.png b/indra/newview/skins/default/textures/icons/parcel_color_EVRY.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/parcel_color_EXP.png b/indra/newview/skins/default/textures/icons/parcel_color_EXP.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/parcel_color_M.png b/indra/newview/skins/default/textures/icons/parcel_color_M.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/icons/unknown_icon.png b/indra/newview/skins/default/textures/icons/unknown_icon.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/image_edit_icon.tga b/indra/newview/skins/default/textures/image_edit_icon.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/inv_folder_animation.tga b/indra/newview/skins/default/textures/inv_folder_animation.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/inv_folder_inbox.tga b/indra/newview/skins/default/textures/inv_folder_inbox.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/jump_left_in.tga b/indra/newview/skins/default/textures/jump_left_in.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/jump_left_out.tga b/indra/newview/skins/default/textures/jump_left_out.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/jump_right_in.tga b/indra/newview/skins/default/textures/jump_right_in.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/jump_right_out.tga b/indra/newview/skins/default/textures/jump_right_out.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/lag_status_critical.tga b/indra/newview/skins/default/textures/lag_status_critical.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/lag_status_good.tga b/indra/newview/skins/default/textures/lag_status_good.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/lag_status_warning.tga b/indra/newview/skins/default/textures/lag_status_warning.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/legend.tga b/indra/newview/skins/default/textures/legend.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/locked_image.j2c b/indra/newview/skins/default/textures/locked_image.j2c old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/map_avatar_16.tga b/indra/newview/skins/default/textures/map_avatar_16.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/map_avatar_32.tga b/indra/newview/skins/default/textures/map_avatar_32.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/map_avatar_8.tga b/indra/newview/skins/default/textures/map_avatar_8.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/map_avatar_above_32.tga b/indra/newview/skins/default/textures/map_avatar_above_32.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/map_avatar_above_8.tga b/indra/newview/skins/default/textures/map_avatar_above_8.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/map_avatar_below_32.tga b/indra/newview/skins/default/textures/map_avatar_below_32.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/map_avatar_below_8.tga b/indra/newview/skins/default/textures/map_avatar_below_8.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/map_avatar_you_32.tga b/indra/newview/skins/default/textures/map_avatar_you_32.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/map_event.tga b/indra/newview/skins/default/textures/map_event.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/map_event_adult.tga b/indra/newview/skins/default/textures/map_event_adult.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/map_event_mature.tga b/indra/newview/skins/default/textures/map_event_mature.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/map_home.tga b/indra/newview/skins/default/textures/map_home.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/map_infohub.tga b/indra/newview/skins/default/textures/map_infohub.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/map_telehub.tga b/indra/newview/skins/default/textures/map_telehub.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/map_track_16.tga b/indra/newview/skins/default/textures/map_track_16.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/map_track_8.tga b/indra/newview/skins/default/textures/map_track_8.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/menu_separator.png b/indra/newview/skins/default/textures/menu_separator.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/missing_asset.tga b/indra/newview/skins/default/textures/missing_asset.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/mute_icon.tga b/indra/newview/skins/default/textures/mute_icon.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Arrow_Left_Off.png b/indra/newview/skins/default/textures/navbar/Arrow_Left_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Arrow_Left_Over.png b/indra/newview/skins/default/textures/navbar/Arrow_Left_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Arrow_Right_Off.png b/indra/newview/skins/default/textures/navbar/Arrow_Right_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Arrow_Right_Over.png b/indra/newview/skins/default/textures/navbar/Arrow_Right_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png b/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png b/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Favorite_Link_Over.png b/indra/newview/skins/default/textures/navbar/Favorite_Link_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Favorite_Star_Active.png b/indra/newview/skins/default/textures/navbar/Favorite_Star_Active.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Favorite_Star_Off.png b/indra/newview/skins/default/textures/navbar/Favorite_Star_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Favorite_Star_Over.png b/indra/newview/skins/default/textures/navbar/Favorite_Star_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Favorite_Star_Press.png b/indra/newview/skins/default/textures/navbar/Favorite_Star_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/FileMenu_Divider.png b/indra/newview/skins/default/textures/navbar/FileMenu_Divider.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Flag.png b/indra/newview/skins/default/textures/navbar/Flag.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Help_Over.png b/indra/newview/skins/default/textures/navbar/Help_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Help_Press.png b/indra/newview/skins/default/textures/navbar/Help_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Home_Off.png b/indra/newview/skins/default/textures/navbar/Home_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Home_Over.png b/indra/newview/skins/default/textures/navbar/Home_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Info_Off.png b/indra/newview/skins/default/textures/navbar/Info_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Info_Over.png b/indra/newview/skins/default/textures/navbar/Info_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Info_Press.png b/indra/newview/skins/default/textures/navbar/Info_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Lock.png b/indra/newview/skins/default/textures/navbar/Lock.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/NavBar_BG.png b/indra/newview/skins/default/textures/navbar/NavBar_BG.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/NavBar_BG_NoFav_Bevel.png b/indra/newview/skins/default/textures/navbar/NavBar_BG_NoFav_Bevel.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/NavBar_BG_NoNav_Bevel.png b/indra/newview/skins/default/textures/navbar/NavBar_BG_NoNav_Bevel.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Row_Selection.png b/indra/newview/skins/default/textures/navbar/Row_Selection.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/navbar/Search.png b/indra/newview/skins/default/textures/navbar/Search.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/notify_caution_icon.tga b/indra/newview/skins/default/textures/notify_caution_icon.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/pixiesmall.j2c b/indra/newview/skins/default/textures/pixiesmall.j2c old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/places_rating_adult.tga b/indra/newview/skins/default/textures/places_rating_adult.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/places_rating_mature.tga b/indra/newview/skins/default/textures/places_rating_mature.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/places_rating_pg.tga b/indra/newview/skins/default/textures/places_rating_pg.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/propertyline.tga b/indra/newview/skins/default/textures/propertyline.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/quick_tips/avatar_free_mode.png b/indra/newview/skins/default/textures/quick_tips/avatar_free_mode.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/quick_tips/camera_free_mode.png b/indra/newview/skins/default/textures/quick_tips/camera_free_mode.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/quick_tips/camera_orbit_mode.png b/indra/newview/skins/default/textures/quick_tips/camera_orbit_mode.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/quick_tips/camera_pan_mode.png b/indra/newview/skins/default/textures/quick_tips/camera_pan_mode.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/quick_tips/camera_preset_front_view.png b/indra/newview/skins/default/textures/quick_tips/camera_preset_front_view.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/quick_tips/camera_preset_group_view.png b/indra/newview/skins/default/textures/quick_tips/camera_preset_group_view.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/quick_tips/camera_preset_rear_view.png b/indra/newview/skins/default/textures/quick_tips/camera_preset_rear_view.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/quick_tips/move_fly_first.png b/indra/newview/skins/default/textures/quick_tips/move_fly_first.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/quick_tips/move_fly_second.png b/indra/newview/skins/default/textures/quick_tips/move_fly_second.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/quick_tips/move_run_first.png b/indra/newview/skins/default/textures/quick_tips/move_run_first.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/quick_tips/move_run_second.png b/indra/newview/skins/default/textures/quick_tips/move_run_second.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/quick_tips/move_walk_first.png b/indra/newview/skins/default/textures/quick_tips/move_walk_first.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/quick_tips/move_walk_second.png b/indra/newview/skins/default/textures/quick_tips/move_walk_second.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/rounded_square.j2c b/indra/newview/skins/default/textures/rounded_square.j2c old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/script_error.j2c b/indra/newview/skins/default/textures/script_error.j2c old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/show_btn.tga b/indra/newview/skins/default/textures/show_btn.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/show_btn_selected.tga b/indra/newview/skins/default/textures/show_btn_selected.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/silhouette.j2c b/indra/newview/skins/default/textures/silhouette.j2c old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/slim_icon_16_viewer.tga b/indra/newview/skins/default/textures/slim_icon_16_viewer.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/smicon_warn.tga b/indra/newview/skins/default/textures/smicon_warn.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/spacer24.tga b/indra/newview/skins/default/textures/spacer24.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/spacer35.tga b/indra/newview/skins/default/textures/spacer35.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/square_btn_32x128.tga b/indra/newview/skins/default/textures/square_btn_32x128.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/square_btn_selected_32x128.tga b/indra/newview/skins/default/textures/square_btn_selected_32x128.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/startup_logo.j2c b/indra/newview/skins/default/textures/startup_logo.j2c old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/status_busy.tga b/indra/newview/skins/default/textures/status_busy.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/tabarea.tga b/indra/newview/skins/default/textures/tabarea.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/taskpanel/Activate_Checkmark.png b/indra/newview/skins/default/textures/taskpanel/Activate_Checkmark.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Appearance_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Appearance_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Appearance_Selected.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Appearance_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Close_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Close_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Selected.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Me_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Me_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Me_Selected.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Me_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Open_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Open_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_People_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_People_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_People_Selected.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_People_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Large.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Large.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Selected.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Things_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Things_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Things_Selected.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Things_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/taskpanel/TaskPanel_Tab_Off.png b/indra/newview/skins/default/textures/taskpanel/TaskPanel_Tab_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/taskpanel/TaskPanel_Tab_Selected.png b/indra/newview/skins/default/textures/taskpanel/TaskPanel_Tab_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/tearoff_pressed.tga b/indra/newview/skins/default/textures/tearoff_pressed.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/tearoffbox.tga b/indra/newview/skins/default/textures/tearoffbox.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/transparent.j2c b/indra/newview/skins/default/textures/transparent.j2c old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/up_arrow.png b/indra/newview/skins/default/textures/up_arrow.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/uv_test1.j2c b/indra/newview/skins/default/textures/uv_test1.j2c old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/uv_test2.tga b/indra/newview/skins/default/textures/uv_test2.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/voice_meter_dot.j2c b/indra/newview/skins/default/textures/voice_meter_dot.j2c old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/voice_meter_rings.j2c b/indra/newview/skins/default/textures/voice_meter_rings.j2c old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/white.tga b/indra/newview/skins/default/textures/white.tga old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Down.png b/indra/newview/skins/default/textures/widgets/Arrow_Down.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Left.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Left.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Up.png b/indra/newview/skins/default/textures/widgets/Arrow_Up.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Checkbox_Disabled.png b/indra/newview/skins/default/textures/widgets/Checkbox_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Checkbox_Off.png b/indra/newview/skins/default/textures/widgets/Checkbox_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Checkbox_On.png b/indra/newview/skins/default/textures/widgets/Checkbox_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Checkbox_On_Disabled.png b/indra/newview/skins/default/textures/widgets/Checkbox_On_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Checkbox_On_Over.png b/indra/newview/skins/default/textures/widgets/Checkbox_On_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Checkbox_On_Press.png b/indra/newview/skins/default/textures/widgets/Checkbox_On_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Checkbox_Over.png b/indra/newview/skins/default/textures/widgets/Checkbox_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Checkbox_Press.png b/indra/newview/skins/default/textures/widgets/Checkbox_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_Disabled.png b/indra/newview/skins/default/textures/widgets/ComboButton_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_Off.png b/indra/newview/skins/default/textures/widgets/ComboButton_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_On.png b/indra/newview/skins/default/textures/widgets/ComboButton_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_Selected.png b/indra/newview/skins/default/textures/widgets/ComboButton_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_UpOff.png b/indra/newview/skins/default/textures/widgets/ComboButton_UpOff.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_UpSelected.png b/indra/newview/skins/default/textures/widgets/ComboButton_UpSelected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_Up_On_Selected.png b/indra/newview/skins/default/textures/widgets/ComboButton_Up_On_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/DisclosureArrow_Closed_Over.png b/indra/newview/skins/default/textures/widgets/DisclosureArrow_Closed_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/DisclosureArrow_Opened_Off.png b/indra/newview/skins/default/textures/widgets/DisclosureArrow_Opened_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/DisclosureArrow_Opened_Over.png b/indra/newview/skins/default/textures/widgets/DisclosureArrow_Opened_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/DropDown_Disabled.png b/indra/newview/skins/default/textures/widgets/DropDown_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/DropDown_Off.png b/indra/newview/skins/default/textures/widgets/DropDown_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/DropDown_On.png b/indra/newview/skins/default/textures/widgets/DropDown_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/DropDown_Press.png b/indra/newview/skins/default/textures/widgets/DropDown_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/DropTarget.png b/indra/newview/skins/default/textures/widgets/DropTarget.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Linden_Dollar_Alert.png b/indra/newview/skins/default/textures/widgets/Linden_Dollar_Alert.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png b/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ListItem_Over.png b/indra/newview/skins/default/textures/widgets/ListItem_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ListItem_Select.png b/indra/newview/skins/default/textures/widgets/ListItem_Select.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ProgressBar.png b/indra/newview/skins/default/textures/widgets/ProgressBar.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ProgressTrack.png b/indra/newview/skins/default/textures/widgets/ProgressTrack.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Disabled.png b/indra/newview/skins/default/textures/widgets/PushButton_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Off.png b/indra/newview/skins/default/textures/widgets/PushButton_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/PushButton_On.png b/indra/newview/skins/default/textures/widgets/PushButton_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/PushButton_On_Over.png b/indra/newview/skins/default/textures/widgets/PushButton_On_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/PushButton_On_Selected.png b/indra/newview/skins/default/textures/widgets/PushButton_On_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Over.png b/indra/newview/skins/default/textures/widgets/PushButton_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Press.png b/indra/newview/skins/default/textures/widgets/PushButton_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Selected.png b/indra/newview/skins/default/textures/widgets/PushButton_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Selected_Disabled.png b/indra/newview/skins/default/textures/widgets/PushButton_Selected_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Selected_Over.png b/indra/newview/skins/default/textures/widgets/PushButton_Selected_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Selected_Press.png b/indra/newview/skins/default/textures/widgets/PushButton_Selected_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/RadioButton_Disabled.png b/indra/newview/skins/default/textures/widgets/RadioButton_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/RadioButton_Off.png b/indra/newview/skins/default/textures/widgets/RadioButton_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/RadioButton_On.png b/indra/newview/skins/default/textures/widgets/RadioButton_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/RadioButton_On_Disabled.png b/indra/newview/skins/default/textures/widgets/RadioButton_On_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/RadioButton_On_Over.png b/indra/newview/skins/default/textures/widgets/RadioButton_On_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/RadioButton_On_Press.png b/indra/newview/skins/default/textures/widgets/RadioButton_On_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/RadioButton_Over.png b/indra/newview/skins/default/textures/widgets/RadioButton_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/RadioButton_Press.png b/indra/newview/skins/default/textures/widgets/RadioButton_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Down.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Down.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Opaque.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Over.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Over_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Over_Opaque.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Left.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Left.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Opaque.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Over.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Over_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Over_Opaque.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Right.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Right.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Opaque.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Over.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Over_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Over_Opaque.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Up.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Up.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Opaque.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Over.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Over_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Over_Opaque.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollThumb_Horiz.png b/indra/newview/skins/default/textures/widgets/ScrollThumb_Horiz.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollThumb_Horiz_Over.png b/indra/newview/skins/default/textures/widgets/ScrollThumb_Horiz_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollThumb_Vert.png b/indra/newview/skins/default/textures/widgets/ScrollThumb_Vert.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollThumb_Vert_Over.png b/indra/newview/skins/default/textures/widgets/ScrollThumb_Vert_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollTrack_Horiz.png b/indra/newview/skins/default/textures/widgets/ScrollTrack_Horiz.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/ScrollTrack_Vert.png b/indra/newview/skins/default/textures/widgets/ScrollTrack_Vert.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Disabled.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Off.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_On.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_On_Disabled.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_On_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_On_Over.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_On_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_On_Selected.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_On_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Over.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Press.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected_Disabled.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected_Over.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected_Press.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Disabled.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_On.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_On_Over.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_On_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_On_Press.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_On_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Over.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Selected.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Selected_Disabled.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Selected_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Selected_Over.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Selected_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Selected_Press.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Selected_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Disabled.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Off.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_On.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_On.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_On_Over.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_On_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_On_Selected.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_On_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Over.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Press.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Selected.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Selected.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Selected_Disabled.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Selected_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Selected_Over.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Selected_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Selected_Press.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Selected_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SliderThumb_Disabled.png b/indra/newview/skins/default/textures/widgets/SliderThumb_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SliderThumb_Off.png b/indra/newview/skins/default/textures/widgets/SliderThumb_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SliderThumb_Over.png b/indra/newview/skins/default/textures/widgets/SliderThumb_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SliderThumb_Press.png b/indra/newview/skins/default/textures/widgets/SliderThumb_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SliderTrack_Horiz.png b/indra/newview/skins/default/textures/widgets/SliderTrack_Horiz.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/SliderTrack_Vert.png b/indra/newview/skins/default/textures/widgets/SliderTrack_Vert.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Stepper_Down_Off.png b/indra/newview/skins/default/textures/widgets/Stepper_Down_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Stepper_Down_Over.png b/indra/newview/skins/default/textures/widgets/Stepper_Down_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Stepper_Down_Press.png b/indra/newview/skins/default/textures/widgets/Stepper_Down_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Stepper_Up_Off.png b/indra/newview/skins/default/textures/widgets/Stepper_Up_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Stepper_Up_Over.png b/indra/newview/skins/default/textures/widgets/Stepper_Up_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Stepper_Up_Press.png b/indra/newview/skins/default/textures/widgets/Stepper_Up_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/TextField_Active.png b/indra/newview/skins/default/textures/widgets/TextField_Active.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/TextField_Disabled.png b/indra/newview/skins/default/textures/widgets/TextField_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/TextField_Off.png b/indra/newview/skins/default/textures/widgets/TextField_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/TextField_Search_Active.png b/indra/newview/skins/default/textures/widgets/TextField_Search_Active.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/TextField_Search_Disabled.png b/indra/newview/skins/default/textures/widgets/TextField_Search_Disabled.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/TextField_Search_Off.png b/indra/newview/skins/default/textures/widgets/TextField_Search_Off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/Tooltip.png b/indra/newview/skins/default/textures/widgets/Tooltip.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/bevel_background.png b/indra/newview/skins/default/textures/widgets/bevel_background.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/buy_off.png b/indra/newview/skins/default/textures/widgets/buy_off.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/buy_over.png b/indra/newview/skins/default/textures/widgets/buy_over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/buy_press.png b/indra/newview/skins/default/textures/widgets/buy_press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/jump_left_in.png b/indra/newview/skins/default/textures/widgets/jump_left_in.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/jump_left_out.png b/indra/newview/skins/default/textures/widgets/jump_left_out.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/jump_right_in.png b/indra/newview/skins/default/textures/widgets/jump_right_in.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/widgets/jump_right_out.png b/indra/newview/skins/default/textures/widgets/jump_right_out.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Dragbar.png b/indra/newview/skins/default/textures/windows/Dragbar.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Flyout.png b/indra/newview/skins/default/textures/windows/Flyout.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Flyout_Pointer.png b/indra/newview/skins/default/textures/windows/Flyout_Pointer.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Flyout_Pointer_Up.png b/indra/newview/skins/default/textures/windows/Flyout_Pointer_Up.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Icon_Close_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Close_Foreground.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Icon_Close_Press.png b/indra/newview/skins/default/textures/windows/Icon_Close_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Icon_Close_Toast.png b/indra/newview/skins/default/textures/windows/Icon_Close_Toast.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Icon_Dock_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Dock_Foreground.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Icon_Dock_Press.png b/indra/newview/skins/default/textures/windows/Icon_Dock_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Icon_Gear_Background.png b/indra/newview/skins/default/textures/windows/Icon_Gear_Background.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Icon_Gear_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Gear_Foreground.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Icon_Gear_Over.png b/indra/newview/skins/default/textures/windows/Icon_Gear_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Icon_Gear_Press.png b/indra/newview/skins/default/textures/windows/Icon_Gear_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Icon_Help_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Help_Foreground.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Icon_Help_Press.png b/indra/newview/skins/default/textures/windows/Icon_Help_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Icon_Minimize_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Minimize_Foreground.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Icon_Minimize_Press.png b/indra/newview/skins/default/textures/windows/Icon_Minimize_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Icon_Restore_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Restore_Foreground.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Icon_Restore_Press.png b/indra/newview/skins/default/textures/windows/Icon_Restore_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Icon_Undock_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Undock_Foreground.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Icon_Undock_Press.png b/indra/newview/skins/default/textures/windows/Icon_Undock_Press.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Inspector_Background.png b/indra/newview/skins/default/textures/windows/Inspector_Background.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Inspector_Hover.png b/indra/newview/skins/default/textures/windows/Inspector_Hover.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Inspector_I.png b/indra/newview/skins/default/textures/windows/Inspector_I.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Resize_Corner.png b/indra/newview/skins/default/textures/windows/Resize_Corner.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Toast_Background.png b/indra/newview/skins/default/textures/windows/Toast_Background.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Toast_CloseBtn.png b/indra/newview/skins/default/textures/windows/Toast_CloseBtn.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Toast_Over.png b/indra/newview/skins/default/textures/windows/Toast_Over.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Volume_Background.png b/indra/newview/skins/default/textures/windows/Volume_Background.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Wearables_Divider.png b/indra/newview/skins/default/textures/windows/Wearables_Divider.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Window_Background.png b/indra/newview/skins/default/textures/windows/Window_Background.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Window_Foreground.png b/indra/newview/skins/default/textures/windows/Window_Foreground.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Window_NoTitle_Background.png b/indra/newview/skins/default/textures/windows/Window_NoTitle_Background.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/Window_NoTitle_Foreground.png b/indra/newview/skins/default/textures/windows/Window_NoTitle_Foreground.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/windows/startup_logo.png b/indra/newview/skins/default/textures/windows/startup_logo.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/world/BeaconArrow.png b/indra/newview/skins/default/textures/world/BeaconArrow.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/world/NoEntryLines.png b/indra/newview/skins/default/textures/world/NoEntryLines.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/textures/world/NoEntryPassLines.png b/indra/newview/skins/default/textures/world/NoEntryPassLines.png old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_about.xml b/indra/newview/skins/default/xui/da/floater_about.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_about_land.xml b/indra/newview/skins/default/xui/da/floater_about_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_activeim.xml b/indra/newview/skins/default/xui/da/floater_activeim.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_animation_preview.xml b/indra/newview/skins/default/xui/da/floater_animation_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_auction.xml b/indra/newview/skins/default/xui/da/floater_auction.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_avatar_picker.xml b/indra/newview/skins/default/xui/da/floater_avatar_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_avatar_textures.xml b/indra/newview/skins/default/xui/da/floater_avatar_textures.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_beacons.xml b/indra/newview/skins/default/xui/da/floater_beacons.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_build_options.xml b/indra/newview/skins/default/xui/da/floater_build_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_bulk_perms.xml b/indra/newview/skins/default/xui/da/floater_bulk_perms.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_bumps.xml b/indra/newview/skins/default/xui/da/floater_bumps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_buy_contents.xml b/indra/newview/skins/default/xui/da/floater_buy_contents.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_buy_currency.xml b/indra/newview/skins/default/xui/da/floater_buy_currency.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/da/floater_buy_currency_html.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_buy_land.xml b/indra/newview/skins/default/xui/da/floater_buy_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_buy_object.xml b/indra/newview/skins/default/xui/da/floater_buy_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_camera.xml b/indra/newview/skins/default/xui/da/floater_camera.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_choose_group.xml b/indra/newview/skins/default/xui/da/floater_choose_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_color_picker.xml b/indra/newview/skins/default/xui/da/floater_color_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_critical.xml b/indra/newview/skins/default/xui/da/floater_critical.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_customize.xml b/indra/newview/skins/default/xui/da/floater_customize.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_device_settings.xml b/indra/newview/skins/default/xui/da/floater_device_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_env_settings.xml b/indra/newview/skins/default/xui/da/floater_env_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_event.xml b/indra/newview/skins/default/xui/da/floater_event.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_font_test.xml b/indra/newview/skins/default/xui/da/floater_font_test.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_gesture.xml b/indra/newview/skins/default/xui/da/floater_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_god_tools.xml b/indra/newview/skins/default/xui/da/floater_god_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_hardware_settings.xml b/indra/newview/skins/default/xui/da/floater_hardware_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_help_browser.xml b/indra/newview/skins/default/xui/da/floater_help_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_hud.xml b/indra/newview/skins/default/xui/da/floater_hud.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_im.xml b/indra/newview/skins/default/xui/da/floater_im.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_im_container.xml b/indra/newview/skins/default/xui/da/floater_im_container.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_im_session.xml b/indra/newview/skins/default/xui/da/floater_im_session.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_image_preview.xml b/indra/newview/skins/default/xui/da/floater_image_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_incoming_call.xml b/indra/newview/skins/default/xui/da/floater_incoming_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_inspect.xml b/indra/newview/skins/default/xui/da/floater_inspect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_inventory.xml b/indra/newview/skins/default/xui/da/floater_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_joystick.xml b/indra/newview/skins/default/xui/da/floater_joystick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_lagmeter.xml b/indra/newview/skins/default/xui/da/floater_lagmeter.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_land_holdings.xml b/indra/newview/skins/default/xui/da/floater_land_holdings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/da/floater_live_lsleditor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_lsl_guide.xml b/indra/newview/skins/default/xui/da/floater_lsl_guide.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_map.xml b/indra/newview/skins/default/xui/da/floater_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_media_browser.xml b/indra/newview/skins/default/xui/da/floater_media_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_media_settings.xml b/indra/newview/skins/default/xui/da/floater_media_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_mem_leaking.xml b/indra/newview/skins/default/xui/da/floater_mem_leaking.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_moveview.xml b/indra/newview/skins/default/xui/da/floater_moveview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_mute_object.xml b/indra/newview/skins/default/xui/da/floater_mute_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_my_friends.xml b/indra/newview/skins/default/xui/da/floater_my_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_nearby_chat.xml b/indra/newview/skins/default/xui/da/floater_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_openobject.xml b/indra/newview/skins/default/xui/da/floater_openobject.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/da/floater_outfit_save_as.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_outgoing_call.xml b/indra/newview/skins/default/xui/da/floater_outgoing_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_pay.xml b/indra/newview/skins/default/xui/da/floater_pay.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_pay_object.xml b/indra/newview/skins/default/xui/da/floater_pay_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_perm_prefs.xml b/indra/newview/skins/default/xui/da/floater_perm_prefs.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_postcard.xml b/indra/newview/skins/default/xui/da/floater_postcard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_preferences.xml b/indra/newview/skins/default/xui/da/floater_preferences.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_preview_animation.xml b/indra/newview/skins/default/xui/da/floater_preview_animation.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_preview_classified.xml b/indra/newview/skins/default/xui/da/floater_preview_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_preview_event.xml b/indra/newview/skins/default/xui/da/floater_preview_event.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture_shortcut.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture_steps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_preview_notecard.xml b/indra/newview/skins/default/xui/da/floater_preview_notecard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_preview_sound.xml b/indra/newview/skins/default/xui/da/floater_preview_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_preview_texture.xml b/indra/newview/skins/default/xui/da/floater_preview_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_publish_classified.xml b/indra/newview/skins/default/xui/da/floater_publish_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_region_info.xml b/indra/newview/skins/default/xui/da/floater_region_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_report_abuse.xml b/indra/newview/skins/default/xui/da/floater_report_abuse.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_script_debug.xml b/indra/newview/skins/default/xui/da/floater_script_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/da/floater_script_debug_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_script_limits.xml b/indra/newview/skins/default/xui/da/floater_script_limits.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_script_preview.xml b/indra/newview/skins/default/xui/da/floater_script_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_script_queue.xml b/indra/newview/skins/default/xui/da/floater_script_queue.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_script_search.xml b/indra/newview/skins/default/xui/da/floater_script_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_search.xml b/indra/newview/skins/default/xui/da/floater_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_select_key.xml b/indra/newview/skins/default/xui/da/floater_select_key.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_sell_land.xml b/indra/newview/skins/default/xui/da/floater_sell_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_settings_debug.xml b/indra/newview/skins/default/xui/da/floater_settings_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_snapshot.xml b/indra/newview/skins/default/xui/da/floater_snapshot.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_sound_preview.xml b/indra/newview/skins/default/xui/da/floater_sound_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_statistics.xml b/indra/newview/skins/default/xui/da/floater_statistics.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_stats.xml b/indra/newview/skins/default/xui/da/floater_stats.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_sys_well.xml b/indra/newview/skins/default/xui/da/floater_sys_well.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_telehub.xml b/indra/newview/skins/default/xui/da/floater_telehub.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_tools.xml b/indra/newview/skins/default/xui/da/floater_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_top_objects.xml b/indra/newview/skins/default/xui/da/floater_top_objects.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_tos.xml b/indra/newview/skins/default/xui/da/floater_tos.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_url_entry.xml b/indra/newview/skins/default/xui/da/floater_url_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_voice_controls.xml b/indra/newview/skins/default/xui/da/floater_voice_controls.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_voice_effect.xml b/indra/newview/skins/default/xui/da/floater_voice_effect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_water.xml b/indra/newview/skins/default/xui/da/floater_water.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/da/floater_whitelist_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_windlight_options.xml b/indra/newview/skins/default/xui/da/floater_windlight_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_window_size.xml b/indra/newview/skins/default/xui/da/floater_window_size.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/floater_world_map.xml b/indra/newview/skins/default/xui/da/floater_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/inspect_avatar.xml b/indra/newview/skins/default/xui/da/inspect_avatar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/inspect_group.xml b/indra/newview/skins/default/xui/da/inspect_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/inspect_object.xml b/indra/newview/skins/default/xui/da/inspect_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/inspect_remote_object.xml b/indra/newview/skins/default/xui/da/inspect_remote_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/language_settings.xml b/indra/newview/skins/default/xui/da/language_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_attachment_other.xml b/indra/newview/skins/default/xui/da/menu_attachment_other.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_attachment_self.xml b/indra/newview/skins/default/xui/da/menu_attachment_self.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_avatar_icon.xml b/indra/newview/skins/default/xui/da/menu_avatar_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_avatar_other.xml b/indra/newview/skins/default/xui/da/menu_avatar_other.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_avatar_self.xml b/indra/newview/skins/default/xui/da/menu_avatar_self.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_bottomtray.xml b/indra/newview/skins/default/xui/da/menu_bottomtray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_cof_attachment.xml b/indra/newview/skins/default/xui/da/menu_cof_attachment.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_cof_body_part.xml b/indra/newview/skins/default/xui/da/menu_cof_body_part.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_cof_clothing.xml b/indra/newview/skins/default/xui/da/menu_cof_clothing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_cof_gear.xml b/indra/newview/skins/default/xui/da/menu_cof_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_edit.xml b/indra/newview/skins/default/xui/da/menu_edit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_favorites.xml b/indra/newview/skins/default/xui/da/menu_favorites.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_gesture_gear.xml b/indra/newview/skins/default/xui/da/menu_gesture_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_group_plus.xml b/indra/newview/skins/default/xui/da/menu_group_plus.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_hide_navbar.xml b/indra/newview/skins/default/xui/da/menu_hide_navbar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_im_well_button.xml b/indra/newview/skins/default/xui/da/menu_im_well_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/da/menu_imchiclet_adhoc.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/da/menu_imchiclet_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/da/menu_imchiclet_p2p.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/da/menu_inspect_object_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/da/menu_inv_offer_chiclet.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_inventory.xml b/indra/newview/skins/default/xui/da/menu_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_inventory_add.xml b/indra/newview/skins/default/xui/da/menu_inventory_add.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/da/menu_inventory_gear_default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_land.xml b/indra/newview/skins/default/xui/da/menu_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_landmark.xml b/indra/newview/skins/default/xui/da/menu_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_login.xml b/indra/newview/skins/default/xui/da/menu_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_mini_map.xml b/indra/newview/skins/default/xui/da/menu_mini_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_navbar.xml b/indra/newview/skins/default/xui/da/menu_navbar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_nearby_chat.xml b/indra/newview/skins/default/xui/da/menu_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_notification_well_button.xml b/indra/newview/skins/default/xui/da/menu_notification_well_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_object.xml b/indra/newview/skins/default/xui/da/menu_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_object_icon.xml b/indra/newview/skins/default/xui/da/menu_object_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_outfit_gear.xml b/indra/newview/skins/default/xui/da/menu_outfit_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_outfit_tab.xml b/indra/newview/skins/default/xui/da/menu_outfit_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_participant_list.xml b/indra/newview/skins/default/xui/da/menu_participant_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/da/menu_people_friends_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_people_groups.xml b/indra/newview/skins/default/xui/da/menu_people_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/da/menu_people_groups_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_people_nearby.xml b/indra/newview/skins/default/xui/da/menu_people_nearby.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/da/menu_people_nearby_multiselect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/da/menu_people_nearby_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/da/menu_people_recent_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_picks.xml b/indra/newview/skins/default/xui/da/menu_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_picks_plus.xml b/indra/newview/skins/default/xui/da/menu_picks_plus.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_place.xml b/indra/newview/skins/default/xui/da/menu_place.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_place_add_button.xml b/indra/newview/skins/default/xui/da/menu_place_add_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/da/menu_places_gear_folder.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/da/menu_places_gear_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_profile_overflow.xml b/indra/newview/skins/default/xui/da/menu_profile_overflow.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_save_outfit.xml b/indra/newview/skins/default/xui/da/menu_save_outfit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_script_chiclet.xml b/indra/newview/skins/default/xui/da/menu_script_chiclet.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_slurl.xml b/indra/newview/skins/default/xui/da/menu_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/da/menu_teleport_history_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/da/menu_teleport_history_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/da/menu_teleport_history_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_text_editor.xml b/indra/newview/skins/default/xui/da/menu_text_editor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_topinfobar.xml b/indra/newview/skins/default/xui/da/menu_topinfobar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_url_agent.xml b/indra/newview/skins/default/xui/da/menu_url_agent.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_url_group.xml b/indra/newview/skins/default/xui/da/menu_url_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_url_http.xml b/indra/newview/skins/default/xui/da/menu_url_http.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_url_inventory.xml b/indra/newview/skins/default/xui/da/menu_url_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_url_map.xml b/indra/newview/skins/default/xui/da/menu_url_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_url_objectim.xml b/indra/newview/skins/default/xui/da/menu_url_objectim.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_url_parcel.xml b/indra/newview/skins/default/xui/da/menu_url_parcel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_url_slapp.xml b/indra/newview/skins/default/xui/da/menu_url_slapp.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_url_slurl.xml b/indra/newview/skins/default/xui/da/menu_url_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_url_teleport.xml b/indra/newview/skins/default/xui/da/menu_url_teleport.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_wearing_gear.xml b/indra/newview/skins/default/xui/da/menu_wearing_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/menu_wearing_tab.xml b/indra/newview/skins/default/xui/da/menu_wearing_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/mime_types.xml b/indra/newview/skins/default/xui/da/mime_types.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/mime_types_linux.xml b/indra/newview/skins/default/xui/da/mime_types_linux.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/mime_types_mac.xml b/indra/newview/skins/default/xui/da/mime_types_mac.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/da/outfit_accordion_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_active_object_row.xml b/indra/newview/skins/default/xui/da/panel_active_object_row.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_audio_device.xml b/indra/newview/skins/default/xui/da/panel_audio_device.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/da/panel_avatar_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/da/panel_block_list_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/da/panel_body_parts_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/da/panel_bodyparts_list_button_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_bottomtray.xml b/indra/newview/skins/default/xui/da/panel_bottomtray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/da/panel_bottomtray_lite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_classified_info.xml b/indra/newview/skins/default/xui/da/panel_classified_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/da/panel_clothing_list_button_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/da/panel_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_cof_wearables.xml b/indra/newview/skins/default/xui/da/panel_cof_wearables.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/da/panel_deletable_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/da/panel_dummy_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_alpha.xml b/indra/newview/skins/default/xui/da/panel_edit_alpha.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_classified.xml b/indra/newview/skins/default/xui/da/panel_edit_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_eyes.xml b/indra/newview/skins/default/xui/da/panel_edit_eyes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_gloves.xml b/indra/newview/skins/default/xui/da/panel_edit_gloves.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_hair.xml b/indra/newview/skins/default/xui/da/panel_edit_hair.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_jacket.xml b/indra/newview/skins/default/xui/da/panel_edit_jacket.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_pants.xml b/indra/newview/skins/default/xui/da/panel_edit_pants.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_pick.xml b/indra/newview/skins/default/xui/da/panel_edit_pick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_profile.xml b/indra/newview/skins/default/xui/da/panel_edit_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_shape.xml b/indra/newview/skins/default/xui/da/panel_edit_shape.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_shirt.xml b/indra/newview/skins/default/xui/da/panel_edit_shirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_shoes.xml b/indra/newview/skins/default/xui/da/panel_edit_shoes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_skin.xml b/indra/newview/skins/default/xui/da/panel_edit_skin.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_skirt.xml b/indra/newview/skins/default/xui/da/panel_edit_skirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_socks.xml b/indra/newview/skins/default/xui/da/panel_edit_socks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/da/panel_edit_tattoo.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_underpants.xml b/indra/newview/skins/default/xui/da/panel_edit_underpants.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/da/panel_edit_undershirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_edit_wearable.xml b/indra/newview/skins/default/xui/da/panel_edit_wearable.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_friends.xml b/indra/newview/skins/default/xui/da/panel_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_group_control_panel.xml b/indra/newview/skins/default/xui/da/panel_group_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_group_general.xml b/indra/newview/skins/default/xui/da/panel_group_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/da/panel_group_info_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_group_invite.xml b/indra/newview/skins/default/xui/da/panel_group_invite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_group_land_money.xml b/indra/newview/skins/default/xui/da/panel_group_land_money.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_group_list_item.xml b/indra/newview/skins/default/xui/da/panel_group_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_group_notices.xml b/indra/newview/skins/default/xui/da/panel_group_notices.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_group_notify.xml b/indra/newview/skins/default/xui/da/panel_group_notify.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_group_roles.xml b/indra/newview/skins/default/xui/da/panel_group_roles.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_groups.xml b/indra/newview/skins/default/xui/da/panel_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_im_control_panel.xml b/indra/newview/skins/default/xui/da/panel_im_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_inventory_item.xml b/indra/newview/skins/default/xui/da/panel_inventory_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_landmark_info.xml b/indra/newview/skins/default/xui/da/panel_landmark_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_landmarks.xml b/indra/newview/skins/default/xui/da/panel_landmarks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_login.xml b/indra/newview/skins/default/xui/da/panel_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_main_inventory.xml b/indra/newview/skins/default/xui/da/panel_main_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_me.xml b/indra/newview/skins/default/xui/da/panel_me.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_media_settings_general.xml b/indra/newview/skins/default/xui/da/panel_media_settings_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/da/panel_media_settings_permissions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_media_settings_security.xml b/indra/newview/skins/default/xui/da/panel_media_settings_security.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_my_profile.xml b/indra/newview/skins/default/xui/da/panel_my_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_navigation_bar.xml b/indra/newview/skins/default/xui/da/panel_navigation_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_nearby_chat.xml b/indra/newview/skins/default/xui/da/panel_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/da/panel_nearby_chat_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_nearby_media.xml b/indra/newview/skins/default/xui/da/panel_nearby_media.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_notes.xml b/indra/newview/skins/default/xui/da/panel_notes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_online_status.xml b/indra/newview/skins/default/xui/da/panel_online_status.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_online_status_toast.xml b/indra/newview/skins/default/xui/da/panel_online_status_toast.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_outfit_edit.xml b/indra/newview/skins/default/xui/da/panel_outfit_edit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/da/panel_outfits_inventory_gear_default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_outfits_list.xml b/indra/newview/skins/default/xui/da/panel_outfits_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/da/panel_outfits_wearing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_people.xml b/indra/newview/skins/default/xui/da/panel_people.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_pick_info.xml b/indra/newview/skins/default/xui/da/panel_pick_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_picks.xml b/indra/newview/skins/default/xui/da/panel_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_place_profile.xml b/indra/newview/skins/default/xui/da/panel_place_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_places.xml b/indra/newview/skins/default/xui/da/panel_places.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/da/panel_preferences_alerts.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_preferences_general.xml b/indra/newview/skins/default/xui/da/panel_preferences_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_preferences_setup.xml b/indra/newview/skins/default/xui/da/panel_preferences_setup.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_preferences_sound.xml b/indra/newview/skins/default/xui/da/panel_preferences_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_profile.xml b/indra/newview/skins/default/xui/da/panel_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_profile_view.xml b/indra/newview/skins/default/xui/da/panel_profile_view.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_region_covenant.xml b/indra/newview/skins/default/xui/da/panel_region_covenant.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_region_debug.xml b/indra/newview/skins/default/xui/da/panel_region_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_region_estate.xml b/indra/newview/skins/default/xui/da/panel_region_estate.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_region_general.xml b/indra/newview/skins/default/xui/da/panel_region_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_region_general_layout.xml b/indra/newview/skins/default/xui/da/panel_region_general_layout.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_region_terrain.xml b/indra/newview/skins/default/xui/da/panel_region_terrain.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_region_texture.xml b/indra/newview/skins/default/xui/da/panel_region_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_script_ed.xml b/indra/newview/skins/default/xui/da/panel_script_ed.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/da/panel_script_limits_my_avatar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/da/panel_script_limits_region_memory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_scrolling_param.xml b/indra/newview/skins/default/xui/da/panel_scrolling_param.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_side_tray.xml b/indra/newview/skins/default/xui/da/panel_side_tray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/da/panel_side_tray_tab_caption.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/da/panel_stand_stop_flying.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_status_bar.xml b/indra/newview/skins/default/xui/da/panel_status_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_teleport_history.xml b/indra/newview/skins/default/xui/da/panel_teleport_history.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/da/panel_teleport_history_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_voice_effect.xml b/indra/newview/skins/default/xui/da/panel_voice_effect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/panel_world_map.xml b/indra/newview/skins/default/xui/da/panel_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/role_actions.xml b/indra/newview/skins/default/xui/da/role_actions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/sidepanel_appearance.xml b/indra/newview/skins/default/xui/da/sidepanel_appearance.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/sidepanel_inventory.xml b/indra/newview/skins/default/xui/da/sidepanel_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/sidepanel_item_info.xml b/indra/newview/skins/default/xui/da/sidepanel_item_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/sidepanel_task_info.xml b/indra/newview/skins/default/xui/da/sidepanel_task_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/teleport_strings.xml b/indra/newview/skins/default/xui/da/teleport_strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/da/xui_version.xml b/indra/newview/skins/default/xui/da/xui_version.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_about.xml b/indra/newview/skins/default/xui/de/floater_about.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_activeim.xml b/indra/newview/skins/default/xui/de/floater_activeim.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_animation_preview.xml b/indra/newview/skins/default/xui/de/floater_animation_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_auction.xml b/indra/newview/skins/default/xui/de/floater_auction.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_avatar_picker.xml b/indra/newview/skins/default/xui/de/floater_avatar_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_avatar_textures.xml b/indra/newview/skins/default/xui/de/floater_avatar_textures.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_beacons.xml b/indra/newview/skins/default/xui/de/floater_beacons.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_build_options.xml b/indra/newview/skins/default/xui/de/floater_build_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_bumps.xml b/indra/newview/skins/default/xui/de/floater_bumps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_buy_contents.xml b/indra/newview/skins/default/xui/de/floater_buy_contents.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_buy_currency.xml b/indra/newview/skins/default/xui/de/floater_buy_currency.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/de/floater_buy_currency_html.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_buy_land.xml b/indra/newview/skins/default/xui/de/floater_buy_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_buy_object.xml b/indra/newview/skins/default/xui/de/floater_buy_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_camera.xml b/indra/newview/skins/default/xui/de/floater_camera.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_choose_group.xml b/indra/newview/skins/default/xui/de/floater_choose_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_color_picker.xml b/indra/newview/skins/default/xui/de/floater_color_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_critical.xml b/indra/newview/skins/default/xui/de/floater_critical.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_customize.xml b/indra/newview/skins/default/xui/de/floater_customize.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_device_settings.xml b/indra/newview/skins/default/xui/de/floater_device_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_env_settings.xml b/indra/newview/skins/default/xui/de/floater_env_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_event.xml b/indra/newview/skins/default/xui/de/floater_event.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_first_time_tip.xml b/indra/newview/skins/default/xui/de/floater_first_time_tip.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_font_test.xml b/indra/newview/skins/default/xui/de/floater_font_test.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_gesture.xml b/indra/newview/skins/default/xui/de/floater_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_god_tools.xml b/indra/newview/skins/default/xui/de/floater_god_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_hardware_settings.xml b/indra/newview/skins/default/xui/de/floater_hardware_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_help_browser.xml b/indra/newview/skins/default/xui/de/floater_help_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_hud.xml b/indra/newview/skins/default/xui/de/floater_hud.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_im.xml b/indra/newview/skins/default/xui/de/floater_im.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_im_container.xml b/indra/newview/skins/default/xui/de/floater_im_container.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_im_session.xml b/indra/newview/skins/default/xui/de/floater_im_session.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_image_preview.xml b/indra/newview/skins/default/xui/de/floater_image_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_incoming_call.xml b/indra/newview/skins/default/xui/de/floater_incoming_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_inspect.xml b/indra/newview/skins/default/xui/de/floater_inspect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_inventory.xml b/indra/newview/skins/default/xui/de/floater_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml old mode 100644 new mode 100755 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 old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_joystick.xml b/indra/newview/skins/default/xui/de/floater_joystick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_lagmeter.xml b/indra/newview/skins/default/xui/de/floater_lagmeter.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_land_holdings.xml b/indra/newview/skins/default/xui/de/floater_land_holdings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_lsl_guide.xml b/indra/newview/skins/default/xui/de/floater_lsl_guide.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_map.xml b/indra/newview/skins/default/xui/de/floater_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_media_browser.xml b/indra/newview/skins/default/xui/de/floater_media_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_media_settings.xml b/indra/newview/skins/default/xui/de/floater_media_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_mem_leaking.xml b/indra/newview/skins/default/xui/de/floater_mem_leaking.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_moveview.xml b/indra/newview/skins/default/xui/de/floater_moveview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_mute_object.xml b/indra/newview/skins/default/xui/de/floater_mute_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_my_friends.xml b/indra/newview/skins/default/xui/de/floater_my_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_nearby_chat.xml b/indra/newview/skins/default/xui/de/floater_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_notification.xml b/indra/newview/skins/default/xui/de/floater_notification.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_notifications_console.xml b/indra/newview/skins/default/xui/de/floater_notifications_console.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_openobject.xml b/indra/newview/skins/default/xui/de/floater_openobject.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/de/floater_outfit_save_as.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_outgoing_call.xml b/indra/newview/skins/default/xui/de/floater_outgoing_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_pay.xml b/indra/newview/skins/default/xui/de/floater_pay.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_pay_object.xml b/indra/newview/skins/default/xui/de/floater_pay_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_perm_prefs.xml b/indra/newview/skins/default/xui/de/floater_perm_prefs.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_post_process.xml b/indra/newview/skins/default/xui/de/floater_post_process.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_postcard.xml b/indra/newview/skins/default/xui/de/floater_postcard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_preferences.xml b/indra/newview/skins/default/xui/de/floater_preferences.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_preview_animation.xml b/indra/newview/skins/default/xui/de/floater_preview_animation.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_preview_classified.xml b/indra/newview/skins/default/xui/de/floater_preview_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_preview_event.xml b/indra/newview/skins/default/xui/de/floater_preview_event.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture_shortcut.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_preview_notecard.xml b/indra/newview/skins/default/xui/de/floater_preview_notecard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_preview_sound.xml b/indra/newview/skins/default/xui/de/floater_preview_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_preview_texture.xml b/indra/newview/skins/default/xui/de/floater_preview_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_publish_classified.xml b/indra/newview/skins/default/xui/de/floater_publish_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_region_info.xml b/indra/newview/skins/default/xui/de/floater_region_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_report_abuse.xml b/indra/newview/skins/default/xui/de/floater_report_abuse.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_script_debug.xml b/indra/newview/skins/default/xui/de/floater_script_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/de/floater_script_debug_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_script_limits.xml b/indra/newview/skins/default/xui/de/floater_script_limits.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_script_preview.xml b/indra/newview/skins/default/xui/de/floater_script_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_script_queue.xml b/indra/newview/skins/default/xui/de/floater_script_queue.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_script_search.xml b/indra/newview/skins/default/xui/de/floater_script_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_search.xml b/indra/newview/skins/default/xui/de/floater_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_select_key.xml b/indra/newview/skins/default/xui/de/floater_select_key.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_sell_land.xml b/indra/newview/skins/default/xui/de/floater_sell_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_settings_debug.xml b/indra/newview/skins/default/xui/de/floater_settings_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_snapshot.xml b/indra/newview/skins/default/xui/de/floater_snapshot.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_sound_preview.xml b/indra/newview/skins/default/xui/de/floater_sound_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_statistics.xml b/indra/newview/skins/default/xui/de/floater_statistics.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_stats.xml b/indra/newview/skins/default/xui/de/floater_stats.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_sys_well.xml b/indra/newview/skins/default/xui/de/floater_sys_well.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_telehub.xml b/indra/newview/skins/default/xui/de/floater_telehub.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_top_objects.xml b/indra/newview/skins/default/xui/de/floater_top_objects.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_tos.xml b/indra/newview/skins/default/xui/de/floater_tos.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_url_entry.xml b/indra/newview/skins/default/xui/de/floater_url_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_voice_controls.xml b/indra/newview/skins/default/xui/de/floater_voice_controls.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_voice_effect.xml b/indra/newview/skins/default/xui/de/floater_voice_effect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_water.xml b/indra/newview/skins/default/xui/de/floater_water.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/de/floater_wearable_save_as.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/de/floater_whitelist_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_windlight_options.xml b/indra/newview/skins/default/xui/de/floater_windlight_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_window_size.xml b/indra/newview/skins/default/xui/de/floater_window_size.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/floater_world_map.xml b/indra/newview/skins/default/xui/de/floater_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/inspect_avatar.xml b/indra/newview/skins/default/xui/de/inspect_avatar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/inspect_group.xml b/indra/newview/skins/default/xui/de/inspect_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/inspect_object.xml b/indra/newview/skins/default/xui/de/inspect_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/inspect_remote_object.xml b/indra/newview/skins/default/xui/de/inspect_remote_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/language_settings.xml b/indra/newview/skins/default/xui/de/language_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_attachment_other.xml b/indra/newview/skins/default/xui/de/menu_attachment_other.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_attachment_self.xml b/indra/newview/skins/default/xui/de/menu_attachment_self.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_avatar_icon.xml b/indra/newview/skins/default/xui/de/menu_avatar_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_avatar_other.xml b/indra/newview/skins/default/xui/de/menu_avatar_other.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_avatar_self.xml b/indra/newview/skins/default/xui/de/menu_avatar_self.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_bottomtray.xml b/indra/newview/skins/default/xui/de/menu_bottomtray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_cof_attachment.xml b/indra/newview/skins/default/xui/de/menu_cof_attachment.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_cof_body_part.xml b/indra/newview/skins/default/xui/de/menu_cof_body_part.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_cof_clothing.xml b/indra/newview/skins/default/xui/de/menu_cof_clothing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_cof_gear.xml b/indra/newview/skins/default/xui/de/menu_cof_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_edit.xml b/indra/newview/skins/default/xui/de/menu_edit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_favorites.xml b/indra/newview/skins/default/xui/de/menu_favorites.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_gesture_gear.xml b/indra/newview/skins/default/xui/de/menu_gesture_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_group_plus.xml b/indra/newview/skins/default/xui/de/menu_group_plus.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_hide_navbar.xml b/indra/newview/skins/default/xui/de/menu_hide_navbar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_im_well_button.xml b/indra/newview/skins/default/xui/de/menu_im_well_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/de/menu_imchiclet_adhoc.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/de/menu_imchiclet_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/de/menu_imchiclet_p2p.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/de/menu_inspect_avatar_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/de/menu_inspect_object_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/de/menu_inv_offer_chiclet.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_inventory.xml b/indra/newview/skins/default/xui/de/menu_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_inventory_add.xml b/indra/newview/skins/default/xui/de/menu_inventory_add.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/de/menu_inventory_gear_default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_land.xml b/indra/newview/skins/default/xui/de/menu_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_landmark.xml b/indra/newview/skins/default/xui/de/menu_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_login.xml b/indra/newview/skins/default/xui/de/menu_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_mini_map.xml b/indra/newview/skins/default/xui/de/menu_mini_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_navbar.xml b/indra/newview/skins/default/xui/de/menu_navbar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_nearby_chat.xml b/indra/newview/skins/default/xui/de/menu_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_notification_well_button.xml b/indra/newview/skins/default/xui/de/menu_notification_well_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_object.xml b/indra/newview/skins/default/xui/de/menu_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_object_icon.xml b/indra/newview/skins/default/xui/de/menu_object_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_outfit_gear.xml b/indra/newview/skins/default/xui/de/menu_outfit_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_outfit_tab.xml b/indra/newview/skins/default/xui/de/menu_outfit_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_participant_list.xml b/indra/newview/skins/default/xui/de/menu_participant_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_friends_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_people_groups.xml b/indra/newview/skins/default/xui/de/menu_people_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_groups_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_people_nearby.xml b/indra/newview/skins/default/xui/de/menu_people_nearby.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/de/menu_people_nearby_multiselect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_recent_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_picks.xml b/indra/newview/skins/default/xui/de/menu_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_picks_plus.xml b/indra/newview/skins/default/xui/de/menu_picks_plus.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_place.xml b/indra/newview/skins/default/xui/de/menu_place.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_place_add_button.xml b/indra/newview/skins/default/xui/de/menu_place_add_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/de/menu_places_gear_folder.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/de/menu_places_gear_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_profile_overflow.xml b/indra/newview/skins/default/xui/de/menu_profile_overflow.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_save_outfit.xml b/indra/newview/skins/default/xui/de/menu_save_outfit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_script_chiclet.xml b/indra/newview/skins/default/xui/de/menu_script_chiclet.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_slurl.xml b/indra/newview/skins/default/xui/de/menu_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/de/menu_teleport_history_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/de/menu_teleport_history_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/de/menu_teleport_history_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_text_editor.xml b/indra/newview/skins/default/xui/de/menu_text_editor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_topinfobar.xml b/indra/newview/skins/default/xui/de/menu_topinfobar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_url_agent.xml b/indra/newview/skins/default/xui/de/menu_url_agent.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_url_group.xml b/indra/newview/skins/default/xui/de/menu_url_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_url_http.xml b/indra/newview/skins/default/xui/de/menu_url_http.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_url_inventory.xml b/indra/newview/skins/default/xui/de/menu_url_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_url_map.xml b/indra/newview/skins/default/xui/de/menu_url_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_url_objectim.xml b/indra/newview/skins/default/xui/de/menu_url_objectim.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_url_parcel.xml b/indra/newview/skins/default/xui/de/menu_url_parcel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_url_slapp.xml b/indra/newview/skins/default/xui/de/menu_url_slapp.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_url_slurl.xml b/indra/newview/skins/default/xui/de/menu_url_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_url_teleport.xml b/indra/newview/skins/default/xui/de/menu_url_teleport.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/de/menu_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_wearing_gear.xml b/indra/newview/skins/default/xui/de/menu_wearing_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/menu_wearing_tab.xml b/indra/newview/skins/default/xui/de/menu_wearing_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/mime_types.xml b/indra/newview/skins/default/xui/de/mime_types.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/mime_types_linux.xml b/indra/newview/skins/default/xui/de/mime_types_linux.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/mime_types_mac.xml b/indra/newview/skins/default/xui/de/mime_types_mac.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/de/outfit_accordion_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_active_object_row.xml b/indra/newview/skins/default/xui/de/panel_active_object_row.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_activeim_row.xml b/indra/newview/skins/default/xui/de/panel_activeim_row.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/de/panel_adhoc_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_audio_device.xml b/indra/newview/skins/default/xui/de/panel_audio_device.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/de/panel_avatar_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_avatar_tag.xml b/indra/newview/skins/default/xui/de/panel_avatar_tag.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/de/panel_block_list_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/de/panel_body_parts_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/de/panel_bodyparts_list_button_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_bottomtray.xml b/indra/newview/skins/default/xui/de/panel_bottomtray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/de/panel_bottomtray_lite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_chat_header.xml b/indra/newview/skins/default/xui/de/panel_chat_header.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_classified_info.xml b/indra/newview/skins/default/xui/de/panel_classified_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/de/panel_clothing_list_button_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/de/panel_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_cof_wearables.xml b/indra/newview/skins/default/xui/de/panel_cof_wearables.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/de/panel_deletable_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/de/panel_dummy_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_alpha.xml b/indra/newview/skins/default/xui/de/panel_edit_alpha.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_classified.xml b/indra/newview/skins/default/xui/de/panel_edit_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_eyes.xml b/indra/newview/skins/default/xui/de/panel_edit_eyes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_gloves.xml b/indra/newview/skins/default/xui/de/panel_edit_gloves.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_hair.xml b/indra/newview/skins/default/xui/de/panel_edit_hair.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_jacket.xml b/indra/newview/skins/default/xui/de/panel_edit_jacket.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_pants.xml b/indra/newview/skins/default/xui/de/panel_edit_pants.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_pick.xml b/indra/newview/skins/default/xui/de/panel_edit_pick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_profile.xml b/indra/newview/skins/default/xui/de/panel_edit_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_shape.xml b/indra/newview/skins/default/xui/de/panel_edit_shape.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_shirt.xml b/indra/newview/skins/default/xui/de/panel_edit_shirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_shoes.xml b/indra/newview/skins/default/xui/de/panel_edit_shoes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_skin.xml b/indra/newview/skins/default/xui/de/panel_edit_skin.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_skirt.xml b/indra/newview/skins/default/xui/de/panel_edit_skirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_socks.xml b/indra/newview/skins/default/xui/de/panel_edit_socks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/de/panel_edit_tattoo.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_underpants.xml b/indra/newview/skins/default/xui/de/panel_edit_underpants.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/de/panel_edit_undershirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_edit_wearable.xml b/indra/newview/skins/default/xui/de/panel_edit_wearable.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_friends.xml b/indra/newview/skins/default/xui/de/panel_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_group_control_panel.xml b/indra/newview/skins/default/xui/de/panel_group_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_group_general.xml b/indra/newview/skins/default/xui/de/panel_group_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_group_invite.xml b/indra/newview/skins/default/xui/de/panel_group_invite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_group_land_money.xml b/indra/newview/skins/default/xui/de/panel_group_land_money.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_group_list_item.xml b/indra/newview/skins/default/xui/de/panel_group_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_group_notices.xml b/indra/newview/skins/default/xui/de/panel_group_notices.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_group_notify.xml b/indra/newview/skins/default/xui/de/panel_group_notify.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_group_roles.xml b/indra/newview/skins/default/xui/de/panel_group_roles.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_groups.xml b/indra/newview/skins/default/xui/de/panel_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_im_control_panel.xml b/indra/newview/skins/default/xui/de/panel_im_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_instant_message.xml b/indra/newview/skins/default/xui/de/panel_instant_message.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_inventory_item.xml b/indra/newview/skins/default/xui/de/panel_inventory_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_landmark_info.xml b/indra/newview/skins/default/xui/de/panel_landmark_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_landmarks.xml b/indra/newview/skins/default/xui/de/panel_landmarks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_login.xml b/indra/newview/skins/default/xui/de/panel_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_main_inventory.xml b/indra/newview/skins/default/xui/de/panel_main_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_me.xml b/indra/newview/skins/default/xui/de/panel_me.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_media_settings_general.xml b/indra/newview/skins/default/xui/de/panel_media_settings_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/de/panel_media_settings_permissions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_media_settings_security.xml b/indra/newview/skins/default/xui/de/panel_media_settings_security.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_my_profile.xml b/indra/newview/skins/default/xui/de/panel_my_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_navigation_bar.xml b/indra/newview/skins/default/xui/de/panel_navigation_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_nearby_chat.xml b/indra/newview/skins/default/xui/de/panel_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_nearby_media.xml b/indra/newview/skins/default/xui/de/panel_nearby_media.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_notes.xml b/indra/newview/skins/default/xui/de/panel_notes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_notifications_channel.xml b/indra/newview/skins/default/xui/de/panel_notifications_channel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_online_status.xml b/indra/newview/skins/default/xui/de/panel_online_status.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_online_status_toast.xml b/indra/newview/skins/default/xui/de/panel_online_status_toast.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_outfit_edit.xml b/indra/newview/skins/default/xui/de/panel_outfit_edit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/de/panel_outfits_inventory_gear_default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_outfits_list.xml b/indra/newview/skins/default/xui/de/panel_outfits_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/de/panel_outfits_wearing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_people.xml b/indra/newview/skins/default/xui/de/panel_people.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_pick_info.xml b/indra/newview/skins/default/xui/de/panel_pick_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_picks.xml b/indra/newview/skins/default/xui/de/panel_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_place_profile.xml b/indra/newview/skins/default/xui/de/panel_place_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_places.xml b/indra/newview/skins/default/xui/de/panel_places.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_preferences_general.xml b/indra/newview/skins/default/xui/de/panel_preferences_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_preferences_sound.xml b/indra/newview/skins/default/xui/de/panel_preferences_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_profile.xml b/indra/newview/skins/default/xui/de/panel_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_profile_view.xml b/indra/newview/skins/default/xui/de/panel_profile_view.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_region_covenant.xml b/indra/newview/skins/default/xui/de/panel_region_covenant.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_region_debug.xml b/indra/newview/skins/default/xui/de/panel_region_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_region_estate.xml b/indra/newview/skins/default/xui/de/panel_region_estate.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_region_general.xml b/indra/newview/skins/default/xui/de/panel_region_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_region_general_layout.xml b/indra/newview/skins/default/xui/de/panel_region_general_layout.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_region_terrain.xml b/indra/newview/skins/default/xui/de/panel_region_terrain.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_region_texture.xml b/indra/newview/skins/default/xui/de/panel_region_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_script_ed.xml b/indra/newview/skins/default/xui/de/panel_script_ed.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/de/panel_script_limits_my_avatar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/de/panel_script_limits_region_memory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_scrolling_param.xml b/indra/newview/skins/default/xui/de/panel_scrolling_param.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_side_tray.xml b/indra/newview/skins/default/xui/de/panel_side_tray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/de/panel_side_tray_tab_caption.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/de/panel_sidetray_home_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_status_bar.xml b/indra/newview/skins/default/xui/de/panel_status_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_sys_well_item.xml b/indra/newview/skins/default/xui/de/panel_sys_well_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_teleport_history.xml b/indra/newview/skins/default/xui/de/panel_teleport_history.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/de/panel_teleport_history_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_voice_effect.xml b/indra/newview/skins/default/xui/de/panel_voice_effect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/panel_world_map.xml b/indra/newview/skins/default/xui/de/panel_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/role_actions.xml b/indra/newview/skins/default/xui/de/role_actions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/sidepanel_appearance.xml b/indra/newview/skins/default/xui/de/sidepanel_appearance.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/sidepanel_inventory.xml b/indra/newview/skins/default/xui/de/sidepanel_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/sidepanel_item_info.xml b/indra/newview/skins/default/xui/de/sidepanel_item_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/sidepanel_task_info.xml b/indra/newview/skins/default/xui/de/sidepanel_task_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/teleport_strings.xml b/indra/newview/skins/default/xui/de/teleport_strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/de/xui_version.xml b/indra/newview/skins/default/xui/de/xui_version.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/accordion_drag.xml b/indra/newview/skins/default/xui/en/accordion_drag.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/accordion_parent.xml b/indra/newview/skins/default/xui/en/accordion_parent.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/alert_button.xml b/indra/newview/skins/default/xui/en/alert_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/alert_check_box.xml b/indra/newview/skins/default/xui/en/alert_check_box.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/alert_icon.xml b/indra/newview/skins/default/xui/en/alert_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/alert_line_editor.xml b/indra/newview/skins/default/xui/en/alert_line_editor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/favorites_bar_button.xml b/indra/newview/skins/default/xui/en/favorites_bar_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_activeim.xml b/indra/newview/skins/default/xui/en/floater_activeim.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_animation_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_auction.xml b/indra/newview/skins/default/xui/en/floater_auction.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_avatar_textures.xml b/indra/newview/skins/default/xui/en/floater_avatar_textures.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_beacons.xml b/indra/newview/skins/default/xui/en/floater_beacons.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_build_options.xml b/indra/newview/skins/default/xui/en/floater_build_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_bumps.xml b/indra/newview/skins/default/xui/en/floater_bumps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_buy_contents.xml b/indra/newview/skins/default/xui/en/floater_buy_contents.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency.xml b/indra/newview/skins/default/xui/en/floater_buy_currency.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_buy_land.xml b/indra/newview/skins/default/xui/en/floater_buy_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_buy_object.xml b/indra/newview/skins/default/xui/en/floater_buy_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_choose_group.xml b/indra/newview/skins/default/xui/en/floater_choose_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_color_picker.xml b/indra/newview/skins/default/xui/en/floater_color_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_critical.xml b/indra/newview/skins/default/xui/en/floater_critical.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_device_settings.xml b/indra/newview/skins/default/xui/en/floater_device_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_env_settings.xml b/indra/newview/skins/default/xui/en/floater_env_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_event.xml b/indra/newview/skins/default/xui/en/floater_event.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_first_time_tip.xml b/indra/newview/skins/default/xui/en/floater_first_time_tip.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_font_test.xml b/indra/newview/skins/default/xui/en/floater_font_test.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_gesture.xml b/indra/newview/skins/default/xui/en/floater_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_god_tools.xml b/indra/newview/skins/default/xui/en/floater_god_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_help_browser.xml b/indra/newview/skins/default/xui/en/floater_help_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_hud.xml b/indra/newview/skins/default/xui/en/floater_hud.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_im.xml b/indra/newview/skins/default/xui/en/floater_im.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_im_container.xml b/indra/newview/skins/default/xui/en/floater_im_container.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_image_preview.xml b/indra/newview/skins/default/xui/en/floater_image_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_import_collada.xml b/indra/newview/skins/default/xui/en/floater_import_collada.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_incoming_call.xml b/indra/newview/skins/default/xui/en/floater_incoming_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_inspect.xml b/indra/newview/skins/default/xui/en/floater_inspect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_inventory.xml b/indra/newview/skins/default/xui/en/floater_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_joystick.xml b/indra/newview/skins/default/xui/en/floater_joystick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_lagmeter.xml b/indra/newview/skins/default/xui/en/floater_lagmeter.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_land_holdings.xml b/indra/newview/skins/default/xui/en/floater_land_holdings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_lsl_guide.xml b/indra/newview/skins/default/xui/en/floater_lsl_guide.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_map.xml b/indra/newview/skins/default/xui/en/floater_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_media_browser.xml b/indra/newview/skins/default/xui/en/floater_media_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_media_settings.xml b/indra/newview/skins/default/xui/en/floater_media_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_mem_leaking.xml b/indra/newview/skins/default/xui/en/floater_mem_leaking.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_mute_object.xml b/indra/newview/skins/default/xui/en/floater_mute_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_my_friends.xml b/indra/newview/skins/default/xui/en/floater_my_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_notification.xml b/indra/newview/skins/default/xui/en/floater_notification.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_notifications_console.xml b/indra/newview/skins/default/xui/en/floater_notifications_console.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_openobject.xml b/indra/newview/skins/default/xui/en/floater_openobject.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_outgoing_call.xml b/indra/newview/skins/default/xui/en/floater_outgoing_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_pay.xml b/indra/newview/skins/default/xui/en/floater_pay.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_pay_object.xml b/indra/newview/skins/default/xui/en/floater_pay_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_perm_prefs.xml b/indra/newview/skins/default/xui/en/floater_perm_prefs.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_post_process.xml b/indra/newview/skins/default/xui/en/floater_post_process.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_postcard.xml b/indra/newview/skins/default/xui/en/floater_postcard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_preview_animation.xml b/indra/newview/skins/default/xui/en/floater_preview_animation.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_preview_classified.xml b/indra/newview/skins/default/xui/en/floater_preview_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_preview_event.xml b/indra/newview/skins/default/xui/en/floater_preview_event.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_preview_sound.xml b/indra/newview/skins/default/xui/en/floater_preview_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_preview_texture.xml b/indra/newview/skins/default/xui/en/floater_preview_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_price_for_listing.xml b/indra/newview/skins/default/xui/en/floater_price_for_listing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_publish_classified.xml b/indra/newview/skins/default/xui/en/floater_publish_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_region_info.xml b/indra/newview/skins/default/xui/en/floater_region_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_report_abuse.xml b/indra/newview/skins/default/xui/en/floater_report_abuse.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_script.xml b/indra/newview/skins/default/xui/en/floater_script.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_script_debug.xml b/indra/newview/skins/default/xui/en/floater_script_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_script_limits.xml b/indra/newview/skins/default/xui/en/floater_script_limits.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_script_preview.xml b/indra/newview/skins/default/xui/en/floater_script_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_script_queue.xml b/indra/newview/skins/default/xui/en/floater_script_queue.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_script_search.xml b/indra/newview/skins/default/xui/en/floater_script_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_select_key.xml b/indra/newview/skins/default/xui/en/floater_select_key.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_sell_land.xml b/indra/newview/skins/default/xui/en/floater_sell_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_settings_debug.xml b/indra/newview/skins/default/xui/en/floater_settings_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_sound_preview.xml b/indra/newview/skins/default/xui/en/floater_sound_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_statistics.xml b/indra/newview/skins/default/xui/en/floater_statistics.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_stats.xml b/indra/newview/skins/default/xui/en/floater_stats.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_sys_well.xml b/indra/newview/skins/default/xui/en/floater_sys_well.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_telehub.xml b/indra/newview/skins/default/xui/en/floater_telehub.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_test_button.xml b/indra/newview/skins/default/xui/en/floater_test_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_test_checkbox.xml b/indra/newview/skins/default/xui/en/floater_test_checkbox.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_test_combobox.xml b/indra/newview/skins/default/xui/en/floater_test_combobox.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_test_inspectors.xml b/indra/newview/skins/default/xui/en/floater_test_inspectors.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_test_layout.xml b/indra/newview/skins/default/xui/en/floater_test_layout.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_test_line_editor.xml b/indra/newview/skins/default/xui/en/floater_test_line_editor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_test_list_view.xml b/indra/newview/skins/default/xui/en/floater_test_list_view.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_test_navigation_bar.xml b/indra/newview/skins/default/xui/en/floater_test_navigation_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_test_radiogroup.xml b/indra/newview/skins/default/xui/en/floater_test_radiogroup.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_test_slider.xml b/indra/newview/skins/default/xui/en/floater_test_slider.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_test_spinner.xml b/indra/newview/skins/default/xui/en/floater_test_spinner.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_test_text_editor.xml b/indra/newview/skins/default/xui/en/floater_test_text_editor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_test_textbox.xml b/indra/newview/skins/default/xui/en/floater_test_textbox.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_test_widgets.xml b/indra/newview/skins/default/xui/en/floater_test_widgets.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_top_objects.xml b/indra/newview/skins/default/xui/en/floater_top_objects.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_tos.xml b/indra/newview/skins/default/xui/en/floater_tos.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_ui_preview.xml b/indra/newview/skins/default/xui/en/floater_ui_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_url_entry.xml b/indra/newview/skins/default/xui/en/floater_url_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_voice_effect.xml b/indra/newview/skins/default/xui/en/floater_voice_effect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_water.xml b/indra/newview/skins/default/xui/en/floater_water.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_windlight_options.xml b/indra/newview/skins/default/xui/en/floater_windlight_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_window_size.xml b/indra/newview/skins/default/xui/en/floater_window_size.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/fonts.xml b/indra/newview/skins/default/xui/en/fonts.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/inspect_group.xml b/indra/newview/skins/default/xui/en/inspect_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/inspect_remote_object.xml b/indra/newview/skins/default/xui/en/inspect_remote_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/inspect_toast.xml b/indra/newview/skins/default/xui/en/inspect_toast.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/inspector_info_ctrl.xml b/indra/newview/skins/default/xui/en/inspector_info_ctrl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/language_settings.xml b/indra/newview/skins/default/xui/en/language_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/en/menu_add_wearable_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_attachment_other.xml b/indra/newview/skins/default/xui/en/menu_attachment_other.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_attachment_self.xml b/indra/newview/skins/default/xui/en/menu_attachment_self.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_avatar_icon.xml b/indra/newview/skins/default/xui/en/menu_avatar_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_avatar_other.xml b/indra/newview/skins/default/xui/en/menu_avatar_other.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_avatar_self.xml b/indra/newview/skins/default/xui/en/menu_avatar_self.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_bottomtray.xml b/indra/newview/skins/default/xui/en/menu_bottomtray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_cof_attachment.xml b/indra/newview/skins/default/xui/en/menu_cof_attachment.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_cof_body_part.xml b/indra/newview/skins/default/xui/en/menu_cof_body_part.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_cof_clothing.xml b/indra/newview/skins/default/xui/en/menu_cof_clothing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_cof_gear.xml b/indra/newview/skins/default/xui/en/menu_cof_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_edit.xml b/indra/newview/skins/default/xui/en/menu_edit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_favorites.xml b/indra/newview/skins/default/xui/en/menu_favorites.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_gesture_gear.xml b/indra/newview/skins/default/xui/en/menu_gesture_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_group_plus.xml b/indra/newview/skins/default/xui/en/menu_group_plus.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_hide_navbar.xml b/indra/newview/skins/default/xui/en/menu_hide_navbar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_im_well_button.xml b/indra/newview/skins/default/xui/en/menu_im_well_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/en/menu_imchiclet_adhoc.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/en/menu_imchiclet_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/en/menu_inv_offer_chiclet.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_inventory_add.xml b/indra/newview/skins/default/xui/en/menu_inventory_add.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_land.xml b/indra/newview/skins/default/xui/en/menu_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_landmark.xml b/indra/newview/skins/default/xui/en/menu_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_mini_map.xml b/indra/newview/skins/default/xui/en/menu_mini_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_navbar.xml b/indra/newview/skins/default/xui/en/menu_navbar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_nearby_chat.xml b/indra/newview/skins/default/xui/en/menu_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_notification_well_button.xml b/indra/newview/skins/default/xui/en/menu_notification_well_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_object_icon.xml b/indra/newview/skins/default/xui/en/menu_object_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_outfit_gear.xml b/indra/newview/skins/default/xui/en/menu_outfit_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_outfit_tab.xml b/indra/newview/skins/default/xui/en/menu_outfit_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_participant_list.xml b/indra/newview/skins/default/xui/en/menu_participant_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_people_groups.xml b/indra/newview/skins/default/xui/en/menu_people_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby.xml b/indra/newview/skins/default/xui/en/menu_people_nearby.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/en/menu_people_nearby_multiselect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_recent_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_picks.xml b/indra/newview/skins/default/xui/en/menu_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_picks_plus.xml b/indra/newview/skins/default/xui/en/menu_picks_plus.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_place.xml b/indra/newview/skins/default/xui/en/menu_place.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_place_add_button.xml b/indra/newview/skins/default/xui/en/menu_place_add_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_profile_overflow.xml b/indra/newview/skins/default/xui/en/menu_profile_overflow.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_save_outfit.xml b/indra/newview/skins/default/xui/en/menu_save_outfit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_script_chiclet.xml b/indra/newview/skins/default/xui/en/menu_script_chiclet.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_slurl.xml b/indra/newview/skins/default/xui/en/menu_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/en/menu_teleport_history_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/en/menu_teleport_history_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/en/menu_teleport_history_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_text_editor.xml b/indra/newview/skins/default/xui/en/menu_text_editor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_topinfobar.xml b/indra/newview/skins/default/xui/en/menu_topinfobar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_url_agent.xml b/indra/newview/skins/default/xui/en/menu_url_agent.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_url_group.xml b/indra/newview/skins/default/xui/en/menu_url_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_url_http.xml b/indra/newview/skins/default/xui/en/menu_url_http.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_url_inventory.xml b/indra/newview/skins/default/xui/en/menu_url_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_url_map.xml b/indra/newview/skins/default/xui/en/menu_url_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_url_objectim.xml b/indra/newview/skins/default/xui/en/menu_url_objectim.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_url_parcel.xml b/indra/newview/skins/default/xui/en/menu_url_parcel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_url_slapp.xml b/indra/newview/skins/default/xui/en/menu_url_slapp.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_url_slurl.xml b/indra/newview/skins/default/xui/en/menu_url_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_url_teleport.xml b/indra/newview/skins/default/xui/en/menu_url_teleport.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_wearing_gear.xml b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/menu_wearing_tab.xml b/indra/newview/skins/default/xui/en/menu_wearing_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/mime_types.xml b/indra/newview/skins/default/xui/en/mime_types.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/mime_types_linux.xml b/indra/newview/skins/default/xui/en/mime_types_linux.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/mime_types_mac.xml b/indra/newview/skins/default/xui/en/mime_types_mac.xml old mode 100644 new mode 100755 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 diff --git a/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_active_object_row.xml b/indra/newview/skins/default/xui/en/panel_active_object_row.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_activeim_row.xml b/indra/newview/skins/default/xui/en/panel_activeim_row.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_audio_device.xml b/indra/newview/skins/default/xui/en/panel_audio_device.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_avatar_tag.xml b/indra/newview/skins/default/xui/en/panel_avatar_tag.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/en/panel_bodyparts_list_button_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_chat_header.xml b/indra/newview/skins/default/xui/en/panel_chat_header.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_chat_item.xml b/indra/newview/skins/default/xui/en/panel_chat_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_chat_separator.xml b/indra/newview/skins/default/xui/en/panel_chat_separator.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml b/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/en/panel_clothing_list_button_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/en/panel_deletable_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_alpha.xml b/indra/newview/skins/default/xui/en/panel_edit_alpha.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_eyes.xml b/indra/newview/skins/default/xui/en/panel_edit_eyes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_gloves.xml b/indra/newview/skins/default/xui/en/panel_edit_gloves.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_hair.xml b/indra/newview/skins/default/xui/en/panel_edit_hair.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_jacket.xml b/indra/newview/skins/default/xui/en/panel_edit_jacket.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_pants.xml b/indra/newview/skins/default/xui/en/panel_edit_pants.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_shape.xml b/indra/newview/skins/default/xui/en/panel_edit_shape.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_shirt.xml b/indra/newview/skins/default/xui/en/panel_edit_shirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_shoes.xml b/indra/newview/skins/default/xui/en/panel_edit_shoes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_skin.xml b/indra/newview/skins/default/xui/en/panel_edit_skin.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_skirt.xml b/indra/newview/skins/default/xui/en/panel_edit_skirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_socks.xml b/indra/newview/skins/default/xui/en/panel_edit_socks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_underpants.xml b/indra/newview/skins/default/xui/en/panel_edit_underpants.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_friends.xml b/indra/newview/skins/default/xui/en/panel_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_generic_tip.xml b/indra/newview/skins/default/xui/en/panel_generic_tip.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_group_invite.xml b/indra/newview/skins/default/xui/en/panel_group_invite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_group_list_item.xml b/indra/newview/skins/default/xui/en/panel_group_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_group_notices.xml b/indra/newview/skins/default/xui/en/panel_group_notices.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_group_notify.xml b/indra/newview/skins/default/xui/en/panel_group_notify.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_groups.xml b/indra/newview/skins/default/xui/en/panel_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_hud.xml b/indra/newview/skins/default/xui/en/panel_hud.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_instant_message.xml b/indra/newview/skins/default/xui/en/panel_instant_message.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_inventory_item.xml b/indra/newview/skins/default/xui/en/panel_inventory_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_me.xml b/indra/newview/skins/default/xui/en/panel_me.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_media_settings_general.xml b/indra/newview/skins/default/xui/en/panel_media_settings_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/en/panel_media_settings_permissions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_media_settings_security.xml b/indra/newview/skins/default/xui/en/panel_media_settings_security.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_nearby_media.xml b/indra/newview/skins/default/xui/en/panel_nearby_media.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_notes.xml b/indra/newview/skins/default/xui/en/panel_notes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_notification.xml b/indra/newview/skins/default/xui/en/panel_notification.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_notifications_channel.xml b/indra/newview/skins/default/xui/en/panel_notifications_channel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_online_status.xml b/indra/newview/skins/default/xui/en/panel_online_status.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_online_status_toast.xml b/indra/newview/skins/default/xui/en/panel_online_status_toast.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory_gear_default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_outfits_list.xml b/indra/newview/skins/default/xui/en/panel_outfits_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_progress.xml b/indra/newview/skins/default/xui/en/panel_progress.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_region_covenant.xml b/indra/newview/skins/default/xui/en/panel_region_covenant.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_region_debug.xml b/indra/newview/skins/default/xui/en/panel_region_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_region_estate.xml b/indra/newview/skins/default/xui/en/panel_region_estate.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_region_general.xml b/indra/newview/skins/default/xui/en/panel_region_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_region_general_layout.xml b/indra/newview/skins/default/xui/en/panel_region_general_layout.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_region_terrain.xml b/indra/newview/skins/default/xui/en/panel_region_terrain.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_region_texture.xml b/indra/newview/skins/default/xui/en/panel_region_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/en/panel_script_limits_my_avatar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_scrolling_param.xml b/indra/newview/skins/default/xui/en/panel_scrolling_param.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_sys_well_item.xml b/indra/newview/skins/default/xui/en/panel_sys_well_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history.xml b/indra/newview/skins/default/xui/en/panel_teleport_history.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_toast.xml b/indra/newview/skins/default/xui/en/panel_toast.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml b/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_voice_effect.xml b/indra/newview/skins/default/xui/en/panel_voice_effect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/panel_world_map.xml b/indra/newview/skins/default/xui/en/panel_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/role_actions.xml b/indra/newview/skins/default/xui/en/role_actions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/teleport_strings.xml b/indra/newview/skins/default/xui/en/teleport_strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/accordion.xml b/indra/newview/skins/default/xui/en/widgets/accordion.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml b/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/avatar_icon.xml b/indra/newview/skins/default/xui/en/widgets/avatar_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml b/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/bodyparts_list_item.xml b/indra/newview/skins/default/xui/en/widgets/bodyparts_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/button.xml b/indra/newview/skins/default/xui/en/widgets/button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/chat_history.xml b/indra/newview/skins/default/xui/en/widgets/chat_history.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/check_box.xml b/indra/newview/skins/default/xui/en/widgets/check_box.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_panel.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/clothing_list_item.xml b/indra/newview/skins/default/xui/en/widgets/clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/color_swatch.xml b/indra/newview/skins/default/xui/en/widgets/color_swatch.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/combo_box.xml b/indra/newview/skins/default/xui/en/widgets/combo_box.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/context_menu.xml b/indra/newview/skins/default/xui/en/widgets/context_menu.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/en/widgets/deletable_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/drop_down.xml b/indra/newview/skins/default/xui/en/widgets/drop_down.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/en/widgets/dummy_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/expandable_text.xml b/indra/newview/skins/default/xui/en/widgets/expandable_text.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/filter_editor.xml b/indra/newview/skins/default/xui/en/widgets/filter_editor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/flat_list_view.xml b/indra/newview/skins/default/xui/en/widgets/flat_list_view.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/floater.xml b/indra/newview/skins/default/xui/en/widgets/floater.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/flyout_button.xml b/indra/newview/skins/default/xui/en/widgets/flyout_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/folder_view_item.xml b/indra/newview/skins/default/xui/en/widgets/folder_view_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/gesture_combo_list.xml b/indra/newview/skins/default/xui/en/widgets/gesture_combo_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/group_icon.xml b/indra/newview/skins/default/xui/en/widgets/group_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/icon.xml b/indra/newview/skins/default/xui/en/widgets/icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/inspector.xml b/indra/newview/skins/default/xui/en/widgets/inspector.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml b/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/inventory_panel.xml b/indra/newview/skins/default/xui/en/widgets/inventory_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/line_editor.xml b/indra/newview/skins/default/xui/en/widgets/line_editor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/list_view.xml b/indra/newview/skins/default/xui/en/widgets/list_view.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/loading_indicator.xml b/indra/newview/skins/default/xui/en/widgets/loading_indicator.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/menu.xml b/indra/newview/skins/default/xui/en/widgets/menu.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item.xml b/indra/newview/skins/default/xui/en/widgets/menu_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item_call.xml b/indra/newview/skins/default/xui/en/widgets/menu_item_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item_check.xml b/indra/newview/skins/default/xui/en/widgets/menu_item_check.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item_separator.xml b/indra/newview/skins/default/xui/en/widgets/menu_item_separator.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item_tear_off.xml b/indra/newview/skins/default/xui/en/widgets/menu_item_tear_off.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/multi_slider.xml b/indra/newview/skins/default/xui/en/widgets/multi_slider.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/multi_slider_bar.xml b/indra/newview/skins/default/xui/en/widgets/multi_slider_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/name_editor.xml b/indra/newview/skins/default/xui/en/widgets/name_editor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/output_monitor.xml b/indra/newview/skins/default/xui/en/widgets/output_monitor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/panel.xml b/indra/newview/skins/default/xui/en/widgets/panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/panel_camera_item.xml b/indra/newview/skins/default/xui/en/widgets/panel_camera_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/progress_bar.xml b/indra/newview/skins/default/xui/en/widgets/progress_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/radio_group.xml b/indra/newview/skins/default/xui/en/widgets/radio_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/radio_item.xml b/indra/newview/skins/default/xui/en/widgets/radio_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml b/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml b/indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_container.xml b/indra/newview/skins/default/xui/en/widgets/scroll_container.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_list.xml b/indra/newview/skins/default/xui/en/widgets/scroll_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/search_combo_box.xml b/indra/newview/skins/default/xui/en/widgets/search_combo_box.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/search_editor.xml b/indra/newview/skins/default/xui/en/widgets/search_editor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/side_tray.xml b/indra/newview/skins/default/xui/en/widgets/side_tray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml b/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/slider.xml b/indra/newview/skins/default/xui/en/widgets/slider.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/slider_bar.xml b/indra/newview/skins/default/xui/en/widgets/slider_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/spinner.xml b/indra/newview/skins/default/xui/en/widgets/spinner.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/split_button.xml b/indra/newview/skins/default/xui/en/widgets/split_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/tab_container.xml b/indra/newview/skins/default/xui/en/widgets/tab_container.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/talk_button.xml b/indra/newview/skins/default/xui/en/widgets/talk_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/teleport_history_menu_item.xml b/indra/newview/skins/default/xui/en/widgets/teleport_history_menu_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/text.xml b/indra/newview/skins/default/xui/en/widgets/text.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/text_editor.xml b/indra/newview/skins/default/xui/en/widgets/text_editor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/textbase.xml b/indra/newview/skins/default/xui/en/widgets/textbase.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/texture_picker.xml b/indra/newview/skins/default/xui/en/widgets/texture_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml b/indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/tool_tip.xml b/indra/newview/skins/default/xui/en/widgets/tool_tip.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/ui_ctrl.xml b/indra/newview/skins/default/xui/en/widgets/ui_ctrl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/view_border.xml b/indra/newview/skins/default/xui/en/widgets/view_border.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/widgets/web_browser.xml b/indra/newview/skins/default/xui/en/widgets/web_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/en/xui_version.xml b/indra/newview/skins/default/xui/en/xui_version.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_about.xml b/indra/newview/skins/default/xui/es/floater_about.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_activeim.xml b/indra/newview/skins/default/xui/es/floater_activeim.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_animation_preview.xml b/indra/newview/skins/default/xui/es/floater_animation_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_auction.xml b/indra/newview/skins/default/xui/es/floater_auction.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_avatar_picker.xml b/indra/newview/skins/default/xui/es/floater_avatar_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_avatar_textures.xml b/indra/newview/skins/default/xui/es/floater_avatar_textures.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_beacons.xml b/indra/newview/skins/default/xui/es/floater_beacons.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_build_options.xml b/indra/newview/skins/default/xui/es/floater_build_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_bulk_perms.xml b/indra/newview/skins/default/xui/es/floater_bulk_perms.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_bumps.xml b/indra/newview/skins/default/xui/es/floater_bumps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_buy_contents.xml b/indra/newview/skins/default/xui/es/floater_buy_contents.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_buy_currency.xml b/indra/newview/skins/default/xui/es/floater_buy_currency.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/es/floater_buy_currency_html.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_buy_land.xml b/indra/newview/skins/default/xui/es/floater_buy_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_buy_object.xml b/indra/newview/skins/default/xui/es/floater_buy_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_camera.xml b/indra/newview/skins/default/xui/es/floater_camera.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_choose_group.xml b/indra/newview/skins/default/xui/es/floater_choose_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_color_picker.xml b/indra/newview/skins/default/xui/es/floater_color_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_critical.xml b/indra/newview/skins/default/xui/es/floater_critical.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_customize.xml b/indra/newview/skins/default/xui/es/floater_customize.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_device_settings.xml b/indra/newview/skins/default/xui/es/floater_device_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_env_settings.xml b/indra/newview/skins/default/xui/es/floater_env_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_event.xml b/indra/newview/skins/default/xui/es/floater_event.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_font_test.xml b/indra/newview/skins/default/xui/es/floater_font_test.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_gesture.xml b/indra/newview/skins/default/xui/es/floater_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_god_tools.xml b/indra/newview/skins/default/xui/es/floater_god_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_hardware_settings.xml b/indra/newview/skins/default/xui/es/floater_hardware_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_help_browser.xml b/indra/newview/skins/default/xui/es/floater_help_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_hud.xml b/indra/newview/skins/default/xui/es/floater_hud.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_im.xml b/indra/newview/skins/default/xui/es/floater_im.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_im_container.xml b/indra/newview/skins/default/xui/es/floater_im_container.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_im_session.xml b/indra/newview/skins/default/xui/es/floater_im_session.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_image_preview.xml b/indra/newview/skins/default/xui/es/floater_image_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_incoming_call.xml b/indra/newview/skins/default/xui/es/floater_incoming_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_inspect.xml b/indra/newview/skins/default/xui/es/floater_inspect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_inventory.xml b/indra/newview/skins/default/xui/es/floater_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_joystick.xml b/indra/newview/skins/default/xui/es/floater_joystick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_lagmeter.xml b/indra/newview/skins/default/xui/es/floater_lagmeter.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_land_holdings.xml b/indra/newview/skins/default/xui/es/floater_land_holdings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_lsl_guide.xml b/indra/newview/skins/default/xui/es/floater_lsl_guide.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_map.xml b/indra/newview/skins/default/xui/es/floater_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_media_browser.xml b/indra/newview/skins/default/xui/es/floater_media_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_media_settings.xml b/indra/newview/skins/default/xui/es/floater_media_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_mem_leaking.xml b/indra/newview/skins/default/xui/es/floater_mem_leaking.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_moveview.xml b/indra/newview/skins/default/xui/es/floater_moveview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_mute_object.xml b/indra/newview/skins/default/xui/es/floater_mute_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_my_friends.xml b/indra/newview/skins/default/xui/es/floater_my_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_nearby_chat.xml b/indra/newview/skins/default/xui/es/floater_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_openobject.xml b/indra/newview/skins/default/xui/es/floater_openobject.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_outgoing_call.xml b/indra/newview/skins/default/xui/es/floater_outgoing_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_pay.xml b/indra/newview/skins/default/xui/es/floater_pay.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_pay_object.xml b/indra/newview/skins/default/xui/es/floater_pay_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_perm_prefs.xml b/indra/newview/skins/default/xui/es/floater_perm_prefs.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_post_process.xml b/indra/newview/skins/default/xui/es/floater_post_process.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_postcard.xml b/indra/newview/skins/default/xui/es/floater_postcard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_preferences.xml b/indra/newview/skins/default/xui/es/floater_preferences.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_preview_animation.xml b/indra/newview/skins/default/xui/es/floater_preview_animation.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_preview_classified.xml b/indra/newview/skins/default/xui/es/floater_preview_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_preview_event.xml b/indra/newview/skins/default/xui/es/floater_preview_event.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_preview_gesture.xml b/indra/newview/skins/default/xui/es/floater_preview_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/es/floater_preview_gesture_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/es/floater_preview_gesture_shortcut.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/es/floater_preview_gesture_steps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_preview_notecard.xml b/indra/newview/skins/default/xui/es/floater_preview_notecard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_preview_sound.xml b/indra/newview/skins/default/xui/es/floater_preview_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_preview_texture.xml b/indra/newview/skins/default/xui/es/floater_preview_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_publish_classified.xml b/indra/newview/skins/default/xui/es/floater_publish_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_region_info.xml b/indra/newview/skins/default/xui/es/floater_region_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_report_abuse.xml b/indra/newview/skins/default/xui/es/floater_report_abuse.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_script_debug.xml b/indra/newview/skins/default/xui/es/floater_script_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/es/floater_script_debug_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_script_limits.xml b/indra/newview/skins/default/xui/es/floater_script_limits.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_script_preview.xml b/indra/newview/skins/default/xui/es/floater_script_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_script_queue.xml b/indra/newview/skins/default/xui/es/floater_script_queue.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_script_search.xml b/indra/newview/skins/default/xui/es/floater_script_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_search.xml b/indra/newview/skins/default/xui/es/floater_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_select_key.xml b/indra/newview/skins/default/xui/es/floater_select_key.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_sell_land.xml b/indra/newview/skins/default/xui/es/floater_sell_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_settings_debug.xml b/indra/newview/skins/default/xui/es/floater_settings_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_snapshot.xml b/indra/newview/skins/default/xui/es/floater_snapshot.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_sound_preview.xml b/indra/newview/skins/default/xui/es/floater_sound_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_statistics.xml b/indra/newview/skins/default/xui/es/floater_statistics.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_stats.xml b/indra/newview/skins/default/xui/es/floater_stats.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_sys_well.xml b/indra/newview/skins/default/xui/es/floater_sys_well.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_telehub.xml b/indra/newview/skins/default/xui/es/floater_telehub.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_top_objects.xml b/indra/newview/skins/default/xui/es/floater_top_objects.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_tos.xml b/indra/newview/skins/default/xui/es/floater_tos.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_url_entry.xml b/indra/newview/skins/default/xui/es/floater_url_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_voice_controls.xml b/indra/newview/skins/default/xui/es/floater_voice_controls.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_voice_effect.xml b/indra/newview/skins/default/xui/es/floater_voice_effect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_water.xml b/indra/newview/skins/default/xui/es/floater_water.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/es/floater_whitelist_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_windlight_options.xml b/indra/newview/skins/default/xui/es/floater_windlight_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_window_size.xml b/indra/newview/skins/default/xui/es/floater_window_size.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/floater_world_map.xml b/indra/newview/skins/default/xui/es/floater_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/inspect_avatar.xml b/indra/newview/skins/default/xui/es/inspect_avatar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/inspect_group.xml b/indra/newview/skins/default/xui/es/inspect_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/inspect_object.xml b/indra/newview/skins/default/xui/es/inspect_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/inspect_remote_object.xml b/indra/newview/skins/default/xui/es/inspect_remote_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/language_settings.xml b/indra/newview/skins/default/xui/es/language_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_attachment_other.xml b/indra/newview/skins/default/xui/es/menu_attachment_other.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_attachment_self.xml b/indra/newview/skins/default/xui/es/menu_attachment_self.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_avatar_icon.xml b/indra/newview/skins/default/xui/es/menu_avatar_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_avatar_other.xml b/indra/newview/skins/default/xui/es/menu_avatar_other.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_avatar_self.xml b/indra/newview/skins/default/xui/es/menu_avatar_self.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_bottomtray.xml b/indra/newview/skins/default/xui/es/menu_bottomtray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_cof_attachment.xml b/indra/newview/skins/default/xui/es/menu_cof_attachment.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_cof_body_part.xml b/indra/newview/skins/default/xui/es/menu_cof_body_part.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_cof_clothing.xml b/indra/newview/skins/default/xui/es/menu_cof_clothing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_cof_gear.xml b/indra/newview/skins/default/xui/es/menu_cof_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_edit.xml b/indra/newview/skins/default/xui/es/menu_edit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_favorites.xml b/indra/newview/skins/default/xui/es/menu_favorites.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_gesture_gear.xml b/indra/newview/skins/default/xui/es/menu_gesture_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_group_plus.xml b/indra/newview/skins/default/xui/es/menu_group_plus.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_hide_navbar.xml b/indra/newview/skins/default/xui/es/menu_hide_navbar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_im_well_button.xml b/indra/newview/skins/default/xui/es/menu_im_well_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/es/menu_imchiclet_adhoc.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/es/menu_imchiclet_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/es/menu_imchiclet_p2p.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_object_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/es/menu_inv_offer_chiclet.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_inventory.xml b/indra/newview/skins/default/xui/es/menu_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_inventory_add.xml b/indra/newview/skins/default/xui/es/menu_inventory_add.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/es/menu_inventory_gear_default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_land.xml b/indra/newview/skins/default/xui/es/menu_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_landmark.xml b/indra/newview/skins/default/xui/es/menu_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_login.xml b/indra/newview/skins/default/xui/es/menu_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_mini_map.xml b/indra/newview/skins/default/xui/es/menu_mini_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_navbar.xml b/indra/newview/skins/default/xui/es/menu_navbar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_nearby_chat.xml b/indra/newview/skins/default/xui/es/menu_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_notification_well_button.xml b/indra/newview/skins/default/xui/es/menu_notification_well_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_object.xml b/indra/newview/skins/default/xui/es/menu_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_object_icon.xml b/indra/newview/skins/default/xui/es/menu_object_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_outfit_gear.xml b/indra/newview/skins/default/xui/es/menu_outfit_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_outfit_tab.xml b/indra/newview/skins/default/xui/es/menu_outfit_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_participant_list.xml b/indra/newview/skins/default/xui/es/menu_participant_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_friends_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_people_groups.xml b/indra/newview/skins/default/xui/es/menu_people_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_groups_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_people_nearby.xml b/indra/newview/skins/default/xui/es/menu_people_nearby.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_recent_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_picks.xml b/indra/newview/skins/default/xui/es/menu_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_picks_plus.xml b/indra/newview/skins/default/xui/es/menu_picks_plus.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_place.xml b/indra/newview/skins/default/xui/es/menu_place.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_place_add_button.xml b/indra/newview/skins/default/xui/es/menu_place_add_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/es/menu_places_gear_folder.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/es/menu_places_gear_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_profile_overflow.xml b/indra/newview/skins/default/xui/es/menu_profile_overflow.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_save_outfit.xml b/indra/newview/skins/default/xui/es/menu_save_outfit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_script_chiclet.xml b/indra/newview/skins/default/xui/es/menu_script_chiclet.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_slurl.xml b/indra/newview/skins/default/xui/es/menu_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/es/menu_teleport_history_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/es/menu_teleport_history_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/es/menu_teleport_history_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_text_editor.xml b/indra/newview/skins/default/xui/es/menu_text_editor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_topinfobar.xml b/indra/newview/skins/default/xui/es/menu_topinfobar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_url_agent.xml b/indra/newview/skins/default/xui/es/menu_url_agent.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_url_group.xml b/indra/newview/skins/default/xui/es/menu_url_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_url_http.xml b/indra/newview/skins/default/xui/es/menu_url_http.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_url_inventory.xml b/indra/newview/skins/default/xui/es/menu_url_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_url_map.xml b/indra/newview/skins/default/xui/es/menu_url_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_url_objectim.xml b/indra/newview/skins/default/xui/es/menu_url_objectim.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_url_parcel.xml b/indra/newview/skins/default/xui/es/menu_url_parcel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_url_slapp.xml b/indra/newview/skins/default/xui/es/menu_url_slapp.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_url_slurl.xml b/indra/newview/skins/default/xui/es/menu_url_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_url_teleport.xml b/indra/newview/skins/default/xui/es/menu_url_teleport.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/es/menu_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_wearing_gear.xml b/indra/newview/skins/default/xui/es/menu_wearing_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/menu_wearing_tab.xml b/indra/newview/skins/default/xui/es/menu_wearing_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/mime_types.xml b/indra/newview/skins/default/xui/es/mime_types.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/mime_types_linux.xml b/indra/newview/skins/default/xui/es/mime_types_linux.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/mime_types_mac.xml b/indra/newview/skins/default/xui/es/mime_types_mac.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/es/outfit_accordion_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_active_object_row.xml b/indra/newview/skins/default/xui/es/panel_active_object_row.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/es/panel_adhoc_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_audio_device.xml b/indra/newview/skins/default/xui/es/panel_audio_device.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/es/panel_avatar_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/es/panel_block_list_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/es/panel_body_parts_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/es/panel_bodyparts_list_button_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_bottomtray.xml b/indra/newview/skins/default/xui/es/panel_bottomtray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/es/panel_bottomtray_lite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_classified_info.xml b/indra/newview/skins/default/xui/es/panel_classified_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/es/panel_clothing_list_button_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/es/panel_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_cof_wearables.xml b/indra/newview/skins/default/xui/es/panel_cof_wearables.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/es/panel_deletable_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/es/panel_dummy_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_alpha.xml b/indra/newview/skins/default/xui/es/panel_edit_alpha.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_classified.xml b/indra/newview/skins/default/xui/es/panel_edit_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_eyes.xml b/indra/newview/skins/default/xui/es/panel_edit_eyes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_gloves.xml b/indra/newview/skins/default/xui/es/panel_edit_gloves.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_hair.xml b/indra/newview/skins/default/xui/es/panel_edit_hair.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_jacket.xml b/indra/newview/skins/default/xui/es/panel_edit_jacket.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_pants.xml b/indra/newview/skins/default/xui/es/panel_edit_pants.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_pick.xml b/indra/newview/skins/default/xui/es/panel_edit_pick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_profile.xml b/indra/newview/skins/default/xui/es/panel_edit_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_shape.xml b/indra/newview/skins/default/xui/es/panel_edit_shape.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_shirt.xml b/indra/newview/skins/default/xui/es/panel_edit_shirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_shoes.xml b/indra/newview/skins/default/xui/es/panel_edit_shoes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_skin.xml b/indra/newview/skins/default/xui/es/panel_edit_skin.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_skirt.xml b/indra/newview/skins/default/xui/es/panel_edit_skirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_socks.xml b/indra/newview/skins/default/xui/es/panel_edit_socks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/es/panel_edit_tattoo.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_underpants.xml b/indra/newview/skins/default/xui/es/panel_edit_underpants.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/es/panel_edit_undershirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_edit_wearable.xml b/indra/newview/skins/default/xui/es/panel_edit_wearable.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_friends.xml b/indra/newview/skins/default/xui/es/panel_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_group_control_panel.xml b/indra/newview/skins/default/xui/es/panel_group_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_group_general.xml b/indra/newview/skins/default/xui/es/panel_group_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_group_invite.xml b/indra/newview/skins/default/xui/es/panel_group_invite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_group_land_money.xml b/indra/newview/skins/default/xui/es/panel_group_land_money.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_group_list_item.xml b/indra/newview/skins/default/xui/es/panel_group_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_group_notices.xml b/indra/newview/skins/default/xui/es/panel_group_notices.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_group_notify.xml b/indra/newview/skins/default/xui/es/panel_group_notify.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_group_roles.xml b/indra/newview/skins/default/xui/es/panel_group_roles.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_groups.xml b/indra/newview/skins/default/xui/es/panel_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_im_control_panel.xml b/indra/newview/skins/default/xui/es/panel_im_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_inventory_item.xml b/indra/newview/skins/default/xui/es/panel_inventory_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_landmark_info.xml b/indra/newview/skins/default/xui/es/panel_landmark_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_landmarks.xml b/indra/newview/skins/default/xui/es/panel_landmarks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_login.xml b/indra/newview/skins/default/xui/es/panel_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_main_inventory.xml b/indra/newview/skins/default/xui/es/panel_main_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_me.xml b/indra/newview/skins/default/xui/es/panel_me.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_media_settings_general.xml b/indra/newview/skins/default/xui/es/panel_media_settings_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/es/panel_media_settings_permissions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_media_settings_security.xml b/indra/newview/skins/default/xui/es/panel_media_settings_security.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_my_profile.xml b/indra/newview/skins/default/xui/es/panel_my_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_navigation_bar.xml b/indra/newview/skins/default/xui/es/panel_navigation_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_nearby_chat.xml b/indra/newview/skins/default/xui/es/panel_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/es/panel_nearby_chat_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_nearby_media.xml b/indra/newview/skins/default/xui/es/panel_nearby_media.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_notes.xml b/indra/newview/skins/default/xui/es/panel_notes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_online_status.xml b/indra/newview/skins/default/xui/es/panel_online_status.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_online_status_toast.xml b/indra/newview/skins/default/xui/es/panel_online_status_toast.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_outfit_edit.xml b/indra/newview/skins/default/xui/es/panel_outfit_edit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/es/panel_outfits_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/es/panel_outfits_inventory_gear_default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_outfits_list.xml b/indra/newview/skins/default/xui/es/panel_outfits_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/es/panel_outfits_wearing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_people.xml b/indra/newview/skins/default/xui/es/panel_people.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_pick_info.xml b/indra/newview/skins/default/xui/es/panel_pick_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_picks.xml b/indra/newview/skins/default/xui/es/panel_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_place_profile.xml b/indra/newview/skins/default/xui/es/panel_place_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_places.xml b/indra/newview/skins/default/xui/es/panel_places.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_preferences_general.xml b/indra/newview/skins/default/xui/es/panel_preferences_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_preferences_sound.xml b/indra/newview/skins/default/xui/es/panel_preferences_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_profile.xml b/indra/newview/skins/default/xui/es/panel_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_profile_view.xml b/indra/newview/skins/default/xui/es/panel_profile_view.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_region_covenant.xml b/indra/newview/skins/default/xui/es/panel_region_covenant.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_region_debug.xml b/indra/newview/skins/default/xui/es/panel_region_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_region_estate.xml b/indra/newview/skins/default/xui/es/panel_region_estate.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_region_general.xml b/indra/newview/skins/default/xui/es/panel_region_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_region_general_layout.xml b/indra/newview/skins/default/xui/es/panel_region_general_layout.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_region_terrain.xml b/indra/newview/skins/default/xui/es/panel_region_terrain.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_region_texture.xml b/indra/newview/skins/default/xui/es/panel_region_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_script_ed.xml b/indra/newview/skins/default/xui/es/panel_script_ed.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/es/panel_script_limits_my_avatar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/es/panel_script_limits_region_memory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_scrolling_param.xml b/indra/newview/skins/default/xui/es/panel_scrolling_param.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_side_tray.xml b/indra/newview/skins/default/xui/es/panel_side_tray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/es/panel_side_tray_tab_caption.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/es/panel_stand_stop_flying.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_status_bar.xml b/indra/newview/skins/default/xui/es/panel_status_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_teleport_history.xml b/indra/newview/skins/default/xui/es/panel_teleport_history.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/es/panel_teleport_history_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_voice_effect.xml b/indra/newview/skins/default/xui/es/panel_voice_effect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/panel_world_map.xml b/indra/newview/skins/default/xui/es/panel_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/role_actions.xml b/indra/newview/skins/default/xui/es/role_actions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/sidepanel_appearance.xml b/indra/newview/skins/default/xui/es/sidepanel_appearance.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/sidepanel_item_info.xml b/indra/newview/skins/default/xui/es/sidepanel_item_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/sidepanel_task_info.xml b/indra/newview/skins/default/xui/es/sidepanel_task_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/teleport_strings.xml b/indra/newview/skins/default/xui/es/teleport_strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/es/xui_version.xml b/indra/newview/skins/default/xui/es/xui_version.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_about.xml b/indra/newview/skins/default/xui/fr/floater_about.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_activeim.xml b/indra/newview/skins/default/xui/fr/floater_activeim.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_animation_preview.xml b/indra/newview/skins/default/xui/fr/floater_animation_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_auction.xml b/indra/newview/skins/default/xui/fr/floater_auction.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml b/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml b/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_beacons.xml b/indra/newview/skins/default/xui/fr/floater_beacons.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_build_options.xml b/indra/newview/skins/default/xui/fr/floater_build_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml b/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_bumps.xml b/indra/newview/skins/default/xui/fr/floater_bumps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_buy_contents.xml b/indra/newview/skins/default/xui/fr/floater_buy_contents.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/fr/floater_buy_currency_html.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_buy_land.xml b/indra/newview/skins/default/xui/fr/floater_buy_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_buy_object.xml b/indra/newview/skins/default/xui/fr/floater_buy_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_camera.xml b/indra/newview/skins/default/xui/fr/floater_camera.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_choose_group.xml b/indra/newview/skins/default/xui/fr/floater_choose_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_color_picker.xml b/indra/newview/skins/default/xui/fr/floater_color_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_critical.xml b/indra/newview/skins/default/xui/fr/floater_critical.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_customize.xml b/indra/newview/skins/default/xui/fr/floater_customize.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_device_settings.xml b/indra/newview/skins/default/xui/fr/floater_device_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_env_settings.xml b/indra/newview/skins/default/xui/fr/floater_env_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_event.xml b/indra/newview/skins/default/xui/fr/floater_event.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_first_time_tip.xml b/indra/newview/skins/default/xui/fr/floater_first_time_tip.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_font_test.xml b/indra/newview/skins/default/xui/fr/floater_font_test.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_gesture.xml b/indra/newview/skins/default/xui/fr/floater_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_god_tools.xml b/indra/newview/skins/default/xui/fr/floater_god_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml b/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_help_browser.xml b/indra/newview/skins/default/xui/fr/floater_help_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_hud.xml b/indra/newview/skins/default/xui/fr/floater_hud.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_im.xml b/indra/newview/skins/default/xui/fr/floater_im.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_im_container.xml b/indra/newview/skins/default/xui/fr/floater_im_container.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_im_session.xml b/indra/newview/skins/default/xui/fr/floater_im_session.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_image_preview.xml b/indra/newview/skins/default/xui/fr/floater_image_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_incoming_call.xml b/indra/newview/skins/default/xui/fr/floater_incoming_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_inspect.xml b/indra/newview/skins/default/xui/fr/floater_inspect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_inventory.xml b/indra/newview/skins/default/xui/fr/floater_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_joystick.xml b/indra/newview/skins/default/xui/fr/floater_joystick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_lagmeter.xml b/indra/newview/skins/default/xui/fr/floater_lagmeter.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_land_holdings.xml b/indra/newview/skins/default/xui/fr/floater_land_holdings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml b/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_map.xml b/indra/newview/skins/default/xui/fr/floater_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_media_browser.xml b/indra/newview/skins/default/xui/fr/floater_media_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_media_settings.xml b/indra/newview/skins/default/xui/fr/floater_media_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml b/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_moveview.xml b/indra/newview/skins/default/xui/fr/floater_moveview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_mute_object.xml b/indra/newview/skins/default/xui/fr/floater_mute_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_my_friends.xml b/indra/newview/skins/default/xui/fr/floater_my_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_nearby_chat.xml b/indra/newview/skins/default/xui/fr/floater_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_notification.xml b/indra/newview/skins/default/xui/fr/floater_notification.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_notifications_console.xml b/indra/newview/skins/default/xui/fr/floater_notifications_console.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_openobject.xml b/indra/newview/skins/default/xui/fr/floater_openobject.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/fr/floater_outfit_save_as.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_outgoing_call.xml b/indra/newview/skins/default/xui/fr/floater_outgoing_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_pay.xml b/indra/newview/skins/default/xui/fr/floater_pay.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_pay_object.xml b/indra/newview/skins/default/xui/fr/floater_pay_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml b/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_post_process.xml b/indra/newview/skins/default/xui/fr/floater_post_process.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_postcard.xml b/indra/newview/skins/default/xui/fr/floater_postcard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_preferences.xml b/indra/newview/skins/default/xui/fr/floater_preferences.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_preview_animation.xml b/indra/newview/skins/default/xui/fr/floater_preview_animation.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_preview_classified.xml b/indra/newview/skins/default/xui/fr/floater_preview_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_preview_event.xml b/indra/newview/skins/default/xui/fr/floater_preview_event.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_shortcut.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_preview_sound.xml b/indra/newview/skins/default/xui/fr/floater_preview_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_preview_texture.xml b/indra/newview/skins/default/xui/fr/floater_preview_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_publish_classified.xml b/indra/newview/skins/default/xui/fr/floater_publish_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_region_info.xml b/indra/newview/skins/default/xui/fr/floater_region_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_script_debug.xml b/indra/newview/skins/default/xui/fr/floater_script_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/fr/floater_script_debug_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_script_limits.xml b/indra/newview/skins/default/xui/fr/floater_script_limits.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_script_preview.xml b/indra/newview/skins/default/xui/fr/floater_script_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_script_queue.xml b/indra/newview/skins/default/xui/fr/floater_script_queue.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_script_search.xml b/indra/newview/skins/default/xui/fr/floater_script_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_search.xml b/indra/newview/skins/default/xui/fr/floater_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_select_key.xml b/indra/newview/skins/default/xui/fr/floater_select_key.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_sell_land.xml b/indra/newview/skins/default/xui/fr/floater_sell_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_settings_debug.xml b/indra/newview/skins/default/xui/fr/floater_settings_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_snapshot.xml b/indra/newview/skins/default/xui/fr/floater_snapshot.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_sound_preview.xml b/indra/newview/skins/default/xui/fr/floater_sound_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_statistics.xml b/indra/newview/skins/default/xui/fr/floater_statistics.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_stats.xml b/indra/newview/skins/default/xui/fr/floater_stats.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_sys_well.xml b/indra/newview/skins/default/xui/fr/floater_sys_well.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_telehub.xml b/indra/newview/skins/default/xui/fr/floater_telehub.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_top_objects.xml b/indra/newview/skins/default/xui/fr/floater_top_objects.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_tos.xml b/indra/newview/skins/default/xui/fr/floater_tos.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_url_entry.xml b/indra/newview/skins/default/xui/fr/floater_url_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_voice_effect.xml b/indra/newview/skins/default/xui/fr/floater_voice_effect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_water.xml b/indra/newview/skins/default/xui/fr/floater_water.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/fr/floater_whitelist_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml b/indra/newview/skins/default/xui/fr/floater_windlight_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_window_size.xml b/indra/newview/skins/default/xui/fr/floater_window_size.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/floater_world_map.xml b/indra/newview/skins/default/xui/fr/floater_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/fonts.xml b/indra/newview/skins/default/xui/fr/fonts.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/inspect_avatar.xml b/indra/newview/skins/default/xui/fr/inspect_avatar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/inspect_group.xml b/indra/newview/skins/default/xui/fr/inspect_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/inspect_object.xml b/indra/newview/skins/default/xui/fr/inspect_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/inspect_remote_object.xml b/indra/newview/skins/default/xui/fr/inspect_remote_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/language_settings.xml b/indra/newview/skins/default/xui/fr/language_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_attachment_other.xml b/indra/newview/skins/default/xui/fr/menu_attachment_other.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_attachment_self.xml b/indra/newview/skins/default/xui/fr/menu_attachment_self.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_icon.xml b/indra/newview/skins/default/xui/fr/menu_avatar_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_other.xml b/indra/newview/skins/default/xui/fr/menu_avatar_other.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_bottomtray.xml b/indra/newview/skins/default/xui/fr/menu_bottomtray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_cof_attachment.xml b/indra/newview/skins/default/xui/fr/menu_cof_attachment.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_cof_body_part.xml b/indra/newview/skins/default/xui/fr/menu_cof_body_part.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_cof_clothing.xml b/indra/newview/skins/default/xui/fr/menu_cof_clothing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_cof_gear.xml b/indra/newview/skins/default/xui/fr/menu_cof_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_edit.xml b/indra/newview/skins/default/xui/fr/menu_edit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_favorites.xml b/indra/newview/skins/default/xui/fr/menu_favorites.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_gesture_gear.xml b/indra/newview/skins/default/xui/fr/menu_gesture_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_group_plus.xml b/indra/newview/skins/default/xui/fr/menu_group_plus.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml b/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_im_well_button.xml b/indra/newview/skins/default/xui/fr/menu_im_well_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/fr/menu_imchiclet_adhoc.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/fr/menu_imchiclet_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/fr/menu_imchiclet_p2p.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_object_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/fr/menu_inv_offer_chiclet.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_inventory.xml b/indra/newview/skins/default/xui/fr/menu_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_inventory_add.xml b/indra/newview/skins/default/xui/fr/menu_inventory_add.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/fr/menu_inventory_gear_default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_land.xml b/indra/newview/skins/default/xui/fr/menu_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_landmark.xml b/indra/newview/skins/default/xui/fr/menu_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_login.xml b/indra/newview/skins/default/xui/fr/menu_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_mini_map.xml b/indra/newview/skins/default/xui/fr/menu_mini_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_navbar.xml b/indra/newview/skins/default/xui/fr/menu_navbar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_nearby_chat.xml b/indra/newview/skins/default/xui/fr/menu_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_notification_well_button.xml b/indra/newview/skins/default/xui/fr/menu_notification_well_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_object.xml b/indra/newview/skins/default/xui/fr/menu_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_object_icon.xml b/indra/newview/skins/default/xui/fr/menu_object_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_outfit_gear.xml b/indra/newview/skins/default/xui/fr/menu_outfit_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_outfit_tab.xml b/indra/newview/skins/default/xui/fr/menu_outfit_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_participant_list.xml b/indra/newview/skins/default/xui/fr/menu_participant_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_friends_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_people_groups.xml b/indra/newview/skins/default/xui/fr/menu_people_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_groups_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_people_nearby.xml b/indra/newview/skins/default/xui/fr/menu_people_nearby.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/fr/menu_people_nearby_multiselect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_recent_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_picks.xml b/indra/newview/skins/default/xui/fr/menu_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_picks_plus.xml b/indra/newview/skins/default/xui/fr/menu_picks_plus.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_place.xml b/indra/newview/skins/default/xui/fr/menu_place.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_place_add_button.xml b/indra/newview/skins/default/xui/fr/menu_place_add_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/fr/menu_places_gear_folder.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/fr/menu_places_gear_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_profile_overflow.xml b/indra/newview/skins/default/xui/fr/menu_profile_overflow.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_save_outfit.xml b/indra/newview/skins/default/xui/fr/menu_save_outfit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_script_chiclet.xml b/indra/newview/skins/default/xui/fr/menu_script_chiclet.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_slurl.xml b/indra/newview/skins/default/xui/fr/menu_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/fr/menu_teleport_history_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/fr/menu_teleport_history_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/fr/menu_teleport_history_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_text_editor.xml b/indra/newview/skins/default/xui/fr/menu_text_editor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_topinfobar.xml b/indra/newview/skins/default/xui/fr/menu_topinfobar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_url_agent.xml b/indra/newview/skins/default/xui/fr/menu_url_agent.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_url_group.xml b/indra/newview/skins/default/xui/fr/menu_url_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_url_http.xml b/indra/newview/skins/default/xui/fr/menu_url_http.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_url_inventory.xml b/indra/newview/skins/default/xui/fr/menu_url_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_url_map.xml b/indra/newview/skins/default/xui/fr/menu_url_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_url_objectim.xml b/indra/newview/skins/default/xui/fr/menu_url_objectim.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_url_parcel.xml b/indra/newview/skins/default/xui/fr/menu_url_parcel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_url_slapp.xml b/indra/newview/skins/default/xui/fr/menu_url_slapp.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_url_slurl.xml b/indra/newview/skins/default/xui/fr/menu_url_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_url_teleport.xml b/indra/newview/skins/default/xui/fr/menu_url_teleport.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_wearing_gear.xml b/indra/newview/skins/default/xui/fr/menu_wearing_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/menu_wearing_tab.xml b/indra/newview/skins/default/xui/fr/menu_wearing_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/mime_types.xml b/indra/newview/skins/default/xui/fr/mime_types.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/mime_types_linux.xml b/indra/newview/skins/default/xui/fr/mime_types_linux.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/mime_types_mac.xml b/indra/newview/skins/default/xui/fr/mime_types_mac.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/fr/outfit_accordion_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_active_object_row.xml b/indra/newview/skins/default/xui/fr/panel_active_object_row.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_activeim_row.xml b/indra/newview/skins/default/xui/fr/panel_activeim_row.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/fr/panel_adhoc_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_audio_device.xml b/indra/newview/skins/default/xui/fr/panel_audio_device.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/fr/panel_avatar_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_avatar_tag.xml b/indra/newview/skins/default/xui/fr/panel_avatar_tag.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/fr/panel_block_list_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/fr/panel_body_parts_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/fr/panel_bodyparts_list_button_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_bottomtray.xml b/indra/newview/skins/default/xui/fr/panel_bottomtray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/fr/panel_bottomtray_lite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_chat_header.xml b/indra/newview/skins/default/xui/fr/panel_chat_header.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_classified_info.xml b/indra/newview/skins/default/xui/fr/panel_classified_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/fr/panel_clothing_list_button_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/fr/panel_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_cof_wearables.xml b/indra/newview/skins/default/xui/fr/panel_cof_wearables.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/fr/panel_deletable_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/fr/panel_dummy_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_alpha.xml b/indra/newview/skins/default/xui/fr/panel_edit_alpha.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_classified.xml b/indra/newview/skins/default/xui/fr/panel_edit_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_eyes.xml b/indra/newview/skins/default/xui/fr/panel_edit_eyes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_gloves.xml b/indra/newview/skins/default/xui/fr/panel_edit_gloves.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_hair.xml b/indra/newview/skins/default/xui/fr/panel_edit_hair.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_jacket.xml b/indra/newview/skins/default/xui/fr/panel_edit_jacket.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_pants.xml b/indra/newview/skins/default/xui/fr/panel_edit_pants.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_pick.xml b/indra/newview/skins/default/xui/fr/panel_edit_pick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_shape.xml b/indra/newview/skins/default/xui/fr/panel_edit_shape.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_shirt.xml b/indra/newview/skins/default/xui/fr/panel_edit_shirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_shoes.xml b/indra/newview/skins/default/xui/fr/panel_edit_shoes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_skin.xml b/indra/newview/skins/default/xui/fr/panel_edit_skin.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_skirt.xml b/indra/newview/skins/default/xui/fr/panel_edit_skirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_socks.xml b/indra/newview/skins/default/xui/fr/panel_edit_socks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/fr/panel_edit_tattoo.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_underpants.xml b/indra/newview/skins/default/xui/fr/panel_edit_underpants.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/fr/panel_edit_undershirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_friends.xml b/indra/newview/skins/default/xui/fr/panel_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_group_control_panel.xml b/indra/newview/skins/default/xui/fr/panel_group_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_group_general.xml b/indra/newview/skins/default/xui/fr/panel_group_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_group_invite.xml b/indra/newview/skins/default/xui/fr/panel_group_invite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_group_land_money.xml b/indra/newview/skins/default/xui/fr/panel_group_land_money.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_group_list_item.xml b/indra/newview/skins/default/xui/fr/panel_group_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_group_notices.xml b/indra/newview/skins/default/xui/fr/panel_group_notices.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_group_notify.xml b/indra/newview/skins/default/xui/fr/panel_group_notify.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_group_roles.xml b/indra/newview/skins/default/xui/fr/panel_group_roles.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_groups.xml b/indra/newview/skins/default/xui/fr/panel_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml b/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_instant_message.xml b/indra/newview/skins/default/xui/fr/panel_instant_message.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_inventory_item.xml b/indra/newview/skins/default/xui/fr/panel_inventory_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_landmark_info.xml b/indra/newview/skins/default/xui/fr/panel_landmark_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_landmarks.xml b/indra/newview/skins/default/xui/fr/panel_landmarks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_main_inventory.xml b/indra/newview/skins/default/xui/fr/panel_main_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_me.xml b/indra/newview/skins/default/xui/fr/panel_me.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_media_settings_general.xml b/indra/newview/skins/default/xui/fr/panel_media_settings_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/fr/panel_media_settings_permissions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_media_settings_security.xml b/indra/newview/skins/default/xui/fr/panel_media_settings_security.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_my_profile.xml b/indra/newview/skins/default/xui/fr/panel_my_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_navigation_bar.xml b/indra/newview/skins/default/xui/fr/panel_navigation_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml b/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_media.xml b/indra/newview/skins/default/xui/fr/panel_nearby_media.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_notes.xml b/indra/newview/skins/default/xui/fr/panel_notes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml b/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_online_status.xml b/indra/newview/skins/default/xui/fr/panel_online_status.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_online_status_toast.xml b/indra/newview/skins/default/xui/fr/panel_online_status_toast.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml b/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/fr/panel_outfits_inventory_gear_default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_outfits_list.xml b/indra/newview/skins/default/xui/fr/panel_outfits_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/fr/panel_outfits_wearing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_people.xml b/indra/newview/skins/default/xui/fr/panel_people.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_pick_info.xml b/indra/newview/skins/default/xui/fr/panel_pick_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_picks.xml b/indra/newview/skins/default/xui/fr/panel_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_place_profile.xml b/indra/newview/skins/default/xui/fr/panel_place_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_places.xml b/indra/newview/skins/default/xui/fr/panel_places.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/fr/panel_preferences_alerts.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_profile.xml b/indra/newview/skins/default/xui/fr/panel_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_profile_view.xml b/indra/newview/skins/default/xui/fr/panel_profile_view.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_region_covenant.xml b/indra/newview/skins/default/xui/fr/panel_region_covenant.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_region_debug.xml b/indra/newview/skins/default/xui/fr/panel_region_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_region_estate.xml b/indra/newview/skins/default/xui/fr/panel_region_estate.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_region_general.xml b/indra/newview/skins/default/xui/fr/panel_region_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml b/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_region_terrain.xml b/indra/newview/skins/default/xui/fr/panel_region_terrain.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_region_texture.xml b/indra/newview/skins/default/xui/fr/panel_region_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_script_ed.xml b/indra/newview/skins/default/xui/fr/panel_script_ed.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/fr/panel_script_limits_my_avatar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/fr/panel_script_limits_region_memory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_scrolling_param.xml b/indra/newview/skins/default/xui/fr/panel_scrolling_param.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_side_tray.xml b/indra/newview/skins/default/xui/fr/panel_side_tray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/fr/panel_side_tray_tab_caption.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/fr/panel_sidetray_home_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/fr/panel_stand_stop_flying.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_status_bar.xml b/indra/newview/skins/default/xui/fr/panel_status_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_sys_well_item.xml b/indra/newview/skins/default/xui/fr/panel_sys_well_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_teleport_history.xml b/indra/newview/skins/default/xui/fr/panel_teleport_history.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/fr/panel_teleport_history_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_voice_effect.xml b/indra/newview/skins/default/xui/fr/panel_voice_effect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/panel_world_map.xml b/indra/newview/skins/default/xui/fr/panel_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/role_actions.xml b/indra/newview/skins/default/xui/fr/role_actions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/sidepanel_appearance.xml b/indra/newview/skins/default/xui/fr/sidepanel_appearance.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml b/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml b/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/teleport_strings.xml b/indra/newview/skins/default/xui/fr/teleport_strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/fr/xui_version.xml b/indra/newview/skins/default/xui/fr/xui_version.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_about.xml b/indra/newview/skins/default/xui/it/floater_about.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_about_land.xml b/indra/newview/skins/default/xui/it/floater_about_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_activeim.xml b/indra/newview/skins/default/xui/it/floater_activeim.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_animation_preview.xml b/indra/newview/skins/default/xui/it/floater_animation_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_auction.xml b/indra/newview/skins/default/xui/it/floater_auction.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_avatar_picker.xml b/indra/newview/skins/default/xui/it/floater_avatar_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_avatar_textures.xml b/indra/newview/skins/default/xui/it/floater_avatar_textures.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_beacons.xml b/indra/newview/skins/default/xui/it/floater_beacons.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_build_options.xml b/indra/newview/skins/default/xui/it/floater_build_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_bulk_perms.xml b/indra/newview/skins/default/xui/it/floater_bulk_perms.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_bumps.xml b/indra/newview/skins/default/xui/it/floater_bumps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_buy_contents.xml b/indra/newview/skins/default/xui/it/floater_buy_contents.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_buy_currency.xml b/indra/newview/skins/default/xui/it/floater_buy_currency.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/it/floater_buy_currency_html.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_buy_land.xml b/indra/newview/skins/default/xui/it/floater_buy_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_buy_object.xml b/indra/newview/skins/default/xui/it/floater_buy_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_camera.xml b/indra/newview/skins/default/xui/it/floater_camera.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_choose_group.xml b/indra/newview/skins/default/xui/it/floater_choose_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_color_picker.xml b/indra/newview/skins/default/xui/it/floater_color_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_critical.xml b/indra/newview/skins/default/xui/it/floater_critical.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_customize.xml b/indra/newview/skins/default/xui/it/floater_customize.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_device_settings.xml b/indra/newview/skins/default/xui/it/floater_device_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_env_settings.xml b/indra/newview/skins/default/xui/it/floater_env_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_event.xml b/indra/newview/skins/default/xui/it/floater_event.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_font_test.xml b/indra/newview/skins/default/xui/it/floater_font_test.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_gesture.xml b/indra/newview/skins/default/xui/it/floater_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_god_tools.xml b/indra/newview/skins/default/xui/it/floater_god_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_hardware_settings.xml b/indra/newview/skins/default/xui/it/floater_hardware_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_help_browser.xml b/indra/newview/skins/default/xui/it/floater_help_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_hud.xml b/indra/newview/skins/default/xui/it/floater_hud.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_im.xml b/indra/newview/skins/default/xui/it/floater_im.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_im_container.xml b/indra/newview/skins/default/xui/it/floater_im_container.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_im_session.xml b/indra/newview/skins/default/xui/it/floater_im_session.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_image_preview.xml b/indra/newview/skins/default/xui/it/floater_image_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_incoming_call.xml b/indra/newview/skins/default/xui/it/floater_incoming_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_inspect.xml b/indra/newview/skins/default/xui/it/floater_inspect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_inventory.xml b/indra/newview/skins/default/xui/it/floater_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_joystick.xml b/indra/newview/skins/default/xui/it/floater_joystick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_lagmeter.xml b/indra/newview/skins/default/xui/it/floater_lagmeter.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_land_holdings.xml b/indra/newview/skins/default/xui/it/floater_land_holdings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_lsl_guide.xml b/indra/newview/skins/default/xui/it/floater_lsl_guide.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_map.xml b/indra/newview/skins/default/xui/it/floater_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_media_browser.xml b/indra/newview/skins/default/xui/it/floater_media_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_media_settings.xml b/indra/newview/skins/default/xui/it/floater_media_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_mem_leaking.xml b/indra/newview/skins/default/xui/it/floater_mem_leaking.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_moveview.xml b/indra/newview/skins/default/xui/it/floater_moveview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_mute_object.xml b/indra/newview/skins/default/xui/it/floater_mute_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_my_friends.xml b/indra/newview/skins/default/xui/it/floater_my_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_nearby_chat.xml b/indra/newview/skins/default/xui/it/floater_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_openobject.xml b/indra/newview/skins/default/xui/it/floater_openobject.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_outgoing_call.xml b/indra/newview/skins/default/xui/it/floater_outgoing_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_pay.xml b/indra/newview/skins/default/xui/it/floater_pay.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_pay_object.xml b/indra/newview/skins/default/xui/it/floater_pay_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_perm_prefs.xml b/indra/newview/skins/default/xui/it/floater_perm_prefs.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_post_process.xml b/indra/newview/skins/default/xui/it/floater_post_process.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_postcard.xml b/indra/newview/skins/default/xui/it/floater_postcard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_preferences.xml b/indra/newview/skins/default/xui/it/floater_preferences.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_preview_animation.xml b/indra/newview/skins/default/xui/it/floater_preview_animation.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_preview_classified.xml b/indra/newview/skins/default/xui/it/floater_preview_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_preview_event.xml b/indra/newview/skins/default/xui/it/floater_preview_event.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_preview_notecard.xml b/indra/newview/skins/default/xui/it/floater_preview_notecard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_preview_sound.xml b/indra/newview/skins/default/xui/it/floater_preview_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_preview_texture.xml b/indra/newview/skins/default/xui/it/floater_preview_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_publish_classified.xml b/indra/newview/skins/default/xui/it/floater_publish_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_region_info.xml b/indra/newview/skins/default/xui/it/floater_region_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_report_abuse.xml b/indra/newview/skins/default/xui/it/floater_report_abuse.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_script_debug.xml b/indra/newview/skins/default/xui/it/floater_script_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/it/floater_script_debug_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_script_limits.xml b/indra/newview/skins/default/xui/it/floater_script_limits.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_script_preview.xml b/indra/newview/skins/default/xui/it/floater_script_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_script_queue.xml b/indra/newview/skins/default/xui/it/floater_script_queue.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_script_search.xml b/indra/newview/skins/default/xui/it/floater_script_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_search.xml b/indra/newview/skins/default/xui/it/floater_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_select_key.xml b/indra/newview/skins/default/xui/it/floater_select_key.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_sell_land.xml b/indra/newview/skins/default/xui/it/floater_sell_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_settings_debug.xml b/indra/newview/skins/default/xui/it/floater_settings_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_snapshot.xml b/indra/newview/skins/default/xui/it/floater_snapshot.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_sound_preview.xml b/indra/newview/skins/default/xui/it/floater_sound_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_statistics.xml b/indra/newview/skins/default/xui/it/floater_statistics.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_stats.xml b/indra/newview/skins/default/xui/it/floater_stats.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_sys_well.xml b/indra/newview/skins/default/xui/it/floater_sys_well.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_telehub.xml b/indra/newview/skins/default/xui/it/floater_telehub.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_top_objects.xml b/indra/newview/skins/default/xui/it/floater_top_objects.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_tos.xml b/indra/newview/skins/default/xui/it/floater_tos.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_url_entry.xml b/indra/newview/skins/default/xui/it/floater_url_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_voice_controls.xml b/indra/newview/skins/default/xui/it/floater_voice_controls.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_voice_effect.xml b/indra/newview/skins/default/xui/it/floater_voice_effect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_water.xml b/indra/newview/skins/default/xui/it/floater_water.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/it/floater_whitelist_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_windlight_options.xml b/indra/newview/skins/default/xui/it/floater_windlight_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_window_size.xml b/indra/newview/skins/default/xui/it/floater_window_size.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/floater_world_map.xml b/indra/newview/skins/default/xui/it/floater_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/inspect_avatar.xml b/indra/newview/skins/default/xui/it/inspect_avatar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/inspect_group.xml b/indra/newview/skins/default/xui/it/inspect_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/inspect_object.xml b/indra/newview/skins/default/xui/it/inspect_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/inspect_remote_object.xml b/indra/newview/skins/default/xui/it/inspect_remote_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/language_settings.xml b/indra/newview/skins/default/xui/it/language_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_attachment_other.xml b/indra/newview/skins/default/xui/it/menu_attachment_other.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_attachment_self.xml b/indra/newview/skins/default/xui/it/menu_attachment_self.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_avatar_icon.xml b/indra/newview/skins/default/xui/it/menu_avatar_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_avatar_other.xml b/indra/newview/skins/default/xui/it/menu_avatar_other.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_avatar_self.xml b/indra/newview/skins/default/xui/it/menu_avatar_self.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_bottomtray.xml b/indra/newview/skins/default/xui/it/menu_bottomtray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_cof_attachment.xml b/indra/newview/skins/default/xui/it/menu_cof_attachment.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_cof_body_part.xml b/indra/newview/skins/default/xui/it/menu_cof_body_part.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_cof_clothing.xml b/indra/newview/skins/default/xui/it/menu_cof_clothing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_cof_gear.xml b/indra/newview/skins/default/xui/it/menu_cof_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_edit.xml b/indra/newview/skins/default/xui/it/menu_edit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_favorites.xml b/indra/newview/skins/default/xui/it/menu_favorites.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_gesture_gear.xml b/indra/newview/skins/default/xui/it/menu_gesture_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_group_plus.xml b/indra/newview/skins/default/xui/it/menu_group_plus.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_hide_navbar.xml b/indra/newview/skins/default/xui/it/menu_hide_navbar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_im_well_button.xml b/indra/newview/skins/default/xui/it/menu_im_well_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/it/menu_imchiclet_adhoc.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/it/menu_imchiclet_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/it/menu_imchiclet_p2p.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/it/menu_inv_offer_chiclet.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_inventory.xml b/indra/newview/skins/default/xui/it/menu_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_inventory_add.xml b/indra/newview/skins/default/xui/it/menu_inventory_add.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/it/menu_inventory_gear_default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_land.xml b/indra/newview/skins/default/xui/it/menu_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_landmark.xml b/indra/newview/skins/default/xui/it/menu_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_login.xml b/indra/newview/skins/default/xui/it/menu_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_mini_map.xml b/indra/newview/skins/default/xui/it/menu_mini_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_navbar.xml b/indra/newview/skins/default/xui/it/menu_navbar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_nearby_chat.xml b/indra/newview/skins/default/xui/it/menu_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_notification_well_button.xml b/indra/newview/skins/default/xui/it/menu_notification_well_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_object.xml b/indra/newview/skins/default/xui/it/menu_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_object_icon.xml b/indra/newview/skins/default/xui/it/menu_object_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_outfit_gear.xml b/indra/newview/skins/default/xui/it/menu_outfit_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_outfit_tab.xml b/indra/newview/skins/default/xui/it/menu_outfit_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_participant_list.xml b/indra/newview/skins/default/xui/it/menu_participant_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_people_groups.xml b/indra/newview/skins/default/xui/it/menu_people_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_groups_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_people_nearby.xml b/indra/newview/skins/default/xui/it/menu_people_nearby.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_picks.xml b/indra/newview/skins/default/xui/it/menu_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_picks_plus.xml b/indra/newview/skins/default/xui/it/menu_picks_plus.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_place.xml b/indra/newview/skins/default/xui/it/menu_place.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_place_add_button.xml b/indra/newview/skins/default/xui/it/menu_place_add_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/it/menu_places_gear_folder.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/it/menu_places_gear_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_profile_overflow.xml b/indra/newview/skins/default/xui/it/menu_profile_overflow.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_save_outfit.xml b/indra/newview/skins/default/xui/it/menu_save_outfit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_script_chiclet.xml b/indra/newview/skins/default/xui/it/menu_script_chiclet.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_slurl.xml b/indra/newview/skins/default/xui/it/menu_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/it/menu_teleport_history_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/it/menu_teleport_history_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_text_editor.xml b/indra/newview/skins/default/xui/it/menu_text_editor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_topinfobar.xml b/indra/newview/skins/default/xui/it/menu_topinfobar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_url_agent.xml b/indra/newview/skins/default/xui/it/menu_url_agent.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_url_group.xml b/indra/newview/skins/default/xui/it/menu_url_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_url_http.xml b/indra/newview/skins/default/xui/it/menu_url_http.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_url_inventory.xml b/indra/newview/skins/default/xui/it/menu_url_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_url_map.xml b/indra/newview/skins/default/xui/it/menu_url_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_url_objectim.xml b/indra/newview/skins/default/xui/it/menu_url_objectim.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_url_parcel.xml b/indra/newview/skins/default/xui/it/menu_url_parcel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_url_slapp.xml b/indra/newview/skins/default/xui/it/menu_url_slapp.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_url_slurl.xml b/indra/newview/skins/default/xui/it/menu_url_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_url_teleport.xml b/indra/newview/skins/default/xui/it/menu_url_teleport.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/it/menu_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_wearing_gear.xml b/indra/newview/skins/default/xui/it/menu_wearing_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/menu_wearing_tab.xml b/indra/newview/skins/default/xui/it/menu_wearing_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/mime_types.xml b/indra/newview/skins/default/xui/it/mime_types.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/mime_types_linux.xml b/indra/newview/skins/default/xui/it/mime_types_linux.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/mime_types_mac.xml b/indra/newview/skins/default/xui/it/mime_types_mac.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/it/outfit_accordion_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_active_object_row.xml b/indra/newview/skins/default/xui/it/panel_active_object_row.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_audio_device.xml b/indra/newview/skins/default/xui/it/panel_audio_device.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/it/panel_avatar_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/it/panel_body_parts_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/it/panel_bodyparts_list_button_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_bottomtray.xml b/indra/newview/skins/default/xui/it/panel_bottomtray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/it/panel_bottomtray_lite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_classified_info.xml b/indra/newview/skins/default/xui/it/panel_classified_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/it/panel_clothing_list_button_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/it/panel_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_cof_wearables.xml b/indra/newview/skins/default/xui/it/panel_cof_wearables.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/it/panel_deletable_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/it/panel_dummy_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_alpha.xml b/indra/newview/skins/default/xui/it/panel_edit_alpha.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_classified.xml b/indra/newview/skins/default/xui/it/panel_edit_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_eyes.xml b/indra/newview/skins/default/xui/it/panel_edit_eyes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_gloves.xml b/indra/newview/skins/default/xui/it/panel_edit_gloves.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_hair.xml b/indra/newview/skins/default/xui/it/panel_edit_hair.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_jacket.xml b/indra/newview/skins/default/xui/it/panel_edit_jacket.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_pants.xml b/indra/newview/skins/default/xui/it/panel_edit_pants.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_pick.xml b/indra/newview/skins/default/xui/it/panel_edit_pick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_profile.xml b/indra/newview/skins/default/xui/it/panel_edit_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_shape.xml b/indra/newview/skins/default/xui/it/panel_edit_shape.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_shirt.xml b/indra/newview/skins/default/xui/it/panel_edit_shirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_shoes.xml b/indra/newview/skins/default/xui/it/panel_edit_shoes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_skin.xml b/indra/newview/skins/default/xui/it/panel_edit_skin.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_skirt.xml b/indra/newview/skins/default/xui/it/panel_edit_skirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_socks.xml b/indra/newview/skins/default/xui/it/panel_edit_socks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/it/panel_edit_tattoo.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_underpants.xml b/indra/newview/skins/default/xui/it/panel_edit_underpants.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/it/panel_edit_undershirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_edit_wearable.xml b/indra/newview/skins/default/xui/it/panel_edit_wearable.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_friends.xml b/indra/newview/skins/default/xui/it/panel_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_group_control_panel.xml b/indra/newview/skins/default/xui/it/panel_group_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_group_general.xml b/indra/newview/skins/default/xui/it/panel_group_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_group_invite.xml b/indra/newview/skins/default/xui/it/panel_group_invite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_group_land_money.xml b/indra/newview/skins/default/xui/it/panel_group_land_money.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_group_list_item.xml b/indra/newview/skins/default/xui/it/panel_group_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_group_notices.xml b/indra/newview/skins/default/xui/it/panel_group_notices.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_group_notify.xml b/indra/newview/skins/default/xui/it/panel_group_notify.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_group_roles.xml b/indra/newview/skins/default/xui/it/panel_group_roles.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_groups.xml b/indra/newview/skins/default/xui/it/panel_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_im_control_panel.xml b/indra/newview/skins/default/xui/it/panel_im_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_inventory_item.xml b/indra/newview/skins/default/xui/it/panel_inventory_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_landmark_info.xml b/indra/newview/skins/default/xui/it/panel_landmark_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_landmarks.xml b/indra/newview/skins/default/xui/it/panel_landmarks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_login.xml b/indra/newview/skins/default/xui/it/panel_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_main_inventory.xml b/indra/newview/skins/default/xui/it/panel_main_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_me.xml b/indra/newview/skins/default/xui/it/panel_me.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_media_settings_general.xml b/indra/newview/skins/default/xui/it/panel_media_settings_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/it/panel_media_settings_permissions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_media_settings_security.xml b/indra/newview/skins/default/xui/it/panel_media_settings_security.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_my_profile.xml b/indra/newview/skins/default/xui/it/panel_my_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_navigation_bar.xml b/indra/newview/skins/default/xui/it/panel_navigation_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_nearby_chat.xml b/indra/newview/skins/default/xui/it/panel_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/it/panel_nearby_chat_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_nearby_media.xml b/indra/newview/skins/default/xui/it/panel_nearby_media.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_notes.xml b/indra/newview/skins/default/xui/it/panel_notes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_online_status.xml b/indra/newview/skins/default/xui/it/panel_online_status.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_online_status_toast.xml b/indra/newview/skins/default/xui/it/panel_online_status_toast.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_outfit_edit.xml b/indra/newview/skins/default/xui/it/panel_outfit_edit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/it/panel_outfits_inventory_gear_default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_outfits_list.xml b/indra/newview/skins/default/xui/it/panel_outfits_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/it/panel_outfits_wearing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_people.xml b/indra/newview/skins/default/xui/it/panel_people.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_pick_info.xml b/indra/newview/skins/default/xui/it/panel_pick_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_picks.xml b/indra/newview/skins/default/xui/it/panel_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_place_profile.xml b/indra/newview/skins/default/xui/it/panel_place_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_places.xml b/indra/newview/skins/default/xui/it/panel_places.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_preferences_general.xml b/indra/newview/skins/default/xui/it/panel_preferences_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_preferences_setup.xml b/indra/newview/skins/default/xui/it/panel_preferences_setup.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_profile.xml b/indra/newview/skins/default/xui/it/panel_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_profile_view.xml b/indra/newview/skins/default/xui/it/panel_profile_view.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_region_covenant.xml b/indra/newview/skins/default/xui/it/panel_region_covenant.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_region_debug.xml b/indra/newview/skins/default/xui/it/panel_region_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_region_estate.xml b/indra/newview/skins/default/xui/it/panel_region_estate.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_region_general.xml b/indra/newview/skins/default/xui/it/panel_region_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_region_general_layout.xml b/indra/newview/skins/default/xui/it/panel_region_general_layout.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_region_terrain.xml b/indra/newview/skins/default/xui/it/panel_region_terrain.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_region_texture.xml b/indra/newview/skins/default/xui/it/panel_region_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_script_ed.xml b/indra/newview/skins/default/xui/it/panel_script_ed.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/it/panel_script_limits_my_avatar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/it/panel_script_limits_region_memory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_scrolling_param.xml b/indra/newview/skins/default/xui/it/panel_scrolling_param.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_side_tray.xml b/indra/newview/skins/default/xui/it/panel_side_tray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/it/panel_side_tray_tab_caption.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/it/panel_stand_stop_flying.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_status_bar.xml b/indra/newview/skins/default/xui/it/panel_status_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_teleport_history.xml b/indra/newview/skins/default/xui/it/panel_teleport_history.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/it/panel_teleport_history_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_voice_effect.xml b/indra/newview/skins/default/xui/it/panel_voice_effect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/panel_world_map.xml b/indra/newview/skins/default/xui/it/panel_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/role_actions.xml b/indra/newview/skins/default/xui/it/role_actions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/sidepanel_appearance.xml b/indra/newview/skins/default/xui/it/sidepanel_appearance.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/sidepanel_inventory.xml b/indra/newview/skins/default/xui/it/sidepanel_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/sidepanel_item_info.xml b/indra/newview/skins/default/xui/it/sidepanel_item_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/sidepanel_task_info.xml b/indra/newview/skins/default/xui/it/sidepanel_task_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/it/teleport_strings.xml b/indra/newview/skins/default/xui/it/teleport_strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_about.xml b/indra/newview/skins/default/xui/ja/floater_about.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_about_land.xml b/indra/newview/skins/default/xui/ja/floater_about_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_activeim.xml b/indra/newview/skins/default/xui/ja/floater_activeim.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_animation_preview.xml b/indra/newview/skins/default/xui/ja/floater_animation_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_auction.xml b/indra/newview/skins/default/xui/ja/floater_auction.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_avatar_picker.xml b/indra/newview/skins/default/xui/ja/floater_avatar_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml b/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_beacons.xml b/indra/newview/skins/default/xui/ja/floater_beacons.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_build_options.xml b/indra/newview/skins/default/xui/ja/floater_build_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml b/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_bumps.xml b/indra/newview/skins/default/xui/ja/floater_bumps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_buy_contents.xml b/indra/newview/skins/default/xui/ja/floater_buy_contents.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_buy_currency.xml b/indra/newview/skins/default/xui/ja/floater_buy_currency.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/ja/floater_buy_currency_html.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_buy_land.xml b/indra/newview/skins/default/xui/ja/floater_buy_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_buy_object.xml b/indra/newview/skins/default/xui/ja/floater_buy_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_camera.xml b/indra/newview/skins/default/xui/ja/floater_camera.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_choose_group.xml b/indra/newview/skins/default/xui/ja/floater_choose_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_color_picker.xml b/indra/newview/skins/default/xui/ja/floater_color_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_critical.xml b/indra/newview/skins/default/xui/ja/floater_critical.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_customize.xml b/indra/newview/skins/default/xui/ja/floater_customize.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_device_settings.xml b/indra/newview/skins/default/xui/ja/floater_device_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_env_settings.xml b/indra/newview/skins/default/xui/ja/floater_env_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_event.xml b/indra/newview/skins/default/xui/ja/floater_event.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_first_time_tip.xml b/indra/newview/skins/default/xui/ja/floater_first_time_tip.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_font_test.xml b/indra/newview/skins/default/xui/ja/floater_font_test.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_gesture.xml b/indra/newview/skins/default/xui/ja/floater_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_god_tools.xml b/indra/newview/skins/default/xui/ja/floater_god_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml b/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_help_browser.xml b/indra/newview/skins/default/xui/ja/floater_help_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_hud.xml b/indra/newview/skins/default/xui/ja/floater_hud.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_im.xml b/indra/newview/skins/default/xui/ja/floater_im.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_im_container.xml b/indra/newview/skins/default/xui/ja/floater_im_container.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_im_session.xml b/indra/newview/skins/default/xui/ja/floater_im_session.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_image_preview.xml b/indra/newview/skins/default/xui/ja/floater_image_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_incoming_call.xml b/indra/newview/skins/default/xui/ja/floater_incoming_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_inspect.xml b/indra/newview/skins/default/xui/ja/floater_inspect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_inventory.xml b/indra/newview/skins/default/xui/ja/floater_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_joystick.xml b/indra/newview/skins/default/xui/ja/floater_joystick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_lagmeter.xml b/indra/newview/skins/default/xui/ja/floater_lagmeter.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_land_holdings.xml b/indra/newview/skins/default/xui/ja/floater_land_holdings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_lsl_guide.xml b/indra/newview/skins/default/xui/ja/floater_lsl_guide.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_map.xml b/indra/newview/skins/default/xui/ja/floater_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_media_browser.xml b/indra/newview/skins/default/xui/ja/floater_media_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_media_settings.xml b/indra/newview/skins/default/xui/ja/floater_media_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml b/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_moveview.xml b/indra/newview/skins/default/xui/ja/floater_moveview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_mute_object.xml b/indra/newview/skins/default/xui/ja/floater_mute_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_my_friends.xml b/indra/newview/skins/default/xui/ja/floater_my_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_nearby_chat.xml b/indra/newview/skins/default/xui/ja/floater_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_notification.xml b/indra/newview/skins/default/xui/ja/floater_notification.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_notifications_console.xml b/indra/newview/skins/default/xui/ja/floater_notifications_console.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_openobject.xml b/indra/newview/skins/default/xui/ja/floater_openobject.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/ja/floater_outfit_save_as.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_outgoing_call.xml b/indra/newview/skins/default/xui/ja/floater_outgoing_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_pay.xml b/indra/newview/skins/default/xui/ja/floater_pay.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_pay_object.xml b/indra/newview/skins/default/xui/ja/floater_pay_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_perm_prefs.xml b/indra/newview/skins/default/xui/ja/floater_perm_prefs.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_post_process.xml b/indra/newview/skins/default/xui/ja/floater_post_process.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_postcard.xml b/indra/newview/skins/default/xui/ja/floater_postcard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_preferences.xml b/indra/newview/skins/default/xui/ja/floater_preferences.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_preview_animation.xml b/indra/newview/skins/default/xui/ja/floater_preview_animation.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_preview_classified.xml b/indra/newview/skins/default/xui/ja/floater_preview_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_preview_event.xml b/indra/newview/skins/default/xui/ja/floater_preview_event.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_shortcut.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml b/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_preview_sound.xml b/indra/newview/skins/default/xui/ja/floater_preview_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_preview_texture.xml b/indra/newview/skins/default/xui/ja/floater_preview_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_publish_classified.xml b/indra/newview/skins/default/xui/ja/floater_publish_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_region_info.xml b/indra/newview/skins/default/xui/ja/floater_region_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_script_debug.xml b/indra/newview/skins/default/xui/ja/floater_script_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/ja/floater_script_debug_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_script_limits.xml b/indra/newview/skins/default/xui/ja/floater_script_limits.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_script_preview.xml b/indra/newview/skins/default/xui/ja/floater_script_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_script_queue.xml b/indra/newview/skins/default/xui/ja/floater_script_queue.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_script_search.xml b/indra/newview/skins/default/xui/ja/floater_script_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_search.xml b/indra/newview/skins/default/xui/ja/floater_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_select_key.xml b/indra/newview/skins/default/xui/ja/floater_select_key.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_sell_land.xml b/indra/newview/skins/default/xui/ja/floater_sell_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_settings_debug.xml b/indra/newview/skins/default/xui/ja/floater_settings_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_snapshot.xml b/indra/newview/skins/default/xui/ja/floater_snapshot.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_sound_preview.xml b/indra/newview/skins/default/xui/ja/floater_sound_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_statistics.xml b/indra/newview/skins/default/xui/ja/floater_statistics.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_stats.xml b/indra/newview/skins/default/xui/ja/floater_stats.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_sys_well.xml b/indra/newview/skins/default/xui/ja/floater_sys_well.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_telehub.xml b/indra/newview/skins/default/xui/ja/floater_telehub.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/ja/floater_texture_ctrl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_top_objects.xml b/indra/newview/skins/default/xui/ja/floater_top_objects.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_tos.xml b/indra/newview/skins/default/xui/ja/floater_tos.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_url_entry.xml b/indra/newview/skins/default/xui/ja/floater_url_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml b/indra/newview/skins/default/xui/ja/floater_voice_controls.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_voice_effect.xml b/indra/newview/skins/default/xui/ja/floater_voice_effect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_water.xml b/indra/newview/skins/default/xui/ja/floater_water.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/ja/floater_whitelist_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_windlight_options.xml b/indra/newview/skins/default/xui/ja/floater_windlight_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_window_size.xml b/indra/newview/skins/default/xui/ja/floater_window_size.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/floater_world_map.xml b/indra/newview/skins/default/xui/ja/floater_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/inspect_avatar.xml b/indra/newview/skins/default/xui/ja/inspect_avatar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/inspect_group.xml b/indra/newview/skins/default/xui/ja/inspect_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/inspect_object.xml b/indra/newview/skins/default/xui/ja/inspect_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/inspect_remote_object.xml b/indra/newview/skins/default/xui/ja/inspect_remote_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/language_settings.xml b/indra/newview/skins/default/xui/ja/language_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_other.xml b/indra/newview/skins/default/xui/ja/menu_attachment_other.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml b/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_other.xml b/indra/newview/skins/default/xui/ja/menu_avatar_other.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_bottomtray.xml b/indra/newview/skins/default/xui/ja/menu_bottomtray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml b/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml b/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml b/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_cof_gear.xml b/indra/newview/skins/default/xui/ja/menu_cof_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_edit.xml b/indra/newview/skins/default/xui/ja/menu_edit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_favorites.xml b/indra/newview/skins/default/xui/ja/menu_favorites.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml b/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_group_plus.xml b/indra/newview/skins/default/xui/ja/menu_group_plus.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml b/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_im_well_button.xml b/indra/newview/skins/default/xui/ja/menu_im_well_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/ja/menu_imchiclet_adhoc.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/ja/menu_imchiclet_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/ja/menu_imchiclet_p2p.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_avatar_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/ja/menu_inv_offer_chiclet.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_inventory.xml b/indra/newview/skins/default/xui/ja/menu_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_inventory_add.xml b/indra/newview/skins/default/xui/ja/menu_inventory_add.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_land.xml b/indra/newview/skins/default/xui/ja/menu_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_landmark.xml b/indra/newview/skins/default/xui/ja/menu_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_login.xml b/indra/newview/skins/default/xui/ja/menu_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_mini_map.xml b/indra/newview/skins/default/xui/ja/menu_mini_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_navbar.xml b/indra/newview/skins/default/xui/ja/menu_navbar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_nearby_chat.xml b/indra/newview/skins/default/xui/ja/menu_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_notification_well_button.xml b/indra/newview/skins/default/xui/ja/menu_notification_well_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_object.xml b/indra/newview/skins/default/xui/ja/menu_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_object_icon.xml b/indra/newview/skins/default/xui/ja/menu_object_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml b/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml b/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_participant_list.xml b/indra/newview/skins/default/xui/ja/menu_participant_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_friends_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_people_groups.xml b/indra/newview/skins/default/xui/ja/menu_people_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_groups_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_recent_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_picks.xml b/indra/newview/skins/default/xui/ja/menu_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_picks_plus.xml b/indra/newview/skins/default/xui/ja/menu_picks_plus.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_place.xml b/indra/newview/skins/default/xui/ja/menu_place.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_place_add_button.xml b/indra/newview/skins/default/xui/ja/menu_place_add_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml b/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_save_outfit.xml b/indra/newview/skins/default/xui/ja/menu_save_outfit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_script_chiclet.xml b/indra/newview/skins/default/xui/ja/menu_script_chiclet.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_slurl.xml b/indra/newview/skins/default/xui/ja/menu_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/ja/menu_teleport_history_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/ja/menu_teleport_history_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_text_editor.xml b/indra/newview/skins/default/xui/ja/menu_text_editor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_topinfobar.xml b/indra/newview/skins/default/xui/ja/menu_topinfobar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_url_agent.xml b/indra/newview/skins/default/xui/ja/menu_url_agent.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_url_group.xml b/indra/newview/skins/default/xui/ja/menu_url_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_url_http.xml b/indra/newview/skins/default/xui/ja/menu_url_http.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_url_inventory.xml b/indra/newview/skins/default/xui/ja/menu_url_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_url_map.xml b/indra/newview/skins/default/xui/ja/menu_url_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_url_objectim.xml b/indra/newview/skins/default/xui/ja/menu_url_objectim.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_url_parcel.xml b/indra/newview/skins/default/xui/ja/menu_url_parcel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_url_slapp.xml b/indra/newview/skins/default/xui/ja/menu_url_slapp.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_url_slurl.xml b/indra/newview/skins/default/xui/ja/menu_url_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_url_teleport.xml b/indra/newview/skins/default/xui/ja/menu_url_teleport.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml b/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml b/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/mime_types.xml b/indra/newview/skins/default/xui/ja/mime_types.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/mime_types_linux.xml b/indra/newview/skins/default/xui/ja/mime_types_linux.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/mime_types_mac.xml b/indra/newview/skins/default/xui/ja/mime_types_mac.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/ja/outfit_accordion_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_active_object_row.xml b/indra/newview/skins/default/xui/ja/panel_active_object_row.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_activeim_row.xml b/indra/newview/skins/default/xui/ja/panel_activeim_row.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/ja/panel_adhoc_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_audio_device.xml b/indra/newview/skins/default/xui/ja/panel_audio_device.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/ja/panel_avatar_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_avatar_tag.xml b/indra/newview/skins/default/xui/ja/panel_avatar_tag.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/ja/panel_block_list_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/ja/panel_body_parts_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/ja/panel_bodyparts_list_button_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_bottomtray.xml b/indra/newview/skins/default/xui/ja/panel_bottomtray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/ja/panel_bottomtray_lite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_chat_header.xml b/indra/newview/skins/default/xui/ja/panel_chat_header.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_classified_info.xml b/indra/newview/skins/default/xui/ja/panel_classified_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/ja/panel_clothing_list_button_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/ja/panel_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_cof_wearables.xml b/indra/newview/skins/default/xui/ja/panel_cof_wearables.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/ja/panel_deletable_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/ja/panel_dummy_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_alpha.xml b/indra/newview/skins/default/xui/ja/panel_edit_alpha.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_classified.xml b/indra/newview/skins/default/xui/ja/panel_edit_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_eyes.xml b/indra/newview/skins/default/xui/ja/panel_edit_eyes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_gloves.xml b/indra/newview/skins/default/xui/ja/panel_edit_gloves.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_hair.xml b/indra/newview/skins/default/xui/ja/panel_edit_hair.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_jacket.xml b/indra/newview/skins/default/xui/ja/panel_edit_jacket.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_pants.xml b/indra/newview/skins/default/xui/ja/panel_edit_pants.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_pick.xml b/indra/newview/skins/default/xui/ja/panel_edit_pick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_profile.xml b/indra/newview/skins/default/xui/ja/panel_edit_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_shape.xml b/indra/newview/skins/default/xui/ja/panel_edit_shape.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_shirt.xml b/indra/newview/skins/default/xui/ja/panel_edit_shirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_shoes.xml b/indra/newview/skins/default/xui/ja/panel_edit_shoes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_skin.xml b/indra/newview/skins/default/xui/ja/panel_edit_skin.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_skirt.xml b/indra/newview/skins/default/xui/ja/panel_edit_skirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_socks.xml b/indra/newview/skins/default/xui/ja/panel_edit_socks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_underpants.xml b/indra/newview/skins/default/xui/ja/panel_edit_underpants.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/ja/panel_edit_undershirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml b/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_friends.xml b/indra/newview/skins/default/xui/ja/panel_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_group_control_panel.xml b/indra/newview/skins/default/xui/ja/panel_group_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_group_general.xml b/indra/newview/skins/default/xui/ja/panel_group_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_group_invite.xml b/indra/newview/skins/default/xui/ja/panel_group_invite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_group_land_money.xml b/indra/newview/skins/default/xui/ja/panel_group_land_money.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_group_list_item.xml b/indra/newview/skins/default/xui/ja/panel_group_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_group_notices.xml b/indra/newview/skins/default/xui/ja/panel_group_notices.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_group_notify.xml b/indra/newview/skins/default/xui/ja/panel_group_notify.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_group_roles.xml b/indra/newview/skins/default/xui/ja/panel_group_roles.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_groups.xml b/indra/newview/skins/default/xui/ja/panel_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml b/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_instant_message.xml b/indra/newview/skins/default/xui/ja/panel_instant_message.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_inventory_item.xml b/indra/newview/skins/default/xui/ja/panel_inventory_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_landmark_info.xml b/indra/newview/skins/default/xui/ja/panel_landmark_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_landmarks.xml b/indra/newview/skins/default/xui/ja/panel_landmarks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_login.xml b/indra/newview/skins/default/xui/ja/panel_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_main_inventory.xml b/indra/newview/skins/default/xui/ja/panel_main_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_me.xml b/indra/newview/skins/default/xui/ja/panel_me.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_media_settings_general.xml b/indra/newview/skins/default/xui/ja/panel_media_settings_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/ja/panel_media_settings_permissions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_media_settings_security.xml b/indra/newview/skins/default/xui/ja/panel_media_settings_security.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_my_profile.xml b/indra/newview/skins/default/xui/ja/panel_my_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_navigation_bar.xml b/indra/newview/skins/default/xui/ja/panel_navigation_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml b/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_nearby_media.xml b/indra/newview/skins/default/xui/ja/panel_nearby_media.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_notes.xml b/indra/newview/skins/default/xui/ja/panel_notes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml b/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_online_status.xml b/indra/newview/skins/default/xui/ja/panel_online_status.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_online_status_toast.xml b/indra/newview/skins/default/xui/ja/panel_online_status_toast.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml b/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/ja/panel_outfits_inventory_gear_default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_outfits_list.xml b/indra/newview/skins/default/xui/ja/panel_outfits_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/ja/panel_outfits_wearing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_people.xml b/indra/newview/skins/default/xui/ja/panel_people.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_pick_info.xml b/indra/newview/skins/default/xui/ja/panel_pick_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_picks.xml b/indra/newview/skins/default/xui/ja/panel_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_place_profile.xml b/indra/newview/skins/default/xui/ja/panel_place_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_places.xml b/indra/newview/skins/default/xui/ja/panel_places.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_profile.xml b/indra/newview/skins/default/xui/ja/panel_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_profile_view.xml b/indra/newview/skins/default/xui/ja/panel_profile_view.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_region_covenant.xml b/indra/newview/skins/default/xui/ja/panel_region_covenant.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_region_debug.xml b/indra/newview/skins/default/xui/ja/panel_region_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_region_estate.xml b/indra/newview/skins/default/xui/ja/panel_region_estate.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_region_general.xml b/indra/newview/skins/default/xui/ja/panel_region_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml b/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_region_terrain.xml b/indra/newview/skins/default/xui/ja/panel_region_terrain.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_region_texture.xml b/indra/newview/skins/default/xui/ja/panel_region_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_script_ed.xml b/indra/newview/skins/default/xui/ja/panel_script_ed.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/ja/panel_script_limits_my_avatar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/ja/panel_script_limits_region_memory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_scrolling_param.xml b/indra/newview/skins/default/xui/ja/panel_scrolling_param.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_side_tray.xml b/indra/newview/skins/default/xui/ja/panel_side_tray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/ja/panel_side_tray_tab_caption.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/ja/panel_sidetray_home_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/ja/panel_stand_stop_flying.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_status_bar.xml b/indra/newview/skins/default/xui/ja/panel_status_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_sys_well_item.xml b/indra/newview/skins/default/xui/ja/panel_sys_well_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_teleport_history.xml b/indra/newview/skins/default/xui/ja/panel_teleport_history.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/ja/panel_teleport_history_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_voice_effect.xml b/indra/newview/skins/default/xui/ja/panel_voice_effect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/panel_world_map.xml b/indra/newview/skins/default/xui/ja/panel_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/role_actions.xml b/indra/newview/skins/default/xui/ja/role_actions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml b/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml b/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml b/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/teleport_strings.xml b/indra/newview/skins/default/xui/ja/teleport_strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/ja/xui_version.xml b/indra/newview/skins/default/xui/ja/xui_version.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_about.xml b/indra/newview/skins/default/xui/nl/floater_about.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_about_land.xml b/indra/newview/skins/default/xui/nl/floater_about_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_animation_preview.xml b/indra/newview/skins/default/xui/nl/floater_animation_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_auction.xml b/indra/newview/skins/default/xui/nl/floater_auction.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_avatar_picker.xml b/indra/newview/skins/default/xui/nl/floater_avatar_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_avatar_textures.xml b/indra/newview/skins/default/xui/nl/floater_avatar_textures.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_beacons.xml b/indra/newview/skins/default/xui/nl/floater_beacons.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_build_options.xml b/indra/newview/skins/default/xui/nl/floater_build_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_bulk_perms.xml b/indra/newview/skins/default/xui/nl/floater_bulk_perms.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_bumps.xml b/indra/newview/skins/default/xui/nl/floater_bumps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_buy_contents.xml b/indra/newview/skins/default/xui/nl/floater_buy_contents.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_buy_currency.xml b/indra/newview/skins/default/xui/nl/floater_buy_currency.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_buy_land.xml b/indra/newview/skins/default/xui/nl/floater_buy_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_buy_object.xml b/indra/newview/skins/default/xui/nl/floater_buy_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_camera.xml b/indra/newview/skins/default/xui/nl/floater_camera.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_choose_group.xml b/indra/newview/skins/default/xui/nl/floater_choose_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_color_picker.xml b/indra/newview/skins/default/xui/nl/floater_color_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_critical.xml b/indra/newview/skins/default/xui/nl/floater_critical.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_customize.xml b/indra/newview/skins/default/xui/nl/floater_customize.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/nl/floater_day_cycle_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_env_settings.xml b/indra/newview/skins/default/xui/nl/floater_env_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_font_test.xml b/indra/newview/skins/default/xui/nl/floater_font_test.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_gesture.xml b/indra/newview/skins/default/xui/nl/floater_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_hardware_settings.xml b/indra/newview/skins/default/xui/nl/floater_hardware_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_hud.xml b/indra/newview/skins/default/xui/nl/floater_hud.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_im.xml b/indra/newview/skins/default/xui/nl/floater_im.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_image_preview.xml b/indra/newview/skins/default/xui/nl/floater_image_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_inspect.xml b/indra/newview/skins/default/xui/nl/floater_inspect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_inventory.xml b/indra/newview/skins/default/xui/nl/floater_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/nl/floater_inventory_item_properties.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/nl/floater_inventory_view_finder.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_joystick.xml b/indra/newview/skins/default/xui/nl/floater_joystick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_lagmeter.xml b/indra/newview/skins/default/xui/nl/floater_lagmeter.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_land_holdings.xml b/indra/newview/skins/default/xui/nl/floater_land_holdings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/nl/floater_live_lsleditor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_lsl_guide.xml b/indra/newview/skins/default/xui/nl/floater_lsl_guide.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_map.xml b/indra/newview/skins/default/xui/nl/floater_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_media_browser.xml b/indra/newview/skins/default/xui/nl/floater_media_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_mem_leaking.xml b/indra/newview/skins/default/xui/nl/floater_mem_leaking.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_moveview.xml b/indra/newview/skins/default/xui/nl/floater_moveview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_mute_object.xml b/indra/newview/skins/default/xui/nl/floater_mute_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_my_friends.xml b/indra/newview/skins/default/xui/nl/floater_my_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_openobject.xml b/indra/newview/skins/default/xui/nl/floater_openobject.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_pay.xml b/indra/newview/skins/default/xui/nl/floater_pay.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_pay_object.xml b/indra/newview/skins/default/xui/nl/floater_pay_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_perm_prefs.xml b/indra/newview/skins/default/xui/nl/floater_perm_prefs.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_post_process.xml b/indra/newview/skins/default/xui/nl/floater_post_process.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_postcard.xml b/indra/newview/skins/default/xui/nl/floater_postcard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_preferences.xml b/indra/newview/skins/default/xui/nl/floater_preferences.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_preview_animation.xml b/indra/newview/skins/default/xui/nl/floater_preview_animation.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_preview_gesture.xml b/indra/newview/skins/default/xui/nl/floater_preview_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_preview_notecard.xml b/indra/newview/skins/default/xui/nl/floater_preview_notecard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_preview_sound.xml b/indra/newview/skins/default/xui/nl/floater_preview_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_preview_texture.xml b/indra/newview/skins/default/xui/nl/floater_preview_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_region_info.xml b/indra/newview/skins/default/xui/nl/floater_region_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_report_abuse.xml b/indra/newview/skins/default/xui/nl/floater_report_abuse.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_script_debug.xml b/indra/newview/skins/default/xui/nl/floater_script_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_script_preview.xml b/indra/newview/skins/default/xui/nl/floater_script_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_script_queue.xml b/indra/newview/skins/default/xui/nl/floater_script_queue.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_script_search.xml b/indra/newview/skins/default/xui/nl/floater_script_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_select_key.xml b/indra/newview/skins/default/xui/nl/floater_select_key.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_sell_land.xml b/indra/newview/skins/default/xui/nl/floater_sell_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_settings_debug.xml b/indra/newview/skins/default/xui/nl/floater_settings_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_snapshot.xml b/indra/newview/skins/default/xui/nl/floater_snapshot.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_sound_preview.xml b/indra/newview/skins/default/xui/nl/floater_sound_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_statistics.xml b/indra/newview/skins/default/xui/nl/floater_statistics.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_stats.xml b/indra/newview/skins/default/xui/nl/floater_stats.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_telehub.xml b/indra/newview/skins/default/xui/nl/floater_telehub.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_tools.xml b/indra/newview/skins/default/xui/nl/floater_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_top_objects.xml b/indra/newview/skins/default/xui/nl/floater_top_objects.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_tos.xml b/indra/newview/skins/default/xui/nl/floater_tos.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_url_entry.xml b/indra/newview/skins/default/xui/nl/floater_url_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_water.xml b/indra/newview/skins/default/xui/nl/floater_water.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_windlight_options.xml b/indra/newview/skins/default/xui/nl/floater_windlight_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/floater_world_map.xml b/indra/newview/skins/default/xui/nl/floater_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/language_settings.xml b/indra/newview/skins/default/xui/nl/language_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/menu_inventory.xml b/indra/newview/skins/default/xui/nl/menu_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/menu_inventory_add.xml b/indra/newview/skins/default/xui/nl/menu_inventory_add.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/menu_login.xml b/indra/newview/skins/default/xui/nl/menu_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/menu_mini_map.xml b/indra/newview/skins/default/xui/nl/menu_mini_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/menu_picks.xml b/indra/newview/skins/default/xui/nl/menu_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/nl/menu_places_gear_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/menu_slurl.xml b/indra/newview/skins/default/xui/nl/menu_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/menu_viewer.xml b/indra/newview/skins/default/xui/nl/menu_viewer.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/mime_types.xml b/indra/newview/skins/default/xui/nl/mime_types.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/notifications.xml b/indra/newview/skins/default/xui/nl/notifications.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_audio_device.xml b/indra/newview/skins/default/xui/nl/panel_audio_device.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/nl/panel_block_list_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_edit_profile.xml b/indra/newview/skins/default/xui/nl/panel_edit_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_friends.xml b/indra/newview/skins/default/xui/nl/panel_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_group_general.xml b/indra/newview/skins/default/xui/nl/panel_group_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_group_invite.xml b/indra/newview/skins/default/xui/nl/panel_group_invite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_group_land_money.xml b/indra/newview/skins/default/xui/nl/panel_group_land_money.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_group_notices.xml b/indra/newview/skins/default/xui/nl/panel_group_notices.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_group_roles.xml b/indra/newview/skins/default/xui/nl/panel_group_roles.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_groups.xml b/indra/newview/skins/default/xui/nl/panel_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_login.xml b/indra/newview/skins/default/xui/nl/panel_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_main_inventory.xml b/indra/newview/skins/default/xui/nl/panel_main_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/nl/panel_preferences_advanced.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/nl/panel_preferences_alerts.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_preferences_chat.xml b/indra/newview/skins/default/xui/nl/panel_preferences_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_preferences_general.xml b/indra/newview/skins/default/xui/nl/panel_preferences_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/nl/panel_preferences_graphics1.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/nl/panel_preferences_privacy.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_preferences_setup.xml b/indra/newview/skins/default/xui/nl/panel_preferences_setup.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_preferences_sound.xml b/indra/newview/skins/default/xui/nl/panel_preferences_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_region_covenant.xml b/indra/newview/skins/default/xui/nl/panel_region_covenant.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_region_debug.xml b/indra/newview/skins/default/xui/nl/panel_region_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_region_estate.xml b/indra/newview/skins/default/xui/nl/panel_region_estate.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_region_general.xml b/indra/newview/skins/default/xui/nl/panel_region_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_region_terrain.xml b/indra/newview/skins/default/xui/nl/panel_region_terrain.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_region_texture.xml b/indra/newview/skins/default/xui/nl/panel_region_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_scrolling_param.xml b/indra/newview/skins/default/xui/nl/panel_scrolling_param.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_status_bar.xml b/indra/newview/skins/default/xui/nl/panel_status_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/panel_world_map.xml b/indra/newview/skins/default/xui/nl/panel_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/role_actions.xml b/indra/newview/skins/default/xui/nl/role_actions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/strings.xml b/indra/newview/skins/default/xui/nl/strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/nl/teleport_strings.xml b/indra/newview/skins/default/xui/nl/teleport_strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_about.xml b/indra/newview/skins/default/xui/pl/floater_about.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_about_land.xml b/indra/newview/skins/default/xui/pl/floater_about_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_activeim.xml b/indra/newview/skins/default/xui/pl/floater_activeim.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_animation_preview.xml b/indra/newview/skins/default/xui/pl/floater_animation_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_auction.xml b/indra/newview/skins/default/xui/pl/floater_auction.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml b/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml b/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_beacons.xml b/indra/newview/skins/default/xui/pl/floater_beacons.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_build_options.xml b/indra/newview/skins/default/xui/pl/floater_build_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_bumps.xml b/indra/newview/skins/default/xui/pl/floater_bumps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_buy_contents.xml b/indra/newview/skins/default/xui/pl/floater_buy_contents.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_buy_currency.xml b/indra/newview/skins/default/xui/pl/floater_buy_currency.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/pl/floater_buy_currency_html.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_buy_land.xml b/indra/newview/skins/default/xui/pl/floater_buy_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_buy_object.xml b/indra/newview/skins/default/xui/pl/floater_buy_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_camera.xml b/indra/newview/skins/default/xui/pl/floater_camera.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_choose_group.xml b/indra/newview/skins/default/xui/pl/floater_choose_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_color_picker.xml b/indra/newview/skins/default/xui/pl/floater_color_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_critical.xml b/indra/newview/skins/default/xui/pl/floater_critical.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_customize.xml b/indra/newview/skins/default/xui/pl/floater_customize.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_device_settings.xml b/indra/newview/skins/default/xui/pl/floater_device_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_env_settings.xml b/indra/newview/skins/default/xui/pl/floater_env_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_event.xml b/indra/newview/skins/default/xui/pl/floater_event.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_font_test.xml b/indra/newview/skins/default/xui/pl/floater_font_test.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_gesture.xml b/indra/newview/skins/default/xui/pl/floater_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_god_tools.xml b/indra/newview/skins/default/xui/pl/floater_god_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml b/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_help_browser.xml b/indra/newview/skins/default/xui/pl/floater_help_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_hud.xml b/indra/newview/skins/default/xui/pl/floater_hud.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_im.xml b/indra/newview/skins/default/xui/pl/floater_im.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_im_container.xml b/indra/newview/skins/default/xui/pl/floater_im_container.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_im_session.xml b/indra/newview/skins/default/xui/pl/floater_im_session.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_image_preview.xml b/indra/newview/skins/default/xui/pl/floater_image_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_incoming_call.xml b/indra/newview/skins/default/xui/pl/floater_incoming_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_inspect.xml b/indra/newview/skins/default/xui/pl/floater_inspect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_inventory.xml b/indra/newview/skins/default/xui/pl/floater_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_joystick.xml b/indra/newview/skins/default/xui/pl/floater_joystick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_lagmeter.xml b/indra/newview/skins/default/xui/pl/floater_lagmeter.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_land_holdings.xml b/indra/newview/skins/default/xui/pl/floater_land_holdings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml b/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_map.xml b/indra/newview/skins/default/xui/pl/floater_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_media_browser.xml b/indra/newview/skins/default/xui/pl/floater_media_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_media_settings.xml b/indra/newview/skins/default/xui/pl/floater_media_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml b/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_moveview.xml b/indra/newview/skins/default/xui/pl/floater_moveview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_mute_object.xml b/indra/newview/skins/default/xui/pl/floater_mute_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_my_friends.xml b/indra/newview/skins/default/xui/pl/floater_my_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_nearby_chat.xml b/indra/newview/skins/default/xui/pl/floater_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_openobject.xml b/indra/newview/skins/default/xui/pl/floater_openobject.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_outgoing_call.xml b/indra/newview/skins/default/xui/pl/floater_outgoing_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_pay.xml b/indra/newview/skins/default/xui/pl/floater_pay.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_pay_object.xml b/indra/newview/skins/default/xui/pl/floater_pay_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml b/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_post_process.xml b/indra/newview/skins/default/xui/pl/floater_post_process.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_postcard.xml b/indra/newview/skins/default/xui/pl/floater_postcard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_preferences.xml b/indra/newview/skins/default/xui/pl/floater_preferences.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_preview_animation.xml b/indra/newview/skins/default/xui/pl/floater_preview_animation.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_preview_classified.xml b/indra/newview/skins/default/xui/pl/floater_preview_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_preview_event.xml b/indra/newview/skins/default/xui/pl/floater_preview_event.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml b/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_preview_sound.xml b/indra/newview/skins/default/xui/pl/floater_preview_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_preview_texture.xml b/indra/newview/skins/default/xui/pl/floater_preview_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_publish_classified.xml b/indra/newview/skins/default/xui/pl/floater_publish_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_region_info.xml b/indra/newview/skins/default/xui/pl/floater_region_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_report_abuse.xml b/indra/newview/skins/default/xui/pl/floater_report_abuse.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_script_debug.xml b/indra/newview/skins/default/xui/pl/floater_script_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/pl/floater_script_debug_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_script_limits.xml b/indra/newview/skins/default/xui/pl/floater_script_limits.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_script_preview.xml b/indra/newview/skins/default/xui/pl/floater_script_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_script_queue.xml b/indra/newview/skins/default/xui/pl/floater_script_queue.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_script_search.xml b/indra/newview/skins/default/xui/pl/floater_script_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_search.xml b/indra/newview/skins/default/xui/pl/floater_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_select_key.xml b/indra/newview/skins/default/xui/pl/floater_select_key.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_sell_land.xml b/indra/newview/skins/default/xui/pl/floater_sell_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_settings_debug.xml b/indra/newview/skins/default/xui/pl/floater_settings_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_snapshot.xml b/indra/newview/skins/default/xui/pl/floater_snapshot.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_sound_preview.xml b/indra/newview/skins/default/xui/pl/floater_sound_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_statistics.xml b/indra/newview/skins/default/xui/pl/floater_statistics.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_stats.xml b/indra/newview/skins/default/xui/pl/floater_stats.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_sys_well.xml b/indra/newview/skins/default/xui/pl/floater_sys_well.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_telehub.xml b/indra/newview/skins/default/xui/pl/floater_telehub.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_tools.xml b/indra/newview/skins/default/xui/pl/floater_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_top_objects.xml b/indra/newview/skins/default/xui/pl/floater_top_objects.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_tos.xml b/indra/newview/skins/default/xui/pl/floater_tos.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_url_entry.xml b/indra/newview/skins/default/xui/pl/floater_url_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_voice_controls.xml b/indra/newview/skins/default/xui/pl/floater_voice_controls.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_voice_effect.xml b/indra/newview/skins/default/xui/pl/floater_voice_effect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_water.xml b/indra/newview/skins/default/xui/pl/floater_water.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/pl/floater_whitelist_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml b/indra/newview/skins/default/xui/pl/floater_windlight_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_window_size.xml b/indra/newview/skins/default/xui/pl/floater_window_size.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/floater_world_map.xml b/indra/newview/skins/default/xui/pl/floater_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/inspect_avatar.xml b/indra/newview/skins/default/xui/pl/inspect_avatar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/inspect_group.xml b/indra/newview/skins/default/xui/pl/inspect_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/inspect_object.xml b/indra/newview/skins/default/xui/pl/inspect_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/inspect_remote_object.xml b/indra/newview/skins/default/xui/pl/inspect_remote_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/language_settings.xml b/indra/newview/skins/default/xui/pl/language_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_attachment_other.xml b/indra/newview/skins/default/xui/pl/menu_attachment_other.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_attachment_self.xml b/indra/newview/skins/default/xui/pl/menu_attachment_self.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_avatar_icon.xml b/indra/newview/skins/default/xui/pl/menu_avatar_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_avatar_other.xml b/indra/newview/skins/default/xui/pl/menu_avatar_other.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_avatar_self.xml b/indra/newview/skins/default/xui/pl/menu_avatar_self.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_bottomtray.xml b/indra/newview/skins/default/xui/pl/menu_bottomtray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_cof_attachment.xml b/indra/newview/skins/default/xui/pl/menu_cof_attachment.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_cof_body_part.xml b/indra/newview/skins/default/xui/pl/menu_cof_body_part.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_cof_clothing.xml b/indra/newview/skins/default/xui/pl/menu_cof_clothing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_cof_gear.xml b/indra/newview/skins/default/xui/pl/menu_cof_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_edit.xml b/indra/newview/skins/default/xui/pl/menu_edit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_favorites.xml b/indra/newview/skins/default/xui/pl/menu_favorites.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_gesture_gear.xml b/indra/newview/skins/default/xui/pl/menu_gesture_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_group_plus.xml b/indra/newview/skins/default/xui/pl/menu_group_plus.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_hide_navbar.xml b/indra/newview/skins/default/xui/pl/menu_hide_navbar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_im_well_button.xml b/indra/newview/skins/default/xui/pl/menu_im_well_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/pl/menu_imchiclet_adhoc.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/pl/menu_inspect_object_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/pl/menu_inspect_self_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/pl/menu_inv_offer_chiclet.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_inventory.xml b/indra/newview/skins/default/xui/pl/menu_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_inventory_add.xml b/indra/newview/skins/default/xui/pl/menu_inventory_add.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_land.xml b/indra/newview/skins/default/xui/pl/menu_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_landmark.xml b/indra/newview/skins/default/xui/pl/menu_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_login.xml b/indra/newview/skins/default/xui/pl/menu_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_mini_map.xml b/indra/newview/skins/default/xui/pl/menu_mini_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_navbar.xml b/indra/newview/skins/default/xui/pl/menu_navbar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_nearby_chat.xml b/indra/newview/skins/default/xui/pl/menu_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_notification_well_button.xml b/indra/newview/skins/default/xui/pl/menu_notification_well_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_object.xml b/indra/newview/skins/default/xui/pl/menu_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_object_icon.xml b/indra/newview/skins/default/xui/pl/menu_object_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_outfit_gear.xml b/indra/newview/skins/default/xui/pl/menu_outfit_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_outfit_tab.xml b/indra/newview/skins/default/xui/pl/menu_outfit_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_participant_list.xml b/indra/newview/skins/default/xui/pl/menu_participant_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_friends_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_people_groups.xml b/indra/newview/skins/default/xui/pl/menu_people_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_people_nearby.xml b/indra/newview/skins/default/xui/pl/menu_people_nearby.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_nearby_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_recent_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_picks.xml b/indra/newview/skins/default/xui/pl/menu_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_picks_plus.xml b/indra/newview/skins/default/xui/pl/menu_picks_plus.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_place.xml b/indra/newview/skins/default/xui/pl/menu_place.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_place_add_button.xml b/indra/newview/skins/default/xui/pl/menu_place_add_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_profile_overflow.xml b/indra/newview/skins/default/xui/pl/menu_profile_overflow.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_save_outfit.xml b/indra/newview/skins/default/xui/pl/menu_save_outfit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_script_chiclet.xml b/indra/newview/skins/default/xui/pl/menu_script_chiclet.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_slurl.xml b/indra/newview/skins/default/xui/pl/menu_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/pl/menu_teleport_history_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/pl/menu_teleport_history_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/pl/menu_teleport_history_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_text_editor.xml b/indra/newview/skins/default/xui/pl/menu_text_editor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_topinfobar.xml b/indra/newview/skins/default/xui/pl/menu_topinfobar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_url_agent.xml b/indra/newview/skins/default/xui/pl/menu_url_agent.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_url_group.xml b/indra/newview/skins/default/xui/pl/menu_url_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_url_http.xml b/indra/newview/skins/default/xui/pl/menu_url_http.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_url_inventory.xml b/indra/newview/skins/default/xui/pl/menu_url_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_url_map.xml b/indra/newview/skins/default/xui/pl/menu_url_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_url_objectim.xml b/indra/newview/skins/default/xui/pl/menu_url_objectim.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_url_parcel.xml b/indra/newview/skins/default/xui/pl/menu_url_parcel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_url_slapp.xml b/indra/newview/skins/default/xui/pl/menu_url_slapp.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_url_slurl.xml b/indra/newview/skins/default/xui/pl/menu_url_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_url_teleport.xml b/indra/newview/skins/default/xui/pl/menu_url_teleport.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/pl/menu_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_wearing_gear.xml b/indra/newview/skins/default/xui/pl/menu_wearing_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/menu_wearing_tab.xml b/indra/newview/skins/default/xui/pl/menu_wearing_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/mime_types.xml b/indra/newview/skins/default/xui/pl/mime_types.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/mime_types_linux.xml b/indra/newview/skins/default/xui/pl/mime_types_linux.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/mime_types_mac.xml b/indra/newview/skins/default/xui/pl/mime_types_mac.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/pl/outfit_accordion_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_active_object_row.xml b/indra/newview/skins/default/xui/pl/panel_active_object_row.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_audio_device.xml b/indra/newview/skins/default/xui/pl/panel_audio_device.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/pl/panel_body_parts_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/pl/panel_bodyparts_list_button_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_bottomtray.xml b/indra/newview/skins/default/xui/pl/panel_bottomtray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_classified_info.xml b/indra/newview/skins/default/xui/pl/panel_classified_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/pl/panel_clothing_list_button_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/pl/panel_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_cof_wearables.xml b/indra/newview/skins/default/xui/pl/panel_cof_wearables.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/pl/panel_deletable_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/pl/panel_dummy_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_alpha.xml b/indra/newview/skins/default/xui/pl/panel_edit_alpha.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_classified.xml b/indra/newview/skins/default/xui/pl/panel_edit_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_eyes.xml b/indra/newview/skins/default/xui/pl/panel_edit_eyes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_gloves.xml b/indra/newview/skins/default/xui/pl/panel_edit_gloves.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_hair.xml b/indra/newview/skins/default/xui/pl/panel_edit_hair.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_jacket.xml b/indra/newview/skins/default/xui/pl/panel_edit_jacket.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_pants.xml b/indra/newview/skins/default/xui/pl/panel_edit_pants.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_pick.xml b/indra/newview/skins/default/xui/pl/panel_edit_pick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_shape.xml b/indra/newview/skins/default/xui/pl/panel_edit_shape.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_shirt.xml b/indra/newview/skins/default/xui/pl/panel_edit_shirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_shoes.xml b/indra/newview/skins/default/xui/pl/panel_edit_shoes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_skin.xml b/indra/newview/skins/default/xui/pl/panel_edit_skin.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_skirt.xml b/indra/newview/skins/default/xui/pl/panel_edit_skirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_socks.xml b/indra/newview/skins/default/xui/pl/panel_edit_socks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/pl/panel_edit_tattoo.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_underpants.xml b/indra/newview/skins/default/xui/pl/panel_edit_underpants.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/pl/panel_edit_undershirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml b/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_friends.xml b/indra/newview/skins/default/xui/pl/panel_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_group_control_panel.xml b/indra/newview/skins/default/xui/pl/panel_group_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_group_general.xml b/indra/newview/skins/default/xui/pl/panel_group_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_group_invite.xml b/indra/newview/skins/default/xui/pl/panel_group_invite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_group_land_money.xml b/indra/newview/skins/default/xui/pl/panel_group_land_money.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_group_list_item.xml b/indra/newview/skins/default/xui/pl/panel_group_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_group_notices.xml b/indra/newview/skins/default/xui/pl/panel_group_notices.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_group_notify.xml b/indra/newview/skins/default/xui/pl/panel_group_notify.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_group_roles.xml b/indra/newview/skins/default/xui/pl/panel_group_roles.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_groups.xml b/indra/newview/skins/default/xui/pl/panel_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_im_control_panel.xml b/indra/newview/skins/default/xui/pl/panel_im_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_inventory_item.xml b/indra/newview/skins/default/xui/pl/panel_inventory_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_landmark_info.xml b/indra/newview/skins/default/xui/pl/panel_landmark_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_landmarks.xml b/indra/newview/skins/default/xui/pl/panel_landmarks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_login.xml b/indra/newview/skins/default/xui/pl/panel_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_main_inventory.xml b/indra/newview/skins/default/xui/pl/panel_main_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_me.xml b/indra/newview/skins/default/xui/pl/panel_me.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_media_settings_general.xml b/indra/newview/skins/default/xui/pl/panel_media_settings_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_media_settings_security.xml b/indra/newview/skins/default/xui/pl/panel_media_settings_security.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_my_profile.xml b/indra/newview/skins/default/xui/pl/panel_my_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_navigation_bar.xml b/indra/newview/skins/default/xui/pl/panel_navigation_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_chat.xml b/indra/newview/skins/default/xui/pl/panel_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_media.xml b/indra/newview/skins/default/xui/pl/panel_nearby_media.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_notes.xml b/indra/newview/skins/default/xui/pl/panel_notes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_online_status.xml b/indra/newview/skins/default/xui/pl/panel_online_status.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_online_status_toast.xml b/indra/newview/skins/default/xui/pl/panel_online_status_toast.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_outfit_edit.xml b/indra/newview/skins/default/xui/pl/panel_outfit_edit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/pl/panel_outfits_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_outfits_list.xml b/indra/newview/skins/default/xui/pl/panel_outfits_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/pl/panel_outfits_wearing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_people.xml b/indra/newview/skins/default/xui/pl/panel_people.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_pick_info.xml b/indra/newview/skins/default/xui/pl/panel_pick_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_picks.xml b/indra/newview/skins/default/xui/pl/panel_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_place_profile.xml b/indra/newview/skins/default/xui/pl/panel_place_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_places.xml b/indra/newview/skins/default/xui/pl/panel_places.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_general.xml b/indra/newview/skins/default/xui/pl/panel_preferences_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml b/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml b/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_profile.xml b/indra/newview/skins/default/xui/pl/panel_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_profile_view.xml b/indra/newview/skins/default/xui/pl/panel_profile_view.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_region_covenant.xml b/indra/newview/skins/default/xui/pl/panel_region_covenant.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_region_debug.xml b/indra/newview/skins/default/xui/pl/panel_region_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_region_estate.xml b/indra/newview/skins/default/xui/pl/panel_region_estate.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_region_general.xml b/indra/newview/skins/default/xui/pl/panel_region_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml b/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_region_terrain.xml b/indra/newview/skins/default/xui/pl/panel_region_terrain.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_region_texture.xml b/indra/newview/skins/default/xui/pl/panel_region_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_script_ed.xml b/indra/newview/skins/default/xui/pl/panel_script_ed.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_scrolling_param.xml b/indra/newview/skins/default/xui/pl/panel_scrolling_param.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_side_tray.xml b/indra/newview/skins/default/xui/pl/panel_side_tray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/pl/panel_side_tray_tab_caption.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_status_bar.xml b/indra/newview/skins/default/xui/pl/panel_status_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_teleport_history.xml b/indra/newview/skins/default/xui/pl/panel_teleport_history.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/pl/panel_teleport_history_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_voice_effect.xml b/indra/newview/skins/default/xui/pl/panel_voice_effect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/panel_world_map.xml b/indra/newview/skins/default/xui/pl/panel_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/role_actions.xml b/indra/newview/skins/default/xui/pl/role_actions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/sidepanel_appearance.xml b/indra/newview/skins/default/xui/pl/sidepanel_appearance.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/sidepanel_inventory.xml b/indra/newview/skins/default/xui/pl/sidepanel_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml b/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml b/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/teleport_strings.xml b/indra/newview/skins/default/xui/pl/teleport_strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pl/xui_version.xml b/indra/newview/skins/default/xui/pl/xui_version.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_about.xml b/indra/newview/skins/default/xui/pt/floater_about.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_about_land.xml b/indra/newview/skins/default/xui/pt/floater_about_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_activeim.xml b/indra/newview/skins/default/xui/pt/floater_activeim.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_animation_preview.xml b/indra/newview/skins/default/xui/pt/floater_animation_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_auction.xml b/indra/newview/skins/default/xui/pt/floater_auction.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml b/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml b/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_beacons.xml b/indra/newview/skins/default/xui/pt/floater_beacons.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_build_options.xml b/indra/newview/skins/default/xui/pt/floater_build_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_bumps.xml b/indra/newview/skins/default/xui/pt/floater_bumps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_buy_contents.xml b/indra/newview/skins/default/xui/pt/floater_buy_contents.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_buy_currency.xml b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/pt/floater_buy_currency_html.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_buy_land.xml b/indra/newview/skins/default/xui/pt/floater_buy_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_buy_object.xml b/indra/newview/skins/default/xui/pt/floater_buy_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_camera.xml b/indra/newview/skins/default/xui/pt/floater_camera.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_choose_group.xml b/indra/newview/skins/default/xui/pt/floater_choose_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_color_picker.xml b/indra/newview/skins/default/xui/pt/floater_color_picker.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_critical.xml b/indra/newview/skins/default/xui/pt/floater_critical.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_customize.xml b/indra/newview/skins/default/xui/pt/floater_customize.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_device_settings.xml b/indra/newview/skins/default/xui/pt/floater_device_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_env_settings.xml b/indra/newview/skins/default/xui/pt/floater_env_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_event.xml b/indra/newview/skins/default/xui/pt/floater_event.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_font_test.xml b/indra/newview/skins/default/xui/pt/floater_font_test.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_gesture.xml b/indra/newview/skins/default/xui/pt/floater_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_god_tools.xml b/indra/newview/skins/default/xui/pt/floater_god_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml b/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_help_browser.xml b/indra/newview/skins/default/xui/pt/floater_help_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_hud.xml b/indra/newview/skins/default/xui/pt/floater_hud.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_im.xml b/indra/newview/skins/default/xui/pt/floater_im.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_im_container.xml b/indra/newview/skins/default/xui/pt/floater_im_container.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_im_session.xml b/indra/newview/skins/default/xui/pt/floater_im_session.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_image_preview.xml b/indra/newview/skins/default/xui/pt/floater_image_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_incoming_call.xml b/indra/newview/skins/default/xui/pt/floater_incoming_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_inspect.xml b/indra/newview/skins/default/xui/pt/floater_inspect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_inventory.xml b/indra/newview/skins/default/xui/pt/floater_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_joystick.xml b/indra/newview/skins/default/xui/pt/floater_joystick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_lagmeter.xml b/indra/newview/skins/default/xui/pt/floater_lagmeter.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_land_holdings.xml b/indra/newview/skins/default/xui/pt/floater_land_holdings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml b/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_map.xml b/indra/newview/skins/default/xui/pt/floater_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_media_browser.xml b/indra/newview/skins/default/xui/pt/floater_media_browser.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_media_settings.xml b/indra/newview/skins/default/xui/pt/floater_media_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml b/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_moveview.xml b/indra/newview/skins/default/xui/pt/floater_moveview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_mute_object.xml b/indra/newview/skins/default/xui/pt/floater_mute_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_my_friends.xml b/indra/newview/skins/default/xui/pt/floater_my_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_nearby_chat.xml b/indra/newview/skins/default/xui/pt/floater_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_openobject.xml b/indra/newview/skins/default/xui/pt/floater_openobject.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_outgoing_call.xml b/indra/newview/skins/default/xui/pt/floater_outgoing_call.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_pay.xml b/indra/newview/skins/default/xui/pt/floater_pay.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_pay_object.xml b/indra/newview/skins/default/xui/pt/floater_pay_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml b/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_post_process.xml b/indra/newview/skins/default/xui/pt/floater_post_process.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_postcard.xml b/indra/newview/skins/default/xui/pt/floater_postcard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_preferences.xml b/indra/newview/skins/default/xui/pt/floater_preferences.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_preview_animation.xml b/indra/newview/skins/default/xui/pt/floater_preview_animation.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_preview_classified.xml b/indra/newview/skins/default/xui/pt/floater_preview_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_preview_event.xml b/indra/newview/skins/default/xui/pt/floater_preview_event.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_preview_gesture.xml b/indra/newview/skins/default/xui/pt/floater_preview_gesture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/pt/floater_preview_gesture_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/pt/floater_preview_gesture_shortcut.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/pt/floater_preview_gesture_steps.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml b/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_preview_sound.xml b/indra/newview/skins/default/xui/pt/floater_preview_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_preview_texture.xml b/indra/newview/skins/default/xui/pt/floater_preview_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_publish_classified.xml b/indra/newview/skins/default/xui/pt/floater_publish_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_region_info.xml b/indra/newview/skins/default/xui/pt/floater_region_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_script_debug.xml b/indra/newview/skins/default/xui/pt/floater_script_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/pt/floater_script_debug_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_script_limits.xml b/indra/newview/skins/default/xui/pt/floater_script_limits.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_script_preview.xml b/indra/newview/skins/default/xui/pt/floater_script_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_script_queue.xml b/indra/newview/skins/default/xui/pt/floater_script_queue.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_script_search.xml b/indra/newview/skins/default/xui/pt/floater_script_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_search.xml b/indra/newview/skins/default/xui/pt/floater_search.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_select_key.xml b/indra/newview/skins/default/xui/pt/floater_select_key.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_sell_land.xml b/indra/newview/skins/default/xui/pt/floater_sell_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_settings_debug.xml b/indra/newview/skins/default/xui/pt/floater_settings_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_snapshot.xml b/indra/newview/skins/default/xui/pt/floater_snapshot.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_sound_preview.xml b/indra/newview/skins/default/xui/pt/floater_sound_preview.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_statistics.xml b/indra/newview/skins/default/xui/pt/floater_statistics.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_stats.xml b/indra/newview/skins/default/xui/pt/floater_stats.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_sys_well.xml b/indra/newview/skins/default/xui/pt/floater_sys_well.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_telehub.xml b/indra/newview/skins/default/xui/pt/floater_telehub.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_top_objects.xml b/indra/newview/skins/default/xui/pt/floater_top_objects.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_tos.xml b/indra/newview/skins/default/xui/pt/floater_tos.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_url_entry.xml b/indra/newview/skins/default/xui/pt/floater_url_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_voice_effect.xml b/indra/newview/skins/default/xui/pt/floater_voice_effect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_water.xml b/indra/newview/skins/default/xui/pt/floater_water.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/pt/floater_whitelist_entry.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_windlight_options.xml b/indra/newview/skins/default/xui/pt/floater_windlight_options.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_window_size.xml b/indra/newview/skins/default/xui/pt/floater_window_size.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/floater_world_map.xml b/indra/newview/skins/default/xui/pt/floater_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/inspect_avatar.xml b/indra/newview/skins/default/xui/pt/inspect_avatar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/inspect_group.xml b/indra/newview/skins/default/xui/pt/inspect_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/inspect_object.xml b/indra/newview/skins/default/xui/pt/inspect_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/inspect_remote_object.xml b/indra/newview/skins/default/xui/pt/inspect_remote_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/language_settings.xml b/indra/newview/skins/default/xui/pt/language_settings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_attachment_other.xml b/indra/newview/skins/default/xui/pt/menu_attachment_other.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_attachment_self.xml b/indra/newview/skins/default/xui/pt/menu_attachment_self.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_icon.xml b/indra/newview/skins/default/xui/pt/menu_avatar_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_other.xml b/indra/newview/skins/default/xui/pt/menu_avatar_other.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_self.xml b/indra/newview/skins/default/xui/pt/menu_avatar_self.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_bottomtray.xml b/indra/newview/skins/default/xui/pt/menu_bottomtray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_cof_attachment.xml b/indra/newview/skins/default/xui/pt/menu_cof_attachment.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_cof_body_part.xml b/indra/newview/skins/default/xui/pt/menu_cof_body_part.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_cof_clothing.xml b/indra/newview/skins/default/xui/pt/menu_cof_clothing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_cof_gear.xml b/indra/newview/skins/default/xui/pt/menu_cof_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_edit.xml b/indra/newview/skins/default/xui/pt/menu_edit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_favorites.xml b/indra/newview/skins/default/xui/pt/menu_favorites.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_gesture_gear.xml b/indra/newview/skins/default/xui/pt/menu_gesture_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_group_plus.xml b/indra/newview/skins/default/xui/pt/menu_group_plus.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_hide_navbar.xml b/indra/newview/skins/default/xui/pt/menu_hide_navbar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_im_well_button.xml b/indra/newview/skins/default/xui/pt/menu_im_well_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/pt/menu_imchiclet_adhoc.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/pt/menu_imchiclet_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/pt/menu_imchiclet_p2p.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/pt/menu_inspect_object_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/pt/menu_inv_offer_chiclet.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_inventory.xml b/indra/newview/skins/default/xui/pt/menu_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_inventory_add.xml b/indra/newview/skins/default/xui/pt/menu_inventory_add.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/pt/menu_inventory_gear_default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_land.xml b/indra/newview/skins/default/xui/pt/menu_land.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_landmark.xml b/indra/newview/skins/default/xui/pt/menu_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_login.xml b/indra/newview/skins/default/xui/pt/menu_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_mini_map.xml b/indra/newview/skins/default/xui/pt/menu_mini_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_navbar.xml b/indra/newview/skins/default/xui/pt/menu_navbar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_nearby_chat.xml b/indra/newview/skins/default/xui/pt/menu_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_notification_well_button.xml b/indra/newview/skins/default/xui/pt/menu_notification_well_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_object.xml b/indra/newview/skins/default/xui/pt/menu_object.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_object_icon.xml b/indra/newview/skins/default/xui/pt/menu_object_icon.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_outfit_gear.xml b/indra/newview/skins/default/xui/pt/menu_outfit_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_outfit_tab.xml b/indra/newview/skins/default/xui/pt/menu_outfit_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_participant_list.xml b/indra/newview/skins/default/xui/pt/menu_participant_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_friends_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_people_groups.xml b/indra/newview/skins/default/xui/pt/menu_people_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_groups_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_people_nearby.xml b/indra/newview/skins/default/xui/pt/menu_people_nearby.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/pt/menu_people_nearby_multiselect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_recent_view_sort.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_picks.xml b/indra/newview/skins/default/xui/pt/menu_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_picks_plus.xml b/indra/newview/skins/default/xui/pt/menu_picks_plus.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_place.xml b/indra/newview/skins/default/xui/pt/menu_place.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_place_add_button.xml b/indra/newview/skins/default/xui/pt/menu_place_add_button.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/pt/menu_places_gear_folder.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/pt/menu_places_gear_landmark.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_profile_overflow.xml b/indra/newview/skins/default/xui/pt/menu_profile_overflow.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_save_outfit.xml b/indra/newview/skins/default/xui/pt/menu_save_outfit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_script_chiclet.xml b/indra/newview/skins/default/xui/pt/menu_script_chiclet.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_slurl.xml b/indra/newview/skins/default/xui/pt/menu_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/pt/menu_teleport_history_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/pt/menu_teleport_history_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_text_editor.xml b/indra/newview/skins/default/xui/pt/menu_text_editor.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_topinfobar.xml b/indra/newview/skins/default/xui/pt/menu_topinfobar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_url_agent.xml b/indra/newview/skins/default/xui/pt/menu_url_agent.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_url_group.xml b/indra/newview/skins/default/xui/pt/menu_url_group.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_url_http.xml b/indra/newview/skins/default/xui/pt/menu_url_http.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_url_inventory.xml b/indra/newview/skins/default/xui/pt/menu_url_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_url_map.xml b/indra/newview/skins/default/xui/pt/menu_url_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_url_objectim.xml b/indra/newview/skins/default/xui/pt/menu_url_objectim.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_url_parcel.xml b/indra/newview/skins/default/xui/pt/menu_url_parcel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_url_slapp.xml b/indra/newview/skins/default/xui/pt/menu_url_slapp.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_url_slurl.xml b/indra/newview/skins/default/xui/pt/menu_url_slurl.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_url_teleport.xml b/indra/newview/skins/default/xui/pt/menu_url_teleport.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/pt/menu_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_wearing_gear.xml b/indra/newview/skins/default/xui/pt/menu_wearing_gear.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/menu_wearing_tab.xml b/indra/newview/skins/default/xui/pt/menu_wearing_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/mime_types.xml b/indra/newview/skins/default/xui/pt/mime_types.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/mime_types_linux.xml b/indra/newview/skins/default/xui/pt/mime_types_linux.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/mime_types_mac.xml b/indra/newview/skins/default/xui/pt/mime_types_mac.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/pt/outfit_accordion_tab.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_active_object_row.xml b/indra/newview/skins/default/xui/pt/panel_active_object_row.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/pt/panel_adhoc_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_audio_device.xml b/indra/newview/skins/default/xui/pt/panel_audio_device.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/pt/panel_avatar_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/pt/panel_block_list_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/pt/panel_body_parts_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/pt/panel_bodyparts_list_button_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_bottomtray.xml b/indra/newview/skins/default/xui/pt/panel_bottomtray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/pt/panel_bottomtray_lite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_classified_info.xml b/indra/newview/skins/default/xui/pt/panel_classified_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/pt/panel_clothing_list_button_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/pt/panel_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_cof_wearables.xml b/indra/newview/skins/default/xui/pt/panel_cof_wearables.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/pt/panel_deletable_wearable_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/pt/panel_dummy_clothing_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_alpha.xml b/indra/newview/skins/default/xui/pt/panel_edit_alpha.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_classified.xml b/indra/newview/skins/default/xui/pt/panel_edit_classified.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_eyes.xml b/indra/newview/skins/default/xui/pt/panel_edit_eyes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_gloves.xml b/indra/newview/skins/default/xui/pt/panel_edit_gloves.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_hair.xml b/indra/newview/skins/default/xui/pt/panel_edit_hair.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_jacket.xml b/indra/newview/skins/default/xui/pt/panel_edit_jacket.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_pants.xml b/indra/newview/skins/default/xui/pt/panel_edit_pants.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_pick.xml b/indra/newview/skins/default/xui/pt/panel_edit_pick.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_profile.xml b/indra/newview/skins/default/xui/pt/panel_edit_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_shape.xml b/indra/newview/skins/default/xui/pt/panel_edit_shape.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_shirt.xml b/indra/newview/skins/default/xui/pt/panel_edit_shirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_shoes.xml b/indra/newview/skins/default/xui/pt/panel_edit_shoes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_skin.xml b/indra/newview/skins/default/xui/pt/panel_edit_skin.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_skirt.xml b/indra/newview/skins/default/xui/pt/panel_edit_skirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_socks.xml b/indra/newview/skins/default/xui/pt/panel_edit_socks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/pt/panel_edit_tattoo.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_underpants.xml b/indra/newview/skins/default/xui/pt/panel_edit_underpants.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/pt/panel_edit_undershirt.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_wearable.xml b/indra/newview/skins/default/xui/pt/panel_edit_wearable.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_friends.xml b/indra/newview/skins/default/xui/pt/panel_friends.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_group_control_panel.xml b/indra/newview/skins/default/xui/pt/panel_group_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_group_general.xml b/indra/newview/skins/default/xui/pt/panel_group_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_group_invite.xml b/indra/newview/skins/default/xui/pt/panel_group_invite.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_group_land_money.xml b/indra/newview/skins/default/xui/pt/panel_group_land_money.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_group_list_item.xml b/indra/newview/skins/default/xui/pt/panel_group_list_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_group_notices.xml b/indra/newview/skins/default/xui/pt/panel_group_notices.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_group_notify.xml b/indra/newview/skins/default/xui/pt/panel_group_notify.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_group_roles.xml b/indra/newview/skins/default/xui/pt/panel_group_roles.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_groups.xml b/indra/newview/skins/default/xui/pt/panel_groups.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_im_control_panel.xml b/indra/newview/skins/default/xui/pt/panel_im_control_panel.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_inventory_item.xml b/indra/newview/skins/default/xui/pt/panel_inventory_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_landmark_info.xml b/indra/newview/skins/default/xui/pt/panel_landmark_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_landmarks.xml b/indra/newview/skins/default/xui/pt/panel_landmarks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_login.xml b/indra/newview/skins/default/xui/pt/panel_login.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_main_inventory.xml b/indra/newview/skins/default/xui/pt/panel_main_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_me.xml b/indra/newview/skins/default/xui/pt/panel_me.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_media_settings_general.xml b/indra/newview/skins/default/xui/pt/panel_media_settings_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/pt/panel_media_settings_permissions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_media_settings_security.xml b/indra/newview/skins/default/xui/pt/panel_media_settings_security.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_my_profile.xml b/indra/newview/skins/default/xui/pt/panel_my_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_navigation_bar.xml b/indra/newview/skins/default/xui/pt/panel_navigation_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_nearby_chat.xml b/indra/newview/skins/default/xui/pt/panel_nearby_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/pt/panel_nearby_chat_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_nearby_media.xml b/indra/newview/skins/default/xui/pt/panel_nearby_media.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_notes.xml b/indra/newview/skins/default/xui/pt/panel_notes.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_online_status.xml b/indra/newview/skins/default/xui/pt/panel_online_status.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_online_status_toast.xml b/indra/newview/skins/default/xui/pt/panel_online_status_toast.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_outfit_edit.xml b/indra/newview/skins/default/xui/pt/panel_outfit_edit.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/pt/panel_outfits_inventory_gear_default.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_outfits_list.xml b/indra/newview/skins/default/xui/pt/panel_outfits_list.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/pt/panel_outfits_wearing.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_people.xml b/indra/newview/skins/default/xui/pt/panel_people.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_pick_info.xml b/indra/newview/skins/default/xui/pt/panel_pick_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_picks.xml b/indra/newview/skins/default/xui/pt/panel_picks.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_place_profile.xml b/indra/newview/skins/default/xui/pt/panel_place_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_places.xml b/indra/newview/skins/default/xui/pt/panel_places.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml b/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml b/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_profile.xml b/indra/newview/skins/default/xui/pt/panel_profile.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_profile_view.xml b/indra/newview/skins/default/xui/pt/panel_profile_view.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_region_covenant.xml b/indra/newview/skins/default/xui/pt/panel_region_covenant.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_region_debug.xml b/indra/newview/skins/default/xui/pt/panel_region_debug.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_region_estate.xml b/indra/newview/skins/default/xui/pt/panel_region_estate.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_region_general.xml b/indra/newview/skins/default/xui/pt/panel_region_general.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_region_general_layout.xml b/indra/newview/skins/default/xui/pt/panel_region_general_layout.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_region_terrain.xml b/indra/newview/skins/default/xui/pt/panel_region_terrain.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_region_texture.xml b/indra/newview/skins/default/xui/pt/panel_region_texture.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_script_ed.xml b/indra/newview/skins/default/xui/pt/panel_script_ed.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/pt/panel_script_limits_my_avatar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/pt/panel_script_limits_region_memory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_scrolling_param.xml b/indra/newview/skins/default/xui/pt/panel_scrolling_param.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_side_tray.xml b/indra/newview/skins/default/xui/pt/panel_side_tray.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/pt/panel_side_tray_tab_caption.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/pt/panel_stand_stop_flying.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_status_bar.xml b/indra/newview/skins/default/xui/pt/panel_status_bar.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_teleport_history.xml b/indra/newview/skins/default/xui/pt/panel_teleport_history.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/pt/panel_teleport_history_item.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_voice_effect.xml b/indra/newview/skins/default/xui/pt/panel_voice_effect.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/panel_world_map.xml b/indra/newview/skins/default/xui/pt/panel_world_map.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/role_actions.xml b/indra/newview/skins/default/xui/pt/role_actions.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/sidepanel_appearance.xml b/indra/newview/skins/default/xui/pt/sidepanel_appearance.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml b/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml b/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml b/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/teleport_strings.xml b/indra/newview/skins/default/xui/pt/teleport_strings.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/default/xui/pt/xui_version.xml b/indra/newview/skins/default/xui/pt/xui_version.xml old mode 100644 new mode 100755 diff --git a/indra/newview/skins/paths.xml b/indra/newview/skins/paths.xml old mode 100644 new mode 100755 diff --git a/indra/newview/tests/llagentaccess_test.cpp b/indra/newview/tests/llagentaccess_test.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/tests/llcapabilitylistener_test.cpp b/indra/newview/tests/llcapabilitylistener_test.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/tests/lldateutil_test.cpp b/indra/newview/tests/lldateutil_test.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/tests/llmediadataclient_test.cpp b/indra/newview/tests/llmediadataclient_test.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/tests/llsecapi_test.cpp b/indra/newview/tests/llsecapi_test.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/tests/llsechandler_basic_test.cpp b/indra/newview/tests/llsechandler_basic_test.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/tests/llslurl_test.cpp b/indra/newview/tests/llslurl_test.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/tests/lltextureinfo_test.cpp b/indra/newview/tests/lltextureinfo_test.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/tests/lltextureinfodetails_test.cpp b/indra/newview/tests/lltextureinfodetails_test.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/tests/lltexturestatsuploader_test.cpp b/indra/newview/tests/lltexturestatsuploader_test.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/tests/llviewerhelputil_test.cpp b/indra/newview/tests/llviewerhelputil_test.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/tests/llviewernetwork_test.cpp b/indra/newview/tests/llviewernetwork_test.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/tests/llworldmap_test.cpp b/indra/newview/tests/llworldmap_test.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/tests/llworldmipmap_test.cpp b/indra/newview/tests/llworldmipmap_test.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/tests/llxmlrpclistener_test.cpp b/indra/newview/tests/llxmlrpclistener_test.cpp old mode 100644 new mode 100755 diff --git a/indra/newview/tests/test_llxmlrpc_peer.py b/indra/newview/tests/test_llxmlrpc_peer.py old mode 100644 new mode 100755 diff --git a/indra/newview/tr.lproj/language.txt b/indra/newview/tr.lproj/language.txt old mode 100644 new mode 100755 diff --git a/indra/newview/uk.lproj/language.txt b/indra/newview/uk.lproj/language.txt old mode 100644 new mode 100755 diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py old mode 100644 new mode 100755 diff --git a/indra/newview/zh-Hans.lproj/language.txt b/indra/newview/zh-Hans.lproj/language.txt old mode 100644 new mode 100755 diff --git a/indra/test/CMakeLists.txt b/indra/test/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/test/blowfish.1.bin b/indra/test/blowfish.1.bin old mode 100644 new mode 100755 diff --git a/indra/test/blowfish.2.bin b/indra/test/blowfish.2.bin old mode 100644 new mode 100755 diff --git a/indra/test/blowfish.digits.txt b/indra/test/blowfish.digits.txt old mode 100644 new mode 100755 diff --git a/indra/test/debug.h b/indra/test/debug.h old mode 100644 new mode 100755 diff --git a/indra/test/io.cpp b/indra/test/io.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llassetuploadqueue_tut.cpp b/indra/test/llassetuploadqueue_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llblowfish_tut.cpp b/indra/test/llblowfish_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llbuffer_tut.cpp b/indra/test/llbuffer_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/lldatapacker_tut.cpp b/indra/test/lldatapacker_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/lldoubledispatch_tut.cpp b/indra/test/lldoubledispatch_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llevents_tut.cpp b/indra/test/llevents_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llhttpclient_tut.cpp b/indra/test/llhttpclient_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llhttpdate_tut.cpp b/indra/test/llhttpdate_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llhttpnode_tut.cpp b/indra/test/llhttpnode_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/lliohttpserver_tut.cpp b/indra/test/lliohttpserver_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llmessageconfig_tut.cpp b/indra/test/llmessageconfig_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llmessagetemplateparser_tut.cpp b/indra/test/llmessagetemplateparser_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llpermissions_tut.cpp b/indra/test/llpermissions_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llpipeutil.cpp b/indra/test/llpipeutil.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llpipeutil.h b/indra/test/llpipeutil.h old mode 100644 new mode 100755 diff --git a/indra/test/llsaleinfo_tut.cpp b/indra/test/llsaleinfo_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llscriptresource_tut.cpp b/indra/test/llscriptresource_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llsd_new_tut.cpp b/indra/test/llsd_new_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llsdmessagebuilder_tut.cpp b/indra/test/llsdmessagebuilder_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llsdmessagereader_tut.cpp b/indra/test/llsdmessagereader_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llsdtraits.h b/indra/test/llsdtraits.h old mode 100644 new mode 100755 diff --git a/indra/test/llsdutil_tut.cpp b/indra/test/llsdutil_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llservicebuilder_tut.cpp b/indra/test/llservicebuilder_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llstreamtools_tut.cpp b/indra/test/llstreamtools_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/lltemplatemessagebuilder_tut.cpp b/indra/test/lltemplatemessagebuilder_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/lltimestampcache_tut.cpp b/indra/test/lltimestampcache_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/lltranscode_tut.cpp b/indra/test/lltranscode_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/lltut.cpp b/indra/test/lltut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/lltut.h b/indra/test/lltut.h old mode 100644 new mode 100755 diff --git a/indra/test/lluserrelations_tut.cpp b/indra/test/lluserrelations_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/lluuidhashmap_tut.cpp b/indra/test/lluuidhashmap_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/llxorcipher_tut.cpp b/indra/test/llxorcipher_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/message_tut.cpp b/indra/test/message_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/mock_http_client.cpp b/indra/test/mock_http_client.cpp old mode 100644 new mode 100755 diff --git a/indra/test/mock_http_client.h b/indra/test/mock_http_client.h old mode 100644 new mode 100755 diff --git a/indra/test/prim_linkability_tut.cpp b/indra/test/prim_linkability_tut.cpp old mode 100644 new mode 100755 diff --git a/indra/test/test.cpp b/indra/test/test.cpp old mode 100644 new mode 100755 diff --git a/indra/test/test.h b/indra/test/test.h old mode 100644 new mode 100755 diff --git a/indra/test/test_llmanifest.py b/indra/test/test_llmanifest.py old mode 100644 new mode 100755 diff --git a/indra/test_apps/llplugintest/CMakeLists.txt b/indra/test_apps/llplugintest/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/test_apps/llplugintest/bookmarks.txt b/indra/test_apps/llplugintest/bookmarks.txt old mode 100644 new mode 100755 diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp old mode 100644 new mode 100755 diff --git a/indra/test_apps/llplugintest/llmediaplugintest.h b/indra/test_apps/llplugintest/llmediaplugintest.h old mode 100644 new mode 100755 diff --git a/indra/tools/vstool/README.txt b/indra/tools/vstool/README.txt old mode 100644 new mode 100755 diff --git a/indra/tools/vstool/VSTool.csproj b/indra/tools/vstool/VSTool.csproj old mode 100644 new mode 100755 diff --git a/indra/tools/vstool/VSTool.sln b/indra/tools/vstool/VSTool.sln old mode 100644 new mode 100755 diff --git a/indra/tools/vstool/main.cs b/indra/tools/vstool/main.cs old mode 100644 new mode 100755 diff --git a/indra/viewer_components/CMakeLists.txt b/indra/viewer_components/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/viewer_components/login/CMakeLists.txt b/indra/viewer_components/login/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/viewer_components/login/lllogin.cpp b/indra/viewer_components/login/lllogin.cpp old mode 100644 new mode 100755 diff --git a/indra/viewer_components/login/lllogin.h b/indra/viewer_components/login/lllogin.h old mode 100644 new mode 100755 diff --git a/indra/viewer_components/login/tests/lllogin_test.cpp b/indra/viewer_components/login/tests/lllogin_test.cpp old mode 100644 new mode 100755 diff --git a/indra/win_crash_logger/CMakeLists.txt b/indra/win_crash_logger/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/win_crash_logger/StdAfx.cpp b/indra/win_crash_logger/StdAfx.cpp old mode 100644 new mode 100755 diff --git a/indra/win_crash_logger/StdAfx.h b/indra/win_crash_logger/StdAfx.h old mode 100644 new mode 100755 diff --git a/indra/win_crash_logger/ll_icon.ico b/indra/win_crash_logger/ll_icon.ico old mode 100644 new mode 100755 diff --git a/indra/win_crash_logger/llcrashloggerwindows.cpp b/indra/win_crash_logger/llcrashloggerwindows.cpp old mode 100644 new mode 100755 diff --git a/indra/win_crash_logger/llcrashloggerwindows.h b/indra/win_crash_logger/llcrashloggerwindows.h old mode 100644 new mode 100755 diff --git a/indra/win_crash_logger/resource.h b/indra/win_crash_logger/resource.h old mode 100644 new mode 100755 diff --git a/indra/win_crash_logger/win_crash_logger.cpp b/indra/win_crash_logger/win_crash_logger.cpp old mode 100644 new mode 100755 diff --git a/indra/win_crash_logger/win_crash_logger.h b/indra/win_crash_logger/win_crash_logger.h old mode 100644 new mode 100755 diff --git a/indra/win_crash_logger/win_crash_logger.ico b/indra/win_crash_logger/win_crash_logger.ico old mode 100644 new mode 100755 diff --git a/indra/win_crash_logger/win_crash_logger.rc b/indra/win_crash_logger/win_crash_logger.rc old mode 100644 new mode 100755 diff --git a/indra/win_updater/CMakeLists.txt b/indra/win_updater/CMakeLists.txt old mode 100644 new mode 100755 diff --git a/indra/win_updater/updater.cpp b/indra/win_updater/updater.cpp old mode 100644 new mode 100755 diff --git a/install.xml b/install.xml old mode 100644 new mode 100755 diff --git a/scripts/messages/message_template.msg b/scripts/messages/message_template.msg old mode 100644 new mode 100755 diff --git a/scripts/setup-path.py b/scripts/setup-path.py old mode 100644 new mode 100755 diff --git a/scripts/template_verifier.py b/scripts/template_verifier.py old mode 100644 new mode 100755 diff --git a/viewer-hg-convert.shamap b/viewer-hg-convert.shamap old mode 100644 new mode 100755 -- cgit v1.3 From d40db3d8e19fdcc024ca08e901d542bf9c552458 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Wed, 22 Sep 2010 01:43:17 -0500 Subject: SH-100, SH-111 Fix for generate normals stalling/crashing. Switch from "new" to "malloc" in llvolume.cpp aligned arrays so "realloc" can be used to avoid copies. --- indra/llmath/llvolume.cpp | 163 ++++++++++++++++-------------------------- indra/llprimitive/llmodel.cpp | 41 ++++++----- 2 files changed, 86 insertions(+), 118 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 24528a8ce9..c73f0e2755 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -96,6 +96,15 @@ const S32 SCULPT_MIN_AREA_DETAIL = 1; extern BOOL gDebugGL; +void assert_aligned(void* ptr, U32 alignment) +{ + U32 t = (U32) ptr; + if (t%alignment != 0) + { + llerrs << "WTF?" << llendl; + } +} + BOOL check_same_clock_dir( const LLVector3& pt1, const LLVector3& pt2, const LLVector3& pt3, const LLVector3& norm) { LLVector3 test = (pt2-pt1)%(pt3-pt2); @@ -1990,7 +1999,7 @@ void LLVolumeFace::VertexData::init() { if (!mData) { - mData = new LLVector4a[2]; + mData = (LLVector4a*) malloc(sizeof(LLVector4a)*2); } } @@ -2011,7 +2020,7 @@ const LLVolumeFace::VertexData& LLVolumeFace::VertexData::operator=(const LLVolu if (this != &rhs) { init(); - LLVector4a::memcpyNonAliased16((F32*) mData, (F32*) rhs.mData, 8*sizeof(F32)); + LLVector4a::memcpyNonAliased16((F32*) mData, (F32*) rhs.mData, 2*sizeof(LLVector4a)); mTexCoord = rhs.mTexCoord; } return *this; @@ -2019,7 +2028,8 @@ const LLVolumeFace::VertexData& LLVolumeFace::VertexData::operator=(const LLVolu LLVolumeFace::VertexData::~VertexData() { - delete [] mData; + free(mData); + mData = NULL; } LLVector4a& LLVolumeFace::VertexData::getPosition() @@ -5230,7 +5240,7 @@ LLVolumeFace::LLVolumeFace() : mWeights(NULL), mOctree(NULL) { - mExtents = new LLVector4a[3]; + mExtents = (LLVector4a*) malloc(sizeof(LLVector4a)*3); mCenter = mExtents+2; } @@ -5251,7 +5261,7 @@ LLVolumeFace::LLVolumeFace(const LLVolumeFace& src) mWeights(NULL), mOctree(NULL) { - mExtents = new LLVector4a[3]; + mExtents = (LLVector4a*) malloc(sizeof(LLVector4a)*3); mCenter = mExtents+2; *this = src; } @@ -5279,7 +5289,7 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) freeData(); - LLVector4a::memcpyNonAliased16((F32*) mExtents, (F32*) src.mExtents, 12*sizeof(F32)); + LLVector4a::memcpyNonAliased16((F32*) mExtents, (F32*) src.mExtents, 3*sizeof(LLVector4a)); resizeVertices(src.mNumVertices); resizeIndices(src.mNumIndices); @@ -5287,7 +5297,7 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) if (mNumVertices) { S32 vert_size = mNumVertices*sizeof(LLVector4a); - S32 tc_size = (mNumVertices*8+0xF) & ~0xF; + S32 tc_size = (mNumVertices*sizeof(LLVector2)+0xF) & ~0xF; LLVector4a::memcpyNonAliased16((F32*) mPositions, (F32*) src.mPositions, vert_size); LLVector4a::memcpyNonAliased16((F32*) mNormals, (F32*) src.mNormals, vert_size); @@ -5301,7 +5311,7 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) } else { - delete [] mBinormals; + free(mBinormals); mBinormals = NULL; } @@ -5312,14 +5322,14 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) } else { - delete [] mWeights; + free(mWeights); mWeights = NULL; } } if (mNumIndices) { - S32 idx_size = (mNumIndices*2+0xF) & ~0xF; + S32 idx_size = (mNumIndices*sizeof(U16)+0xF) & ~0xF; LLVector4a::memcpyNonAliased16((F32*) mIndices, (F32*) src.mIndices, idx_size); } @@ -5330,7 +5340,7 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src) LLVolumeFace::~LLVolumeFace() { - delete [] mExtents; + free(mExtents); mExtents = NULL; freeData(); @@ -5338,17 +5348,17 @@ LLVolumeFace::~LLVolumeFace() void LLVolumeFace::freeData() { - delete [] mPositions; + free(mPositions); mPositions = NULL; - delete [] mNormals; + free( mNormals); mNormals = NULL; - delete [] mTexCoords; + free(mTexCoords); mTexCoords = NULL; - delete [] mIndices; + free(mIndices); mIndices = NULL; - delete [] mBinormals; + free(mBinormals); mBinormals = NULL; - delete [] mWeights; + free(mWeights); mWeights = NULL; delete mOctree; @@ -5402,13 +5412,14 @@ bool LLVolumeFace::VertexMapData::ComparePosition::operator()(const LLVector3& a return a.mV[1] < b.mV[1]; } - return a.mV[2] < b.mV[2]; + return a.mV[2] < b.mV[2]; } void LLVolumeFace::optimize(F32 angle_cutoff) { LLVolumeFace new_face; + //map of points to vector of vertices at that point VertexMapData::PointMap point_map; //remove redundant vertices @@ -6161,21 +6172,24 @@ void LLVolumeFace::createBinormals() void LLVolumeFace::resizeVertices(S32 num_verts) { - delete [] mPositions; - delete [] mNormals; - delete [] mBinormals; - delete [] mTexCoords; + free(mPositions); + free(mNormals); + free(mBinormals); + free(mTexCoords); mBinormals = NULL; if (num_verts) { - mPositions = new LLVector4a[num_verts]; - mNormals = new LLVector4a[num_verts]; + mPositions = (LLVector4a*) malloc(sizeof(LLVector4a)*num_verts); + assert_aligned(mPositions, 16); + mNormals = (LLVector4a*) malloc(sizeof(LLVector4a)*num_verts); + assert_aligned(mNormals, 16); //pad texture coordinate block end to allow for QWORD reads - S32 size = ((num_verts*8) + 0xF) & ~0xF; - mTexCoords = new LLVector2[size/8]; + S32 size = ((num_verts*sizeof(LLVector2)) + 0xF) & ~0xF; + mTexCoords = (LLVector2*) malloc(size); + assert_aligned(mTexCoords, 16); } else { @@ -6199,39 +6213,18 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con S32 old_size = mNumVertices*16; //positions - LLVector4a* dst = new LLVector4a[new_verts]; - if (mPositions) - { - LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mPositions, old_size); - delete [] mPositions; - } - mPositions = dst; - + mPositions = (LLVector4a*) realloc(mPositions, new_size); + //normals - dst = new LLVector4a[new_verts]; - if (mNormals) - { - LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mNormals, old_size); - delete [] mNormals; - } - mNormals = dst; - + mNormals = (LLVector4a*) realloc(mNormals, new_size); + //tex coords new_size = ((new_verts*8)+0xF) & ~0xF; - old_size = ((mNumVertices*8)+0xF) & ~0xF; - - { - LLVector2* dst = new LLVector2[new_size/8]; - if (mTexCoords) - { - LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mTexCoords, old_size); - delete [] mTexCoords; - } - mTexCoords = dst; - } + mTexCoords = (LLVector2*) realloc(mTexCoords, new_size); + //just clear binormals - delete [] mBinormals; + free(mBinormals); mBinormals = NULL; mPositions[mNumVertices] = pos; @@ -6243,26 +6236,26 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con void LLVolumeFace::allocateBinormals(S32 num_verts) { - delete [] mBinormals; - mBinormals = new LLVector4a[num_verts]; + free(mBinormals); + mBinormals = (LLVector4a*) malloc(sizeof(LLVector4a)*num_verts); } void LLVolumeFace::allocateWeights(S32 num_verts) { - delete [] mWeights; - mWeights = new LLVector4a[num_verts]; + free(mWeights); + mWeights = (LLVector4a*) malloc(sizeof(LLVector4a)*num_verts); } void LLVolumeFace::resizeIndices(S32 num_indices) { - delete [] mIndices; + free(mIndices); if (num_indices) { //pad index block end to allow for QWORD reads - S32 size = ((num_indices*2) + 0xF) & ~0xF; + S32 size = ((num_indices*sizeof(U16)) + 0xF) & ~0xF; - mIndices = new U16[size/2]; + mIndices = (U16*) malloc(size); } else { @@ -6280,13 +6273,7 @@ void LLVolumeFace::pushIndex(const U16& idx) S32 old_size = ((mNumIndices*2)+0xF) & ~0xF; if (new_size != old_size) { - U16* dst = new U16[new_size/2]; - if (mIndices) - { - LLVector4a::memcpyNonAliased16((F32*) dst, (F32*) mIndices, old_size); - delete [] mIndices; - } - mIndices = dst; + mIndices = (U16*) realloc(mIndices, new_size); } mIndices[mNumIndices++] = idx; @@ -6327,28 +6314,13 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat } //allocate new buffer space - LLVector4a* new_pos = new LLVector4a[new_count]; - LLVector4a* new_norm = new LLVector4a[new_count]; - LLVector2* new_tc = new LLVector2[((new_count*8+0xF) & ~0xF)/8]; + mPositions = (LLVector4a*) realloc(mPositions, new_count*sizeof(LLVector4a)); + assert_aligned(mPositions, 16); + mNormals = (LLVector4a*) realloc(mNormals, new_count*sizeof(LLVector4a)); + assert_aligned(mNormals, 16); + mTexCoords = (LLVector2*) realloc(mTexCoords, (new_count*sizeof(LLVector2)+0xF) & ~0xF); + assert_aligned(mTexCoords, 16); - - if (mNumVertices > 0) - { //copy old buffers - LLVector4a::memcpyNonAliased16((F32*) new_pos, (F32*) mPositions, mNumVertices*4*sizeof(F32)); - LLVector4a::memcpyNonAliased16((F32*) new_norm, (F32*) mNormals, mNumVertices*4*sizeof(F32)); - LLVector4a::memcpyNonAliased16((F32*) new_tc, (F32*) mTexCoords, mNumVertices*2*sizeof(F32)); - } - - //free old buffer space - delete [] mPositions; - delete [] mNormals; - delete [] mTexCoords; - - //point to new buffers - mPositions = new_pos; - mNormals = new_norm; - mTexCoords = new_tc; - mNumVertices = new_count; //get destination address of appended face @@ -6393,19 +6365,8 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat new_count = mNumIndices + face.mNumIndices; //allocate new index buffer - U16* new_indices = new U16[((new_count*2+0xF) & ~0xF)/2]; - if (mNumIndices > 0) - { //copy old index buffer - S32 old_size = (mNumIndices*2+0xF) & ~0xF; - LLVector4a::memcpyNonAliased16((F32*) new_indices, (F32*) mIndices, old_size); - } - - //free old index buffer - delete [] mIndices; + mIndices = (U16*) realloc(mIndices, (new_count*sizeof(U16)+0xF) & ~0xF); - //point to new index buffer - mIndices = new_indices; - //get destination address into new index buffer U16* dst_idx = mIndices+mNumIndices; mNumIndices = new_count; diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index e4b7cd80ce..ae17996956 100644 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -120,7 +120,7 @@ void load_face_from_dom_inputs(LLVolumeFace& face, const domInputLocalOffset_Arr { LLVector4a* norm = (LLVector4a*) face.mNormals + (j-min_idx); norm->set(n[j*3+0], n[j*3+1], n[j*3+2]); - norm->normalize3fast(); + norm->normalize3(); } } else if (strcmp(COMMON_PROFILE_INPUT_TEXCOORD, inputs[j]->getSemantic()) == 0) @@ -1041,6 +1041,12 @@ void LLModel::smoothNormals(F32 angle_cutoff) { LLVolumeFace& vol_face = mVolumeFaces[j]; + if (vol_face.mNumIndices > 65535) + { + llwarns << "Too many vertices for normal generation to work." << llendl; + continue; + } + //create faceted copy of current face with no texture coordinates (step 1) LLVolumeFace faceted; @@ -1048,16 +1054,16 @@ void LLModel::smoothNormals(F32 angle_cutoff) //LLVector4a* src_norm = (LLVector4a*) vol_face.mNormals; - //bake out triangles into temporary face, clearing normals and texture coordinates + faceted.resizeVertices(vol_face.mNumIndices); + faceted.resizeIndices(vol_face.mNumIndices); + //bake out triangles into temporary face, clearing texture coordinates for (U32 i = 0; i < vol_face.mNumIndices; ++i) { U32 idx = vol_face.mIndices[i]; - LLVolumeFace::VertexData v; - v.setPosition(src_pos[idx]); - v.getNormal().clear(); - v.mTexCoord.clear(); - faceted.pushVertex(v); - faceted.pushIndex(i); + + faceted.mPositions[i] = src_pos[idx]; + faceted.mTexCoords[i] = LLVector2(0,0); + faceted.mIndices[i] = i; } //generate normals for temporary face @@ -1080,7 +1086,7 @@ void LLModel::smoothNormals(F32 angle_cutoff) rhs.setSub(p2, p0); n0.setCross3(lhs, rhs); - n0.normalize3fast(); + n0.normalize3(); n1 = n0; n2 = n0; } @@ -1126,7 +1132,7 @@ void LLModel::smoothNormals(F32 angle_cutoff) for (U32 i = 0; i < faceted.mNumVertices; ++i) { - faceted.mNormals[i].normalize3fast(); + faceted.mNormals[i].normalize3(); LLVolumeFace::VertexMapData v; v.setPosition(faceted.mPositions[i]); @@ -1139,16 +1145,17 @@ void LLModel::smoothNormals(F32 angle_cutoff) LLVolumeFace new_face; //bake out triangles into new face + new_face.resizeIndices(vol_face.mNumIndices); + new_face.resizeVertices(vol_face.mNumIndices); + for (U32 i = 0; i < vol_face.mNumIndices; ++i) { U32 idx = vol_face.mIndices[i]; LLVolumeFace::VertexData v; - v.setPosition(vol_face.mPositions[idx]); - v.setNormal(vol_face.mNormals[idx]); - v.mTexCoord = vol_face.mTexCoords[idx]; - - new_face.pushVertex(v); - new_face.pushIndex(i); + new_face.mPositions[i] = vol_face.mPositions[idx]; + new_face.mNormals[i].clear(); + new_face.mTexCoords[i] = vol_face.mTexCoords[idx]; + new_face.mIndices[i] = i; } //generate normals for new face @@ -1171,7 +1178,7 @@ void LLModel::smoothNormals(F32 angle_cutoff) rhs.setSub(p2, p0); n0.setCross3(lhs, rhs); - n0.normalize3fast(); + n0.normalize3(); n1 = n0; n2 = n0; } -- cgit v1.3 From cf09d6c58a741263cddcf338c2f79836873475b1 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Wed, 22 Sep 2010 03:04:21 -0500 Subject: Remove LL_MESH_ENABLED macros (fixes drag and drop). Add mesh stitching type back into tools floater. --- indra/llmath/llvolume.cpp | 8 ----- indra/llmath/llvolume.h | 8 ----- indra/llprimitive/llmodel.cpp | 2 -- indra/llprimitive/llmodel.h | 5 --- indra/llvfs/llvfs.cpp | 2 -- indra/newview/llappviewer.cpp | 4 --- indra/newview/llassetuploadresponders.cpp | 5 +-- indra/newview/llassetuploadresponders.h | 3 -- indra/newview/lldrawpoolavatar.cpp | 38 ---------------------- indra/newview/lldrawpoolavatar.h | 3 -- indra/newview/llface.cpp | 2 -- indra/newview/llfloaterimportcollada.cpp | 3 -- indra/newview/llfloaterimportcollada.h | 5 --- indra/newview/llfloatermodelpreview.cpp | 5 --- indra/newview/llfloatermodelpreview.h | 3 -- indra/newview/llinventorybridge.cpp | 8 ----- indra/newview/llinventorybridge.h | 4 --- indra/newview/llmeshreduction.cpp | 3 -- indra/newview/llmeshreduction.h | 4 --- indra/newview/llmeshrepository.cpp | 10 ++++-- indra/newview/llmeshrepository.h | 4 --- indra/newview/llpanelgroupnotices.cpp | 2 -- indra/newview/llpanelobjectinventory.cpp | 7 ---- indra/newview/llspatialpartition.cpp | 2 -- indra/newview/lltexturectrl.cpp | 12 +++---- indra/newview/lltooldraganddrop.cpp | 12 ------- indra/newview/lltooldraganddrop.h | 5 --- indra/newview/llviewerassettype.cpp | 2 -- indra/newview/llviewerfloaterreg.cpp | 4 --- indra/newview/llviewermenufile.cpp | 8 ----- indra/newview/llviewermenufile.h | 2 -- indra/newview/llviewertexteditor.cpp | 2 -- indra/newview/llviewerwindow.cpp | 4 --- indra/newview/llvovolume.cpp | 15 --------- indra/newview/pipeline.cpp | 4 --- indra/newview/pipeline.h | 5 --- .../newview/skins/default/xui/en/floater_tools.xml | 4 +++ 37 files changed, 16 insertions(+), 203 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index c73f0e2755..1a24e0fbe9 100755 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2588,14 +2588,12 @@ void LLVolume::copyVolumeFaces(const LLVolume* volume) S32 LLVolume::getNumFaces() const { -#if LL_MESH_ENABLED U8 sculpt_type = (mParams.getSculptType() & LL_SCULPT_TYPE_MASK); if (sculpt_type == LL_SCULPT_TYPE_MESH) { return LL_SCULPT_MESH_MAX_FACES; } -#endif return (S32)mProfilep->mFaces.size(); } @@ -4176,12 +4174,10 @@ void LLVolume::generateSilhouetteVertices(std::vector &vertices, normals.clear(); segments.clear(); -#if LL_MESH_ENABLED if ((mParams.getSculptType() & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH) { return; } -#endif S32 cur_index = 0; //for each face @@ -6408,14 +6404,10 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) resizeVertices(num_vertices); resizeIndices(num_indices); -#if LL_MESH_ENABLED if ((volume->getParams().getSculptType() & LL_SCULPT_TYPE_MASK) != LL_SCULPT_TYPE_MESH) { mEdge.resize(num_indices); } -#else - mEdge.resize(num_indices); -#endif } LLVector4a* pos = (LLVector4a*) mPositions; diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 32364bd4b8..b4b59fd402 100755 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -41,8 +41,6 @@ class LLVolumeParams; class LLProfile; class LLPath; -#define LL_MESH_ENABLED 1 - template class LLOctreeNode; class LLVector4a; @@ -192,15 +190,9 @@ const U8 LL_SCULPT_TYPE_SPHERE = 1; const U8 LL_SCULPT_TYPE_TORUS = 2; const U8 LL_SCULPT_TYPE_PLANE = 3; const U8 LL_SCULPT_TYPE_CYLINDER = 4; -#if LL_MESH_ENABLED const U8 LL_SCULPT_TYPE_MESH = 5; - const U8 LL_SCULPT_TYPE_MASK = LL_SCULPT_TYPE_SPHERE | LL_SCULPT_TYPE_TORUS | LL_SCULPT_TYPE_PLANE | LL_SCULPT_TYPE_CYLINDER | LL_SCULPT_TYPE_MESH; -#else -const U8 LL_SCULPT_TYPE_MASK = LL_SCULPT_TYPE_SPHERE | LL_SCULPT_TYPE_TORUS | LL_SCULPT_TYPE_PLANE | - LL_SCULPT_TYPE_CYLINDER; -#endif const U8 LL_SCULPT_FLAG_INVERT = 64; const U8 LL_SCULPT_FLAG_MIRROR = 128; diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index ae17996956..349c844470 100755 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -41,7 +41,6 @@ #include "dom/domMesh.h" #include "zlib/zlib.h" -#if LL_MESH_ENABLED std::string model_names[] = { @@ -1710,5 +1709,4 @@ LLModel::weight_list& LLModel::getJointInfluences(const LLVector3& pos) } } -#endif diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h index a91c80d5b7..ea703d7228 100755 --- a/indra/llprimitive/llmodel.h +++ b/indra/llprimitive/llmodel.h @@ -36,8 +36,6 @@ #include "v4math.h" #include "m4math.h" -#if LL_MESH_ENABLED - class daeElement; class domMesh; @@ -173,7 +171,4 @@ protected: virtual BOOL createVolumeFacesFromDomMesh(domMesh *mesh); }; - -#endif - #endif //LL_LLMODEL_H diff --git a/indra/llvfs/llvfs.cpp b/indra/llvfs/llvfs.cpp index 2b01288fd7..ddb76fb2ba 100755 --- a/indra/llvfs/llvfs.cpp +++ b/indra/llvfs/llvfs.cpp @@ -2041,11 +2041,9 @@ std::string get_extension(LLAssetType::EType type) case LLAssetType::AT_ANIMATION: extension = ".lla"; break; -#if LL_MESH_ENABLED case LLAssetType::AT_MESH: extension = ".slm"; break; -#endif default: // Just use the asset server filename extension in most cases extension += "."; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index f140547497..c07d891800 100755 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1360,10 +1360,8 @@ bool LLAppViewer::cleanup() llinfos << "Cleaning Up" << llendflush; -#if LL_MESH_ENABLED // shut down mesh streamer gMeshRepo.shutdown(); -#endif // Must clean up texture references before viewer window is destroyed. LLHUDManager::getInstance()->updateEffects(); @@ -1761,10 +1759,8 @@ bool LLAppViewer::initThreads() mFastTimerLogThread->start(); } -#if LL_MESH_ENABLED // Mesh streaming and caching gMeshRepo.init(); -#endif LLFilePickerThread::initClass(); diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp index afb76735ec..d44fb84f14 100755 --- a/indra/newview/llassetuploadresponders.cpp +++ b/indra/newview/llassetuploadresponders.cpp @@ -305,7 +305,6 @@ void LLAssetUploadResponder::uploadComplete(const LLSD& content) { } -#if LL_MESH_ENABLED LLNewAgentInventoryResponder::LLNewAgentInventoryResponder( const LLSD& post_data, const LLUUID& vfile_id, @@ -427,7 +426,6 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content) LLImportColladaAssetCache::getInstance()->assetUploaded(mVFileID, content["new_asset"], TRUE); } -#endif LLSendTexLayerResponder::LLSendTexLayerResponder(const LLSD& post_data, const LLUUID& vfile_id, @@ -677,7 +675,6 @@ void LLUpdateTaskInventoryResponder::uploadComplete(const LLSD& content) } -#if LL_MESH_ENABLED ///////////////////////////////////////////////////// // LLNewAgentInventoryVariablePriceResponder::Impl // ///////////////////////////////////////////////////// @@ -1145,5 +1142,5 @@ void LLNewAgentInventoryVariablePriceResponder::showConfirmationDialog( boost::intrusive_ptr(this))); } } -#endif + diff --git a/indra/newview/llassetuploadresponders.h b/indra/newview/llassetuploadresponders.h index a85e84e9f8..268220d4a6 100755 --- a/indra/newview/llassetuploadresponders.h +++ b/indra/newview/llassetuploadresponders.h @@ -34,7 +34,6 @@ #define LL_LLASSETUPLOADRESPONDER_H #include "llhttpclient.h" -#include "llvolume.h" //for LL_MESH_ENABLED // Abstract class for supporting asset upload // via capabilities @@ -62,7 +61,6 @@ protected: std::string mFileName; }; -#if LL_MESH_ENABLED // TODO*: Remove this once deprecated class LLNewAgentInventoryResponder : public LLAssetUploadResponder { @@ -116,7 +114,6 @@ private: class Impl; Impl* mImpl; }; -#endif struct LLBakedUploadData; class LLSendTexLayerResponder : public LLAssetUploadResponder diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 5cf6082f12..e09e40671d 100755 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -105,7 +105,6 @@ S32 normal_channel = -1; S32 specular_channel = -1; S32 cube_channel = -1; -#if LL_MESH_ENABLED static const U32 rigged_data_mask[] = { LLDrawPoolAvatar::RIGGED_SIMPLE_MASK, LLDrawPoolAvatar::RIGGED_FULLBRIGHT_MASK, @@ -117,7 +116,6 @@ static const U32 rigged_data_mask[] = { LLDrawPoolAvatar::RIGGED_DEFERRED_BUMP_MASK, LLDrawPoolAvatar::RIGGED_DEFERRED_SIMPLE_MASK, }; -#endif static LLFastTimer::DeclareTimer FTM_SHADOW_AVATAR("Avatar Shadow"); @@ -198,14 +196,12 @@ void LLDrawPoolAvatar::beginDeferredPass(S32 pass) case 2: beginDeferredSkinned(); break; -#if LL_MESH_ENABLED case 3: beginDeferredRiggedSimple(); break; case 4: beginDeferredRiggedBump(); break; -#endif } } @@ -232,14 +228,12 @@ void LLDrawPoolAvatar::endDeferredPass(S32 pass) case 2: endDeferredSkinned(); break; -#if LL_MESH_ENABLED case 3: endDeferredRiggedSimple(); break; case 4: endDeferredRiggedBump(); break; -#endif } } @@ -250,11 +244,7 @@ void LLDrawPoolAvatar::renderDeferred(S32 pass) S32 LLDrawPoolAvatar::getNumPostDeferredPasses() { -#if LL_MESH_ENABLED return 6; -#else - return 1; -#endif } void LLDrawPoolAvatar::beginPostDeferredPass(S32 pass) @@ -264,7 +254,6 @@ void LLDrawPoolAvatar::beginPostDeferredPass(S32 pass) case 0: beginPostDeferredAlpha(); break; -#if LL_MESH_ENABLED case 1: beginRiggedFullbright(); break; @@ -280,7 +269,6 @@ void LLDrawPoolAvatar::beginPostDeferredPass(S32 pass) case 5: beginRiggedGlow(); break; -#endif } } @@ -298,7 +286,6 @@ void LLDrawPoolAvatar::beginPostDeferredAlpha() enable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]); } -#if LL_MESH_ENABLED void LLDrawPoolAvatar::beginDeferredRiggedAlpha() { sVertexProgram = &gDeferredSkinnedAlphaProgram; @@ -316,7 +303,6 @@ void LLDrawPoolAvatar::endDeferredRiggedAlpha() LLVertexBuffer::sWeight4Loc = -1; sVertexProgram = NULL; } -#endif void LLDrawPoolAvatar::endPostDeferredPass(S32 pass) { @@ -325,7 +311,6 @@ void LLDrawPoolAvatar::endPostDeferredPass(S32 pass) case 0: endPostDeferredAlpha(); break; -#if LL_MESH_ENABLED case 1: endRiggedFullbright(); break; @@ -341,7 +326,6 @@ void LLDrawPoolAvatar::endPostDeferredPass(S32 pass) case 5: endRiggedGlow(); break; -#endif } } @@ -375,11 +359,7 @@ void LLDrawPoolAvatar::renderPostDeferred(S32 pass) S32 LLDrawPoolAvatar::getNumShadowPasses() { -#if LL_MESH_ENABLED return 2; -#else - return 1; -#endif } void LLDrawPoolAvatar::beginShadowPass(S32 pass) @@ -470,7 +450,6 @@ void LLDrawPoolAvatar::renderShadow(S32 pass) avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE); } -#if LL_MESH_ENABLED else { renderRigged(avatarp, RIGGED_SIMPLE); @@ -480,12 +459,10 @@ void LLDrawPoolAvatar::renderShadow(S32 pass) renderRigged(avatarp, RIGGED_SHINY); renderRigged(avatarp, RIGGED_FULLBRIGHT_ALPHA); } -#endif } S32 LLDrawPoolAvatar::getNumPasses() { -#if LL_MESH_ENABLED if (LLPipeline::sImpostorRender) { return 8; @@ -494,7 +471,6 @@ S32 LLDrawPoolAvatar::getNumPasses() { return 10; } -#else if (LLPipeline::sImpostorRender) { return 1; @@ -503,7 +479,6 @@ S32 LLDrawPoolAvatar::getNumPasses() { return 3; } -#endif } @@ -554,7 +529,6 @@ void LLDrawPoolAvatar::beginRenderPass(S32 pass) case 2: beginSkinned(); break; -#if LL_MESH_ENABLED case 3: beginRiggedSimple(); break; @@ -576,7 +550,6 @@ void LLDrawPoolAvatar::beginRenderPass(S32 pass) case 9: beginRiggedGlow(); break; -#endif } } @@ -600,7 +573,6 @@ void LLDrawPoolAvatar::endRenderPass(S32 pass) case 2: endSkinned(); break; -#if LL_MESH_ENABLED case 3: endRiggedSimple(); break; @@ -622,7 +594,6 @@ void LLDrawPoolAvatar::endRenderPass(S32 pass) case 9: endRiggedGlow(); break; -#endif } } @@ -808,7 +779,6 @@ void LLDrawPoolAvatar::endSkinned() gGL.getTexUnit(0)->activate(); } -#if LL_MESH_ENABLED void LLDrawPoolAvatar::beginRiggedSimple() { if (sShaderLevel > 0) @@ -1056,7 +1026,6 @@ void LLDrawPoolAvatar::endDeferredRiggedBump() sDiffuseChannel = 0; sVertexProgram = NULL; } -#endif void LLDrawPoolAvatar::beginDeferredSkinned() { @@ -1202,7 +1171,6 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) return; } -#if LL_MESH_ENABLED if (pass == 3) { if (is_deferred_render) @@ -1284,7 +1252,6 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) gGL.setSceneBlendType(LLRender::BT_ALPHA); return; } -#endif if (sShaderLevel > 0) { @@ -1322,7 +1289,6 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) } } -#if LL_MESH_ENABLED void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace* face, const LLMeshSkinInfo* skin, LLVolume* volume, const LLVolumeFace& vol_face) { LLVector4a* weight = vol_face.mWeights; @@ -1631,8 +1597,6 @@ void LLDrawPoolAvatar::renderRiggedGlow(LLVOAvatar* avatar) { renderRigged(avatar, RIGGED_GLOW, true); } -#endif - //----------------------------------------------------------------------------- @@ -1733,7 +1697,6 @@ LLColor3 LLDrawPoolAvatar::getDebugColor() const return LLColor3(0.f, 1.f, 0.f); } -#if LL_MESH_ENABLED void LLDrawPoolAvatar::addRiggedFace(LLFace* facep, U32 type) { if (facep->mRiggedIndex.empty()) @@ -1788,7 +1751,6 @@ void LLDrawPoolAvatar::removeRiggedFace(LLFace* facep) } } } -#endif LLVertexBufferAvatar::LLVertexBufferAvatar() : LLVertexBuffer(sDataMask, diff --git a/indra/newview/lldrawpoolavatar.h b/indra/newview/lldrawpoolavatar.h index d08ae04516..7d7f9319ed 100755 --- a/indra/newview/lldrawpoolavatar.h +++ b/indra/newview/lldrawpoolavatar.h @@ -34,7 +34,6 @@ #define LL_LLDRAWPOOLAVATAR_H #include "lldrawpool.h" -#include "llvolume.h" // for LL_MESH_ENABLED class LLVOAvatar; class LLGLSLShader; @@ -113,7 +112,6 @@ public: void beginPostDeferredAlpha(); void endPostDeferredAlpha(); -#if LL_MESH_ENABLED void beginRiggedSimple(); void beginRiggedFullbright(); void beginRiggedFullbrightShiny(); @@ -205,7 +203,6 @@ public: void removeRiggedFace(LLFace* facep); std::vector mRiggedFace[NUM_RIGGED_PASSES]; -#endif /*virtual*/ LLViewerTexture *getDebugTexture(); /*virtual*/ LLColor3 getDebugColor() const; // For AGP debug display diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 3fa60e9f1e..29edbc2b03 100755 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -212,13 +212,11 @@ void LLFace::destroy() if (mDrawPoolp) { -#if LL_MESH_ENABLED if (this->isState(LLFace::RIGGED) && mDrawPoolp->getType() == LLDrawPool::POOL_AVATAR) { ((LLDrawPoolAvatar*) mDrawPoolp)->removeRiggedFace(this); } else -#endif { mDrawPoolp->removeFace(this); } diff --git a/indra/newview/llfloaterimportcollada.cpp b/indra/newview/llfloaterimportcollada.cpp index 476c02cd46..000347f68c 100755 --- a/indra/newview/llfloaterimportcollada.cpp +++ b/indra/newview/llfloaterimportcollada.cpp @@ -74,8 +74,6 @@ // floater // -#if LL_MESH_ENABLED - LLFloaterImportCollada::LLFloaterImportCollada(const LLSD& key) : LLFloater(key) { @@ -1113,4 +1111,3 @@ void LLImportCollada::onCommitCancel(LLUICtrl*, void*) getInstance()->endImport(); } -#endif diff --git a/indra/newview/llfloaterimportcollada.h b/indra/newview/llfloaterimportcollada.h index 818b19e403..4eb263901b 100755 --- a/indra/newview/llfloaterimportcollada.h +++ b/indra/newview/llfloaterimportcollada.h @@ -34,9 +34,6 @@ #define LL_LLFLOATERIMPORTCOLLADA_H #include "llfloater.h" -#include "llvolume.h" //for LL_MESH_ENABLED - -#if LL_MESH_ENABLED class LLFloaterImportCollada : public LLFloater { @@ -138,6 +135,4 @@ private: LLMatrix4 mSceneTransformation; }; -#endif - #endif // LL_LLFLOATERIMPORTCOLLADA_H diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 3ef892f739..088c9e6546 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -98,9 +98,6 @@ #include "glod/glod.h" - -#if LL_MESH_ENABLED - //static S32 LLFloaterModelPreview::sUploadAmount = 10; LLFloaterModelPreview* LLFloaterModelPreview::sInstance = NULL; @@ -3437,5 +3434,3 @@ void LLModelPreview::textureLoadedCallback( BOOL success, LLViewerFetchedTexture preview->refresh(); } -#endif - diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h index 97e681a6a8..148687aecd 100755 --- a/indra/newview/llfloatermodelpreview.h +++ b/indra/newview/llfloatermodelpreview.h @@ -40,7 +40,6 @@ #include "llmodel.h" #include "llthread.h" -#if LL_MESH_ENABLED class LLComboBox; class LLJoint; class LLViewerJointMesh; @@ -272,6 +271,4 @@ protected: static S32 sUploadAmount; }; -#endif - #endif // LL_LLFLOATERMODELPREVIEW_H diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index b03947f54d..eb23ab95dd 100755 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -920,7 +920,6 @@ LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type, // Only should happen for broken links. new_listener = new LLLinkItemBridge(inventory, root, uuid); break; -#if LL_MESH_ENABLED case LLAssetType::AT_MESH: if(!(inv_type == LLInventoryType::IT_MESH)) { @@ -928,7 +927,6 @@ LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type, } new_listener = new LLMeshBridge(inventory, root, uuid); break; -#endif default: llinfos << "Unhandled asset type (llassetstorage.h): " @@ -2690,9 +2688,7 @@ BOOL LLFolderBridge::dragOrDrop(MASK mask, BOOL drop, case DAD_ANIMATION: case DAD_GESTURE: case DAD_LINK: -#if LL_MESH_ENABLED case DAD_MESH: -#endif accept = dragItemIntoFolder((LLInventoryItem*)cargo_data, drop); break; @@ -3602,9 +3598,7 @@ BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop, case DAD_BODYPART: case DAD_ANIMATION: case DAD_GESTURE: -#if LL_MESH_ENABLED case DAD_MESH: -#endif { LLInventoryItem* inv_item = (LLInventoryItem*)cargo_data; const LLPermissions& perm = inv_item->getPermissions(); @@ -4793,7 +4787,6 @@ void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags) hide_context_entries(menu, items, disabled_items); } -#if LL_MESH_ENABLED // +=================================================+ // | LLMeshBridge | // +=================================================+ @@ -4850,7 +4843,6 @@ void LLMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags) hide_context_entries(menu, items, disabled_items); } -#endif // +=================================================+ // | LLLinkBridge | diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 4c6c3ab82f..e1bfff7e0c 100755 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -40,7 +40,6 @@ #include "llinventoryobserver.h" #include "llviewercontrol.h" #include "llwearable.h" -#include "llvolume.h" //for LL_MESH_ENABLED class LLInventoryPanel; class LLInventoryModel; @@ -530,7 +529,6 @@ protected: }; -#if LL_MESH_ENABLED class LLMeshBridge : public LLItemBridge { friend class LLInvFVBridge; @@ -546,8 +544,6 @@ protected: const LLUUID& uuid) : LLItemBridge(inventory, root, uuid) {} }; -#endif - //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/indra/newview/llmeshreduction.cpp b/indra/newview/llmeshreduction.cpp index e785784a32..f56d97abbf 100755 --- a/indra/newview/llmeshreduction.cpp +++ b/indra/newview/llmeshreduction.cpp @@ -37,8 +37,6 @@ #include "glod/glod.h" -#if LL_MESH_ENABLED - static BOOL stop_gloderror() { GLuint error = glodGetError(); @@ -287,5 +285,4 @@ LLPointer LLMeshReduction::reduce(LLModel* in_model, F32 limit, S32 mod return out_model; } -#endif diff --git a/indra/newview/llmeshreduction.h b/indra/newview/llmeshreduction.h index d86696978d..9a7eaa082f 100755 --- a/indra/newview/llmeshreduction.h +++ b/indra/newview/llmeshreduction.h @@ -34,8 +34,6 @@ #include "llmodel.h" -#if LL_MESH_ENABLED - class LLMeshReduction { public: @@ -54,6 +52,4 @@ private: U32 mCounter; }; -#endif - #endif // LL_LLMESHREDUCTION_H diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 069642b711..ecf75415ab 100755 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -68,8 +68,6 @@ #include -#if LL_MESH_ENABLED - LLFastTimer::DeclareTimer FTM_MESH_UPDATE("Mesh Update"); LLFastTimer::DeclareTimer FTM_LOAD_MESH("Load Mesh"); @@ -2395,6 +2393,13 @@ LLSD LLMeshUploadThread::createObject(LLModelInstance& instance) extra_parameter["param_data"] = v; object_params["extra_parameters"].append(extra_parameter); + LLPermissions perm; + perm.setNextOwnerBits(gAgent.getID(), LLUUID::null, TRUE, LLFloaterPerms::getNextOwnerPerms()); + perm.setGroupBits(gAgent.getID(), LLUUID::null, TRUE, LLFloaterPerms::getGroupPerms()); + perm.setEveryoneBits(gAgent.getID(), LLUUID::null, TRUE, LLFloaterPerms::getEveryonePerms()); + + object_params["permissions"] = ll_create_sd_from_permissions(perm); + return object_params; } @@ -2696,5 +2701,4 @@ void LLPhysicsDecomp::run() mDone = true; } -#endif diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h index b26598ce31..a2f403e214 100755 --- a/indra/newview/llmeshrepository.h +++ b/indra/newview/llmeshrepository.h @@ -39,8 +39,6 @@ #include "llviewertexture.h" #include "llvolume.h" -#if LL_MESH_ENABLED - #define LLCONVEXDECOMPINTER_STATIC 1 #include "llconvexdecomposition.h" @@ -466,5 +464,3 @@ extern LLMeshRepository gMeshRepo; #endif -#endif - diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp index 91166b0f5b..e900c0bdaf 100755 --- a/indra/newview/llpanelgroupnotices.cpp +++ b/indra/newview/llpanelgroupnotices.cpp @@ -159,9 +159,7 @@ BOOL LLGroupDropTarget::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, case DAD_ANIMATION: case DAD_GESTURE: case DAD_CALLINGCARD: -#if LL_MESH_ENABLED case DAD_MESH: -#endif { LLViewerInventoryItem* inv_item = (LLViewerInventoryItem*)cargo_data; if(gInventory.getItem(inv_item->getUUID()) diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index a2dd8b4d6d..87c3ee4552 100755 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -818,9 +818,7 @@ BOOL LLTaskCategoryBridge::dragOrDrop(MASK mask, BOOL drop, case DAD_ANIMATION: case DAD_GESTURE: case DAD_CALLINGCARD: -#if LL_MESH_ENABLED case DAD_MESH: -#endif accept = LLToolDragAndDrop::isInventoryDropAcceptable(object, (LLViewerInventoryItem*)cargo_data); if(accept && drop) { @@ -1246,7 +1244,6 @@ LLUIImagePtr LLTaskWearableBridge::getIcon() const return LLInventoryIcon::getIcon(mAssetType, mInventoryType, mFlags, FALSE ); } -#if LL_MESH_ENABLED ///---------------------------------------------------------------------------- /// Class LLTaskMeshBridge ///---------------------------------------------------------------------------- @@ -1358,8 +1355,6 @@ void LLTaskMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags) hide_context_entries(menu, items, disabled_items); } -#endif - ///---------------------------------------------------------------------------- /// LLTaskInvFVBridge impl //---------------------------------------------------------------------------- @@ -1439,13 +1434,11 @@ LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory* object->getUUID(), object->getName()); break; -#if LL_MESH_ENABLED case LLAssetType::AT_MESH: new_bridge = new LLTaskMeshBridge(panel, object->getUUID(), object->getName()); break; -#endif default: llinfos << "Unhandled inventory type (llassetstorage.h): " << (S32)type << llendl; diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 0f9f35dc57..56be8af599 100755 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -2789,7 +2789,6 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume) U32 data_mask = LLVertexBuffer::MAP_VERTEX; -#if LL_MESH_ENABLED if (volume->isMesh()) { LLUUID mesh_id = volume->getVolume()->getParams().getSculptID(); @@ -2826,7 +2825,6 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume) return; } } -#endif //LL_MESH_ENABLED //push faces glColor3fv(color.mV); diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index 3aaf5f0c9f..3d290b7875 100755 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -295,10 +295,8 @@ BOOL LLFloaterTexturePicker::handleDragAndDrop( { BOOL handled = FALSE; - bool is_mesh = false; -#if LL_MESH_ENABLED - is_mesh = cargo_type == DAD_MESH; -#endif + bool is_mesh = cargo_type == DAD_MESH; + if ((cargo_type == DAD_TEXTURE) || is_mesh) { LLInventoryItem *item = (LLInventoryItem *)cargo_data; @@ -1214,10 +1212,8 @@ BOOL LLTextureCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, // returns true, then the cast was valid, and we can perform // the third test without problems. LLInventoryItem* item = (LLInventoryItem*)cargo_data; - bool is_mesh = false; -#if LL_MESH_ENABLED - is_mesh = cargo_type == DAD_MESH; -#endif + bool is_mesh = cargo_type == DAD_MESH; + if (getEnabled() && ((cargo_type == DAD_TEXTURE) || is_mesh) && allowDrop(item)) diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index b7dc624beb..6f38b0cd65 100755 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -331,9 +331,7 @@ LLToolDragAndDrop::LLDragAndDropDictionary::LLDragAndDropDictionary() addEntry(DAD_ANIMATION, new DragAndDropEntry(&LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dGiveInventory, &LLToolDragAndDrop::dad3dUpdateInventory, &LLToolDragAndDrop::dad3dNULL)); addEntry(DAD_GESTURE, new DragAndDropEntry(&LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dActivateGesture, &LLToolDragAndDrop::dad3dGiveInventory, &LLToolDragAndDrop::dad3dUpdateInventory, &LLToolDragAndDrop::dad3dNULL)); addEntry(DAD_LINK, new DragAndDropEntry(&LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dNULL)); -#if LL_MESH_ENABLED addEntry(DAD_MESH, new DragAndDropEntry(&LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dGiveInventory, &LLToolDragAndDrop::dad3dMeshObject, &LLToolDragAndDrop::dad3dNULL)); -#endif // TODO: animation on self could play it? edit it? // TODO: gesture on self could play it? edit it? }; @@ -1037,7 +1035,6 @@ void LLToolDragAndDrop::dropTextureAllFaces(LLViewerObject* hit_obj, hit_obj->sendTEUpdate(); } -#if LL_MESH_ENABLED void LLToolDragAndDrop::dropMesh(LLViewerObject* hit_obj, LLInventoryItem* item, LLToolDragAndDrop::ESource source, @@ -1062,7 +1059,6 @@ void LLToolDragAndDrop::dropMesh(LLViewerObject* hit_obj, dialog_refresh_all(); } -#endif /* void LLToolDragAndDrop::dropTextureOneFaceAvatar(LLVOAvatar* avatar, S32 hit_face, LLInventoryItem* item) @@ -1505,9 +1501,7 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_ case DAD_ANIMATION: case DAD_GESTURE: case DAD_CALLINGCARD: -#if LL_MESH_ENABLED case DAD_MESH: -#endif { LLViewerInventoryItem* inv_item = (LLViewerInventoryItem*)cargo_data; if(gInventory.getItem(inv_item->getUUID()) @@ -1864,12 +1858,10 @@ EAcceptance LLToolDragAndDrop::dad3dApplyToObject( dropTextureOneFace(obj, face, item, mSource, mSourceID); } } -#if LL_MESH_ENABLED else if (cargo_type == DAD_MESH) { dropMesh(obj, item, mSource, mSourceID); } -#endif else { llwarns << "unsupported asset type" << llendl; @@ -1894,15 +1886,11 @@ EAcceptance LLToolDragAndDrop::dad3dTextureObject( return dad3dApplyToObject(obj, face, mask, drop, DAD_TEXTURE); } -#if LL_MESH_ENABLED EAcceptance LLToolDragAndDrop::dad3dMeshObject( LLViewerObject* obj, S32 face, MASK mask, BOOL drop) { return dad3dApplyToObject(obj, face, mask, drop, DAD_MESH); } -#endif - - /* diff --git a/indra/newview/lltooldraganddrop.h b/indra/newview/lltooldraganddrop.h index 09da4c2955..596cc2ee88 100755 --- a/indra/newview/lltooldraganddrop.h +++ b/indra/newview/lltooldraganddrop.h @@ -43,7 +43,6 @@ #include "llpermissions.h" #include "llwindow.h" #include "llviewerinventory.h" -#include "llvolume.h" //for LL_MESH_ENABLED class LLToolDragAndDrop; class LLViewerRegion; @@ -155,10 +154,8 @@ protected: MASK mask, BOOL drop); EAcceptance dad3dTextureObject(LLViewerObject* obj, S32 face, MASK mask, BOOL drop); -#if LL_MESH_ENABLED EAcceptance dad3dMeshObject(LLViewerObject* obj, S32 face, MASK mask, BOOL drop); -#endif // EAcceptance dad3dTextureSelf(LLViewerObject* obj, S32 face, // MASK mask, BOOL drop); EAcceptance dad3dWearItem(LLViewerObject* obj, S32 face, @@ -245,12 +242,10 @@ public: LLInventoryItem* item, ESource source, const LLUUID& src_id); -#if LL_MESH_ENABLED static void dropMesh(LLViewerObject* hit_obj, LLInventoryItem* item, ESource source, const LLUUID& src_id); -#endif //static void dropTextureOneFaceAvatar(LLVOAvatar* avatar,S32 hit_face, // LLInventoryItem* item) diff --git a/indra/newview/llviewerassettype.cpp b/indra/newview/llviewerassettype.cpp index 370767002a..4c088a72b7 100755 --- a/indra/newview/llviewerassettype.cpp +++ b/indra/newview/llviewerassettype.cpp @@ -85,9 +85,7 @@ LLViewerAssetDictionary::LLViewerAssetDictionary() addEntry(LLViewerAssetType::AT_LINK, new ViewerAssetEntry(DAD_LINK)); addEntry(LLViewerAssetType::AT_LINK_FOLDER, new ViewerAssetEntry(DAD_LINK)); -#if LL_MESH_ENABLED addEntry(LLViewerAssetType::AT_MESH, new ViewerAssetEntry(DAD_MESH)); -#endif addEntry(LLViewerAssetType::AT_NONE, new ViewerAssetEntry(DAD_NONE)); }; diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 680a4f1ffa..e1cdca01a5 100755 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -175,9 +175,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("hud", "floater_hud.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("impanel", "floater_im_session.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); -#if LL_MESH_ENABLED LLFloaterReg::add("import_collada", "floater_import_collada.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); -#endif LLFloaterReg::add("im_container", "floater_im_container.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("im_well_window", "floater_sys_well.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("incoming_call", "floater_incoming_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); @@ -256,9 +254,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("upload_anim", "floater_animation_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build, "upload"); LLFloaterReg::add("upload_image", "floater_image_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build, "upload"); LLFloaterReg::add("upload_sound", "floater_sound_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build, "upload"); -#if LL_MESH_ENABLED LLFloaterReg::add("upload_model", "floater_model_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build, "upload"); -#endif LLFloaterReg::add("voice_controls", "floater_voice_controls.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("voice_effect", "floater_voice_effect.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 20de01b78a..0460ac0988 100755 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -350,7 +350,6 @@ class LLFileUploadImage : public view_listener_t } }; -#if LL_MESH_ENABLED class LLFileUploadScene : public view_listener_t { bool handleEvent(const LLSD& userdata) @@ -377,7 +376,6 @@ class LLFileUploadModel : public view_listener_t return TRUE; } }; -#endif class LLFileUploadSound : public view_listener_t { @@ -1186,7 +1184,6 @@ void upload_new_resource( lldebugs << "Folder: " << gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type) << llendl; lldebugs << "Asset Type: " << LLAssetType::lookup(asset_type) << llendl; -#if LL_MESH_ENABLED std::string url = gAgent.getRegion()->getCapability( "NewFileAgentInventory"); @@ -1216,7 +1213,6 @@ void upload_new_resource( LLHTTPClient::post(url, body, new LLNewAgentInventoryResponder(body, uuid, asset_type)); } else -#endif { llinfos << "NewAgentInventory capability not found, new agent inventory via asset system." << llendl; // check for adequate funds @@ -1264,7 +1260,6 @@ void upload_new_resource( } } -#if LL_MESH_ENABLED BOOL upload_new_variable_price_resource( const LLTransactionID &tid, LLAssetType::EType asset_type, @@ -1336,7 +1331,6 @@ BOOL upload_new_variable_price_resource( return FALSE; } } -#endif LLAssetID generate_asset_id_for_new_upload(const LLTransactionID& tid) { @@ -1407,10 +1401,8 @@ void init_menu_file() view_listener_t::addCommit(new LLFileUploadImage(), "File.UploadImage"); view_listener_t::addCommit(new LLFileUploadSound(), "File.UploadSound"); view_listener_t::addCommit(new LLFileUploadAnim(), "File.UploadAnim"); -#if LL_MESH_ENABLED view_listener_t::addCommit(new LLFileUploadModel(), "File.UploadModel"); view_listener_t::addCommit(new LLFileUploadScene(), "File.UploadScene"); -#endif view_listener_t::addCommit(new LLFileUploadBulk(), "File.UploadBulk"); view_listener_t::addCommit(new LLFileCloseWindow(), "File.CloseWindow"); view_listener_t::addCommit(new LLFileCloseAllWindows(), "File.CloseAllWindows"); diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h index bb7cfce862..08444551a9 100755 --- a/indra/newview/llviewermenufile.h +++ b/indra/newview/llviewermenufile.h @@ -74,7 +74,6 @@ void upload_new_resource( S32 expected_upload_cost, void *userdata); -#if LL_MESH_ENABLED // TODO* : Move all uploads to use this new function // since at some point, that upload path will be deprecated and no longer // used @@ -92,7 +91,6 @@ BOOL upload_new_variable_price_resource( U32 everyone_perms, const std::string& display_name, const LLSD& asset_resources); -#endif LLAssetID generate_asset_id_for_new_upload(const LLTransactionID& tid); void increase_new_upload_stats(LLAssetType::EType asset_type); diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index 84a42611a4..109add5552 100755 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -543,9 +543,7 @@ LLUIImagePtr LLEmbeddedItems::getItemImage(llwchar ext_char) const case LLAssetType::AT_BODYPART: img_name = "Inv_Skin"; break; case LLAssetType::AT_ANIMATION: img_name = "Inv_Animation"; break; case LLAssetType::AT_GESTURE: img_name = "Inv_Gesture"; break; -#if LL_MESH_ENABLED case LLAssetType::AT_MESH: img_name = "Inv_Mesh"; break; -#endif default: llassert(0); } diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 430f83307a..28bcdff7bd 100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -604,10 +604,8 @@ public: if (gSavedSettings.getBOOL("DebugShowUploadCost")) { -#if LL_MESH_ENABLED addText(xpos, ypos, llformat(" Meshes: L$%d", gPipeline.mDebugMeshUploadCost)); ypos += y_inc/2; -#endif addText(xpos, ypos, llformat(" Sculpties: L$%d", gPipeline.mDebugSculptUploadCost)); ypos += y_inc/2; addText(xpos, ypos, llformat(" Textures: L$%d", gPipeline.mDebugTextureUploadCost)); @@ -617,7 +615,6 @@ public: ypos += y_inc; } -#if LL_MESH_ENABLED //temporary hack to give feedback on mesh upload progress if (!gMeshRepo.mUploads.empty()) { @@ -647,7 +644,6 @@ public: ypos += y_inc; } -#endif } void draw() diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index f09ce5b363..96dfcae292 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -946,7 +946,6 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool BOOL is404 = FALSE; -#if LL_MESH_ENABLED if (isSculpted()) { // if it's a mesh @@ -966,7 +965,6 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool } } } -#endif // Check if we need to change implementations bool is_flexible = (volume_params.getPathParams().getCurveType() == LL_PCODE_PATH_FLEXIBLE); @@ -1015,7 +1013,6 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool if (isSculpted()) { updateSculptTexture(); -#if LL_MESH_ENABLED // if it's a mesh if ((volume_params.getSculptType() & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH) { @@ -1031,7 +1028,6 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms, const S32 detail, bool } } else // otherwise is sculptie -#endif { if (mSculptTexture.notNull()) { @@ -2725,7 +2721,6 @@ BOOL LLVOVolume::isSculpted() const BOOL LLVOVolume::isMesh() const { -#if LL_MESH_ENABLED if (isSculpted()) { LLSculptParams *sculpt_params = (LLSculptParams *)getParameterEntry(LLNetworkData::PARAMS_SCULPT); @@ -2737,8 +2732,6 @@ BOOL LLVOVolume::isMesh() const return TRUE; } } -#endif - return FALSE; } @@ -3258,7 +3251,6 @@ F32 LLVOVolume::getBinRadius() F32 scale = 1.f; -#if LL_MESH_ENABLED if (isSculpted()) { LLSculptParams *sculpt_params = (LLSculptParams *)getParameterEntry(LLNetworkData::PARAMS_SCULPT); @@ -3280,7 +3272,6 @@ F32 LLVOVolume::getBinRadius() scale = 1.f/llmax(vert_count/1024.f, 1.f); } } -#endif const LLVector4a* ext = mDrawable->getSpatialExtents(); @@ -3912,7 +3903,6 @@ void LLVolumeGeometryManager::getGeometry(LLSpatialGroup* group) static LLFastTimer::DeclareTimer FTM_REBUILD_VOLUME_VB("Volume"); static LLFastTimer::DeclareTimer FTM_REBUILD_VBO("VBO Rebuilt"); -#if LL_MESH_ENABLED static LLDrawPoolAvatar* get_avatar_drawpool(LLViewerObject* vobj) { LLVOAvatar* avatar = vobj->getAvatar(); @@ -3939,7 +3929,6 @@ static LLDrawPoolAvatar* get_avatar_drawpool(LLViewerObject* vobj) return NULL; } -#endif void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) { @@ -4006,11 +3995,9 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) drawablep->clearState(LLDrawable::HAS_ALPHA); -#if LL_MESH_ENABLED bool rigged = vobj->isAttachment() && vobj->isMesh() && gMeshRepo.getSkinInfo(vobj->getVolume()->getParams().getSculptID()); -#endif bool bake_sunlight = LLPipeline::sBakeSunlight && drawablep->isStatic(); @@ -4023,7 +4010,6 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) drawablep->updateFaceSize(i); LLFace* facep = drawablep->getFace(i); -#if LL_MESH_ENABLED if (rigged) { if (!facep->isState(LLFace::RIGGED)) @@ -4129,7 +4115,6 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) facep->clearState(LLFace::RIGGED); } } -#endif if (cur_total > max_total || facep->getIndicesCount() <= 0 || facep->getGeomCount() <= 0) { diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 8b4feac3cd..9ad1df02b8 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -2039,9 +2039,7 @@ void LLPipeline::rebuildPriorityGroups() assertInitialized(); -#if LL_MESH_ENABLED gMeshRepo.notifyLoadedMeshes(); -#endif // Iterate through all drawables on the priority build queue, for (LLSpatialGroup::sg_vector_t::iterator iter = mGroupQ1.begin(); @@ -3857,7 +3855,6 @@ void LLPipeline::renderDebug() gPipeline.mDebugTextureUploadCost = textures.size() * 10; gPipeline.mDebugSculptUploadCost = sculpts.size()*10; -#if LL_MESH_ENABLED U32 mesh_cost = 0; for (std::set::iterator iter = meshes.begin(); iter != meshes.end(); ++iter) @@ -3866,7 +3863,6 @@ void LLPipeline::renderDebug() } gPipeline.mDebugMeshUploadCost = mesh_cost; -#endif } for (LLCullResult::bridge_list_t::const_iterator i = sCull->beginVisibleBridge(); i != sCull->endVisibleBridge(); ++i) diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index bed4155d15..cddcfc2132 100755 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -45,7 +45,6 @@ #include "llgl.h" #include "lldrawable.h" #include "llrendertarget.h" -#include "llmodel.h" //for LL_MESH_ENaBLED #include @@ -67,9 +66,7 @@ class LLVOAvatar; class LLGLSLShader; class LLCurlRequest; -#if LL_MESH_ENABLED class LLMeshResponder; -#endif typedef enum e_avatar_skinning_method { @@ -475,9 +472,7 @@ public: S32 mDebugTextureUploadCost; S32 mDebugSculptUploadCost; -#if LL_MESH_ENABLED S32 mDebugMeshUploadCost; -#endif S32 mLightingChanges; S32 mGeometryChanges; diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index bd07c473de..6b2b5d7d7e 100755 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -2163,6 +2163,10 @@ even though the user gets a free copy. label="Cylinder" name="Cylinder" value="Cylinder" /> + Date: Wed, 22 Sep 2010 11:22:50 -0700 Subject: Commenting out unused variables to help mac build --- indra/llmath/llvolume.cpp | 2 +- indra/newview/llvovolume.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'indra/llmath') diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 1a24e0fbe9..1f15d5465c 100755 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -6206,7 +6206,7 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con { S32 new_verts = mNumVertices+1; S32 new_size = new_verts*16; - S32 old_size = mNumVertices*16; +// S32 old_size = mNumVertices*16; //positions mPositions = (LLVector4a*) realloc(mPositions, new_size); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 96dfcae292..4ef050e71f 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1356,7 +1356,7 @@ BOOL LLVOVolume::genBBoxes(BOOL force_global) BOOL rebuild = mDrawable->isState(LLDrawable::REBUILD_VOLUME | LLDrawable::REBUILD_POSITION | LLDrawable::REBUILD_RIGGED); - bool rigged = false; +// bool rigged = false; LLVolume* volume = mRiggedVolume; if (!volume) { -- cgit v1.3