OpenGL ES加载图片流程:
整体流程
1、创建图层
创建特殊图层:CAEAGLLayer
注意:需要重写View的layerClass方法,将其返回的图层从CALayer替换成CAEAGLLayer;
重写UIView的layerClass
创建图层
2、创建上下文
创建上下文
3、清空缓存区
清空缓存区
4、设置RenderBuffer(渲染缓存区)
渲染缓存区
5、设置FrameBuffer(帧缓存区)
帧缓存区
6、渲染
渲染流程
5、加载着色器方法
编译顶点着色程序、片元着色程序
具体第6步渲染代码,可以进入OpenGL ES加载图片源码下载代码,查看draw方法中的实现细节;
关于纹理解压缩,纹理解压缩使用的是CoreGraphic,因为纹理解压缩比较耗时,所以一般都是在异步线程对其进行解压缩,图片解压缩原理是:对图片进行重新绘制,得到一张新的解压缩后的位图。其中,用到的核心函数是:CGBitmapContextCreate
获取图片基本信息
解压缩纹理核心
绘制
鉴于画布坐标起点为左下,而UIView坐标体系起点为作上,所以绘制出图片后,图片是倒置的,那么如何解决图片倒置呢?
答案是:最常用的方法是,解压缩图片是,将图片源文件翻转
倒置代码实现
CGContextTranslateCTM(spriteContext, rect.origin.x, rect.origin.y);
CGContextTranslateCTM (1)
CGContextTranslateCTM(spriteContext,0, rect.size.height);
CGContextTranslateCTM (2)
CGContextScaleCTM(spriteContext,1.0, -1.0);
翻转画布
CGContextTranslateCTM(spriteContext, -rect.origin.x, -rect.origin.y);
CGContextDrawImage(spriteContext, rect, spriteImage);
平移画布
倒置变换