具有强度控制的GPUImageLookupFilter?

时间:2014-05-22 10:47:22

标签: ios opengl-es gpuimage

我正在使用Brad Larson的GPUImage框架来完成我的项目。 我试图找到一种方法来实现对GPUImageLookupFilter的强度控制并且遇到了 https://github.com/BradLarson/GPUImage/issues/1485

  

gl_FragColor = mix(textureColor,vec4(vec3(newColor),1.0),mixTexture);
  " textureColor"是原始纹理," newColor"是LookupFilter结果,mixTexture是Alpha值,它是(0~1.0),您可以将其视为强度变量。

我不知道如何实现这个, 我不知道如何实现OpenGL着色器。谁能告诉我在哪里添加此代码来实现GPUImageLookupFilter的强度控制?

1 个答案:

答案 0 :(得分:2)

每个GPUImage过滤器都有自己的片段着色器。这些在过滤器的.m文件的顶部定义为字符串常量。在GPUImageLookupFilter的情况下,它是GPUImageLookupFilter.m顶部的kGPUImageLookupFragmentShaderString。

这些片段着色器是类似C的程序,与标准C相比具有一些独特的属性,但是一旦您看到一些示例,仍然应该相当容易理解。

正如在该问题中指出的那样,如果您想要这种强度控制(出于性能原因我默认不包括),您将要创建一个新的过滤器类并复制将GPUImageLookupFilter中的代码放入其中(其中除片段着色器之外几乎没有)。片段着色器有两个版本,一个用于Mac(通常没有精确限定符),一个用于iOS。在这两者的底部是输出最终颜色的线。您将要修改它以使用如上所述的mix()操作。

如果您不想对强度值进行硬编码,您还需要添加一个属性来调整此强度值。为此,您需要在片段着色器中设置匹配的制服以接受此属性。查看GPUImageBrightnessFilter以获取与片段着色器中的统一匹配的属性的简单示例。

我建议查看为各种过滤器提供的片段着色器代码,以了解这些代码的编写方式及其工作原理。只需检查框架中已有的各种着色器,大多数人都能够掌握基础知识。