aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs')
-rw-r--r--OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs17
1 files changed, 5 insertions, 12 deletions
diff --git a/OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs b/OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs
index 6950f2d..8449596 100644
--- a/OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs
+++ b/OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs
@@ -425,31 +425,24 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
425 return false; // no mesh data in asset 425 return false; // no mesh data in asset
426 426
427 OSD decodedMeshOsd = new OSD(); 427 OSD decodedMeshOsd = new OSD();
428 byte[] meshBytes = new byte[physSize];
429 System.Buffer.BlockCopy(primShape.SculptData, physOffset, meshBytes, 0, physSize);
430
431 try 428 try
432 { 429 {
433 using (MemoryStream inMs = new MemoryStream(meshBytes)) 430 using (MemoryStream outMs = new MemoryStream(4 * physSize))
434 { 431 {
435 using (MemoryStream outMs = new MemoryStream()) 432 using (MemoryStream inMs = new MemoryStream(primShape.SculptData, physOffset, physSize))
436 { 433 {
437 using (DeflateStream decompressionStream = new DeflateStream(inMs, CompressionMode.Decompress)) 434 using (DeflateStream decompressionStream = new DeflateStream(inMs, CompressionMode.Decompress))
438 { 435 {
439 byte[] readBuffer = new byte[2048]; 436 byte[] readBuffer = new byte[8192];
440 inMs.Read(readBuffer, 0, 2); // skip first 2 bytes in header 437 inMs.Read(readBuffer, 0, 2); // skip first 2 bytes in header
441 int readLen = 0; 438 int readLen = 0;
442 439
443 while ((readLen = decompressionStream.Read(readBuffer, 0, readBuffer.Length)) > 0) 440 while ((readLen = decompressionStream.Read(readBuffer, 0, readBuffer.Length)) > 0)
444 outMs.Write(readBuffer, 0, readLen); 441 outMs.Write(readBuffer, 0, readLen);
445
446 outMs.Seek(0, SeekOrigin.Begin);
447
448 byte[] decompressedBuf = outMs.GetBuffer();
449
450 decodedMeshOsd = OSDParser.DeserializeLLSDBinary(decompressedBuf);
451 } 442 }
452 } 443 }
444 outMs.Seek(0, SeekOrigin.Begin);
445 decodedMeshOsd = OSDParser.DeserializeLLSDBinary(outMs);
453 } 446 }
454 } 447 }
455 catch (Exception e) 448 catch (Exception e)