为什么SDL和OpenGL相关?

Why are SDL and OpenGL related?

本文关键字:相关 OpenGL SDL 为什么      更新时间:2023-10-16

我摆弄了一下SDL,发现你不能用SDL旋转图像。无论在哪里问这个问题,人们都说使用OpenGL来做旋转。我一直认为SDL与OpenGL是完全分离的,我这样想错了吗?我甚至找到了在SDL中使用OpenGL的教程,这让我更加困惑。SDL和OpenGL之间究竟是什么关系?为什么不直接使用OpenGL,如果它更强大,允许你做更多的事情(这是从我读到的)?

SDL是OpenGL之上的一层;事实上,它在Windows上默认使用GDI,并且也有DirectX后端。人们可能会说,在默认使用OpenGL的平台上,你可以使用OpenGL来绕过SDL 的限制(嗯哼,Linux),因为更高层次的抽象没有暴露该功能。然而,你的代码"不太"可移植到Windows(或至少使用GDI后端的Windows)。

此外,SDL做了很多其他的事情,除了图形-音频,输入等,OpenGL没有做。

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

OpenGL是一个标准规范,定义了用于编写生成2D和3D计算机图形的应用程序的跨语言、跨平台API。该接口由250多个不同的函数调用组成,可用于从简单的原语绘制复杂的三维场景。OpenGL由Silicon Graphics Inc. (SGI)于1992年开发[4],广泛应用于CAD、虚拟现实、科学可视化、信息可视化、飞行仿真等领域。它也用于视频游戏,在微软Windows平台上与Direct3D竞争(参见OpenGL与Direct3D)。

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

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

然而,没有什么(除了原因)阻止你使用SDL_gfx包,它有模块SDL_rotozoom负责旋转和缩放位图。

SDL处理输入、窗口创建、图像加载和其他一些OpenGL无法处理的功能。

正如许多人所说。SDL处理的不仅仅是渲染。除了处理音频,输入和所有其他的好东西,它使图形的使用更简单,给你访问许多功能,否则你需要自己实现。
是的,SDL是OpenGL之上的抽象层。你仍然可以在你的应用程序中访问OpenGL,从而使用它的全部功能。
一个简单的补充,因为你似乎是这种API的新手:如果你想要一个类似于SDL的API(用于2D图形),我可以推荐你看看SFML。它是基于c++的,而不是C,它有一些函数,比如旋转。它也是基于OpenGL的。:)