diff options
author | andreykproductengine <akleshchev@productengine.com> | 2015-04-14 18:53:17 +0300 |
---|---|---|
committer | andreykproductengine <akleshchev@productengine.com> | 2015-04-14 18:53:17 +0300 |
commit | 1dd7e76908277f0ad4b24a8e320aa2b9f9321048 (patch) | |
tree | c9ca7fd71fdf533c7f500828e1e708dc5d7af5ac /indra/llmath | |
parent | 3e0483df17181269c4cada7ad5585201f442598c (diff) | |
parent | a647b8f1cbab13f07ea889c80df28414bc906129 (diff) |
Merge with viewer-release and become 3.7.28
Diffstat (limited to 'indra/llmath')
-rwxr-xr-x | indra/llmath/llsphere.cpp | 6 | ||||
-rwxr-xr-x | indra/llmath/llvolume.cpp | 18 | ||||
-rwxr-xr-x | indra/llmath/llvolume.h | 3 |
3 files changed, 23 insertions, 4 deletions
diff --git a/indra/llmath/llsphere.cpp b/indra/llmath/llsphere.cpp index 740047b93a..a8d6200488 100755 --- a/indra/llmath/llsphere.cpp +++ b/indra/llmath/llsphere.cpp @@ -248,8 +248,8 @@ LLSphere LLSphere::getBoundingSphere(const std::vector<LLSphere>& sphere_list) // compute the starting step-size F32 minimum_radius = 0.5f * llmin(diagonal.mV[VX], llmin(diagonal.mV[VY], diagonal.mV[VZ])); F32 step_length = bounding_radius - minimum_radius; - S32 step_count = 0; - S32 max_step_count = 12; + //S32 step_count = 0; + //S32 max_step_count = 12; F32 half_milimeter = 0.0005f; // wander the center around in search of tighter solutions @@ -258,7 +258,7 @@ LLSphere LLSphere::getBoundingSphere(const std::vector<LLSphere>& sphere_list) S32 last_dz = 2; while (step_length > half_milimeter - && step_count < max_step_count) + /*&& step_count < max_step_count*/) { // the algorithm for testing the maximum radius could be expensive enough // that it makes sense to NOT duplicate testing when possible, so we keep diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index d9a68cb577..adf6e790d3 100755 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2685,6 +2685,17 @@ void LLVolume::setMeshAssetLoaded(BOOL loaded) mIsMeshAssetLoaded = loaded; } +void LLVolume::copyFacesTo(std::vector<LLVolumeFace> &faces) const +{ + faces = mVolumeFaces; +} + +void LLVolume::copyFacesFrom(const std::vector<LLVolumeFace> &faces) +{ + mVolumeFaces = faces; + mSculptLevel = 0; +} + void LLVolume::copyVolumeFaces(const LLVolume* volume) { mVolumeFaces = volume->mVolumeFaces; @@ -5970,7 +5981,10 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build) } else { //degenerate, make up a value - normal.set(0,0,1); + if(normal.getF32ptr()[2] >= 0) + normal.set(0.f,0.f,1.f); + else + normal.set(0.f,0.f,-1.f); } llassert(llfinite(normal.getF32ptr()[0])); @@ -6284,6 +6298,8 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) num_vertices = mNumS*mNumT; num_indices = (mNumS-1)*(mNumT-1)*6; + partial_build = (num_vertices > mNumVertices || num_indices > mNumIndices) ? FALSE : partial_build; + if (!partial_build) { resizeVertices(num_vertices); diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 23c7f5d7af..625f7cff02 100755 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -994,6 +994,7 @@ public: void resizePath(S32 length); const LLAlignedArray<LLVector4a,64>& getMesh() const { return mMesh; } const LLVector4a& getMeshPt(const U32 i) const { return mMesh[i]; } + void setDirty() { mPathp->setDirty(); mProfilep->setDirty(); } @@ -1050,6 +1051,8 @@ public: void sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, S32 sculpt_level); void copyVolumeFaces(const LLVolume* volume); + void copyFacesTo(std::vector<LLVolumeFace> &faces) const; + void copyFacesFrom(const std::vector<LLVolumeFace> &faces); void cacheOptimize(); private: |