From 7b44a8ee8de662355c8f5c8091ab25dccce494e5 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Wed, 22 Sep 2010 15:58:35 -0500 Subject: SH-110 Fix for viewer crash when checking HULL in decomposition window... converted various maps to use smart pointers for keys instead of naked pointers, properly clear maps on various operations. --- indra/newview/llfloatermodelpreview.cpp | 26 ++++++++++++++++++++++---- indra/newview/llfloatermodelpreview.h | 10 +++++----- 2 files changed, 27 insertions(+), 9 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 088c9e6546..8be56009aa 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -1989,13 +1989,13 @@ void LLModelPreview::loadModel(std::string filename, S32 lod) if (lod == 3 && !mGroup.empty()) { - for (std::map::iterator iter = mGroup.begin(); iter != mGroup.end(); ++iter) + for (std::map, U32>::iterator iter = mGroup.begin(); iter != mGroup.end(); ++iter) { glodDeleteGroup(iter->second); stop_gloderror(); } - for (std::map::iterator iter = mObject.begin(); iter != mObject.end(); ++iter) + for (std::map, U32>::iterator iter = mObject.begin(); iter != mObject.end(); ++iter) { glodDeleteObject(iter->second); stop_gloderror(); @@ -2055,6 +2055,11 @@ void LLModelPreview::loadModelCallback(S32 lod) mScene[lod] = mModelLoader->mScene; mVertexBuffer[lod].clear(); + if (lod == LLModel::LOD_PHYSICS) + { + mPhysicsMesh.clear(); + } + setPreviewLOD(lod); @@ -2338,6 +2343,11 @@ void LLModelPreview::genLODs(S32 which_lod) return; } + if (which_lod == LLModel::LOD_PHYSICS) + { //clear physics mesh map + mPhysicsMesh.clear(); + } + LLVertexBuffer::unbind(); stop_gloderror(); @@ -2365,6 +2375,14 @@ void LLModelPreview::genLODs(S32 which_lod) U32 type_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0; + if (mGroup[mBaseModel[0]] == 0) + { //clear LOD maps + mGroup.clear(); + mObject.clear(); + mPercentage.clear(); + mPatch.clear(); + } + 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; @@ -3118,7 +3136,7 @@ BOOL LLModelPreview::render() { LLMutexLock(decomp->mMutex); - std::map > >::iterator iter = + std::map, std::vector > >::iterator iter = mPhysicsMesh.find(model); if (iter != mPhysicsMesh.end()) { @@ -3406,7 +3424,7 @@ void LLFloaterModelPreview::onDecompose(void* user_data) void LLFloaterModelPreview::onModelDecompositionComplete(LLModel* model, std::vector >& physics_mesh) { if (sInstance && sInstance->mModelPreview) - { + { sInstance->mModelPreview->mPhysicsMesh[model] = physics_mesh; sInstance->mModelPreview->mDirty = true; diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h index 148687aecd..d8f06295ac 100755 --- a/indra/newview/llfloatermodelpreview.h +++ b/indra/newview/llfloatermodelpreview.h @@ -168,12 +168,12 @@ class LLModelPreview : public LLViewerDynamicTexture, public LLMutex LLModelLoader::model_list mModel[LLModel::NUM_LODS]; LLModelLoader::model_list mBaseModel; - std::map mGroup; - std::map mObject; - std::map > mPatch; + std::map, U32> mGroup; + std::map, U32> mObject; + std::map, std::vector > mPatch; + std::map, F32> mPercentage; - std::map mPercentage; - std::map > > mPhysicsMesh; + std::map, std::vector > > mPhysicsMesh; LLMeshUploadThread::instance_list mUploadData; std::set > mTextureSet; -- cgit v1.2.3 From c395be02b1e8ca6a5d2fed241563bf2fbbc4f3ef Mon Sep 17 00:00:00 2001 From: "Nyx (Neal Orman)" Date: Wed, 22 Sep 2010 18:10:38 -0400 Subject: SH-188 crash in llvoavatar.cpp We were using a NULL pointer after checking it was null due to a logic error. Re-shuffled the logic to ensure we would only dereference pointer after it was known to be non-null Code reviewed by Seraph --- indra/newview/llvoavatar.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'indra') diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index a6b3c436f4..54400c184b 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -6189,9 +6189,9 @@ void LLVOAvatar::updateMeshTextures() // use the last-known good baked texture until it finish the first // render of the new layerset. - const BOOL layerset_invalid = !mBakedTextureDatas[i].mTexLayerSet - || !mBakedTextureDatas[i].mTexLayerSet->getComposite()->isInitialized() - || !mBakedTextureDatas[i].mTexLayerSet->isLocalTextureDataAvailable(); + const BOOL layerset_invalid = mBakedTextureDatas[i].mTexLayerSet + && ( !mBakedTextureDatas[i].mTexLayerSet->getComposite()->isInitialized() + || !mBakedTextureDatas[i].mTexLayerSet->isLocalTextureDataAvailable() ); use_lkg_baked_layer[i] = (!is_layer_baked[i] && (mBakedTextureDatas[i].mLastTextureIndex != IMG_DEFAULT_AVATAR) -- cgit v1.2.3 From bc4dcef7af8f905df81ca6b7ba21cc9e34a506e9 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Wed, 22 Sep 2010 17:33:17 -0500 Subject: SH-93 Disable mirror/invert check boxes when sculpt type is set to mesh. Also fixed a crash when switching sculpt type from mesh to sphere. --- indra/newview/llpanelobject.cpp | 15 +++++++++++++-- indra/newview/llvovolume.cpp | 3 +++ 2 files changed, 16 insertions(+), 2 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index 6b687846ae..943637ea3e 100755 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -1179,13 +1179,13 @@ void LLPanelObject::getState( ) if (mCtrlSculptMirror) { mCtrlSculptMirror->set(sculpt_mirror); - mCtrlSculptMirror->setEnabled(editable); + mCtrlSculptMirror->setEnabled(editable && (sculpt_stitching != LL_SCULPT_TYPE_MESH)); } if (mCtrlSculptInvert) { mCtrlSculptInvert->set(sculpt_invert); - mCtrlSculptInvert->setEnabled(editable); + mCtrlSculptInvert->setEnabled(editable && (sculpt_stitching != LL_SCULPT_TYPE_MESH)); } if (mLabelSculptType) @@ -1856,6 +1856,17 @@ void LLPanelObject::sendSculpt() if (mCtrlSculptType) sculpt_type |= mCtrlSculptType->getCurrentIndex(); + bool enabled = sculpt_type != LL_SCULPT_TYPE_MESH; + + if (mCtrlSculptMirror) + { + mCtrlSculptMirror->setEnabled(enabled ? TRUE : FALSE); + } + if (mCtrlSculptInvert) + { + mCtrlSculptInvert->setEnabled(enabled ? TRUE : FALSE); + } + if ((mCtrlSculptMirror) && (mCtrlSculptMirror->get())) sculpt_type |= LL_SCULPT_FLAG_MIRROR; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 4ef050e71f..d96b6eccb1 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1354,6 +1354,9 @@ BOOL LLVOVolume::genBBoxes(BOOL force_global) LLVector4a min,max; + min.clear(); + max.clear(); + BOOL rebuild = mDrawable->isState(LLDrawable::REBUILD_VOLUME | LLDrawable::REBUILD_POSITION | LLDrawable::REBUILD_RIGGED); // bool rigged = false; -- cgit v1.2.3 From ae3eed68d1452111c1e8664c8e940e850ebfaea2 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Wed, 22 Sep 2010 18:09:21 -0500 Subject: SH-108/SH-88 Add better permissions block and physics_shape_type to uploaded mesh assets. Reviewed by Falcon. --- indra/newview/llmeshrepository.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'indra') diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index ecf75415ab..8b14af009c 100755 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -1257,6 +1257,12 @@ void LLMeshUploadThread::run() // now upload the object asset std::string url = mUploadObjectAssetCapability; + + if (object_asset["objects"][0].has("permissions")) + { //copy permissions from first available object to be used for coalesced object + object_asset["permissions"] = object_asset["objects"][0]["permissions"]; + } + LLHTTPClient::post(url, object_asset, new LLHTTPClient::Responder()); mFinished = true; @@ -2400,6 +2406,8 @@ LLSD LLMeshUploadThread::createObject(LLModelInstance& instance) object_params["permissions"] = ll_create_sd_from_permissions(perm); + object_params["physics_shape_type"] = (U8)(LLViewerObject::PHYSICS_SHAPE_CONVEX_HULL); + return object_params; } -- cgit v1.2.3 From bc488500962f75ac6d5dcdac4db4f2d7f293bf89 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 23 Sep 2010 01:18:44 -0500 Subject: SH-176 Fix for physics triangle limit limiting high LOD triangle limit. --- indra/newview/llfloatermodelpreview.cpp | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'indra') diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 8be56009aa..1796f76f03 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -2917,16 +2917,6 @@ void LLModelPreview::genBuffers(S32 lod) } } - - if (lod == 4) - { - for (U32 i = 0; i < 4; i++) - { - LLSpinCtrl* lim = mFMP->getChild(limit_name[i], TRUE); - - lim->setMaxValue(tri_count); - } - } } void LLModelPreview::update() -- cgit v1.2.3 From 245842a765c8416fc0e0d5c38d0cb731ed7d5cbf Mon Sep 17 00:00:00 2001 From: Nyx Linden Date: Thu, 23 Sep 2010 11:25:40 -0400 Subject: SH-64 update GLOD on mac updated GLOD again to be searched for in the correct place and updated some cmake configuration to ensure that it is being referred to in the correct places. This appears to finally solve our mac startup crash. --- indra/cmake/Copy3rdPartyLibs.cmake | 3 ++- indra/newview/viewer_manifest.py | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index 9900a8fb45..76cb0553f3 100755 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -169,7 +169,8 @@ elseif(DARWIN) libaprutil-1.dylib libexpat.0.5.0.dylib libexpat.dylib - libllqtwebkit.dylib + libGLOD.dylib + libllqtwebkit.dylib libndofdev.dylib libexception_handler.dylib ) diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 8296c28e80..d6b865c249 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -653,6 +653,7 @@ class DarwinManifest(ViewerManifest): "libaprutil-1.0.3.8.dylib", "libexpat.0.5.0.dylib", "libexception_handler.dylib", + "libGLOD.dylib", ): self.path(os.path.join(libdir, libfile), libfile) @@ -676,6 +677,7 @@ class DarwinManifest(ViewerManifest): "libaprutil-1.0.3.8.dylib", "libexpat.0.5.0.dylib", "libexception_handler.dylib", + "libGLOD.dylib", ): target_lib = os.path.join('../../..', libfile) self.run_command("ln -sf %(target)r %(link)r" % -- cgit v1.2.3