From 0cdad0faf4a773358a0fce7db4e7b9910b56a8e7 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 17 Sep 2016 14:54:41 +0100 Subject: stop using legacy storeterrain in scene.cs --- OpenSim/Region/Framework/Scenes/Scene.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index d77b8ae..f7bfc24 100755 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -2172,7 +2172,7 @@ namespace OpenSim.Region.Framework.Scenes /// public void SaveTerrain() { - SimulationDataService.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID); + SimulationDataService.StoreTerrain(Heightmap.GetTerrainData(), RegionInfo.RegionID); } public void StoreWindlightProfile(RegionLightShareData wl) @@ -2208,7 +2208,7 @@ namespace OpenSim.Region.Framework.Scenes m_log.InfoFormat("[TERRAIN]: No default terrain. Generating a new terrain {0}.", m_InitialTerrain); Heightmap = new TerrainChannel(m_InitialTerrain, (int)RegionInfo.RegionSizeX, (int)RegionInfo.RegionSizeY, (int)RegionInfo.RegionSizeZ); - SimulationDataService.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID); + SimulationDataService.StoreTerrain(Heightmap.GetTerrainData(), RegionInfo.RegionID); } else { @@ -2227,7 +2227,7 @@ namespace OpenSim.Region.Framework.Scenes { Heightmap = new TerrainChannel(); - SimulationDataService.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID); + SimulationDataService.StoreTerrain(Heightmap.GetTerrainData(), RegionInfo.RegionID); } } catch (Exception e) -- cgit v1.1 From 3f9f10529548599d1810ca8a630734586ed3fa9d Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 17 Sep 2016 15:45:11 +0100 Subject: add to databases a table to store baked terrain. --- OpenSim/Region/Framework/Interfaces/ISimulationDataService.cs | 9 ++++++++- OpenSim/Region/Framework/Interfaces/ISimulationDataStore.cs | 10 +++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Framework/Interfaces/ISimulationDataService.cs b/OpenSim/Region/Framework/Interfaces/ISimulationDataService.cs index 13358cb..d5e3f7a 100644 --- a/OpenSim/Region/Framework/Interfaces/ISimulationDataService.cs +++ b/OpenSim/Region/Framework/Interfaces/ISimulationDataService.cs @@ -64,12 +64,19 @@ namespace OpenSim.Region.Framework.Interfaces List LoadObjects(UUID regionUUID); /// - /// Store a terrain revision in region storage + /// Store terrain in region storage /// /// HeightField data /// region UUID void StoreTerrain(TerrainData terrain, UUID regionID); + /// + /// Store baked terrain in region storage + /// + /// HeightField data + /// region UUID + void StoreBakedTerrain(TerrainData terrain, UUID regionID); + // Legacy version kept for downward compabibility void StoreTerrain(double[,] terrain, UUID regionID); diff --git a/OpenSim/Region/Framework/Interfaces/ISimulationDataStore.cs b/OpenSim/Region/Framework/Interfaces/ISimulationDataStore.cs index e09f775..4940a28 100644 --- a/OpenSim/Region/Framework/Interfaces/ISimulationDataStore.cs +++ b/OpenSim/Region/Framework/Interfaces/ISimulationDataStore.cs @@ -75,12 +75,20 @@ namespace OpenSim.Region.Framework.Interfaces List LoadObjects(UUID regionUUID); /// - /// Store a terrain revision in region storage + /// Store a terrain in region storage /// /// HeightField data /// region UUID void StoreTerrain(TerrainData terrain, UUID regionID); + /// + /// Store baked terrain in region storage + /// + /// HeightField data + /// region UUID + void StoreBakedTerrain(TerrainData terrain, UUID regionID); + + // Legacy version kept for downward compabibility void StoreTerrain(double[,] terrain, UUID regionID); -- cgit v1.1 From 71bd3ce49f1159251ec4339d098d93c2119729f0 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 17 Sep 2016 16:42:40 +0100 Subject: add load baked terrain methods --- OpenSim/Region/Framework/Interfaces/ISimulationDataStore.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Framework/Interfaces/ISimulationDataStore.cs b/OpenSim/Region/Framework/Interfaces/ISimulationDataStore.cs index 4940a28..8536db0 100644 --- a/OpenSim/Region/Framework/Interfaces/ISimulationDataStore.cs +++ b/OpenSim/Region/Framework/Interfaces/ISimulationDataStore.cs @@ -93,7 +93,7 @@ namespace OpenSim.Region.Framework.Interfaces void StoreTerrain(double[,] terrain, UUID regionID); /// - /// Load the latest terrain revision from region storage + /// Load terrain from region storage /// /// the region UUID /// the X dimension of the terrain being filled @@ -101,6 +101,7 @@ namespace OpenSim.Region.Framework.Interfaces /// the Z dimension of the terrain being filled /// Heightfield data TerrainData LoadTerrain(UUID regionID, int pSizeX, int pSizeY, int pSizeZ); + TerrainData LoadBakedTerrain(UUID regionID, int pSizeX, int pSizeY, int pSizeZ); // Legacy version kept for downward compabibility double[,] LoadTerrain(UUID regionID); -- cgit v1.1 From 47ce0f8641c69e005c1b7ef875c5cd82de2388d5 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 17 Sep 2016 16:46:56 +0100 Subject: add load baked terrain methods. missing file --- OpenSim/Region/Framework/Interfaces/ISimulationDataService.cs | 1 + 1 file changed, 1 insertion(+) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Framework/Interfaces/ISimulationDataService.cs b/OpenSim/Region/Framework/Interfaces/ISimulationDataService.cs index d5e3f7a..f8a6b53 100644 --- a/OpenSim/Region/Framework/Interfaces/ISimulationDataService.cs +++ b/OpenSim/Region/Framework/Interfaces/ISimulationDataService.cs @@ -89,6 +89,7 @@ namespace OpenSim.Region.Framework.Interfaces /// the Z dimension of the region being filled /// Heightfield data TerrainData LoadTerrain(UUID regionID, int pSizeX, int pSizeY, int pSizeZ); + TerrainData LoadBakedTerrain(UUID regionID, int pSizeX, int pSizeY, int pSizeZ); // Legacy version kept for downward compabibility double[,] LoadTerrain(UUID regionID); -- cgit v1.1 From 592a915d8d9335784998d02418d1eee757f76350 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 17 Sep 2016 17:56:35 +0100 Subject: add rest of wiring for terrain bake persistent store (mantis 8024 but not using its code). Only did minor testing in MySQL --- .../CoreModules/World/Terrain/TerrainModule.cs | 21 +++++--- OpenSim/Region/Framework/Scenes/Scene.cs | 58 ++++++++++++++++++---- OpenSim/Region/Framework/Scenes/SceneBase.cs | 1 + 3 files changed, 64 insertions(+), 16 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs index 69fa5f6..e21681d 100644 --- a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs +++ b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs @@ -231,20 +231,27 @@ namespace OpenSim.Region.CoreModules.World.Terrain // Install terrain module in the simulator lock(m_scene) { + if(m_scene.Bakedmap != null) + { + m_baked = m_scene.Bakedmap; + } if (m_scene.Heightmap == null) { - m_channel = new TerrainChannel(m_InitialTerrain, (int)m_scene.RegionInfo.RegionSizeX, - (int)m_scene.RegionInfo.RegionSizeY, - (int)m_scene.RegionInfo.RegionSizeZ); + if(m_baked != null) + m_channel = m_baked.MakeCopy(); + else + m_channel = new TerrainChannel(m_InitialTerrain, + (int)m_scene.RegionInfo.RegionSizeX, + (int)m_scene.RegionInfo.RegionSizeY, + (int)m_scene.RegionInfo.RegionSizeZ); m_scene.Heightmap = m_channel; - - UpdateBakedMap(); } else { m_channel = m_scene.Heightmap; - UpdateBakedMap(); } + if(m_baked == null) + UpdateBakedMap(); m_scene.RegisterModuleInterface(this); m_scene.EventManager.OnNewClient += EventManager_OnNewClient; @@ -724,6 +731,8 @@ namespace OpenSim.Region.CoreModules.World.Terrain m_baked = m_channel.MakeCopy(); m_painteffects[StandardTerrainEffects.Revert] = new RevertSphere(m_baked); m_floodeffects[StandardTerrainEffects.Revert] = new RevertArea(m_baked); + m_scene.Bakedmap = m_baked; + m_scene.SaveBakedTerrain(); } /// diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index f7bfc24..168080f 100755 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -2175,6 +2175,15 @@ namespace OpenSim.Region.Framework.Scenes SimulationDataService.StoreTerrain(Heightmap.GetTerrainData(), RegionInfo.RegionID); } + /// + /// Store the terrain in the persistant data store + /// + public void SaveBakedTerrain() + { + if(Bakedmap != null) + SimulationDataService.StoreBakedTerrain(Bakedmap.GetTerrainData(), RegionInfo.RegionID); + } + public void StoreWindlightProfile(RegionLightShareData wl) { RegionInfo.WindlightSettings = wl; @@ -2195,20 +2204,44 @@ namespace OpenSim.Region.Framework.Scenes { try { + Bakedmap = null; + TerrainData map = SimulationDataService.LoadBakedTerrain(RegionInfo.RegionID, (int)RegionInfo.RegionSizeX, (int)RegionInfo.RegionSizeY, (int)RegionInfo.RegionSizeZ); + if (map != null) + { + Bakedmap = new TerrainChannel(map); + } + } + catch (Exception e) + { + m_log.WarnFormat( + "[TERRAIN]: Scene.cs: LoadWorldMap() baked terrain - Failed with exception {0}{1}", e.Message, e.StackTrace); + } + + try + { TerrainData map = SimulationDataService.LoadTerrain(RegionInfo.RegionID, (int)RegionInfo.RegionSizeX, (int)RegionInfo.RegionSizeY, (int)RegionInfo.RegionSizeZ); if (map == null) { - // This should be in the Terrain module, but it isn't because - // the heightmap is needed _way_ before the modules are initialized... - IConfig terrainConfig = m_config.Configs["Terrain"]; - String m_InitialTerrain = "pinhead-island"; - if (terrainConfig != null) - m_InitialTerrain = terrainConfig.GetString("InitialTerrain", m_InitialTerrain); + if(Bakedmap != null) + { + m_log.Warn("[TERRAIN]: terrain not found. Used stored baked terrain."); + Heightmap = Bakedmap.MakeCopy(); + SimulationDataService.StoreTerrain(Heightmap.GetTerrainData(), RegionInfo.RegionID); + } + else + { + // This should be in the Terrain module, but it isn't because + // the heightmap is needed _way_ before the modules are initialized... + IConfig terrainConfig = m_config.Configs["Terrain"]; + String m_InitialTerrain = "pinhead-island"; + if (terrainConfig != null) + m_InitialTerrain = terrainConfig.GetString("InitialTerrain", m_InitialTerrain); - m_log.InfoFormat("[TERRAIN]: No default terrain. Generating a new terrain {0}.", m_InitialTerrain); - Heightmap = new TerrainChannel(m_InitialTerrain, (int)RegionInfo.RegionSizeX, (int)RegionInfo.RegionSizeY, (int)RegionInfo.RegionSizeZ); + m_log.InfoFormat("[TERRAIN]: No default terrain. Generating a new terrain {0}.", m_InitialTerrain); + Heightmap = new TerrainChannel(m_InitialTerrain, (int)RegionInfo.RegionSizeX, (int)RegionInfo.RegionSizeY, (int)RegionInfo.RegionSizeZ); - SimulationDataService.StoreTerrain(Heightmap.GetTerrainData(), RegionInfo.RegionID); + SimulationDataService.StoreTerrain(Heightmap.GetTerrainData(), RegionInfo.RegionID); + } } else { @@ -2221,7 +2254,6 @@ namespace OpenSim.Region.Framework.Scenes "[TERRAIN]: Scene.cs: LoadWorldMap() - Regenerating as failed with exception {0}{1}", e.Message, e.StackTrace); - // Non standard region size. If there's an old terrain in the database, it might read past the buffer #pragma warning disable 0162 if ((int)Constants.RegionSize != 256) { @@ -2235,6 +2267,12 @@ namespace OpenSim.Region.Framework.Scenes m_log.WarnFormat( "[TERRAIN]: Scene.cs: LoadWorldMap() - Failed with exception {0}{1}", e.Message, e.StackTrace); } + + if(Bakedmap == null && Heightmap != null) + { + Bakedmap = Heightmap.MakeCopy(); + SimulationDataService.StoreBakedTerrain(Bakedmap.GetTerrainData(), RegionInfo.RegionID); + } } /// diff --git a/OpenSim/Region/Framework/Scenes/SceneBase.cs b/OpenSim/Region/Framework/Scenes/SceneBase.cs index f420f69..1de55ec 100644 --- a/OpenSim/Region/Framework/Scenes/SceneBase.cs +++ b/OpenSim/Region/Framework/Scenes/SceneBase.cs @@ -153,6 +153,7 @@ namespace OpenSim.Region.Framework.Scenes } public ITerrainChannel Heightmap; + public ITerrainChannel Bakedmap; /// /// Allows retrieval of land information for this scene. -- cgit v1.1