0

使用带有Simple DirectMedia 层SDL_UpdateRect的双缓冲屏幕,在 blitting 多个图像之后调用一次还是在调用之前在 blitting 每个单独的图像之后调用一次效率更高SDL_Flip?换句话说,会SDL_UpdateRect导致屏幕立即更新,还是只是简单地告诉 Simple DirectMedia Layer 在屏幕翻转时必须更新哪些区域?它通常应该如何与双缓冲屏幕一起使用?

作为参考,这里是 的描述SDL_UpdateRect

确保在给定屏幕上更新给定区域。矩形必须限制在屏幕边界内(不进行剪辑)。

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

4

1 回答 1

3

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

不需要联合使用SDL_UpdateRectand SDL_Flip,它们做同样的事情但方式不同。不同之处在于SDL_UpdateRect只能更新屏幕的一部分(并通过将像素从表面复制到屏幕来工作),并SDL_Flip刷新整个屏幕(并通过翻转缓冲区工作)。

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

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

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

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

于 2012-09-08T13:49:18.330 回答