我在這裏有三個問題:GLSL和c有什麼區別?
- Qt/3D API是由GLSL代碼實現的嗎?
- GLSL代碼是否作爲正常的c/C++代碼編譯和鏈接,並且可以在CPU(不是GPU)上運行?
- 爲什麼GLSL比正常的c/C++更好地渲染?
我在這裏有三個問題:GLSL和c有什麼區別?
您似乎對GLSL有什麼根本性的誤解。它不是圖形的編程語言。它是一個着色器語言。
在OpenGL rendering pipeline中,渲染對象的某些階段被設計爲由程序實現。這些階段被稱爲「着色器階段」。着色器是一個程序,用GLSL編寫(至少用於OpenGL),在這些着色器階段之一執行。
GLSL被用作渲染過程的一部分。 GLSL定義了如何渲染,而不是什麼被渲染。
因此:
是通過GLSL代碼實現了Qt/3D API?
不符合你的意思。繪圖功能的一些渲染流水線可能是。但它可能不會。這與你無關,因爲你從外面使用它。
GLSL代碼是否作爲正常的c/C++代碼編譯和鏈接,並且可以在CPU(不是GPU)上運行?
不是,根據上面。着色器影響渲染,渲染髮生在GPU上。 GLSL是OpenGL的着色語言,因此GLSL代碼在GPU上執行。
爲什麼GLSL比正常的c/C++更好?
這不是更好或更壞;你不能使用另一個。作爲渲染流水線的一部分,您不能隨意在GPU上丟棄隨機C代碼。而且你不能編譯CPU的GLSL。我們稱之爲domain specific language。這是一種旨在促進特定目的的語言。它具有大多數語言根本沒有的語言結構。它知道什麼是「紋理」。它具有在單次渲染調用(統一)內對着色器的多次執行不變的值的概念。它有許多其他的概念,這些概念對於基於硬件的着色器和渲染問題是獨一無二的。
您不僅可以將C或C++扔在GPU上,您也不會想要。不適用於着色器。
Qt/3D API是否由GLSL代碼實現?
不是。它可能會在內部使用,但這對用戶來說都是隱藏的。 API本身是C++。 OpenGL的API使用C語言,儘管它(驅動程序)在內部使用程序集。
是否GLSL代碼編譯和鏈接是正常的C/C++代碼
不,當然不是。它由視頻卡驅動程序編譯並在GPU上運行。這是一種相當有限的語言,除了着色器之外沒有太多用處。
爲什麼GLSL在繪畫上比普通的c/C++更有價值?
它包含GPU擅長的功能,同時缺乏功能不佳的功能。
'GLSL代碼是否作爲正常的c/C++代碼編譯和鏈接,並且可以在CPU(不是GPU)上運行?' '着色器影響渲染,渲染髮生在GPU上。 GLSL是OpenGL的着色語言,因此GLSL代碼在GPU上執行。' 嚴格來說,這並非完全正確。如果你在[仿真模式](http://stackoverflow.com/questions/7364871/how-to-start-opengl-in-software-emulation-mode)中運行OpenGL,一切都將在CPU上完成。 – 2012-08-02 23:05:10
@SchighSchagh:OpenGL中沒有「模擬模式」。你會得到最好的是運行MesaGL。 – 2012-08-03 03:48:38
就OpenGL規範而言,沒有提及任何「仿真模式」,但這是因爲它是一個API規範;同樣,該規範沒有提到GPU,當然也沒有要求在GPU上渲染,就像你聲稱的那樣。也就是說,各種驅動程序(包括在您指出的MesaGL中)提供了僅在CPU上運行的純軟件實現。事實上,MesaGL主頁上的** Introduction **明確提到,Mesa可以用於許多不同的環境,從軟件仿真到爲現代GPU完成硬件加速。 – 2012-08-05 02:00:40