为什么即使我打算覆盖每个像素也需要清屏?

Why do I need to clear the screen even if I intend to overwrite every single pixel?

在 SDL2 文档中提到:

You are strongly encouraged to call SDL_RenderClear() to initialize the backbuffer before starting each new frame's drawing, even if you plan to overwrite every pixel.

这背后的原因是什么?当你知道你无论如何都要覆盖它时,用一种特定的颜色填充屏幕不是一个无用的调用吗?

如果您确定要使用完全不透明的颜色绘制每个像素,则不需要使用 SDL_RenderClear()。

SDL_RenderClear() 适用于框架中实际可见的背景色。

如果要更新每个像素,则不需要在每一帧中调用 SDL_RenderClear()。您甚至可以通过使用半透明像素来制作一些不错的效果(例如,"motion blur" 通过在绘制另一帧之前绘制黑色半透明矩形)。

如果这只是您自己的代码,是的,它可能看起来毫无用处,但您永远不知道一旦您的代码落入他人之手。他们可能会使用不同的图像、透明的东西,他们将很难弄清楚为什么所有内容都在屏幕上重复出现。

这是鼓励清除屏幕的一个很好的理由。您不需要这样做。此外,值得注意的是,清除屏幕颜色不同于填充屏幕颜色,通过绘制每个像素(而且速度更快) ), 因此,与未来潜在的头痛相比,您的性能损失可以忽略不计。

您可以检查每个平台的 RenderClear 代码,看看它如何按照您所说的做不同的事情(用颜色填充 屏幕),但是使用清晰的 方法 而不是绘制 方法 :

您可以看到 SDL_RenderClear 的唯一实现实际上填满了屏幕的是 SW_RenderClear 那个,但除此之外,清除屏幕没有任何坏处,但也没有义务.没有它,SDL 也能正常工作。