diff options
| author | ruslantproductengine <ruslantproductengine@lindenlab.com> | 2015-03-26 18:05:47 +0200 | 
|---|---|---|
| committer | ruslantproductengine <ruslantproductengine@lindenlab.com> | 2015-03-26 18:05:47 +0200 | 
| commit | 802302a31c06f2ca98875d73ff424ae3d9df195f (patch) | |
| tree | fabb6a166a2d52dfed852108c948d7969150c36b | |
| parent | 321a054a7a7ec5e2538cc82d4cf850078ea5640c (diff) | |
MAINT-3818 FIXED Certain dae files that used to display skin weights successfully now crash when ticking skin weights in model preview on ALL viewers
| -rwxr-xr-x | indra/llprimitive/llmodel.cpp | 16 | ||||
| -rwxr-xr-x | indra/newview/llfloatermodelpreview.cpp | 7 | 
2 files changed, 20 insertions, 3 deletions
diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index e0294cfd6a..e18004a49e 100755 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -316,6 +316,14 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa  		if (indices.size()%3 == 0 && verts.size() >= 65532)  		{ +			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);  			LLVolumeFace& new_face = *face_list.rbegin(); @@ -587,6 +595,14 @@ LLModel::EModelStatus load_face_from_dom_polylist(std::vector<LLVolumeFace>& fac  			if (indices.size()%3 == 0 && indices.size() >= 65532)  			{ +				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);  				LLVolumeFace& new_face = *face_list.rbegin(); diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index e0a998c369..3f62d94dae 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -4860,7 +4860,7 @@ void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights)  		LLModel* base_mdl = *base_iter;  		base_iter++; -		for (S32 i = 0; i < mdl->getNumVolumeFaces(); ++i) +		for (S32 i = 0, e = mdl->getNumVolumeFaces(); i < e; ++i)  		{  			const LLVolumeFace &vf = mdl->getVolumeFace(i);  			U32 num_vertices = vf.mNumVertices; @@ -5292,7 +5292,7 @@ BOOL LLModelPreview::render()  				gGL.multMatrix((GLfloat*) mat.mMatrix); -				for (U32 i = 0; i < mVertexBuffer[mPreviewLOD][model].size(); ++i) +				for (U32 i = 0, e = mVertexBuffer[mPreviewLOD][model].size(); i < e; ++i)  				{  					LLVertexBuffer* buffer = mVertexBuffer[mPreviewLOD][model][i]; @@ -5567,7 +5567,7 @@ BOOL LLModelPreview::render()  					if (!model->mSkinWeights.empty())  					{ -						for (U32 i = 0; i < mVertexBuffer[mPreviewLOD][model].size(); ++i) +						for (U32 i = 0, e = mVertexBuffer[mPreviewLOD][model].size(); i < e; ++i)  						{  							LLVertexBuffer* buffer = mVertexBuffer[mPreviewLOD][model][i]; @@ -5636,6 +5636,7 @@ BOOL LLModelPreview::render()  								position[j] = v;  							} +							llassert(model->mMaterialList.size() > i);  							const std::string& binding = instance.mModel->mMaterialList[i];  							const LLImportMaterial& material = instance.mMaterial[binding];  | 
