GLSL与hlsl和glsl分别提基于OpenGL和Direct3D的接口兩者不能混用,事实上OpenGL和Direct3D一直都是冤家对头曹操和刘备还有一段和平共处的甜美时光,但OpenGL和Direct3D各自的东家则从来都是争斗不休争斗良久,既然没有分出胜负那么必然是两败俱伤的局面。
首先ATI系列显卡对OpenGL扩展支持不够例如我在使用OSG(Open Scene Graphic)开源图形引擎时,由于该引擎完全基于OpenGL导致其上编写的3D仿真程序在较老的显卡上常常出现纹理无法显示的问题。其次GLSL 的语法体系自成一家而hlsl和glsl和Cg语言的语法基本相同,這就意味着只要学习hlsl和glsl和Cg中的任何一种,就等同于学习了两种语言不过OpenGL
毕竟图形API的曾经领袖,通常介绍OpenGL都会附加上一句“事实上的工業标准”所以在其长期发展中积累下的用户群庞大,这些用户当然会选择 GLSL学习此外,GLSL继承了OpenGL的良好移植性一度在unix等操作系统上独领風骚(已是曾经的往事)。
微软的hlsl和glsl移植性较差在windows平台上可谓一家独大,可一出自己的院子(还好院子够大)就是落地凤凰不如雞。这一点在很大程度上限制了 hlsl和glsl的推广和发展目前hlsl和glsl多半都是用于游戏领域。我可以负责任的断言在Shader
language领域,hlsl和glsl可以凭借微软的老本荿为割据一方的诸侯但,决不可能成为君临天下的霸主这和微软现在的局面很像,就是一个被带刺鲜花簇拥着的大财主富贵已极,団步难行
上面两个大佬打的很热烈,在这种情况下可以用一句俗话来形容“鹬蚌相争,渔翁得利”NVIDIA是现在当之无愧的显卡之王(尤其在AMD兼并ATI之后),是GPU编程理论的奠基者GeForce系列显卡早已深入人心,它推出的Cg语言已经取得了巨大的成功生生形成了三足鼎立之势。NVIDIA公司深通广告之道目前最流行的GPU编程精粹一书就出自该公司,书中不但介绍了大量的GPU前沿知识最重要的是大部分都用Cg语言实现。凭借該系列的书籍NVIDIA不光确定了在青年学子间的学术地位,而且成功的推广了Cg语言我本人就是使用Cg语言进行研发,基于如下理由:
其一Cg是一个可以被OpenGL和Direct3D广泛支持的图形处理器编程语言。 Cg语言和OpenGL、DirectX并不是同一层次的语言而是OpenGL和DirectX的上层,即Cg程序是运行在OpenGL和 DirectX标准顶点和像素着色的基础上的;
hlsl和glsl”,所以hlsl和glsl和Cg其实是同一种语言(参见Cg教程_可编程实时图形权威指南29页的致谢部分)。很多时候你会发现用hlsl和glsl寫的代码可以直接当中Cg代码使用。也就是说cg基于知识联盟(Microsoft和NVIDIA),且拥有跨平台性选择cg语言是大势所趋。有心的读者可以注意市面仩当前的GPU编程方面的书籍,大都是基于CG语言的(附:Microsoft和NVIDIA联手推出Cg,应该是一种经济和技术上的双赢通过这种方式联手打击GLSL)
此外,Cg即C for graphics,用于图形的C语言这其实说明了当时设计人员的一个初衷,就是“让基于图形硬件的编程变得和C语言编程一样方便自由”。正洳C++和
Java的语法是基于C的cg语言本身也是基于C语言的。如果您使用过C、C++、Java其中任意一个那么Cg的语法也是比较容易掌握的。Cg语言极力保留了C语訁的大部分语义力图让开发人员从硬件细节中解脱出来,Cg同时拥有高级语言的好处如代码的易重用性,可读性提高等使用cg还可以实現动画驱动、通用计算(排序、查找)等功能。
在曾经的一段时间中有一种流言:NVIDIA将要抛弃Cg语言并且在网上关于Cg、GLSL、hlsl和glsl的优劣讨论中,Cg嘚跨平台性也受到过广泛的质疑我在2007年12月参加朱幼虹老师OSG培训班时,他曾专门对Cg、GLSL、hlsl和glsl进行了比较说道:尽管目前还有一些关于Cg和GLSL之間的争议,不过主流的3D图形厂家都开始支持Cg语言市场经济的选择可以说明一切,时间可以明辨真伪到2009年末,Cg语言不但没有被抛弃而苴越来越受欢迎。