From f1d84b786650e528198a02568f7c8650ea29df97 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 24 Jun 2025 16:59:23 +0100 Subject: [PATCH] use the changes on csj2k decoder on war3d --- .../World/Warp3DMap/TerrainSplat.cs | 4 +++- .../World/Warp3DMap/Warp3DImageModule.cs | 23 +++++++++++-------- .../PhysicsModules/ubOdeMeshing/PrimMesher.cs | 14 ++++++----- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/Warp3DMap/TerrainSplat.cs b/OpenSim/Region/CoreModules/World/Warp3DMap/TerrainSplat.cs index 2154f1dc82..ae1f690d09 100644 --- a/OpenSim/Region/CoreModules/World/Warp3DMap/TerrainSplat.cs +++ b/OpenSim/Region/CoreModules/World/Warp3DMap/TerrainSplat.cs @@ -35,6 +35,7 @@ using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Framework.Interfaces; using OpenSim.Services.Interfaces; +using CSJ2K; namespace OpenSim.Region.CoreModules.World.Warp3DMap { @@ -144,7 +145,8 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap { try { - detailTexture[i] = (Bitmap)decoder.DecodeToImage(asset.Data); + detailTexture[i] = (Bitmap)J2kImage.FromBytes(asset.Data, null, false, 8); + //detailTexture[i] = (Bitmap)decoder.DecodeToImage(asset.Data); } catch(Exception ex) { diff --git a/OpenSim/Region/CoreModules/World/Warp3DMap/Warp3DImageModule.cs b/OpenSim/Region/CoreModules/World/Warp3DMap/Warp3DImageModule.cs index 8b466e09a9..b6ff5e0e84 100644 --- a/OpenSim/Region/CoreModules/World/Warp3DMap/Warp3DImageModule.cs +++ b/OpenSim/Region/CoreModules/World/Warp3DMap/Warp3DImageModule.cs @@ -267,6 +267,7 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap CreateAllPrims(renderer); renderer.Render(); + Bitmap bitmap = renderer.Scene.getImage(); renderer.Scene.destroy(); @@ -511,14 +512,13 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap } else // It's sculptie { - if (m_imgDecoder is not null) + //Image sculpt = m_imgDecoder.DecodeToImage(sculptAsset.Data); + Image sculpt = J2kImage.FromBytes(sculptAsset.Data, null, true, 12); + if (sculpt is not null) { - Image sculpt = m_imgDecoder.DecodeToImage(sculptAsset.Data); - if (sculpt is not null) - { - renderMesh = m_primMesher.GenerateFacetedSculptMesh(omvPrim, (Bitmap)sculpt, lod); - sculpt.Dispose(); - } + renderMesh = m_primMesher.GenerateFacetedSculptMesh(omvPrim, (Bitmap)sculpt, lod); + //sculpt.Save("lixo12-"+prim.UUID.ToString()+".png",ImageFormat.Png); + sculpt.Dispose(); } } } @@ -751,8 +751,12 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap { try { - using (Bitmap img = (Bitmap)m_imgDecoder.DecodeToImage(asset.Data)) + //using (Bitmap img = (Bitmap)m_imgDecoder.DecodeToImage(asset.Data)) + using (Bitmap img = (Bitmap)J2kImage.FromBytes(asset.Data,null, false, 16)) + { + //img.Save("lixo"+id.ToString()+".png",ImageFormat.Png); ret = new warp_Texture(img, 8); // reduce textures size to 256 * 256 + } } catch (Exception e) { @@ -820,8 +824,7 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap try { - using (MemoryStream stream = new MemoryStream(j2kData)) - using (Bitmap bitmap = (Bitmap)J2kImage.FromStream(stream)) + using (Bitmap bitmap = (Bitmap)J2kImage.FromBytes(j2kData)) { width = bitmap.Width; height = bitmap.Height; diff --git a/OpenSim/Region/PhysicsModules/ubOdeMeshing/PrimMesher.cs b/OpenSim/Region/PhysicsModules/ubOdeMeshing/PrimMesher.cs index aa39ca8ac5..551e88e8b9 100644 --- a/OpenSim/Region/PhysicsModules/ubOdeMeshing/PrimMesher.cs +++ b/OpenSim/Region/PhysicsModules/ubOdeMeshing/PrimMesher.cs @@ -180,18 +180,20 @@ namespace PrimMesher if (stopAngle <= startAngle) throw new Exception("stopAngle not greater than startAngle"); - if ((sides == 3 || sides == 4 || sides == 6 || sides == 12 || sides == 24)) - { - startAngle *= twoPiInv; - stopAngle *= twoPiInv; Angle[] sourceAngles = sides switch { 3 => angles3, 4 => angles4, 6 => angles6, 12 => angles12, - _ => angles24, + 24 => angles24, + _ => null }; + + if (sourceAngles != null) + { + startAngle *= twoPiInv; + stopAngle *= twoPiInv; int startAngleIndex = (int)(startAngle * sides); int endAngleIndex = sourceAngles.Length - 1; @@ -202,7 +204,7 @@ namespace PrimMesher if (endAngleIndex == startAngleIndex) endAngleIndex++; - for (int angleIndex = startAngleIndex; angleIndex < endAngleIndex + 1; angleIndex++) + for (int angleIndex = startAngleIndex; angleIndex <= endAngleIndex; angleIndex++) { angles.Add(sourceAngles[angleIndex]); }