OpenGL ES GLSL图片加载及纹理翻转

2020-08-01  本文已影响0人  吕建雄

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);

平移画布 倒置变换
上一篇 下一篇

猜你喜欢

热点阅读