summaryrefslogtreecommitdiff
path: root/indra/newview/llvovolume.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llvovolume.cpp')
-rw-r--r--indra/newview/llvovolume.cpp56
1 files changed, 27 insertions, 29 deletions
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 021fc74648..2def905bbb 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -108,6 +108,12 @@ public:
if (te->getMediaData() != NULL)
{
result = te->getMediaData()->asLLSD();
+ // XXX HACK: workaround bug in asLLSD() where whitelist is not set properly
+ // See DEV-41949
+ if (!result.has(LLMediaEntry::WHITELIST_KEY))
+ {
+ result[LLMediaEntry::WHITELIST_KEY] = LLSD::emptyArray();
+ }
}
}
return result;
@@ -1640,38 +1646,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 < (S32)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;
@@ -1682,6 +1669,13 @@ void LLVOVolume::requestMediaDataUpdate()
sObjectMediaClient->fetchMedia(new LLMediaDataClientObjectImpl(this));
}
+bool LLVOVolume::isMediaDataBeingFetched() const
+{
+ // I know what I'm doing by const_casting this away: this is just
+ // a wrapper class that is only going to do a lookup.
+ return sObjectMediaClient->isInQueue(new LLMediaDataClientObjectImpl(const_cast<LLVOVolume*>(this)));
+}
+
void LLVOVolume::cleanUpMediaImpls()
{
// Iterate through our TEs and remove any Impls that are no longer used
@@ -1752,6 +1746,10 @@ void LLVOVolume::syncMediaData(S32 texture_index, const LLSD &media_data, bool m
addMediaImpl(media_impl, texture_index) ;
}
+ else
+ {
+ removeMediaImpl(texture_index);
+ }
//llinfos << "AFTER: texture_index = " << texture_index
// << " hasMedia = " << te->hasMedia() << " : "