From 9fcee7332638a8008140b77641a957ec9268e828 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Fri, 26 Sep 2014 01:02:19 +0100 Subject: Make "generate map" console command also trigger upload to maptiles as well as asset generation without performing tile generation twice. --- .../CoreModules/World/WorldMap/WorldMapModule.cs | 44 +++++++++++++++++----- 1 file changed, 34 insertions(+), 10 deletions(-) (limited to 'OpenSim/Region/CoreModules/World') diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs index 3af8ac4..78fbefe 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs @@ -68,6 +68,9 @@ namespace OpenSim.Region.CoreModules.World.WorldMap private static readonly UUID STOP_UUID = UUID.Random(); private static readonly string m_mapLayerPath = "0001/"; + private IMapImageGenerator m_mapImageGenerator; + private IMapImageUploadModule m_mapImageServiceModule; + private OpenSim.Framework.BlockingQueue requests = new OpenSim.Framework.BlockingQueue(); protected Scene m_scene; @@ -100,7 +103,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap = Util.GetConfigVarFromSections(config, "BlacklistTimeout", configSections, 10 * 60) * 1000; } - public virtual void AddRegion (Scene scene) + public virtual void AddRegion(Scene scene) { if (!m_Enabled) return; @@ -144,8 +147,10 @@ namespace OpenSim.Region.CoreModules.World.WorldMap return; m_ServiceThrottle = scene.RequestModuleInterface(); - } + m_mapImageGenerator = m_scene.RequestModuleInterface(); + m_mapImageServiceModule = m_scene.RequestModuleInterface(); + } public virtual void Close() { @@ -1315,7 +1320,17 @@ namespace OpenSim.Region.CoreModules.World.WorldMap if (consoleScene != null && consoleScene != m_scene) return; - GenerateMaptile(); + if (m_mapImageGenerator == null) + { + Console.WriteLine("No map image generator available for {0}", m_scene.Name); + return; + } + + using (Bitmap mapbmp = m_mapImageGenerator.CreateMapTile()) + { + GenerateMaptile(mapbmp); + m_mapImageServiceModule.UploadMapTile(m_scene, mapbmp); + } } public OSD HandleRemoteMapItemRequest(string path, OSD request, string endpoint) @@ -1444,16 +1459,25 @@ namespace OpenSim.Region.CoreModules.World.WorldMap if (m_scene.Heightmap == null) return; - //create a texture asset of the terrain - IMapImageGenerator terrain = m_scene.RequestModuleInterface(); - if (terrain == null) - return; + m_log.DebugFormat("[WORLD MAP]: Generating map image for {0}", m_scene.Name); - m_log.DebugFormat("[WORLD MAP]: Generating map image for {0}", m_scene.RegionInfo.RegionName); + using (Bitmap mapbmp = m_mapImageGenerator.CreateMapTile()) + GenerateMaptile(mapbmp); + } - byte[] data = terrain.WriteJpeg2000Image(); - if (data == null) + private void GenerateMaptile(Bitmap mapbmp) + { + byte[] data; + + try + { + data = OpenJPEG.EncodeFromImage(mapbmp, true); + } + catch (Exception e) // LEGIT: Catching problems caused by OpenJPEG p/invoke + { + m_log.Error("[WORLD MAP]: Failed generating terrain map: " + e); return; + } byte[] overlay = GenerateOverlay(); -- cgit v1.1