【问题标题】:Why are SDL and OpenGL related?为什么 SDL 和 OpenGL 相关?
【发布时间】:2011-08-11 18:14:26
【问题描述】:

我在使用 SDL 时发现无法使用 SDL 旋转图像。到处问这个问题,人们都说使用 OpenGL 来做旋转。我一直认为 SDL 与 OpenGL 是完全分开的,我这样想错了吗?我什至找到了在 SDL 中使用 OpenGL 的教程,这让我更加困惑。 SDL 和 OpenGL 之间究竟是什么关系?如果 OpenGL 更强大并且可以让你做更多事情,为什么不直接使用它(这是我读过的内容)?

【问题讨论】:

标签: c++ c opengl sdl


【解决方案1】:

SDL 处理输入、窗口创建、图像加载和其他几个 OpenGL 不处理的功能。

【讨论】:

    【解决方案2】:

    SDL 使用 OpenGL 作为硬件渲染器,用于需要在某些平台上进行硬件渲染的内容。如果你有这样一个平台,那么 OpenGL 就是底层 API,SDL 是在它之上抽象的。

    【讨论】:

      【解决方案3】:

      SDL 是一个跨平台多媒体库,旨在提供对音频、键盘、鼠标、操纵杆等的低级访问。它还通过 OpenGL 支持 3D 硬件。

      OpenGLis a standard specification defining a cross-language, cross-platform API for writing applications that produce 2D and 3D computer graphics。该接口包含超过 250 个不同的函数调用,可用于从简单的图元绘制复杂的 3D 场景。 OpenGL 由 Silicon Graphics Inc. (SGI) 于 1992 年开发[4],广泛应用于 CAD、虚拟现实、科学可视化、信息可视化和飞行模拟。它还用于视频游戏,在 Microsoft Windows 平台上与 Direct3D 竞争(参见 OpenGL 与 Direct3D)。

      【讨论】:

      • 我相信这里要回答的关键问题是:“SDL 和 OpenGL 之间究竟是什么关系?”从初学者的角度来看,这两种技术的教科书定义可能令人困惑。
      【解决方案4】:

      SDL 是 OpenGL 之上的一层;事实上,它在 Windows 上默认使用 GDI,并且还有一个 DirectX 后端。人们可能会说您可以使用 OpenGL 在默认使用 OpenGL(咳咳,Linux)的平台上绕过 SDL 的限制,因为更高级别的抽象不会公开该功能。但是,那么您的代码对于 Windows(或至少是使用 GDI 后端的 Windows)的可移植性“较少”。

      此外,除了图形之外,SDL 还可以做很多其他 OpenGL 不做的事情——音频、输入等。

      【讨论】:

      • 在文档或其他地方是否有关于 SDL 在 Windows 上使用 GDI 的证明?
      • Wikipedia 声明 GDI 是“端口”部分下 Windows 的默认后端。
      【解决方案5】:

      正如许多人所说。 SDL 处理的不仅仅是渲染。除了处理音频、输入和所有其他好东西之外,它还让您可以访问许多您需要自己实现的功能,从而更简单地使用图形。
      所以是的,SDL 是 OpenGL 之上的一个抽象层。您仍然可以在您的应用程序中访问 OpenGL,因此可以使用它的全部功能。
      一个简单的补充,因为您似乎对这种 API 不熟悉:如果您想要一个类似于 SDL(用于 2D 图形)的 API,我建议您查看 SFML。它基于 C++ 而不是 C,具有旋转等功能。它也是基于OpenGL的。 :)

      【讨论】:

        【解决方案6】:

        关于您关于旋转图形的示例:使用 OpenGL(即硬件加速)比使用 SDL 本身(即在 CPU 上)更好,因为它通常是计算密集型的(特别是如果您有很多位图要旋转每一帧,你希望效果是平滑的)。

        但是,没有什么(除了原因)阻止您使用 SDL_gfx 包,该包具有负责旋转和缩放位图的模块 SDL_rotozoom。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多