还没解决的问题:使用monodevelop开发.cginc文件
1、函数
①形式一:定义在函数被调用之前
②形式二:前项声明
2、out参数
Shader "Custom/sfs_function" {
SubShader {
pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
//前项声明
void Func(out float4 c);
void vert(in float2 objPos:POSITION,out float4 pos:POSITION,out float4 col:COLOR)
{
pos=float4(objPos,0,1);
col=pos;
}
void frag(inout float4 col:COLOR){
Func(col);
}
//在Cg当中,如果需要真正的有效果,需要使用out参数,说明这个计算结果需要直接在原变量当中进行输出
void Func(out float4 c){
c=float4(0,1,0,1);
}
ENDCG
}
}
}
运行后的结果:
3、数组
Shader "Custom/sfs_function" {
SubShader {
pass{
CGPROGRAM
// Upgrade NOTE: excluded shader from DX11, OpenGL ES 2.0 because it uses unsized arrays
#pragma exclude_renderers d3d11 gles
#pragma vertex vert
#pragma fragment frag
//前项声明
void Func(out float4 c);
float Func2(float arr[3]){
float sum;
for(int i=0;i<arr.Length;i++){
sum+=arr[i];
}
return sum;
}
void vert(in float2 objPos:POSITION,out float4 pos:POSITION,out float4 col:COLOR)
{
pos=float4(objPos,0,1);
col=pos;
}
void frag(inout float4 col:COLOR){
//Func(col);
//两个数值相加为1
float arr[]={0.5,0.5};
//col的x值为1,此时得到红色
col.x=Func2(arr);
}
//在Cg当中,如果需要真正的有效果,需要使用out参数,说明这个计算结果需要直接在原变量当中进行输出
void Func(out float4 c){
c=float4(0,1,0,1);
}
ENDCG
}
}
}
4、include:复用代码