Blitting到透明的SDL表面会导致很大的性能损失

时间:2013-08-28 01:01:32

标签: c# sdl

我正在使用SDLDotNet.dll 6.1.1(我认为是SDL 1.2)。每当我连续快速地快速滑入透明表面时(例如当玩家快速点击时),它会以每秒5 fps左右的速度下降到FPS(从350fps下降到5fps)

这是我的表面:

    ChunkSurface = new Surface(256, 256) {Transparent = true};

和我更新块的代码

            if (ReRerenderPartial)
            {
                foreach (Point poin in ReRenderPoints)
                {
                    int ChunkX = poin.X;
                    int ChunkY = poin.Y;
                    int Block = Blocks[ChunkX, ChunkY];
                    var b = BaseBlock.blockList.Find(Block);
                    if (b.Surface().Transparent)
                    {
                        ChunkSurface.Fill(new Rectangle(new Point(poin.X * 16, poin.Y * 16), new Size(16, 16)), Color.Black);
                    }
                    if (Block > 0)
                    {
                        ChunkSurface.Blit(b.Surface(), new Point(poin.X*16, poin.Y*16));
                    }
                }
            }

如果我将Transparent设置为false,则单击fast(并且需要重新渲染)时没有FPS丢失但如果它为true则会丢失FPS。导致FPS损失的两个功能是Fill&位块传送

如果你想看到它的实际效果,我的回购是@ https://github.com/Snowl/PlataJumperSDL相关文件是Chunk.cs

1 个答案:

答案 0 :(得分:0)

我的不好,我没有清除渲染点列表,导致很多点在不需要重新渲染时渲染,随着需要渲染的点数而增加。

ReRenderPoints = new List<Point>();

在我的渲染功能结束时修复了它。

非常感谢。