aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs28
-rw-r--r--OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/Meshmerizer.cs16
-rw-r--r--OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs17
3 files changed, 19 insertions, 42 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs
index adc8298..cf5f0ef 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs
@@ -563,13 +563,11 @@ namespace OpenSim.Region.ClientStack.Linden
563 nsides = 0; 563 nsides = 0;
564 564
565 OSD decodedMeshOsd = new OSD(); 565 OSD decodedMeshOsd = new OSD();
566 byte[] meshBytes = new byte[size];
567 System.Buffer.BlockCopy(data, offset, meshBytes, 0, size);
568 try 566 try
569 { 567 {
570 using (MemoryStream inMs = new MemoryStream(meshBytes)) 568 using (MemoryStream outMs = new MemoryStream())
571 { 569 {
572 using (MemoryStream outMs = new MemoryStream()) 570 using (MemoryStream inMs = new MemoryStream(data, offset, size))
573 { 571 {
574 using (DeflateStream decompressionStream = new DeflateStream(inMs, CompressionMode.Decompress)) 572 using (DeflateStream decompressionStream = new DeflateStream(inMs, CompressionMode.Decompress))
575 { 573 {
@@ -579,13 +577,10 @@ namespace OpenSim.Region.ClientStack.Linden
579 577
580 while ((readLen = decompressionStream.Read(readBuffer, 0, readBuffer.Length)) > 0) 578 while ((readLen = decompressionStream.Read(readBuffer, 0, readBuffer.Length)) > 0)
581 outMs.Write(readBuffer, 0, readLen); 579 outMs.Write(readBuffer, 0, readLen);
582
583 outMs.Seek(0, SeekOrigin.Begin);
584
585 byte[] decompressedBuf = outMs.GetBuffer();
586 decodedMeshOsd = OSDParser.DeserializeLLSDBinary(decompressedBuf);
587 } 580 }
588 } 581 }
582 outMs.Seek(0, SeekOrigin.Begin);
583 decodedMeshOsd = OSDParser.DeserializeLLSDBinary(outMs);
589 } 584 }
590 } 585 }
591 catch 586 catch
@@ -630,29 +625,24 @@ namespace OpenSim.Region.ClientStack.Linden
630 nhulls = 1; 625 nhulls = 1;
631 626
632 OSD decodedMeshOsd = new OSD(); 627 OSD decodedMeshOsd = new OSD();
633 byte[] meshBytes = new byte[size];
634 System.Buffer.BlockCopy(data, offset, meshBytes, 0, size);
635 try 628 try
636 { 629 {
637 using (MemoryStream inMs = new MemoryStream(meshBytes)) 630 using (MemoryStream outMs = new MemoryStream(4 * size))
638 { 631 {
639 using (MemoryStream outMs = new MemoryStream()) 632 using (MemoryStream inMs = new MemoryStream(data, offset, size))
640 { 633 {
641 using (DeflateStream decompressionStream = new DeflateStream(inMs, CompressionMode.Decompress)) 634 using (DeflateStream decompressionStream = new DeflateStream(inMs, CompressionMode.Decompress))
642 { 635 {
643 byte[] readBuffer = new byte[2048]; 636 byte[] readBuffer = new byte[8192];
644 inMs.Read(readBuffer, 0, 2); // skip first 2 bytes in header 637 inMs.Read(readBuffer, 0, 2); // skip first 2 bytes in header
645 int readLen = 0; 638 int readLen = 0;
646 639
647 while ((readLen = decompressionStream.Read(readBuffer, 0, readBuffer.Length)) > 0) 640 while ((readLen = decompressionStream.Read(readBuffer, 0, readBuffer.Length)) > 0)
648 outMs.Write(readBuffer, 0, readLen); 641 outMs.Write(readBuffer, 0, readLen);
649
650 outMs.Seek(0, SeekOrigin.Begin);
651
652 byte[] decompressedBuf = outMs.GetBuffer();
653 decodedMeshOsd = OSDParser.DeserializeLLSDBinary(decompressedBuf);
654 } 642 }
655 } 643 }
644 outMs.Seek(0, SeekOrigin.Begin);
645 decodedMeshOsd = OSDParser.DeserializeLLSDBinary(outMs);
656 } 646 }
657 } 647 }
658 catch 648 catch
diff --git a/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/Meshmerizer.cs b/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/Meshmerizer.cs
index 0d4b6b9..de39d0e 100644
--- a/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/Meshmerizer.cs
+++ b/OpenSim/Region/PhysicsModules/Meshing/Meshmerizer/Meshmerizer.cs
@@ -597,28 +597,22 @@ namespace OpenSim.Region.PhysicsModule.Meshing
597 { 597 {
598 OSD decodedOsd = null; 598 OSD decodedOsd = null;
599 599
600 using (MemoryStream inMs = new MemoryStream(meshBytes)) 600 using (MemoryStream outMs = new MemoryStream())
601 { 601 {
602 using (MemoryStream outMs = new MemoryStream()) 602 using (MemoryStream inMs = new MemoryStream(meshBytes))
603 { 603 {
604 using (DeflateStream decompressionStream = new DeflateStream(inMs, CompressionMode.Decompress)) 604 using (DeflateStream decompressionStream = new DeflateStream(inMs, CompressionMode.Decompress))
605 { 605 {
606 byte[] readBuffer = new byte[2048]; 606 byte[] readBuffer = new byte[8192];
607 inMs.Read(readBuffer, 0, 2); // skip first 2 bytes in header 607 inMs.Read(readBuffer, 0, 2); // skip first 2 bytes in header
608 int readLen = 0; 608 int readLen = 0;
609 609
610 while ((readLen = decompressionStream.Read(readBuffer, 0, readBuffer.Length)) > 0) 610 while ((readLen = decompressionStream.Read(readBuffer, 0, readBuffer.Length)) > 0)
611 outMs.Write(readBuffer, 0, readLen); 611 outMs.Write(readBuffer, 0, readLen);
612
613 outMs.Flush();
614
615 outMs.Seek(0, SeekOrigin.Begin);
616
617 byte[] decompressedBuf = outMs.GetBuffer();
618
619 decodedOsd = OSDParser.DeserializeLLSDBinary(decompressedBuf);
620 } 612 }
621 } 613 }
614 outMs.Seek(0, SeekOrigin.Begin);
615 decodedOsd = OSDParser.DeserializeLLSDBinary(outMs);
622 } 616 }
623 return decodedOsd; 617 return decodedOsd;
624 } 618 }
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)