4
在GLSL着色器中,由於各種原因(例如使用四個函數應用光照,紋理,speculars和霧等)的片段着色器,我經常需要一些函數來修改單個值。我可以想到至少有三種方法可以將這些值傳遞給修改:在GLSL中傳遞值的最快方式是什麼?
- 使用
inout
參數爲每個功能。 - 將該值作爲
in
參數傳遞,並使用返回值(顯然缺點是我只能使用一個值)。 - 使用每個函數修改的全局變量。
我應該期待這些方法之間有什麼實際差異嗎?有些可能比別人更快?比其他更兼容嗎?還有其他的區別嗎?還是其他方法呢?
或者我可以簡單地選擇一個我最喜歡的風格嗎?
優化您的算法。然後優化您發現的任何其他瓶頸。做完所有這些之後,_then_您可以考慮修改參數的哪些方法在給定的編譯器上工作得最好(因爲它將依賴於編譯器)。一般來說,你會精確地擺脫這一點。 –
如果在任何給定的程序階段只有一個着色器,那麼描述的三種方法可能最終都是相同的。如果您將多個着色器鏈接到單個階段,那麼使用全局可能會不同(更好或更糟)。與往常一樣,您需要通過簡介來弄清楚什麼(如果有的話)是不同的以及瓶頸在哪裏。 –
此外,對於#2,您可以使用'out'參數來獲得(有效)額外的返回值。 –