鸟语天空
配置Cg开发环境
post by:追风剑情 2014-6-22 21:17

一、下载并安装Cg ToolKit

https://developer.nvidia.com/cg-toolkit

二、检查是否安装成功

在cmd中输入 cg -h

cgc -h.png

cgc [options] file
[options]表示可选配置项,file表示Cg程序文件名。可选配置项包括编译时选择使用的profile、着色程序的入口函数名称,以及着色程序

文件名。比较典型的编译方式是:
cgc -profile glslv -entry main_v test.cg
-profile是profile配置项名;glslv是当前所使用的profile名称;-entry着色程序的入口函数名称配置项;main_v是顶点着色程序的入口函

数名;test.cg是当前的着色程序文件名。编译器指定的着色程序入口函数名默认为main,通常为了将顶点片段着色程序入口函数名区别开来

,而并不使用默认名称。
通常:main_v表示顶点着色程序入口函数名,main_f表示片段着色程序入口函数名。
需要强调如下几点:
1.着色程序分为顶点着色程序和片段着色程序,profile也分为顶点profile和片段profile,所以编译顶点着色程序时必须选用当前图形硬件

支持的顶点profile,同理,编译片段着色程序时必须选用当前图形硬件支持的片段profile。下面所示使用片段profile fp20编译顶点着色程

序是不对的。
cgc -profile fp20 glslv -entry main_v test.cg
所以,如果您的着色程序中同时存在顶点着色程序和片段着色程序,在编译前切记分别选择各自的profile。

2.选择profile如果不被当前图形硬件所支持,编译时会出现错误。被编译的着色程序中,如果存在不被所选择的profile所支持的语句,则

编译时会出现错误。例如,tex2D(sampler2D tex, float3 sz, float2 dsdx, float2 dsdy)不被fp20所支持,如果你的编译形式为:
cgc -profile fp20 -entry main_f test.cg
则会出现错误提示信息:
error C3004: function "tex2D" not supported in this profile。
改用fp30,进行编译就会通过。
cgc -profile fp30 -entry main_f test.cg
尤其需要注意的是,循环语句for,while只被vs_2_x,vp30,vp40,fp40等少量的profile所支持。在CgUsersManual中提到"在其他的profiles

中,for和while循环只有当确切的知道循环次数时才能被使用"。但经过试验,通常在其他profiles编译含义for,while语句时会出现错误提

示信息:
error c6003: instruction limit of exceeded......
因此,如果没有确切的把握,不要在低级的profiles中使用循环控制语句。

3.被编译的着色程序文件名必须加上.cg后缀。

4.另外cgc还提供一种比较特殊的功能:就是将Cg语言所写的着色程序转换为使用GLSL或HLSL所编写的程序。例如,将代码写成如下形式,表

示编译文件test.cg中的顶点着色程序,入口函数名为main_v,并将顶点着色程序转换为glsl程序,然后保存文件direct.glsl。
cgc -profile glslv -o direct.glsl -entry main_v test.cg

5.还有一个非常隐蔽的编译情况是:如果着色程序中的某些变量并没有为最终的输出做出贡献,则编译时会将该部分代码忽略(会检查语法

错误,但并不编译成汇编代码)。通常这一点不会造成太大的影响,但是如果这些变量刚好是从外部宿主程序中传入的变量,并且在着色程

序中没有被使用,则宿主程序传入变量的接口函数可能会报错“找不到变量”。这种情况比较少遇到,但并非不存在,且一旦遇上问题的原

因难以查明。

CG Profiles
一个Cg profile定义了一个“被特定图形硬件或API所支持的Cg语言子集”.

评论:
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容