diff options
| -rw-r--r-- | indra/newview/llmaterialmgr.cpp | 18 | ||||
| -rw-r--r-- | indra/newview/llmeshrepository.cpp | 52 | 
2 files changed, 11 insertions, 59 deletions
diff --git a/indra/newview/llmaterialmgr.cpp b/indra/newview/llmaterialmgr.cpp index 11aa607393..6e1e6506d9 100644 --- a/indra/newview/llmaterialmgr.cpp +++ b/indra/newview/llmaterialmgr.cpp @@ -429,12 +429,10 @@ void LLMaterialMgr::onGetResponse(bool success, const LLSD& content, const LLUUI  	llassert(content.has(MATERIALS_CAP_ZIP_FIELD));  	llassert(content[MATERIALS_CAP_ZIP_FIELD].isBinary()); -	LLSD::Binary content_binary = content[MATERIALS_CAP_ZIP_FIELD].asBinary(); -	std::string content_string(reinterpret_cast<const char*>(content_binary.data()), content_binary.size()); -	std::istringstream content_stream(content_string); +	const LLSD::Binary& content_binary = content[MATERIALS_CAP_ZIP_FIELD].asBinary();  	LLSD response_data; -	U32 uzip_result = LLUZipHelper::unzip_llsd(response_data, content_stream, content_binary.size()); +	U32 uzip_result = LLUZipHelper::unzip_llsd(response_data, content_binary.data(), content_binary.size());  	if (uzip_result != LLUZipHelper::ZR_OK)  	{  		LL_WARNS("Materials") << "Cannot unzip LLSD binary content: " << uzip_result << LL_ENDL; @@ -472,12 +470,10 @@ void LLMaterialMgr::onGetAllResponse(bool success, const LLSD& content, const LL  	llassert(content.has(MATERIALS_CAP_ZIP_FIELD));  	llassert(content[MATERIALS_CAP_ZIP_FIELD].isBinary()); -	LLSD::Binary content_binary = content[MATERIALS_CAP_ZIP_FIELD].asBinary(); -	std::string content_string(reinterpret_cast<const char*>(content_binary.data()), content_binary.size()); -	std::istringstream content_stream(content_string); +	const LLSD::Binary& content_binary = content[MATERIALS_CAP_ZIP_FIELD].asBinary();  	LLSD response_data; -	U32 uzip_result = LLUZipHelper::unzip_llsd(response_data, content_stream, content_binary.size()); +	U32 uzip_result = LLUZipHelper::unzip_llsd(response_data, content_binary.data(), content_binary.size());  	if (uzip_result != LLUZipHelper::ZR_OK)  	{  		LL_WARNS("Materials") << "Cannot unzip LLSD binary content: " << uzip_result << LL_ENDL; @@ -541,12 +537,10 @@ void LLMaterialMgr::onPutResponse(bool success, const LLSD& content)  	llassert(content.has(MATERIALS_CAP_ZIP_FIELD));  	llassert(content[MATERIALS_CAP_ZIP_FIELD].isBinary()); -	LLSD::Binary content_binary = content[MATERIALS_CAP_ZIP_FIELD].asBinary(); -	std::string content_string(reinterpret_cast<const char*>(content_binary.data()), content_binary.size()); -	std::istringstream content_stream(content_string); +	const LLSD::Binary& content_binary = content[MATERIALS_CAP_ZIP_FIELD].asBinary();  	LLSD response_data; -	U32 uzip_result = LLUZipHelper::unzip_llsd(response_data, content_stream, content_binary.size()); +	U32 uzip_result = LLUZipHelper::unzip_llsd(response_data, content_binary.data(), content_binary.size());  	if (uzip_result != LLUZipHelper::ZR_OK)  	{  		LL_WARNS("Materials") << "Cannot unzip LLSD binary content: " << uzip_result << LL_ENDL; diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 4dd0543693..e1ff233354 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -1911,19 +1911,7 @@ EMeshProcessingResult LLMeshRepoThread::lodReceived(const LLVolumeParams& mesh_p  	}  	LLPointer<LLVolume> volume = new LLVolume(mesh_params, LLVolumeLODGroup::getVolumeScaleFromDetail(lod)); -	std::istringstream stream; -	try -	{ -		std::string mesh_string((char*)data, data_size); -		stream.str(mesh_string); -	} -	catch (std::bad_alloc&) -	{ -		// out of memory, we won't be able to process this mesh -		return MESH_OUT_OF_MEMORY; -	} - -	if (volume->unpackVolumeFaces(stream, data_size)) +	if (volume->unpackVolumeFaces(data, data_size))  	{  		if (volume->getNumFaces() > 0)  		{ @@ -1953,10 +1941,7 @@ bool LLMeshRepoThread::skinInfoReceived(const LLUUID& mesh_id, U8* data, S32 dat  	{          try          { -            std::string res_str((char*)data, data_size); -            std::istringstream stream(res_str); - -            U32 uzip_result = LLUZipHelper::unzip_llsd(skin, stream, data_size); +            U32 uzip_result = LLUZipHelper::unzip_llsd(skin, data, data_size);              if (uzip_result != LLUZipHelper::ZR_OK)              {                  LL_WARNS(LOG_MESH) << "Mesh skin info parse error.  Not a valid mesh asset!  ID:  " << mesh_id @@ -1994,10 +1979,7 @@ bool LLMeshRepoThread::decompositionReceived(const LLUUID& mesh_id, U8* data, S3      {          try          { -            std::string res_str((char*)data, data_size); -            std::istringstream stream(res_str); - -            U32 uzip_result = LLUZipHelper::unzip_llsd(decomp, stream, data_size); +            U32 uzip_result = LLUZipHelper::unzip_llsd(decomp, data, data_size);              if (uzip_result != LLUZipHelper::ZR_OK)              {                  LL_WARNS(LOG_MESH) << "Mesh decomposition parse error.  Not a valid mesh asset!  ID:  " << mesh_id @@ -2006,7 +1988,7 @@ bool LLMeshRepoThread::decompositionReceived(const LLUUID& mesh_id, U8* data, S3                  return false;              }          } -        catch (std::bad_alloc&) +        catch (const std::bad_alloc&)          {              LL_WARNS(LOG_MESH) << "Out of memory for mesh ID " << mesh_id << " of size: " << data_size << LL_ENDL;              return false; @@ -2043,32 +2025,8 @@ EMeshProcessingResult LLMeshRepoThread::physicsShapeReceived(const LLUUID& mesh_  		volume_params.setSculptID(mesh_id, LL_SCULPT_TYPE_MESH);  		LLPointer<LLVolume> volume = new LLVolume(volume_params,0); -        std::istringstream stream; -        try -        { -            std::string mesh_string((char*)data, data_size); -            stream.str(mesh_string); -        } -        catch (std::bad_alloc&) -        { -            // out of memory, we won't be able to process this mesh -            delete d; -            return MESH_OUT_OF_MEMORY; -        } - -		if (volume->unpackVolumeFaces(stream, data_size)) +		if (volume->unpackVolumeFaces(data, data_size))  		{ -			//load volume faces into decomposition buffer -			S32 vertex_count = 0; -			S32 index_count = 0; - -			for (S32 i = 0; i < volume->getNumVolumeFaces(); ++i) -			{ -				const LLVolumeFace& face = volume->getVolumeFace(i); -				vertex_count += face.mNumVertices; -				index_count += face.mNumIndices; -			} -  			d->mPhysicsShapeMesh.clear();  			std::vector<LLVector3>& pos = d->mPhysicsShapeMesh.mPositions;  | 
