US2S3L7——函数
US2S3L7——函数
本章代码关键字
1 | in //表示输入参数,用于外部传给内部,内部只会用,不会改,可以有多个 |
函数
CG语法中的函数声明和使用几乎和C#中一模一样
区别主要是CG中的 in
和 out
关键字
in
表示输入参数,用于外部传给内部,内部只会用,不会改,可以有多个-
out
表示输出参数,用于内部传给外部,内部必须初始化或修改,可以有多个
对于有返回值的函数,要不采用返回值形式,要不采用 out
无返回值的函数
基本结构:
1 | void name(in 参数类型 参数名, out 参数类型 参数名) |
-
void
:以void
开头,表示没有返回值 -
name
:函数的名称 -
in
:表示是输入参数,表示由函数外部传递给函数内部,内部不会修改该参数,只会使用该参数进行计算,允许有多个 -
out
:表示是输出参数,表示由函数内部传递给函数的调用者,在函数内部必须对该参数值进行初始化或修改,允许有多个
注意:
in
和 out
都可以省略,省略后就没有了 in
和 out
相关的限制
虽然可以省略,但是建议大家在编写 Shader 时不要省略 in
和 out
因为他们可以明确参数的传递方式,提高代码的可读性和可维护性
可以让我们更容易的理解函数是如何与参数交互的,减少潜在的误解可能
1 | void Test(in fixed inF, out fixed outF) |
CG语言里还存在一个不常用的关键字 inout
:它表示输入输出参数,既作为输入 in
又作为输出 out
。
参数的值可以在函数内部被修改,并且该修改会在函数调用结束后保留在参数中。在函数外部可以继续使用修改后的内容
有返回值的函数
基本结构:
1 | type name(in 参数类型 参数名) |
-
type
:返回值类型 -
return
:返回指定类型的数据
注意:
虽然可以在有返回值的函数中使用 out
参数,但是这并不是常见做法,除非是一些自定义逻辑函数
对于顶点/片元着色器函数只会使用**单返回值**的方式进行处理
1 | float TestFunc(in float inF) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!