Cg语言概述

Cg(C for Graphcis)语言,是NVIDIA 与Microsoft 合作研发,旨在为开发
人员提供一套方便、跨平台(良好的兼容性),控制可编程图形硬件的高级语言。
Cg 语言的语法结构与C 语言非常类似,使用Cg 编写的着色程序默认的文件后
缀是*. Cg。

开启cg之旅

在NVIDIA 的http://developer.nvidia.com/object/cg_toolkit.html 网页上下载Cg
Toolkit ,截止到2009 年10 月,Cg 语言的版本为2.2。下载之后直接安装即可。
在安装目录的bin 目录下一个可执行程序:cgc.exe。这是NVIDIA 提供的Cg 程
序编译器。
Cg 语言规范是公开和开放的,并且 NVIDIA 开放了Cg 编译器技术的源代
码,使用无限制的、免费的许可证。
目前还没有一个主流的专门为编写着色程序而开发的IDE,很多人都是直接
在文本中写好程序后,然后将文件后缀改为.cg。在网上有一个名为NShader
http://nshader.codeplex.com/)的Visual Studio2008 插件,安装之后可以支持编
写着色程序

cg特性

Cg 同时被OpenGL 与Direct3D 两种编程API 所支持。这一点不但对开发人
员而言非常方便,而且也赋予了Cg 程序良好的跨平台性。一个正确编写的Cg
应用程序可以不做任何修改的同时工作在OpenGL 和Direct3D 之上。

cg编译

cg编译原理

计算机只能理解和执行由0、1 序列(电压序列)构成的机器语言,所以汇
编语言和高级语言程序都需要进行翻译才能被计算机所理解,担负这一任务的程
序称为语言处理程序,通常也被称为编译程序。例如C 或者C++ 编写的程序,
需要首先编译成可执行文件(.exe 文件),然后才能在GPU 上运行,且一旦编译
后,除非改变程序代码,否则不需要重新编译,这种方式称为静态编译(static
coompilation)。静态编译最重要的特征是:一旦编译为可执行文件,在可执行文
件运行期间不再需要源码信息。而动态编译(dynamic compilation)与之相反,
编译程序和源码都要参与到程序的运行过程中。

Cg 语言通常采用动态编译的方式,即,在宿主程序运行时利用Cg 运行库( Cg
Runtime library)动态编译Cg 代码,使用动态编译的方式,可以将Cg 程序当作一
个脚本,随时修改随时运行,节省大量的时间,在OGRE 图形引擎中就是采用
这样的方法。Cg 语言同样支持静态编译方式,即,Cg 源码编译成汇编代码后,这部分目标代码被链接到宿主程序最后的可执行程序中。使用静态编译的好处是只要发布可执行文件即可,源码不会被公开。

Cg 编译器首先将Cg 程序翻译成可被图形API(OpenGL 和Direct3D)所接
受的形式,然后应用程序使用适当的OpenGL 和Direct3D 命令将翻译后的Cg 程
序传递给图形处理器,OpenGL 和Direct3D 驱动程序最后把它翻译成图形处理器
所需要的硬件可执行格式。NVIDIA 提供的Cg 编译器为cgc.exe。

Cg 程序的编译不但依赖于宿主程序所使用的三维编程接口,而且依赖于图
形硬件环境,因为图形硬件自身的限制,不一定支持某种Cg 语句,例如,如果
你所使用的GPU 并不支持循环控制指令,那么在Cg 程序中编写的循环控制语
句将无法通过编译。被特定的图形硬件环境或AIP 所支持的Cg 语言子集,被称
为Cg Profiles。需要注意的是: profile 分为顶点程序的profile 和片段程序的
profile,这是因为顶点着色器和片段着色器原本就不是工作在同一个硬件。

Cg Profiles 是Cg 语言的重要组成部分,在使用Cg 语言编写着色程序时,
首先要考虑的一点就是“当前的图形硬件环境支持那个Cg Profile”,这直接关系
到您所编写的着色程序是否可以在当前的图形硬件上运行。

基于GPU 编程,最令人崩溃的一点是:无法跟踪调试着色程序!这一点目
前还没有解决方案出现。对于一个着色程序,语法错误可以通过编译器发现,而
代码逻辑错误只能是人为查找。常会遇到这种情况,一段代码编译通过,但是运
行结果不在预期之中,如果是C++\JAVA 程序就可以进行跟踪调试,但是着色程
序不能被调试,只能一行代码一行代码的进行逻辑分析。
所以,编译着色程序要非常注意逻辑的严密性,和代码的组织结构,这是为
了更加容易的暴露错误和维护代码。一个良好的习惯是加入注释语句。

cg profiles

Profile 在英文中的意思是“侧面、轮廓”,一个Cg profile 定义了一个“被特定图
形硬件或API 所支持的Cg 语言子集”,从前面的分析我们可以知道,任意一种
shader language 都是基于可编程图形硬件的(寄存器、指令集等),这也就意味
着:不同的图形硬件对应着不同的功能子集。Profile 按照功能可以划分为顶点
Profile 和片断Profile,而顶点profile 和片段profile 又基于OpenGL 和DirectX 的
不同版本或扩展,划分为各种版本。从某种意义上而言,OpenGL 和DirectX 的
发展历程成就了Cg 语言。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值