视频渲染
视频渲染
libSDL
1.libSDL,他可以为开发者提供面向libSDL的API编程,libSDL内部会解决多个平台的OpenGL上下文环境以及窗口管理问题,开发者只需要交叉编译到各自的平台上就可以做到只写一份代码即可运行在多个平台。其中FFmpeg中的ffplay这一工具就是基于libSDL进行开发的。
OpenGL ES
几何图元:包括点,线,三角形,均是通过顶点来指定的。模型:根据几何图元绘制的物体。渲染:计算机根据模型创建的过程。最终渲染过程结束后,人眼所看到的图像就是由屏幕上所有的像素点可以组成的一个大的一维数组,每4个Byte即表示一个像素点的RGBA数据,而在显卡中,这些像素点可以组成帧缓冲区的形式,帧缓冲区保存了图形硬件为了控制屏幕上所有像素的颜色和强度所需要的全部信息。
1.指定几何对象
就是绘制几何图元,glDrawArrays,第一个参数是mode
2.顶点处理
根据模型视图和投影矩阵进行的变换来改变顶点的位置,根据纹理坐标与纹理矩阵来改变纹理坐标的位置,如果涉及到三维的渲染,那么这里还需要处理光照计算和法线变换。这里的输出是以gl_Position来表示具体的顶点位置的,如果以点绘制几何图元,那么输出应该是gl_PointSize.
3.图元组装
顶点处理之后,模型的顶点和纹理坐标已经确定好了,在这个阶段,顶点将会根据应用程序送往图元的规则,将纹理组装成图元
4.栅格化操作
由图元装配好的图元数据,将会被分解成更小的单元并对应于帧缓冲区的各个像素。这些单元称为片元,一个片元可能包含窗口的颜色,纹理坐标等。片元的属性根据顶点坐标利用插值来确定的,这其实是栅格化操作,也就是确定好每一个片元是什么。
5.片元处理
通过纹理坐标取得纹理中对应的片元的像素值,根据自己的业务处理来变换这个片元的颜色,这里的输出是gl_FragColor,用于表示修改之后的像素的最终结果。
6.帧缓冲操作
该阶段主要负责帧缓冲的写入操作,这也是渲染管线中的最后一步,负责将最终的像素写到帧缓冲区中。
glFinish和glFlush
提交给OpenGL的绘图指令并不会马上发送到图形硬件执行,而是放到一个缓冲区里面,等待缓冲区满了之后再将这些指令发给图形硬件执行,所以指令比较少时是无法填满缓冲区的,自然也不会马上执行达到需要的效果。因此每次写完绘图代码,需要让其立即完成效果时,开发者需要在代码后面添加glFlush()和glFinish()函数glFlush()是将缓冲区的指令立刻发送给图形硬件执行,发送完立即返回。glFinish()将缓冲区的指令立刻发送给图形硬件执行,但是要等待图形硬件执行完成之后才返回这些指令。