前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3.4 CG VS GLSL VS HLSL

3.4 CG VS GLSL VS HLSL

作者头像
代码咖啡
发布2018-08-28 10:32:07
1.9K0
发布2018-08-28 10:32:07
举报
文章被收录于专栏:程序员叨叨叨

文章内容源自《GPU编程与CG语言之阳春白雪下里巴人》,因笔者读书易中途放弃,遂每读一章节,将其移至简书平台,以此作为对自己读书的勉励。笔者用粗体斜体 标注了关键词句,望感兴趣的读者们一起学习共勉。猛戳这里查看更多!

3.4 CG VS GLSL VS HLSL

Shader language 目前有 3 种主流语言:基于 OpenGL 的 GLSL(OpenGL Shading Language,也称为 GLslang),基于 Direct3D 的 HLSL(High Level Shading Language),还有 NVIDIA 公司的 Cg (C for Graphic)语言。

GLSLHLSL 分别基于 OpenGL 和 Direct3D 的接口,两者不能混用,事实上 OpenGL 和 Direct3D 一直都是冤家对头,曹操和刘备还有一段和平共处的甜美时光,但 OpenGL 和 Direct3D 各自的东家则从来都是争斗不休。争斗良久, 既然没有分出胜负,那么必然是两败俱伤的局面。

首先 ATI 系列显卡对OpenGL扩展支持不够,例如我在使用OSG(Open Scene Graphic)开源图形引擎时,由于该引擎完全基于 OpenGL,导致其上编写的 3D 仿真程序在较老的显卡上常常出现纹理无法显示的问题。其次 GLSL 的语法体系自成一家,而 HLSL 和 Cg 语言的语法基本相同,这就意味着,只要学习 HLSL 和 Cg 中的任何一种,就等同于学习了两种语言。不过 OpenGL 毕竟图形 API 的曾经领袖,通常介绍 OpenGL 都会附加上一句“事实上的工业标准”,所以在其长期发展中积累下的用户群庞大,这些用户当然会选择 GLSL 学习。此外,GLSL 继承了 OpenGL 的良好移植性,一度在 unix 等操作系统上独领风骚(已是曾经的往事)。

微软的 HLSL 移植性较差,在 windows 平台上可谓一家独大,可一出自己的院子(还好院子够大),就是落地凤凰不如鸡。这一点在很大程度上限制了 HLSL 的推广和发展。目前 HLSL 多半都是用于游戏领域。我可以负责任的断言,在 Shader language 领域,HLSL 可以凭借微软的老本成为割据一方的诸侯,但,决不可能成为君临天下的霸主。这和微软现在的局面很像,就是一个被带刺鲜花簇拥着的大财主,富贵已极,寸步难行。

上面两个大佬打的很热烈,在这种情况下可以用一句俗话来形容,“鹬蚌相争,渔翁得利”。NVIDIA 是现在当之无愧的显卡之王(尤其在 AMD 兼并 ATI 之后),是 GPU 编程理论的奠基者,GeForce 系列显卡早已深入人心,它推出的 Cg 语言已经取得了巨大的成功,生生形成了三足鼎立之势。NVIDIA 公司深通广告之道,目前流行的 GPU 编程精粹一书就出自该公司,书中不但介绍了大量的 GPU 前沿知识,重要的是大部分都用 Cg 语言实现。凭借该系列的书籍, NVIDIA 不光确定了在青年学子间的学术地位,而且成功的推广了 Cg 语言。我本人就是使用 Cg 语言进行研发,基于如下理由:

  • 其一Cg 是一个可以被 OpenGL 和 Direct3D 广泛支持的图形处理器编程语言。 Cg语言和OpenGL、DirectX并不是同一层次的语言,而是OpenGL和DirectX 的上层,即,Cg 程序是运行在 OpenGL 和 DirectX 标准顶点和像素着色的基础上的;
  • 其二Cg 语言是 Microsoft 和 NVIDIA 相互协作在标准硬件光照语言的语法和语义上达成了一致,文献[1]在 1.3.1 节的标题就是“Microsoft and NVIDIA’s Collaboration to Develop Cg and HLSL”,所以,HLSL 和 Cg 其实是同一种语言(参 见 Cg 教程_可编程实时图形权威指南 29 页的致谢部分)。很多时候,你会发现用 HLSL 写的代码可以直接当中 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 的优劣讨论中,Cg 的跨平台性也受到过广泛的质疑。我在 2007 年 12 月参加朱幼虹老师 OSG 培训班时,他曾专门对 Cg、GLSL、HLSL 进行了比较,说道:尽管目前还有一些关于 Cg 和 GLSL 之间的争议,不过主流 的 3D 图形厂家都开始支持 Cg 语言。市场经济的选择可以说明一切,时间可以明辨真伪,到 2009 年末,Cg 语言不但没有被抛弃,而且越来越受欢迎。

我在 OGRE 官方论坛上,搜索过有关使用 Cg 和 GLSL 的讨论帖子,套用其中一个帖子的结尾语来结束本章:

In the last year I have never had to write a single HLSL/GLSL shader. Bottom line, I can’t think of any reason NOT to use CG.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.08.19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3.4 CG VS GLSL VS HLSL
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档