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);
平移画布 倒置变换
网友评论