前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【iOS】(三)GPUImageFilter,GPUImageInput

【iOS】(三)GPUImageFilter,GPUImageInput

作者头像
MapleYe
发布2020-03-28 20:57:39
6860
发布2020-03-28 20:57:39
举报
文章被收录于专栏:MapleYe

一、前言

通过前面的两篇文章,我们知道了滤镜链的工作原理,以及纹理数据是怎么产生的,那么接下来,就从源码的角度继续分析GPUImageFilterGPUImageInput

二、GPUImageFilter

代码语言:javascript
复制
@interface GPUImageFilter : GPUImageOutput <GPUImageInput>

看到GPUImageFilter的头文件,我们就知道它再滤镜链中,就是承担着桥梁的作用,是实现Source->GPUImageFilter->GPUImageInput的桥梁。 GPUImageFilter主要是用于封装OpenGLES 中的vertexShaderfragmentShader生成program的一个类,并且封装了访问shader里面属性的方法。例如GPUImagePoissonBlendFilter中,可以直接通过对mix修改,然后将mix的值调用program传递给shader

代码语言:javascript
复制
- (void)setMix:(CGFloat)newValue;
{
    _mix = newValue;
    
    [self setFloat:_mix forUniform:mixUniform program:filterProgram];
}

在这里,用于生成program的工具类就是GLProgram,其作用就是加载vertexShaderfragmentShader生成program,并且提供attributeIndexuniformIndex的获取,具体源码需要OpenGLES的基础才能阅读

三、GPUImageInput

GPUImageInput具备接收图像数据输入,也就是渲染的终点,在GPUImage里,有四大组件,使用的比较多的GPUImageMovieWriterGPUImageView

3.1、GPUImageMovieWriter

封装了AVAssetWriter,可以逐帧从帧缓存的渲染结果中读取数据,最后通过AVAssetWriter将视频保存到指定的路径

3.2、GPUImageView

继承UIView,通过输入的纹理,执行一遍渲染流程

3.3、GPUImageRawDataOutput

通过rawBytesForImage属性,获取到当前输入纹理的二进制数据

3.4、GPUImageTextureOutput

通过提供协议方法newFrameReadyFromTextureOutput:,再每一帧渲染结束后,将自身返回,通过texture属性就可以拿到输入纹理的索引

四、总结

由于本人对GPUImageFilterGPUImageInput研究的并不是很深,所以这里先留个坑吧,或许日后有新的体悟的时候,会对这里的内容进行扩展吧,那么对于GPUImage的源码阅读,就到这里为止吧。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、GPUImageFilter
  • 三、GPUImageInput
    • 3.1、GPUImageMovieWriter
      • 3.2、GPUImageView
        • 3.3、GPUImageRawDataOutput
          • 3.4、GPUImageTextureOutput
          • 四、总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档