如何更新SDL中的一部分窗口?

时间:2017-01-02 18:00:17

标签: raspberry-pi sdl

我编写了一个基于SDL2的程序,用于Raspberry pi 3并使用3.5“Waveshare SPI LCD。由于SPI并行接口,它很慢。

在我的节目中,我画线条,文字和&做其他图形人员,然后我调用 SDL_RenderPresent 来更新屏幕。这个功能很慢。

在我的应用程序中,每次只修改窗口的一小部分。我找到了一个解决方案来更新 DirectFB 中窗口的唯一一小部分而不是整个显示,结果很棒。如何只更新SDL中的特定矩形?

1 个答案:

答案 0 :(得分:0)

SDL_RenderPresent可能“慢”,因为它会进行垂直同步。

来自wiki.libsdl.org:

  

如果您坚持使用来自1.2曲面和blitting的整个渲染器构思,请将渲染器视为主曲面,将SDL_RenderCopy()视为该主曲面的blit函数,将SDL_RenderPresent()视为旧SDL_Flip ()函数。

来自wiki.libsdl.org/MigrationGuide:

  

SDL_Surface / 2D渲染:曲面仍然存在,但建议您尽可能将SDL_Textures与2D加速渲染器(SDL_CreateRenderer())一起使用,而不是使用SDL_Surfaces。

因此,如果您渲染到纹理,则可以使用SDL_RenderCopy(采用剪切矩形)将部分纹理复制到主SDL_Renderer

完成渲染后,使用SDL_RenderPresent在显示屏上显示/显示。这可能 - 取决于后端 - 只需等待vsync,然后进行缓冲交换。

免责声明:我从未在SDL2上使用DirectFB后端;只有OpenGL一个。