标签:style color io ar 使用 for sp 数据 div
上一篇中,我是用一个RGB格式的纹理来存储每一帧的画面,其中纹理为m_FrameWidth * m_FrameHeight大小,这样,在内存中,就必须要先对YUV的数据进行排序,然后才能当做RGB的数据格式传给纹理内存。我们发现对一个很大帧的图片进行数据重新排序会花费很多时间,为了减少这个时间,当然可以用汇编语言来进行这个排序的操作。然而,有一种更好的方法。
我们发现在上一次所用到的YUV420数据格式是一种平面格式,他的数据排列十分有规律,这里,考虑用3重纹理来实现他的转换。
先定义3个纹理,格式都为GL_LUMINANCE格式,其中一个纹理的大小为m_FrameWidth * m_FrameHeight,这是用来存放Y数据的,另两个纹理的大小为(m_FrameWidth / 2) * (m_FrameHeight / 2),分别用来存放U和V数据。好啦,我们可以直接使用内存拷贝memcpy()函数分别将YUV的数据拷出来,再生成纹理。
那么frame shader中的程序就要改成:
其中需要注意的两点是:
1: uniform的值是要在每次绘制前调用的。
m_Program就是shader的程序。
2:在使用shader和多重纹理之前,都要进行初始化:glewInit();
图像处理之基础---用Shader实现的YUV到RGB转换:使用3重纹理实现 .
标签:style color io ar 使用 for sp 数据 div
原文地址:http://www.cnblogs.com/pengkunfan/p/4042126.html