diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 553b26f34764543f29a1726539d57c179caa4518..b98ce39da85e2a784d175138a7059c64eb2edda8 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2374,7 +2374,25 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) LL_DEBUGS("MeshStreaming") << "Failed to unzip LLSD blob for LoD with code " << uzip_result << " , will probably fetch from sim again." << LL_ENDL; return false; } - + return unpackVolumeFacesInternal(mdl); +} + +bool LLVolume::unpackVolumeFaces(U8* in_data, S32 size) +{ + //input stream is now pointing at a zlib compressed block of LLSD + //decompress block + LLSD mdl; + U32 uzip_result = LLUZipHelper::unzip_llsd(mdl, in_data, size); + if (uzip_result != LLUZipHelper::ZR_OK) + { + LL_DEBUGS("MeshStreaming") << "Failed to unzip LLSD blob for LoD with code " << uzip_result << " , will probably fetch from sim again." << LL_ENDL; + return false; + } + return unpackVolumeFacesInternal(mdl); +} + +bool LLVolume::unpackVolumeFacesInternal(const LLSD& mdl) +{ { U32 face_count = mdl.size(); diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index a927e65bbe3363d37c094d4473e4e263eb97df30..0dcfa7844d91d8caecf3488d497b5396dc0bae8a 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -1086,6 +1086,11 @@ class LLVolume : public LLRefCount void createVolumeFaces(); public: bool unpackVolumeFaces(std::istream& is, S32 size); + bool unpackVolumeFaces(U8* in_data, S32 size); +private: + bool unpackVolumeFacesInternal(const LLSD& mdl); + +public: void setMeshAssetLoaded(BOOL loaded); BOOL isMeshAssetLoaded();