美文网首页
分析GPUImage-GLProgram

分析GPUImage-GLProgram

作者: Stroman | 来源:发表于2018-04-02 21:12 被阅读92次

内部成员

NSMutableArray *attributes:首先可以知道它是个数组,从名称可以知道它是个属性的集合。
NSMutableArray *uniforms:我不知道这是啥,也是个数组,好像是标准一类的玩意。
GLuint Program:无符号的整形数,目前我还不知道它是干啥的,看下文分析。
GLuint vertShader:这个叫做着色器,vert是vertexs的缩写,意思是顶点着色器。
GLuint fragShader:这个同样是着色器,frag是fragments的缩写,意思是片元着色器。它和顶点着色器一样都是OpenGL ES中的概念。

属性

BOOL initialized
NSString *vertexShaderLog
NSString *fragmentShaderLog
NSString *programLog

这个就很简单了,一个标志位,3个用于打印日志的字符串变量而已,没啥好解释的。

初始化方法

- (id)initWithVertexShaderString:(NSString *)vShaderString 
            fragmentShaderString:(NSString *)fShaderString;
- (id)initWithVertexShaderString:(NSString *)vShaderString 
          fragmentShaderFilename:(NSString *)fShaderFilename;
- (id)initWithVertexShaderFilename:(NSString *)vShaderFilename 
            fragmentShaderFilename:(NSString *)fShaderFilename;

它的3个初始化方法向外提供了接口,这个接口可以接收2种形式的输入,分别是文件式的和字符串式的着色器代码段。所谓着色器代码段就是用Shader语言编写的代码块,有个专门的名词叫做GLSL(OpenGL Shading Language:OpenGL着色语言)。初始化方法提供了3种组合,即单纯的字符串输入,字符串和文件同时输入,单一的文件输入。不过3个初始化方法都指向了单一的字符串输入的那个初始化方法,即- (id)initWithVertexShaderString:(NSString *)vShaderString fragmentShaderString:(NSString *)fShaderString;。在该方法中,可以看到program = glCreateProgram()这段代码,可知OC代码并没有做什么,它只不过是接收了在GL的返回值,而GL是什么呢?毫无疑问,那肯定是OpenGL的API,这个咱就不解释了因为我也不会。接下来OpenGL会根据输入的着色器字符串来判断编译OpenGL的编译是否成功,不成功就报错,这个判断编译是否成功的过程也是纯OpenGL的,所以这里也不解释。接下来它会把顶点着色器vertShader和片段着色器fragShader附加到program上面。

attribute

它的实质是个字符串,attributes则是用来存储字符串的数组,它同样是把attribute字符串绑定在program的指定位置上。

link、use、validate、dealloc

它们也都是对OpenGL代码的封装,作为iOS开发的我暂时就不深究它们具体的内部实现了。但是它们实现编译、链接、禁用、释放的工作,这道这个就足够了。遗憾的是在这部分源代码中并没有体现出uniform是个什么玩意。

总结

GLProgram其实就是对OpenGL API的封装,接收GLSL代码(就是各种ShaderString)来处理图像的。它是个中间层,连接了OpenGL ES和Objective-C的程序,前者是底层的处理,后者是逻辑的实现。

上一篇:分析GPUImage-使用
下一篇:分析GPUImage-GPUImageContext

相关文章

  • 分析GPUImage-GLProgram

    内部成员 NSMutableArray *attributes:首先可以知道它是个数组,从名称可以知道它是个属性的...

  • 常用数据分析方法

    对比分析(现状分析) 趋势分析(预测分析) 矩阵关联分析 分组分析(原因分析-分布情况) 漏斗...

  • 零售业大数据分析

    零售业数据分析包括: 财务分析销售分析商品分析顾客分析供应商分析人员分析 1 财务分析 1)分析企业的财务状况,了...

  • 分析分析分析

    新工作第三天,沒有前兩天覺得那麼難熬。也不是難熬,不過是有些覺得無所事事。今天用SQL導出了工作的數據,然後下午學...

  • 用数据驱动产品和运营 之 数据分析方法

    数据分析方法 多维事件分析 漏斗分析 留存分析 行为序列分析 A/B测试 用户分群 (一)数据分析——多维事件分析...

  • 9种常用的数据分析方法

    公式拆解、对比分析、A/Btest、象限分析、帕累托分析、漏斗分析、路径分析、留存分析、聚类分析 一、公式拆解 所...

  • 数据分析

    数据分析基本方法 对比分析(横向对比纵向对比) 趋势分析 象限分析 交叉分析 数据分析框架_AARRR分析 逻辑分...

  • OpenCV-Python学习(十):图像滤波之傅里叶变换

    滤波分析又分为 时域分析、频域分析: 时域分析: 直接对信号本身进行分析。 频域分析: 对信号的变化快慢进行分析。...

  • 7张脑图讲透如何做好品牌、价格、渠道、市场、机会分析

    1、品牌分析: 2、价格分析 3、广告分析 4、渠道分析: 5、市场机会分析: 6、满意度分析 7、市场细分分析 ...

  • 谁说菜鸟不懂数据分析-读书整理

    数据分析简述: 数据分析分类及作用: 分类:描述性分析,探索性分析,验证性分析 作用:现状分析,原因分析,...

网友评论

      本文标题:分析GPUImage-GLProgram

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