SDL_UpdateRect在双缓冲屏幕上的精确时间和效果是什么?

时间:2012-01-08 08:56:31

标签: performance sdl double-buffering

使用带有Simple DirectMedia Layer的双缓冲屏幕,在点击多张图片后调用SDL_UpdateRect一次效率更高,或者在调用每张图片后调用一次,然后再调用SDL_Flip ?换句话说,SDL_UpdateRect会导致屏幕立即更新还是简单告诉Simple DirectMedia Layer在翻转屏幕时必须更新哪些区域?它应该如何与双缓冲屏幕一起使用?

供参考,以下是SDL_UpdateRect的说明。

  

确保在给定屏幕上更新给定区域。该   矩形必须被限制在屏幕边界内(没有剪裁   已经完成了。

     

如果' x ',' y ',' w '和' h '都是0 ,SDL_UpdateRect将更新   整个屏幕。

1 个答案:

答案 0 :(得分:3)

是的,SDL_UpdateRect立即更新屏幕(或矩形)。

无需联合使用SDL_UpdateRectSDL_Flip,他们会以不同的方式执行相同的操作。 不同之处在于SDL_UpdateRect只能更新部分屏幕(并通过将像素从曲面复制到屏幕来工作),SDL_Flip刷新整个屏幕(并通过翻转缓冲区工作)。

因此,如果您使用双缓冲屏幕,则无需拨打SDL_UpdateRect,只需在所有blits后调用SDL_Flip

http://www.libsdl.org/docs/html/sdlsetvideomode.html

  

调用SDL_Flip将翻转缓冲区并更新屏幕。所有   绘图将在未显示的表面上进行   时刻。如果无法启用双缓冲,则SDL_Flip将启用   只需在整个屏幕上执行SDL_UpdateRect。

不要忘记双缓冲仅适用于SDL_HWSURFACESDL_FULLSCREEN视频模式。