diff options
| author | Xiaohong Bao <bao@lindenlab.com> | 2011-02-01 12:43:12 -0700 | 
|---|---|---|
| committer | Xiaohong Bao <bao@lindenlab.com> | 2011-02-01 12:43:12 -0700 | 
| commit | d08372f71d575ebc3050806660655e1c7c7cff84 (patch) | |
| tree | a3ccce02052a725b94fa47452ab01d1ff80a1cd7 | |
| parent | c7d0fab7b9279c5f6a57ee3de103b8fb142fb747 (diff) | |
merge fix for SH-659 from v-d to mesh: small textures not loaded
| -rw-r--r-- | indra/llmath/llvolume.cpp | 40 | ||||
| -rw-r--r-- | indra/llmath/llvolume.h | 4 | 
2 files changed, 39 insertions, 5 deletions
| diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 617a8b4ca3..2f662b757b 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -5393,19 +5393,53 @@ BOOL LLVolumeFace::create(LLVolume* volume, BOOL partial_build)  	delete mOctree;
  	mOctree = NULL;
 +	BOOL ret = FALSE ;
  	if (mTypeMask & CAP_MASK)
  	{
 -		return createCap(volume, partial_build);
 +		ret = createCap(volume, partial_build);
  	}
  	else if ((mTypeMask & END_MASK) || (mTypeMask & SIDE_MASK))
  	{
 -		return createSide(volume, partial_build);
 +		ret = createSide(volume, partial_build);
  	}
  	else
  	{
  		llerrs << "Unknown/uninitialized face type!" << llendl;
 -		return FALSE;
  	}
 +
 +	//update the range of the texture coordinates
 +	if(ret)
 +	{
 +		mTexCoordExtents[0].setVec(1.f, 1.f) ;
 +		mTexCoordExtents[1].setVec(0.f, 0.f) ;
 +
 +		for(U32 i = 0 ; i < mNumVertices ; i++)
 +		{
 +			if(mTexCoordExtents[0].mV[0] > mTexCoords[i].mV[0])
 +			{
 +				mTexCoordExtents[0].mV[0] = mTexCoords[i].mV[0] ;
 +			}
 +			if(mTexCoordExtents[1].mV[0] < mTexCoords[i].mV[0])
 +			{
 +				mTexCoordExtents[1].mV[0] = mTexCoords[i].mV[0] ;
 +			}
 +
 +			if(mTexCoordExtents[0].mV[1] > mTexCoords[i].mV[1])
 +			{
 +				mTexCoordExtents[0].mV[1] = mTexCoords[i].mV[1] ;
 +			}
 +			if(mTexCoordExtents[1].mV[1] < mTexCoords[i].mV[1])
 +			{
 +				mTexCoordExtents[1].mV[1] = mTexCoords[i].mV[1] ;
 +			}			
 +		}
 +		mTexCoordExtents[0].mV[0] = llmax(0.f, mTexCoordExtents[0].mV[0]) ;
 +		mTexCoordExtents[0].mV[1] = llmax(0.f, mTexCoordExtents[0].mV[1]) ;
 +		mTexCoordExtents[1].mV[0] = llmin(1.f, mTexCoordExtents[1].mV[0]) ;
 +		mTexCoordExtents[1].mV[1] = llmin(1.f, mTexCoordExtents[1].mV[1]) ;
 +	}
 +
 +	return ret ;
  }
  void LLVolumeFace::getVertexData(U16 index, LLVolumeFace::VertexData& cv)
 diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index eceaced9e2..5bd65c2bf2 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -901,7 +901,7 @@ public:  	LLVector4a* mExtents; //minimum and maximum point of face  	LLVector4a* mCenter; -	LLVector2 mTexCoordExtents[2]; //minimum and maximum of texture coordinates of the face. +	LLVector2   mTexCoordExtents[2]; //minimum and maximum of texture coordinates of the face.  	S32 mNumVertices;  	S32 mNumIndices; @@ -909,7 +909,7 @@ public:  	LLVector4a* mPositions;  	LLVector4a* mNormals;  	LLVector4a* mBinormals; -	LLVector2* mTexCoords; +	LLVector2*  mTexCoords;  	U16* mIndices;  	std::vector<S32>	mEdge; | 
