private void Update(Context context, ClipmapUpdate update, ClipmapLevel level, RasterDataDetails details, RasterLevel rasterLevel) { ClipmapUpdate[] updates = SplitUpdateToAvoidWrapping(update, details); foreach (ClipmapUpdate nonWrappingUpdate in updates) { RasterTileRegion[] tileRegions = rasterLevel.GetTilesInExtent(nonWrappingUpdate.West, nonWrappingUpdate.South, nonWrappingUpdate.East, nonWrappingUpdate.North); foreach (RasterTileRegion region in tileRegions) { Texture2D tileTexture; bool loaded = details.LoadedTiles.TryGetValue(region.Tile.Identifier, out tileTexture); if (loaded) { RenderTileToLevelTexture(context, level, details, region, tileTexture); } else { UpsampleTileData(context, level, details, region); } } } if (details.Type == RasterType.Terrain) { // Normals at edges are incorrect, so include a one-post buffer around the update region // when updating normals in order to update normals that were previously at the edge. ClipmapUpdate updateWithBuffer = update.AddBufferWithinLevelNextExtent(); ClipmapUpdate[] normalUpdates = SplitUpdateToAvoidWrapping(updateWithBuffer, details); foreach (ClipmapUpdate normalUpdate in normalUpdates) { UpdateNormals(context, normalUpdate); } } }
private void RequestTileResidency(Context context, ClipmapLevel level, RasterDataDetails details, RasterLevel rasterLevel, ClipmapLevel.Extent nextExtent) { RasterTileRegion[] tileRegions = rasterLevel.GetTilesInExtent(nextExtent.West, nextExtent.South, nextExtent.East, nextExtent.North); foreach (RasterTileRegion region in tileRegions) { if (!details.LoadedTiles.ContainsKey(region.Tile.Identifier)) { RequestTileLoad(details, level, region.Tile); } } }
private void InitializeRequestThreads(Context context, RasterDataDetails details, ClipmapLevel clipmapLevelZero, RasterLevel rasterLevelZero) { details.WorkerWindow = Device.CreateWindow(1, 1); context.MakeCurrent(); #if !SingleThreaded Thread requestThread = new Thread(RequestThreadEntryPoint); requestThread.IsBackground = true; requestThread.Start(details); #endif // Preload the entire world at level 0 RasterTileRegion[] regions = rasterLevelZero.GetTilesInExtent(0, 0, rasterLevelZero.LongitudePosts - 1, rasterLevelZero.LatitudePosts - 1); foreach (RasterTileRegion region in regions) { RequestTileLoad(details, clipmapLevelZero, region.Tile); } }
private void InitializeRequestThreads(Context context, RasterDataDetails details, ClipmapLevel clipmapLevelZero, RasterLevel rasterLevelZero) { details.WorkerWindow = Device.CreateWindow(1, 1); context.MakeCurrent(); #if !SingleThreaded Thread requestThread = new Thread(RequestThreadEntryPoint); requestThread.IsBackground = true; requestThread.Start(details); #endif // Preload the entire world at level 0 RasterTileRegion[] regions = rasterLevelZero.GetTilesInExtent(0, 0, rasterLevelZero.LongitudePosts - 1, rasterLevelZero.LatitudePosts - 1); foreach (RasterTileRegion region in regions) { RequestTileLoad(details, clipmapLevelZero, region.Tile); } }
private void Update(Context context, ClipmapUpdate update, ClipmapLevel level, RasterDataDetails details, RasterLevel rasterLevel) { ClipmapUpdate[] updates = SplitUpdateToAvoidWrapping(update, details); foreach (ClipmapUpdate nonWrappingUpdate in updates) { RasterTileRegion[] tileRegions = rasterLevel.GetTilesInExtent(nonWrappingUpdate.West, nonWrappingUpdate.South, nonWrappingUpdate.East, nonWrappingUpdate.North); foreach (RasterTileRegion region in tileRegions) { Texture2D tileTexture; bool loaded = details.LoadedTiles.TryGetValue(region.Tile.Identifier, out tileTexture); if (loaded) { RenderTileToLevelTexture(context, level, details, region, tileTexture); } else { UpsampleTileData(context, level, details, region); } } } if (details.Type == RasterType.Terrain) { // Normals at edges are incorrect, so include a one-post buffer around the update region // when updating normals in order to update normals that were previously at the edge. ClipmapUpdate updateWithBuffer = update.AddBufferWithinLevelNextExtent(); ClipmapUpdate[] normalUpdates = SplitUpdateToAvoidWrapping(updateWithBuffer, details); foreach (ClipmapUpdate normalUpdate in normalUpdates) { UpdateNormals(context, normalUpdate); } } }
private void RequestTileResidency(Context context, ClipmapLevel level, RasterDataDetails details, RasterLevel rasterLevel, ClipmapLevel.Extent nextExtent) { RasterTileRegion[] tileRegions = rasterLevel.GetTilesInExtent(nextExtent.West, nextExtent.South, nextExtent.East, nextExtent.North); foreach (RasterTileRegion region in tileRegions) { if (!details.LoadedTiles.ContainsKey(region.Tile.Identifier)) { RequestTileLoad(details, level, region.Tile); } } }