我编写了一个基于SDL2的程序,用于Raspberry pi 3并使用3.5“Waveshare SPI LCD。由于SPI并行接口,它很慢。
在我的节目中,我画线条,文字和&做其他图形人员,然后我调用 SDL_RenderPresent 来更新屏幕。这个功能很慢。
在我的应用程序中,每次只修改窗口的一小部分。我找到了一个解决方案来更新 DirectFB 中窗口的唯一一小部分而不是整个显示,结果很棒。如何只更新SDL中的特定矩形?
答案 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
一个。