summaryrefslogtreecommitdiff
path: root/indra/newview/llvovolume.cpp
diff options
context:
space:
mode:
authorMonroe Linden <monroe@lindenlab.com>2009-11-09 12:14:29 -0800
committerMonroe Linden <monroe@lindenlab.com>2009-11-09 12:14:29 -0800
commite477a74feb21c4ddcb077c7256457b44e69fba24 (patch)
treec750db63e405d087aad1bcbdc0e8076096fa1f9c /indra/newview/llvovolume.cpp
parent3b98043d227db07a2396b1fba056e911abd04621 (diff)
Better fix for DEV-42153.
Diffstat (limited to 'indra/newview/llvovolume.cpp')
-rw-r--r--indra/newview/llvovolume.cpp39
1 files changed, 10 insertions, 29 deletions
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 021fc74648..09769d5e80 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -1640,38 +1640,19 @@ bool LLVOVolume::hasMedia() const
LLVector3 LLVOVolume::getApproximateFaceNormal(U8 face_id)
{
- LLVector3 result = LLVector3::zero;
-
- LLFace* facep = mDrawable->getFace(face_id);
- if(facep)
- {
- LLStrider<LLVector3> verticesp;
- LLStrider<LLVector3> normalsp;
- LLStrider<LLVector2> texCoordsp;
- LLStrider<U16> indicesp;
- S32 index_offset;
- index_offset = facep->getGeometry(verticesp,normalsp,texCoordsp, indicesp);
-
- if(index_offset != -1 && (normalsp.get() != NULL))
+ LLVolume* volume = getVolume();
+ LLVector3 result;
+
+ if (volume && face_id < volume->getNumVolumeFaces())
+ {
+ const LLVolumeFace& face = volume->getVolumeFace(face_id);
+ for (S32 i = 0; i < face.mVertices.size(); ++i)
{
- U16 count = facep->getGeomCount();
- U16 i;
-
- for(i=0; i < count; i++)
- {
- LLVector3 normal = *normalsp++;
-// llinfos << "adding " << normal << llendl;
- result += normal;
- }
+ result += face.mVertices[i].mNormal;
}
- }
-
- if(!result.isNull())
- {
-// llinfos << "before conversion: " << result << llendl;
+
result = volumeDirectionToAgent(result);
- result.normalize();
-// llinfos << "after conversion: " << result << llendl;
+ result.normVec();
}
return result;