Cg语言

✍ dations ◷ 2025-11-04 19:57:01 #Cg语言

Cg语言(C for Graphics)是为GPU编程设计的高级着色器语言,由NVIDIA公司开发。Cg极力保留C语言的大部分语义,并让开发者从硬件细节中解脱出来,Cg同时也有一个高级语言的其他好处,如代码的易重用性,可读性得到提高,编译器代码优化。

Cg语言主要参照ANSI C建模,但也从C++和Java以及早期的绘制语言如RenderMan and the Stanford shading language中吸取了一些思想。这些使得很容易写程序然后由编译器进行优化,提高了可读性。而且Cg的设计考虑了GPU的体系结构,如可编程多处理器单元(顶点处理器,像素处理器,外加不可编程单元)。这些部分和应用都是通过数据流连接起来。Cg语言允许分别为顶点和像素写程序。Cg API引入了profiles的概念以处理顶点和像素编程所缺乏的通用性。一个Cg profile就定义了一套整个Cg语言的子集以适应不同的硬件平台和API。Cg程序可以根据运行时的需要或者事先编译成GPU汇编代码。这样可以很容易地将一个Cg像素程序和手写的顶点程序结合起来,或者甚至采用不可编程的OpenGL或者DirectX顶点流水线,反之亦然。

由于Nvidia和微软合作紧密,Cg语言和HLSL的共通之处很多。在早期的官方文档里,这两者被解释成贴了两个牌的同一门语言。

Cg有6种数据型别(data types),跟C语言相当类似,有一些是为GPU特别定义的,型别如下:

 // input vertex struct VertIn {     float4 pos   : POSITION;     float4 color : COLOR0; };  // output vertex struct VertOut {     float4 pos   : POSITION;     float4 color : COLOR0; };  // vertex shader main entry VertOut main(VertIn IN, uniform float4x4 modelViewProj) {     VertOut OUT;     OUT.pos     = mul(modelViewProj, IN.pos); // calculate output coords     OUT.color   = IN.color; // copy input color to output     OUT.color.z = 1.0f; // blue component of color = 1.0f     return OUT; }

参照

  • 程序设计语言
  • 计算机图形学
  • Vertex and pixel shaders
  • High level shader language
  • OpenGL shading language
  • Shader Model
  • OpenGL
  • DirectX

外部链接

  • NVIDIA(页面存档备份,存于互联网档案馆)
    • Cg home page(页面存档备份,存于互联网档案馆)
  • OpenGL home page(页面存档备份,存于互联网档案馆)
  • DirectX home page(页面存档备份,存于互联网档案馆)
  • ShaderTech - GPU Programming
  • NeHe Cg vertex shader tutorial
  • Far Cry(页面存档备份,存于互联网档案馆)
  • A glimpse at Cg Shader Toolkit
  • Virtools(页面存档备份,存于互联网档案馆)

相关

  • 离子通道闸门离子通道(英语:Ion channel)是一种膜蛋白,它通过允许某种特定类型的离子依靠电化学梯度穿过该通道,来帮助细胞建立和控制质膜间的微弱电压压差(见动作电位)。这些离子通道存在于所
  • 本·伯南克本·沙洛姆·伯南克(英语:Ben Shalom Bernanke,/bərˈnæŋki/ bər-NANG-kee,1953年12月13日-),美国犹太裔经济学家,曾任美国联邦储备委员会主席。2015年4月,伯南克取得全球最大固
  • 弗里德里希·施勒格尔卡尔·威廉·弗里德里希·施勒格尔(德语:Karl Wilhelm Friedrich Schlegel,1772年3月10日-1829年1月12日)是德国诗人,文学评论家,哲学家,语言学家和印度学家。卡尔·威廉·施勒格尔
  • 玄部玄部,为汉字索引中文的部首之一,康熙字典214个部首中的第九十五个(五划的则为第一个)。就繁体和简体中文中,玄部归于五划部首;在简体中文中,所属汉字将分属亠部及幺部。玄部通常是
  • 阿尔及利亚华人华人,是阿尔及利亚人口一部分,约有40000人。他们因商贸和支援基建项目等原因来到阿尔及利亚。但华商与当地人关系紧张,因此在2009年8月在首都阿尔及尔市郊爆发冲突。引发了100
  • 普拉尚·博斯普拉尚·博斯(Prashant Bose),化名基尚(Kishan)或基尚达(Kishan da),是印度共产党(毛主义)政治局委员。曾使用化名Nirbhay Mukherjee、Kajal、Kishan-da和Mahesh。 是印度毛主义共产主
  • 张德瀛张德瀛(-1914年),字采珊,号清音堂。广东番禹(今广州市)人。张立镛之子。光绪十七年(1891)举人。长于诗词,亦能绘画,尤长于画梅,彩润不俗。有《耕烟词》五卷、《词征》六卷。
  • 杨复线轮渡杨复线轮渡,为中国上海市黄浦江上的一条对江轮渡航线,航线西起黄浦区复兴东路1号复兴东路轮渡站,东至浦东新区张杨路1号杨家渡轮渡站。航线与复兴东路隧道走向相平行。 轮渡始
  • 龚雄麒龚雄麒(1925年-),男,上海人,中国药物化学家,曾任中国人民解放军军事医学科学院研究员、博士生导师。
  • 萧合卓萧合卓(10世纪-1025年),辽朝(契丹)政治人物,字合鲁隐,契丹突吕不部出身。萧合卓开始为突吕不部之吏。统和初年,任南院侍郎。统和十八年(1000年),北院枢密使韩德让推荐他为中丞。统和二十八年(1010年)二月,奉皇太后萧绰之命出使北宋。回国后,为北院枢密副使。开泰三年(1014年),任左夷离毕。萧合卓常在辽圣宗侧近,明习典故,善于占对。开泰五年(1016年)四月,担任北院枢密使。开泰六年(1017年),萧合卓为都统,王继忠为副都统,萧屈烈为都监攻打高丽国兴化军,没有获胜。回国后,求任用的人在门前排