在SDL2文档中提到:
强烈建议您在开始每个新帧的绘制之前调用SDL_RenderClear()来初始化后备缓冲区,即使您打算覆盖每个像素也是如此.
这背后的原因是什么?当你知道你要覆盖它时,这不是一个无用的调用来填充屏幕的一种特定颜色吗?
如果您要更新每个像素,则无需调用SDL_RenderClear()每个帧。您甚至可以通过使用半透明像素来制作一些不错的效果(例如,通过在绘制另一帧之前绘制黑色半透明矩形来实现“运动模糊”)。
如果这只是您自己的代码,是的,它可能看起来毫无用处,但您永远不知道您的代码是否落入其他人的手中。他们可能会使用不同的图像、透明的东西,并且他们将很难弄清楚为什么所有内容都在屏幕上重复。
这是鼓励清除屏幕的一个很好的理由。您不需要这样做。另外,值得注意的是,用颜色清除屏幕与通过绘制每个像素来用颜色填充屏幕不同(并且速度更快),因此,与未来潜在的头痛相比,您的性能损失可以忽略不计。
您可以检查RenderClear每个平台的代码,看看它如何执行不同的操作来执行您所说的操作(用颜色填充屏幕),但使用clear方法而不是paint方法:
SDL_RenderClear您可以看到,实际填充屏幕的唯一实现是SW_RenderClear这个,但除此之外,清除屏幕没有任何坏处,但也没有义务。没有它,SDL 也能正常工作。