Cg(C for Graphic)語言概述

 
摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中文名“GPU編程與CG語言之陽春白雪下里巴人”


    Cg(C for Graphcis)語言,是NVIDIA與Microsoft合作研發,旨在爲開發人員提供一套方便、跨平臺(良好的兼容性),控制可編程圖形硬件的高級語言。Cg語言的語法結構與C語言非常類似,使用Cg編寫的着色程序默認的文件後綴是*. Cg。


4.1 開始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插件,安裝之後可以支持編寫着色程序。圖 11展示了使用該插件之後的使用效果。
 


4.2 CG特性


    Cg同時被OpenGL與Direct3D兩種編程API所支持。這一點不但對開發人員而言非常方便,而且也賦予了Cg程序良好的跨平臺性。一個正確編寫的Cg應用程序可以不做任何修改的同時工作在OpenGL和Direct3D之上。


4.3 CG 編譯
4.3.1 CG編譯原理


    計算機只能理解和執行由0、1序列(電壓序列)構成的機器語言,所以彙編語言和高級語言程序都需要進行翻譯才能被計算機所理解,擔負這一任務的程序稱爲語言處理程序,通常也被稱爲編譯程序。例如C或者C++ 編寫的程序,需要首先編譯成可執行文件(.exe文件),然後才能在GPU上運行,且一旦編譯後,除非改變程序代碼,否則不需要重新編譯,這種方式稱爲靜態編譯(static coompilation)。靜態編譯最重要的特徵是:一旦編譯爲可執行文件,在可執行文件運行期間不再需要源碼信息。而動態編譯(dynamic compilation)與之相反,編譯程序和源碼都要參與到程序的運行過程中。


    Cg語言通常採用動態編譯的方式,即,在宿主程序運行時利用Cg運行庫( Cg Runtime library)動態編譯Cg代碼,使用動態編譯的方式,可以將Cg程序當作一個腳本,隨時修改隨時運行,節省大量的時間,在OGRE圖形引擎中就是採用這樣的方法。在文獻[2]的1.4.2章節中提到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”,這直接關係到您所編寫的着色程序是否可以在當前的圖形硬件上運行。

發佈了6 篇原創文章 · 獲贊 7 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章