您的位置:首页 > 产品设计 > UI/UE

GPUImge

2015-06-19 16:24 447 查看
一、给glsl中的fragmentshader添加uniform变量

因为GUPImage已经做好了很多基础内容,所以有些地方直接调用函数即可。

向fragment中添加Uniform变量,首先需要往里面添加属性名称,即在initializeAttributes调用GLProgram类的addAttribute方法:

[filterProgram addAttribute:@"testUniform";


这个函数会调用glBindAttribLocation将这个属性绑定到一个索引值上。

接着在initWithVertexShaderFromString(因为initWithFragmenShaderString中会调用这个方法)中获取索引值

testUniformIndex = [filterProgram uniformIndex:@"testUniform"];


uniformIndex函数会调用glGetUniformLocation函数获取"testUniform"的索引值。

最后在renderToTextureWithVertices函数里面进行赋值,赋值时主要使用索引值

glUniform1i(testUniformIndex, 1);


glUniform函数有多种形式,可以根据自己的需求选择,接着就可以将"testUniform"添加到fragmentshader里面进行调用了。

二、OpenGL ES的坐标系以及glsl中的一些参数

1、纹素

纹素即texel,为texture2D方法第二个参数使用的基本单位。texelSizeX = 1.0 / fWidth,这儿的fWidth不是手机窗口的宽度,而是图片原始的宽度或者摄像头输出(这个不太确定)的宽度。所以纹理的坐标都是0-1.0,不管多宽或者多高。

2、gl_FragCoord

因为所有的纹理相关的处理都在fragment shader里面,而这里面有时候也需要对坐标进行处理,但gl_FragCoord虽说是相对于窗口的二维坐标,但这并非真是的物理坐标(即屏幕的像素大小,[[UIScreen mainScreen] bounds]),而是可以设置的高宽,目前不太清楚具体如何设置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: