我一直在使用OpenGL編寫程序。最近,我開始學習OpenGL着色語言。我是新手;所以請在你的答案中詳細說明。OpenGL着色語言不同類型的變量(限定符)
我的問題是:
- 什麼是不同類型的變量(預選賽)在GLSL?
- 它們用於什麼?
- 它們有什麼不同?
我只熟悉從「頂點着色器」傳遞到要在頂點之間進行插值的片段着色器的「變化」變量。除此之外,我什麼都不知道。
我一直在使用OpenGL編寫程序。最近,我開始學習OpenGL着色語言。我是新手;所以請在你的答案中詳細說明。OpenGL着色語言不同類型的變量(限定符)
我的問題是:
我只熟悉從「頂點着色器」傳遞到要在頂點之間進行插值的片段着色器的「變化」變量。除此之外,我什麼都不知道。
在OpenGL中3+:
varying
已被棄用const
是......嗯,常量!uniform
爲每繪圖調用(至多)如果使用glAttribDivisor和硬件instanciationin
是用於從前面的流水線級,至多即每個頂點(或每片段)值的輸入,每原始out
是用於輸出到下一階段關於用於片段着色器輸出:在OpenGL3和向上,大多數內置的片段着色器輸出(如gl_FragColor
,具有gl_FragDepth
顯着的例外)變量被棄用的並應予以更換用戶定義的out
變量。
如果要輸出到默認幀緩衝區,則無論您聲明爲片段着色器的輸出結果在顏色緩衝區中。如果您將FBO綁定到多個顏色緩衝區(即多個渲染目標),則需要通過glBindFragDataLocationIndexed
手動將每個out
變量綁定到正確的顏色緩衝區索引。
所有你所能想約兩個GLSL(「服務器」)端和OpenGL的細節(「客戶」)側,可以發現:
太好了,非常感謝!只有一個小問題,片段着色器的下一個階段是什麼?如果你的片段着色器定義了一個「out」變量,那個變量的值被傳遞給哪個變量? – Einiosaurus 2011-06-01 08:33:55
編輯我的答案,以澄清片段着色器輸出的問題! – 2011-06-01 09:10:36
「片段着色器的下一個階段是什麼?」 - > 2011年沒有,但每個人都期待「混合着色器」而不是醜陋的glBlendFunc。編輯:+1用精確頁面引用規格。 – Calvin1602 2011-06-01 19:08:18
謝謝大家的回答。從一些在線資源中,我找到了關於兩個限定符「in」和「out」的信息,它們也可以用於頂點 - 片段着色器通信。它們與「不同」限定符非常相似。他們是一個單獨的「限定詞」級別還是僅僅是「不同」限定詞的替代? – Einiosaurus 2011-06-01 05:09:33