FFmpeg与OpenGL与SDL

  • Post author:
  • Post category:其他




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

参考链接:


SDL内置了调用OpenGL的函数,但是为什么还有人用SDL+OPENGL编程?

.


SDL 和 OpenGL 关系

.


为什么SDL和OpenGL相关?

.

另:



一、新时代的图形接口

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的库

在这里插入图片描述



版权声明:本文为qq_43541062原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。