cg language Notes_cg编译
时间:2011-01-24 来源:DoSomething
摘自《GPU 编程与CG 语言之阳春白雪下里巴人》
一、cg编译
在编写cg程序的时候,首先要明确所写的程序是顶点着色程序还是片段着色程序,二者在编译的时候会被相应的硬件所支持,
cg程序编译时的命令形式是:cgc [options] file
其中:[options]表示配置项,包括编译时选择使用的profile、着色程序的入口函数名称,以及着色程序文件名。
file 表示Cg 程序文件名。
比如典型的编译方式:cgc –profile glslv –entry main_v test.cg
-profile 是profile 配置项名;glslv 是当前所使用的profile 名称;-entry着色程序的入口函数名称配置项;main_v 是顶点着色程序的入口函数名;
test.cg 是当前的着色程序文件名
注意:
1、profile 也分为顶点profile 和片段profile,所以编译顶点着色程序时必须选用当前图形硬件支持的顶点profile,同理,编译片段着色程序时必须选用当前图形硬件支持的片段profile。通俗的说,就是不能用顶点profile去编译片段程序,也不能用片段的profile去编译顶点程序。
2、循环语句for,while只被vs_2_x,vp30,vp40,fp40等少量的profiles所支持。
3、被编译的着色程序文件名必须加上.cg 后缀
4、如果着色程序中的某些变量并没有为最终的输出做出贡献,则编译时会将该部分代码忽略(会检查语法错误,但并不编译成汇编代码)。通常这一点不会造成太大的影响,但是如果这些变量刚好是从外部宿主程序中传入的变量,并且在着色程序中没有被使用,则宿主程序传入变量的接口函数可能会报错“找不到该变量”。这种情况比较少遇到,但并非不存在,且一旦遇上问题的原因难以查明。
二、CG Profiles
Cg profile 定义了一个“被特定图形硬件或API 所支持的Cg 语言子集”,则不同的图形硬件对应着不同的功能子集。Profile 按照功能可以划分为顶点Profile 和片断Profile,而顶点profile 和片段profile 又基于OpenGL 和DirectX 的不同版本或扩展,划分为各种版本。