该篇博客是我自己在学习Shader时,看《GPU编程与CG语言之阳春白雪下里巴人
》Cg语言概述这章,觉得有些东西自己记不住,因此记录下来。

Cg ToolKit下载地址: NVIDIA 的http://developer.nvidia.com/object/cg_toolkit.html 网页
下载之后直接安装即可。在安装目录的 bin 目录下一个可执行程序: cgc.exe 。这是 NVIDIA 提供的 Cg 程序编译器。

Cg编译
如果 Cg Toolkit 安装正确,在 NVIDIA Corporation\Cg\bin 文件夹下会看到
cgc.exe 文件。首先打开命令行窗口,输入 “cgc –h” (引号不用输入),如果安装
正确,则会出现下图所示的提示信息

Cg 程序编译的命令形式为:

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 等少量的profiles 所支持。在其他的 profiles 中, for 和 while 循环只有当确切的知道循环次数时才能被使用 。但经过试验,通常在其他 profiles 编译含义 for,while 语句时会出现错误提示信息:

error c6003 : instruction limit of exceeded……

因此,如果没有确切的把握,不要在低级的 profiles 中使用循环控制语句。
3. 被编译的着色程序文件名必须加上 .cg 后缀。如果没有加后缀,写成如下的
形式:

cgc –profile glslv –entry main_v

则会出现错误提示信息:

fatal error C9999: Can’t open file:test

4.另外 cgc 还提供一种比较特殊的功能:就是将 Cg 语言所写的着色程序转换为使用 GLSL 或 HLSL 所编写的程序。例如,将代码写成如下形式,表示编译文件 test.cg 中的顶点着色程序,入口函数名为 main_v ,并将顶点着色程序转换为 glsl 程序,然后保存成文件 direct.glsl 。

cgc –profile glslv –o direct.glsl –entry main_v test.cg

5.还有一个非常隐蔽的编译情况是:如果着色程序中的某些变量并没有为最终的输出做出贡献,则编译时会将该部分代码忽略(会检查语法错误,但并不编译成汇编代码)。通常这一点不会造成太大的影响,但是如果这些变量刚是从外部宿主程序中传入的变量,并且在着色程序中没有被使用,则宿主程序传入变量的接口函数可能会报错 “ 找不到该变量 ” 。这种情况比较少遇到,但并非不存在,且一旦遇上问题的原因难以查明,故而我在此写上,希望可以有所帮助。

写在最后,由于我自己经常使用Mac开发,但在英伟达官网上下载的mac版本并不能正常安装,各种百度,谷姐都找不到问题,愁死人了,最后我决定先用Window系统,等我再搞搞Mac看是什么问题。

附一张mac上Cg ToolKit安装路径

Shader学习之Cg语言一(Cg语言概述)相关推荐

  1. Shader学习之Cg语言二(Cg数据类型)

    由于在用Cg语言写代码的时候,没有好用的编辑器,也不可以像Java,C++,C#这类语言的断点调试,所有逻辑需要写得很小心,变量名字也需要自己全部记住,相当于在文本编辑器上写代码,这样一些数据类型名称 ...

  2. C++语言学习(十二)——C++语言常见函数调用约定

    C++语言学习(十二)--C++语言常见函数调用约定 一.C++语言函数调用约定简介 C /C++开发中,程序编译没有问题,但链接的时候报告函数不存在,或程序编译和链接都没有错误,但只要调用库中的函数 ...

  3. 《手把手教你学C语言》学习笔记(1)---C语言的特点

    学习C语言的原因,主要是需要使用C语言编程,我用故我学,应该是最主要的原因了. C语言的定位:C语言严格意义上只能算是中级语言,是面向过程编程语言的集大成者,虽然这种语言有很多的问题,但总体而言是瑕不 ...

  4. Python语言学习之图表可视化:python语言中可视化工具包的简介、安装、使用方法、经典案例之详细攻略

    Python语言学习之图表可视化:python语言中可视化工具包的简介.安装.使用方法.经典案例之详细攻略 目录 python语言中可视化工具包的简介 python语言中可视化工具包的安装 pytho ...

  5. 一起学习C语言:C语言循环结构(三)

    上一篇 <一起学习C语言:C语言循环结构(二)> 中,我们了解了while.do-while语法和continue语句的应用场景.本篇文章中,我们分析循环结构嵌套使用,并通过几个示例分析c ...

  6. 一起学习C语言:C语言循环结构(二)

    前言: 前一段时间发表的<["天才"必经之路]>文章非常热门,虽然我知道它会是一篇成功的文章,但,它的火爆程度还是超出了我的预期.前几日,我写了这个系列的第二篇文章,文 ...

  7. 一起学习C语言:C语言循环结构(一)

    上一章 <一起学习C语言:C语言基本语法> 系列内容中,我们了解了if语句.switch语句的使用方式以及不同运算符的优先级等内容.本章节,我们学习C语言循环结构用法. 章节预览: 1. ...

  8. 一起学习C语言:C语言基本语法(五)

    上一篇 <一起学习C语言:C语言基本语法(四)> 中,我们了解了位运算符的语法和不同的应用场景中的选择.本篇文章中,我们分析switch语句,并通过几个示例分析break.#define和 ...

  9. 一起学习C语言:C语言基本语法(四)

    上一篇 <一起学习C语言:C语言基本语法(三)> 中,我们了解了关系运算符的语法和不同的应用场景中的选择.本篇文章中,我们分析位运算符的用法,并通过几个示例分析不同的位运算符的运算方式和负 ...

最新文章

  1. Linux 应用程序 嵌汇编,Linux下C语言嵌汇编
  2. 011_AOP注解开发
  3. 什么是 ANSI C 和 GNU C
  4. 《Atlas基础教程》勘误(持续更新)
  5. python命令提示符窗口在哪里_详解python命令提示符窗口下如何运行python脚本
  6. github项目怎么运行_利用 GitHub 从零开始搭建一个博客
  7. 荣耀30 Pro+价格曝光:顶配真的高攀不起!
  8. RedHat Enterprise Linux 7下安装 Oracle 12C
  9. win10好用的C语言软件,9款超级实用的Win10软件,一定要收藏,简直不要太好用
  10. 下载 Google Chrome 离线安装包
  11. 医院管理系统/医院药品管理系统
  12. 拼多多联盟-使用pid和custom_parameters进行备案
  13. 嵌入式软件硬件比例_嵌入式软件硬件常识
  14. php打开文件fopen函数
  15. Css动画效果旋转图片
  16. MaxScript调用IGame
  17. 怎么将计算机恢复到前一天的状况,excel表格恢复前一天数据-我想将excel表格中的两组数据做对比(数据是每天变......
  18. Machine Learning - A/B Test
  19. 谷粒商城高级篇(38)——异步编排之商品详情查询
  20. 分享三个网页访问(点击)统计脚本,展示访问来源地图分布

热门文章

  1. Nginx学习 ---- js胖笔记
  2. 用php编写多项选择题_php 多选框问题(类似一道多选题)多选题的答案 以及正确答案都记录到数据库里了,读取修改问题...
  3. Focus事件与blur事件
  4. 【踩坑】spconf.sty Latex样式模板的name包含下划线
  5. 照片后期制作计算机配置,追求色彩真实还原,图片后期处理电脑配置推荐
  6. 【3】IMU模块:PA-IMU-460 ROS驱动 + 与GNSS时间同步
  7. 最不伤耳朵的耳机有哪些,分享五款不伤耳的骨传导耳机
  8. 演讲实录丨徐宗本院士:如何突破机器学习的先验假设?
  9. Kafka多个消费者监听消费同一个Topic主题
  10. 微软电话(中国)激活操作步骤