diff options
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llfloatermodelpreview.cpp | 56 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.cpp | 5 | 
2 files changed, 47 insertions, 14 deletions
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 75728fdeeb..9721fc9224 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -3736,7 +3736,9 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  			U32 tri_count = 0;  			for (U32 i = 0; i < mVertexBuffer[5][mdl].size(); ++i)  			{ -				mVertexBuffer[5][mdl][i]->setBuffer(type_mask); +				LLVertexBuffer* buff = mVertexBuffer[5][mdl][i]; +				buff->setBuffer(type_mask & buff->getTypeMask()); +				  				U32 num_indices = mVertexBuffer[5][mdl][i]->getNumIndices();  				if (num_indices > 2)  				{ @@ -3858,6 +3860,8 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  			for (GLint i = 0; i < patch_count; ++i)  			{ +				type_mask = mVertexBuffer[5][base][i]->getTypeMask(); +  				LLPointer<LLVertexBuffer> buff = new LLVertexBuffer(type_mask, 0);  				if (sizes[i*2+1] > 0 && sizes[i*2] > 0) @@ -3882,8 +3886,15 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  				LLStrider<U16> index;  				buff->getVertexStrider(pos); -				buff->getNormalStrider(norm); -				buff->getTexCoord0Strider(tc); +				if (type_mask & LLVertexBuffer::MAP_NORMAL) +				{ +					buff->getNormalStrider(norm); +				} +				if (type_mask & LLVertexBuffer::MAP_TEXCOORD0) +				{ +					buff->getTexCoord0Strider(tc); +				} +  				buff->getIndexStrider(index);  				target_model->setVolumeFaceData(names[i], pos, norm, tc, index, buff->getNumVerts(), buff->getNumIndices()); @@ -4487,7 +4498,16 @@ void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights)  			bool skinned = include_skin_weights && !mdl->mSkinWeights.empty(); -			U32 mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0; +			U32 mask = LLVertexBuffer::MAP_VERTEX; +			 +			if (vf.mNormals) +			{ +				mask |= LLVertexBuffer::MAP_NORMAL; +			} +			if (vf.mTexCoords) +			{ +				mask |= LLVertexBuffer::MAP_TEXCOORD0; +			}  			if (skinned)  			{ @@ -4505,8 +4525,6 @@ void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights)  			LLStrider<LLVector4> weights_strider;  			vb->getVertexStrider(vertex_strider); -			vb->getNormalStrider(normal_strider); -			vb->getTexCoord0Strider(tc_strider);  			vb->getIndexStrider(index_strider);  			if (skinned) @@ -4515,8 +4533,18 @@ void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights)  			}  			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 (vf.mTexCoords) +			{ +				vb->getTexCoord0Strider(tc_strider); +				LLVector4a::memcpyNonAliased16((F32*) tc_strider.get(), (F32*) vf.mTexCoords, num_vertices*2*sizeof(F32)); +			} +			 +			if (vf.mNormals) +			{ +				vb->getNormalStrider(normal_strider); +				LLVector4a::memcpyNonAliased16((F32*) normal_strider.get(), (F32*) vf.mNormals, num_vertices*4*sizeof(F32)); +			}  			if (skinned)  			{ @@ -4775,6 +4803,8 @@ BOOL LLModelPreview::render()  	const F32 BRIGHTNESS = 0.9f;  	gGL.color3f(BRIGHTNESS, BRIGHTNESS, BRIGHTNESS); +	const U32 type_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0; +  	LLGLEnable normalize(GL_NORMALIZE);  	if (!mBaseModel.empty() && mVertexBuffer[5].empty()) @@ -4823,8 +4853,8 @@ BOOL LLModelPreview::render()  				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); +				 +					buffer->setBuffer(type_mask & buffer->getTypeMask());  					if (textures)  					{ @@ -4943,7 +4973,7 @@ BOOL LLModelPreview::render()  						{  							LLVertexBuffer* buffer = mVertexBuffer[LLModel::LOD_PHYSICS][model][i]; -							buffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0); +							buffer->setBuffer(type_mask & buffer->getTypeMask());  							buffer->drawRange(LLRender::TRIANGLES, 0, buffer->getNumVerts()-1, buffer->getNumIndices(), 0);  							gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); @@ -5009,7 +5039,7 @@ BOOL LLModelPreview::render()  							{  								LLVertexBuffer* buffer = mVertexBuffer[LLModel::LOD_PHYSICS][model][i]; -								buffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0); +								buffer->setBuffer(type_mask & buffer->getTypeMask());  								LLStrider<LLVector3> pos_strider;   								buffer->getVertexStrider(pos_strider, 0); @@ -5134,7 +5164,7 @@ BOOL LLModelPreview::render()  								position[j] = v;  							} -							buffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0); +							buffer->setBuffer(type_mask & buffer->getTypeMask());  							glColor4fv(instance.mMaterial[i].mDiffuseColor.mV);  							gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);  							buffer->draw(LLRender::TRIANGLES, buffer->getNumIndices(), 0); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 1b53348b43..4a9756bb88 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -1123,7 +1123,10 @@ void LLVOAvatar::initClass()  	// Process XML data  	// avatar_skeleton.xml -	llassert(!sAvatarSkeletonInfo); +	if (sAvatarSkeletonInfo) +	{ //this can happen if a login attempt failed +		delete sAvatarSkeletonInfo; +	}  	sAvatarSkeletonInfo = new LLVOAvatarSkeletonInfo;  	if (!sAvatarSkeletonInfo->parseXml(sSkeletonXMLTree.getRoot()))  	{  | 
