使用带有Simple DirectMedia Layer的双缓冲屏幕,在点击多张图片后调用SDL_UpdateRect
一次效率更高,或者在调用每张图片后调用一次,然后再调用SDL_Flip
?换句话说,SDL_UpdateRect
会导致屏幕立即更新,还是简单告诉Simple DirectMedia Layer在翻转屏幕时必须更新哪些区域?它应该如何与双缓冲屏幕一起使用?
供参考,以下是SDL_UpdateRect
的说明。
确保在给定屏幕上更新给定区域。该 矩形必须被限制在屏幕边界内(没有剪裁 已经完成了。
如果' x ',' y ',' w '和' h '都是0 ,
SDL_UpdateRect
将更新 整个屏幕。
答案 0 :(得分:3)
是的,SDL_UpdateRect
立即更新屏幕(或矩形)。
无需联合使用SDL_UpdateRect
和SDL_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_HWSURFACE
和SDL_FULLSCREEN
视频模式。