在顶点和片段着色器中,至少要有一个pass通道。
在CGPROGRAM 和 ENDCG中嵌入语言
在顶点和片段着色器中,要求顶点和片段两个片段级都要编写函数 :
#pragma vertex(关键字) vert(方法名)
#pragma fragment frag
顶点函数中,必须要有POSITION语义 。
void vert(in float2 objPos : POSITION, out float4 pos : POSITION, out float4 col : COLOR)
{
pos = float4(objPos , 0 , 1);
col = float4(0 , 0 , 1 ,1);
}
顶点函数vert是在编译指令中定义好的函数名,参数列表中 :in表示引擎输入,out表示输出。float2表示变量的数据类型,objPos是变量名,POSITION是语义 :描述这个变量是用来做什么的
片段程序最终的目的就是为了计算颜色。所以,必须要有COLOR语义。 片段函数接收了顶点函数的信息
void frag(inout float4 col : COLOR)
{
col = float4(0,1,0,1); // 可以从顶点程序接收,也可以自己定义
}
inout表示这个变量即是从顶点程序中输入的,又要输出。
在CG中,数据类型相同,但是语义不相同的两个变量,是可以互相赋值的