在历史上,图形硬件都是从非常低层上进行开发的。通过设置状态,例如贴图合并(Texture-combining)模式,来设定固定功能的管线(pipelines)。更近一些的时候,程序员可以通过使用汇编语言层的编程接口来设置可编程管线。理论上来说,这些低层的编程语言提供了极大的灵活性。在实际应用中,它们在使用起来却是很痛苦并且在有效使用硬件上设置了极大的障碍。
使用高级编程语言,而不是使用以前的低层编程语言,有以下几个优势:
当着色器(shader)被开发出来的时候,高级语言可以加速运行周期。对于着色器的最终测试就变成了"它看起来对吗?"。到最后,快速原型和修改着色器在高质量效果的快速开发上就变得至关重要。
编译器可以自动优化代码并执行低层任务,例如注册地址分配,那是很容易出错并且乏味的操作。
着色代码用高级语言编写更容易被阅读和理解。这样也允许通过修改以前编写的着色器,从而轻松的创建新的着色器。从最好的艺术家和程序员哪儿学习他们编写的着色器是多么好的方式啊。
用高级语言编写的着色器要比用汇编代码更能够适用于广泛的平台。
这一章介绍了Cg(C for Graphics),为GPU编程特别设计的新的高级语言。Cg提供了刚才提到的所有优点,它最终使程序员使用这个语言轻松的进行GPU编程并发挥了GPU固有的强大动力。
Cg语言
Cg基于C,但是经过增强和调整使它可以轻松的编程并编译成为高度优化的GPU代码。Cg代码看起来和C代码非常像,使用相同的声明语法,函数调用和大多数的数据类型。
在详细描述Cg语言之前,解释一下Cg语言和C的一些不同点是非常重要的。基本上来说,是因为GPU和CPU编程模式的不同造成的。