SDL2/SFML2 中的软件和硬件渲染

Software and Hardware rendering in SDL2/SFML2

首先,我对此比较陌生。我期待着为游戏开发人员选择 SDL2 和 SFML2 库。 (和其他东西)。

现在我知道了一个事实,即 SDL2 和 SFML2 都能够创建支持 OpenGL 的上下文,通过它可以完成 OpenGL 图形编程。

但是在网上,我读过一些讨论,其中人们说了一些类似 "SDL 1.2 is software accelerated, SDL2 and SFML2 are hardware accelerated by default" 的内容。我知道软件渲染是单独使用 CPU 的图形。虽然硬件渲染使用图形 cards/pipeline.

所以我的问题是,关于这些游戏库:

第 1 部分:当有人说 software/hardware acc.by 默认值时,他是什么意思?是不是(我的猜测)如果说 SFML2 是硬件 acc。默认情况下,即使是基本的 2d 图形也是由它使用硬件渲染作为后端管道来完成的,即使我没有在代码中明确地进行任何硬件渲染编程?

第 2 部分:如果这是真的,这些库中是否有任何选项可以将其设置为软件 acceleration/rendering?

第 3 部分:这 2 个库(SDL2 与 SFML2)中哪个总体上更好 performance/speed?

在此先感谢您的回答,如果您发现这个问题很愚蠢,我们深表歉意。

不能说任何关于 SFML 的事情(但几乎可以肯定事情非常接近),但对于 SDL 来说就像你说的那样。在 SDL1 中,2d 绘图实现为直接在显示表面上进行 blitting,然后将此表面发送到显示器 - 所以主要是软件(尽管仍然可以实现较小的硬件加速)。 SDL2 有 SDL_Renderer 和纹理(GPU 端图像或渲染目标),任何使用渲染器的基本绘图 可能 由一个或另一个后端加速。选择哪个后端取决于您的程序运行的系统和用户设置 - 例如linux 默认为 opengl,windows 为 d3d(但仍然可以使用 opengl),android/ios 为 opengles,等等。

您可以通过显式调用 SDL_CreateSoftwareRenderer, or hint SDL to use software 驱动程序来使用软件渲染器,甚至可以通过设置 SDL_RENDER_DRIVER 环境变量来覆盖它。

如果您打算将 opengl 用于 3d 图形 - 那么您只需忽略所有这些并像往常一样使用 opengl 上下文创建 window,永远不要使用 SDL_Renderer.