【问题标题】:SDL : Hardware rendering vs Software renderingSDL:硬件渲染与软件渲染
【发布时间】:2023-10-01 17:44:01
【问题描述】:

关于带有经常更新的扩展菜单的窗口的一般性问题,但实际屏幕仅更新了大约 10%。如果文本保持不变。

SDL2 使用渲染和纹理来利用硬件加速,但也允许软件渲染。

我的问题是:

  • 使用 SDL_CreateRender()/hardware-render 在每次只有 10% 的菜单实际发生变化时绘制整个菜单时直接渲染到硬件,每次重绘整个屏幕/菜单是否更快?或者:
  • 使用 SDL_CreateSoftwareRenderer() / software-render 将整个菜单写入 RAM 一次,然后只更新实际更改的 10% 是否更快?

【问题讨论】:

  • 要确定的个人资料。(但我会说这并不重要,除非它开始滞后。)此外,还有第三种方法应该是方便,我假设最快:您可以将菜单的静态部分硬件渲染为纹理,然后在每一帧进行硬件渲染。 (另外,如果你正在制作游戏,那么软件渲染可能不是一个选项,因为除了菜单之外的所有内容通常都会经常更新。)
  • 我的猜测是,这在很大程度上取决于运行它的 PC,但硬件加速可能更快,即使完全重绘也是如此。但是,听起来它不是一个资源密集型应用程序,所以也许更容易编写和维护的应用程序是最好的。
  • 谢谢大家。在一个问题上花费大量时间之前能够获得其他意见是很好的。最简单的方法是使用硬件渲染,每次都重新绘制整个窗口,因为它足够快。

标签: sdl sdl-2


【解决方案1】:

谢谢各位。

在一个问题上花费大量时间之前能够获得其他意见真是太好了。最简单的方法是使用硬件渲染并每次都重新绘制整个窗口,因为它足够快。

主程序将所有内容(Linux 下的实时数据和 GUI)作为单个像素绘制到纹理上,该纹理以 30Hz 的速率呈现到屏幕上。我发现,一旦 CPU 时钟频率超过 1Ghz,大多数图形(小区域/像素)都与硬件渲染一样快或更快,除非清除大面积的屏幕。这需要一些工作和大量读取以使 SDL 渲染在线程中工作,同时在 main 中更新像素数据(GUI 和数据)。

【讨论】: