即使我打算覆盖每个像素,为什么还需要清除屏幕?

时间:2016-09-23 18:59:00

标签: sdl sdl-2

在SDL2文档中提到:

  

强烈建议您在开始每个新帧的绘图之前调用SDL_RenderClear()来初始化后备缓冲区,即使您打算覆盖每个像素。

背后的原因是什么?当你知道你还要覆盖它时,它是否只是一个无用的调用来填充屏幕的某种特定颜色?

2 个答案:

答案 0 :(得分:2)

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

SDL_RenderClear()适用于框架中有背景颜色且实际可见的情况。

答案 1 :(得分:1)

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

如果这只是你自己的代码,是的,它似乎毫无用处,但是一旦你的代码掌握在别人手中,你就不会知道了。他们可能使用不同的图像,透明的东西,并且他们很难弄清楚为什么在屏幕上重复所有内容。

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

您可以查看每个平台的RenderClear代码,看看它如何做不同的事情来执行您所说的内容(使用颜色填充屏幕),但使用明确的方法而不是绘制方法

您可以看到SDL_RenderClear实际填充屏幕的唯一实现是SW_RenderClear,但除此之外,清除屏幕没有任何害处,但也没有义务。没有它,SDL工作正常。