2013-01-14 25 views
0

glGetActiveUniformBlock將由GL_UNIFORM_BLOCK_BINDING返回什麼,如果指定的統一塊沒有綁定到任何綁定索引? http://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlock.xml說:GL_UNIFORM_BLOCK_BINDING當塊沒有被綁定到索引時

如果以前沒有指定統一塊,則返回零。

這是否意味着零將被返回爲未綁定塊?如果是,那麼這是否意味着在程序鏈接之後所有的unifrom塊默認綁定到零指數?同樣,如果是的話,那麼我怎樣才能知道指定的塊是否被綁定到零或者它從未綁定到任何索引?

回答

0

對你的前兩個問題,是的。

再說一遍,如果是的話,那麼如何判斷指定的塊是否被綁定爲零或者它從未綁定到任何索引?

你不知道。那麼,那又有什麼目的呢?您應該從代碼或着色器中設置這些值。在這兩種情況下,你都知道設置了什麼。除非你正在編寫一些着色器工具,要求用戶指定一個綁定,否則它應該沒有關係。

如果您正在編寫這樣的工具,那麼只需向用戶顯示所有綁定是什麼。如果多個統一塊使用相同的索引,那麼用戶繼續進行直到他們解決衝突(或確認他們真正想要的)是非法的。

+0

當然我知道設置了什麼,但是我在代碼的不同部分請求了'GL_UNIFORM_BLOCK_BINDING'。因此這種請求的特殊錯誤狀態可能有助於檢測錯誤的調用並使測試更容易一些。 – Sergey

+0

@Sergey:這暗示了代碼中的一些混淆。就個人而言,我會建議爲這類東西建立一個簡單的約定。一種塊總是使用索引0(例如,在所有渲染着色器之間共享的投影矩陣)。索引1涉及其他內容(比如模型到視圖的轉換)。索引2可能是照明參數去的地方。等等。或者換一種說法,設置一些事情,這樣你就不用問我了。我看到它的方式,幾乎在任何時候你使用'glGet *',你可能做錯了什麼。 –