美文网首页
OpenGL ES GLSL图片加载及纹理翻转

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

作者: 吕建雄 | 来源:发表于2020-08-01 16:21 被阅读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);

    平移画布 倒置变换

    相关文章

      网友评论

          本文标题:OpenGL ES GLSL图片加载及纹理翻转

          本文链接:https://www.haomeiwen.com/subject/asiyrktx.html