为什么SDL和OpenGL相关?
Why are SDL and OpenGL related?
我摆弄了一下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的。:)
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 了解 GLM- openGL 中的相机转换
- 如何在全屏模式下(在OpenGL中)使背景透明
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- OpenGL大的3D纹理(>2GB)非常慢
- OpenGl glm rotate
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- OpenGL在启用深度测试时不会丢弃我的碎片
- OpenGL相机和相机空间转型的困惑
- 将鼠标悬停在问题上时与预期">"相关的代码错误
- GCC和Clang在与__builtin_constant_p相关的static_assert方面有所不同
- OpenGL将纹理四边形渲染为(0,0)
- 如何使用CMAKE在Mac上链接与OpenGL相关的库
- OpenGL纹理加速-视图相关纹理
- 与GLSL相关的OpenGL应用程序代码
- OpenGl 对象不显示,着色器相关
- 无法在InitializeGL和paintGL之外调用OpenGL相关函数
- 试图将库链接到使用OpenGL的文件,而链接器无法找到GL相关文件
- 为什么SDL和OpenGL相关?