2011-08-27 147 views
12

首先; OpenGL着色器如何編譯?它們是在CPU還是GPU上編譯的,還是因實現而異?不同的供應商有不同的二進制輸出;如果是這樣,是否可以在另一個GPU上交叉編譯一種GPU類型的二進制文件?我正在開發一款遊戲,我計劃在英特爾GFX芯片,ATI卡和NVidia卡上運行。我寧願只發布着色器的二進制部分,而不必在客戶端計算機上編譯源代碼。這可能嗎?着色器編譯過程如何工作?OpenGL着色器是在GPU或CPU上編譯的嗎?二進制輸出如何因GPU製造商而異?

回答

11

編譯過程一般來說是在CPU上執行的。但是,產量不僅受到供應商的影響,還受到型號的影響。因此,必須在用戶機器上重新編譯着色器,以便與用戶可能使用的任何GPU型號(包括在編寫遊戲時可能不存在的GPU型號)保持兼容!

+0

這是大多數商業遊戲如何做? – IDWMaster

+2

是的。通過混淆着色器的內容(例如,對它進行加密使其不會以明文形式顯示,刪除註釋和重命名局部區域等),可以嘗試使其不那麼明顯,但最終必須具有該源代碼。 – bdonlan