OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。
OpenGL可以直接把RGB/RGBA的数据直接写入纹理中,利用纹理在窗口上进行贴图。然而我们知道从解码得到的数据基本上都不是RGB的,而是yuv的像素格式,比较常见的有YV12、NV12等。yuv可以通过软件计算转成RGB格式,然后进行贴图,这是一种很低效率的方式。比较好的做法是,通过GLSL着色器在GPU上进行像素格式转换。
虽然OpenGL是跨平台的,但是显示窗口和OpenGL的绑定,这个是不提供的。在iOS上可以自己实现,也可以继承Apple封装好的GLKView,本文就是采用继承GLKView的方式进行绘图。
@interface ShowView : GLKView
@end
使用的时候可以直接将UIView的class选择为ShowView,当然也可以给UIView添加一个ShowView成为其subview。
-(id)initWithFrame:(CGRect)frame
{
m_bHasInit = false;
self = [super initWithFrame:frame];
if(self)
{
m_glSimpleProgram = 0;
m_pBuffer = NULL;
m_nWidth = 0;
m_nHeight = 0;
// Initialization code
if(self.context == NULL)
{