FFmpeg+SDL
FFmpeg可以实现视频的解码,将原始视频文件转换为YUV,而这些像素数据不能直接显示在屏幕上。SDL就是将像素数据“画”在屏幕上,实现YUV到屏幕的转换。
SDL与OpenGL
SDL是跨平台的多媒体库,旨在提供对音频,键盘,鼠标,操纵杆等的低级访问。它还通过OpenGL支持3D硬件。SDL实际上是对底层绘图API(Direct3D,OpenGL)的封装,使用起来明显简单于直接调用底层 API。
OpenGL是由SGI公司1992年7月发布,是一款基于桌面操作系统、功能强大、调用方便的底层3D图形库。 它是与硬件无关的软件接口, 可以在windows/Linux/Unix 之间移植。OpenGL主要是为了实现3D特效而来,系统需要这样的特性时,目前是有XGL这样的东西将X的需求交给OPENGL来渲染,最终输出,所以要渲染全景视频就要用到OpenGL。
但搜索相资料时,我发现两者有单独使用又有混用,关系不容易搞清,参考了一下回答:
- SDL应该也是一个主要处理2D的,可能在处理3D一些的时候使用OPENGL,所以它加入了OPENGL的支持,不能算是SDL内置了OPENGL,只能说是SDL内部加入了接口封装了OPENGL,你可以使用也可以不使用。
- SDL使用OpenGL作为需要在某些平台上进行硬件渲染的内容的硬件渲染器。 如果您拥有这样的平台,则OpenGL是底层的API,SDL是其基础。
SDL处理输入,窗口创建,图像加载以及OpenGL无法处理的其他一些功能。 - 关于旋转图形的示例:使用OpenGL(即硬件加速)比使用SDL本身(即在CPU上)更好,因为它通常是计算密集型的(特别是如果您有很多位图来旋转每一帧, 您希望效果平滑)。
现在很多game游戏里面,都采用 SDL+OpenGL ES 的模式来绘制3D界面。 可以让SDL使用OpenGL ES的函数接口来渲染3D。 - SDL 做的工作就是用X11创建窗口,用EGL创建Surface并绑定,最后就可以用OpenGL或者GLES去render。SDL下的direct3d, opengl, gdi是同类型的,用于render
参考链接:
另:
一、新时代的图形接口
Vulkan(opengl 5.0)
Direct3D 12(微软)
Metal(支持苹果)
二、OpenGL context(环境)
- 桌面平台(Windows Mac Linux)
GLFw是创建一个OpenGL context的库, GLAD关于OpenGL API的库 - Qt平台 QOpenglWidget
- 移动平台(Android,iOS) EGL( 手机用OpenGL ES)
三、关于OpenGL的库