2013-07-05 24 views
0

我還沒有完全理解OpenGL:根據我讀的所有內容,編譯着色器的時間足以將它們附加到程序中,從而獲得最佳性能,然後建議您刪除着色器它自己釋放內存並且直到它被刪除纔跟蹤程序。多次連接/連接着色器有什麼意義?

所以我的問題是這樣的:如果上述是真的,能夠附加着色器並在程序創建後重新鏈接程序的目的是什麼?創建第二個着色器程序並在場景創建期間交換它們而不是分離/附加和重新鏈接程序是否更有效?

回答

5

你通過編譯着色器濫竽充數長將其連接到一個程序獲得最佳的性能,然後建議你刪除着色器本身以釋放內存,只是跟蹤程序,直到它刪除

此活動對渲染性能無影響;它可能有助於減少驅動程序的內存使用量,但它不會幫助您更快地獲得屏幕上的三角形。編譯着色器的過程是在編譯程序之後建模的,並且在編譯完整可執行文件後,您的註釋將與刪除目標文件相同。

能夠附加着色器並在程序創建後重新鏈接程序的目的是什麼?

這可讓您跳過重新編譯程序所需的所有着色器,並僅重新編譯已編譯着色器(與鏈接着色器程序不同)以製作新程序。再次使用並行來構建可執行文件,就像使用一組不同的目標文件來創建一個新的可執行文件。您不需要重新編譯源代碼中的所有內容,只需將相應的文件提供給鏈接器即可。

在場景創建過程中創建第二個着色器程序並在它們之間交換而不是分離/附加和重新鏈接程序是否更有效?

當然,這是行業中很多人的想法。雖然性能取決於您使用的OpenGL驅動程序實現,但常識意味着將新着色器「加載」到管線中比更新狀態以配置着色器程序鏈接更快,然後執行鏈接,然後「加載」新的着色器。