2014-02-13 91 views
2

「全局變量和接口塊可以用統一修飾符來聲明,這意味着在渲染基元時多次執行着色器之間的值不會發生變化(即:在glDraw *調用期間),這些值由用戶從OpenGL API設置 它們是常量,但不是編譯時常量(因此不是const)。OpenGL爲什麼需要統一變量(而不是常量)

http://www.opengl.org/wiki/Type_Qualifier_(GLSL)#Storage_qualifier

我想我問爲什麼統一的變量不能僅僅是在編譯時恆定。

+0

幽默,即使它們是恆定的,也不會改變任何東西。常量變量可能會使用與統一變量相同的存儲池。事實上,如果您曾經在NV驅動程序中鏈接過GLSL程序中列舉了制服列表,您會注意到它會重新命名常量,這些常量沿'_ _0''的行改變,並將它們分配到統一的位置。 –

回答

2

因爲它們不是恆定的!

它們對於每個渲染調用都是不變的,但您可以爲每個渲染調用一個新值。

例如,您可以設置一個統一以包含顏色值,將其設置爲粉紅色並繪製您的3d模型,並且每次調用該繪製操作的片段着色器時都會包含一個常量值。但是你可以使用相同的着色器繪製其他顏色,並將其設置爲「綠色」

相關問題