SDL2中,渲染器(Renderer)和纹理(Texture)的概念是什么?

3

我正在从SDL转移到SDL2,对引入的“渲染和纹理”系统感到困惑。

在旧版SDL中,最频繁的操作是创建Surface并将其BlitSurface到屏幕上。现在似乎有一种使用渲染器和纹理的趋势。然而,从我的角度来看,这种方法非常慢(从编码开销的角度)。为什么不能像以前那样load_BMP和BlitSurface呢?整个窗口-渲染器-纹理的东西有什么好处呢?

我已经阅读了一些帖子(什么是SDL渲染器?),但还是有点困惑。

所以...

  1. 旧版Surface方式在SDL2中是否有效?

  2. 渲染器和纹理的意义是什么?(根据一些搜索结果,可能与硬件加速有关,但不确定这意味着什么)

1个回答

6
你可能需要查看SDL2的迁移指南,它提供了关于处理2D图形的新方法的信息。
使用纹理而不是表面的原因在于纹理在GPU上工作并被加载到视频内存中,而表面在系统内存中与CPU一起工作,由于GPU比CPU更适合处理图形,因此速度更快。此外,渲染器隐藏了所使用的底层系统(可以是D3D、OpenGL或其他)。
您仍然可以加载表面,但必须在渲染之前将其转换为纹理,或者使用SDL_UpdateWindowSurfaceSDL_GetWindowSurface函数;后一个链接包括如何使用它们的示例。
至于你所断言的SDL2方法很慢,我不同意你的观点,你只需要设置窗口和渲染器一次,像加载表面一样加载纹理,将它们复制到渲染器而不是blitting,最后使用SDL_RenderPresent而不是SDL_Flip。其实并没有太大的区别 :)
但是,请查看迁移指南,它包含你正在寻找的信息。

非常有用的信息!我同意你的观点,根据你的描述,它并不慢。可能是因为我还没有习惯这种新的方式,所以有点生气。再次感谢。 - Diaz
@Diaz 很高兴能帮忙。如果你想快速了解SDL2,我真的可以推荐Lazy Foo的SDL2教程 - jpw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接