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

标签 opengl sdl sfml sdl-2 hardware-acceleration

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

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

但是在网上,我读过一些讨论,其中人们说了一些大意是“SDL 1.2 是软件加速的,SDL2 和 SFML2 默认是硬件加速的”。我知道软件渲染是单独使用CPU的图形。而硬件渲染则使用显卡/管道。

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

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

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

第 3 部分:这 2 个库(SDL2 与 SFML2)中哪一个具有更好的整体性能/速度?

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

最佳答案

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

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

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

关于opengl - SDL2/SFML2 中的软件和硬件渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36374078/

相关文章:

c++ - OpenGL 库

c - 使用 OpenGL/C 生成 N x N 网格以显示在窗口中心

OpenGL/Gtkmm 游戏 - 键盘移动

c++ - SDL 在发布构建配置上找不到 -lSDL_main

c++ - 让 Sprite 沿着一个角度行走

ubuntu-12.04 - 尝试编译使用 SFML 库的 c++ 项目时出现 undefined reference 错误

c - glOrtho(-1, 1, -1, 1, -1, 1) 完成了什么?

c++ - 不能在 block 范围内使用 SDL2 变量

c++ - SFML 拾色器问题

c++ - C++ SFML 中的抽象类错误