Example #1
0
        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);
                }
            }
        }
Example #2
0
 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);
         }
     }
 }
Example #3
0
        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);
            }
        }
Example #4
0
        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);
            }
        }
Example #5
0
        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);
                }
            }
        }
Example #6
0
 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);
         }
     }
 }