本熊前言:此文帮助理解GPUImage3,之前对ShaderUniformSettings比较困惑!
我从GPUImage3中开了个分支,目的是为GPUImage3添加中文注释,同时学习Metal。目前完成了Base、Inputs部分,欢迎有兴趣者一起加入,添加中文注释。
在GPUImage3中ShaderUniformSettings可能比较难以理解,这个类要与shader有联系、与渲染管线有联系、与滤镜实现部分依旧有联系,想要自定义滤镜,这个类必须吃透才行。uniform这个可能有点疑惑,在Metal、OpenGL中是一致的,只能在片段着色器中使用,具体请看本文分析。
本文将翻译ShaderUniformSettings.swift文件。

一、从名字上来看:
名字的意思是着色器统一配置,这个若是第一次看是没什么感觉的,应该和着色器有关系。
二、从内容上来看:
public subscript(key:String) -> Float
public subscript(key:String) -> Color
public subscript(key:String) -> Position
public subscript(key:String) -> Size
public subscript(key:String) -> Matrix3x3
public subscript(key:String) -> Matrix4x4
Subscript access 下角标访问,swift特性,可以定义在类(Class)、结构体(structure)和枚举(enumeration)
我们可以知道ShaderUniformSettings存的就是这些东西Float、Color、Position、Size、Matrix3x3、Matrix4x4
三、从使用上来看:
- yuvConversionVideoRangeFragment 中的 YUVConversionUniform
- thresholdFragment 中的 ThresholdUniform
- brightnessFragment 中的 BrightnessUniform
- exposureFragment 中的 ExposureUniform
- contrastFragment 中的 ContrastUniform
- ······
很多fragmentshader都使用了者个变量uniform,且是有共性的:
总结
综上,我们可以推断出,uniform是用于标记可控制的,即值可以改变的且存在于Fragment中的变量。
如调节滤镜的浓度、亮度、灰度等可调节的值,这种值的类型可以是Float、Color、Position、Size、Matrix3x3、Matrix4x4.以后你如果想通改变shader中的值,那么请使用uniform。
ShaderUniformSettings就是负责记录查找这些属性的。
具体可见代码库分析。
如果你想参与翻译一些知名代码仓库,请加我微信,备注翻译哦。
加V备注:掘金;入群一起学习🐻
