summaryrefslogtreecommitdiff
path: root/indra/llmath
diff options
context:
space:
mode:
authorDon Kjer <don@lindenlab.com>2011-01-28 18:05:10 -0800
committerDon Kjer <don@lindenlab.com>2011-01-28 18:05:10 -0800
commitf2a1f0df3a3c8ce18179ea06992f5e5d07f2f773 (patch)
treecd571814ec2e9d11ef05f8107e068ca6702df2a6 /indra/llmath
parent4a083db6c52d2cc5c1cd1f908270f5952ace6505 (diff)
parentb4b3f78c455a614d7738c29cdc6383e857d6028d (diff)
Merge from viewer-development
Diffstat (limited to 'indra/llmath')
-rw-r--r--indra/llmath/llvolume.cpp41
-rw-r--r--indra/llmath/llvolume.h1
2 files changed, 39 insertions, 3 deletions
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index 14e1ca8d43..71b92962fb 100644
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -4406,19 +4406,54 @@ std::ostream& operator<<(std::ostream &s, const LLVolume *volumep)
BOOL LLVolumeFace::create(LLVolume* volume, BOOL partial_build)
{
+ 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) ;
+
+ U32 end = mVertices.size() ;
+ for(U32 i = 0 ; i < end ; i++)
+ {
+ if(mTexCoordExtents[0].mV[0] > mVertices[i].mTexCoord.mV[0])
+ {
+ mTexCoordExtents[0].mV[0] = mVertices[i].mTexCoord.mV[0] ;
+ }
+ if(mTexCoordExtents[1].mV[0] < mVertices[i].mTexCoord.mV[0])
+ {
+ mTexCoordExtents[1].mV[0] = mVertices[i].mTexCoord.mV[0] ;
+ }
+
+ if(mTexCoordExtents[0].mV[1] > mVertices[i].mTexCoord.mV[1])
+ {
+ mTexCoordExtents[0].mV[1] = mVertices[i].mTexCoord.mV[1] ;
+ }
+ if(mTexCoordExtents[1].mV[1] < mVertices[i].mTexCoord.mV[1])
+ {
+ mTexCoordExtents[1].mV[1] = mVertices[i].mTexCoord.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 LerpPlanarVertex(LLVolumeFace::VertexData& v0,
diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h
index d48a79ee46..28b9895ff3 100644
--- a/indra/llmath/llvolume.h
+++ b/indra/llmath/llvolume.h
@@ -831,6 +831,7 @@ public:
S32 mNumT;
LLVector3 mExtents[2]; //minimum and maximum point of face
+ LLVector2 mTexCoordExtents[2]; //minimum and maximum of texture coordinates of the face.
std::vector<VertexData> mVertices;
std::vector<U16> mIndices;