2009-05-21 58 views
1

在我的引擎中,我從成對的頂點/像素着色器文件中加載Cg着色器。我希望能夠將着色器堆疊起來(照明+材質等)。在將着色器分解爲單獨的函數以及從這些函數創建單個着色器腳本字符串之後,您是否知道在Cg中堆疊不同着色器的好方法?堆疊Cg着色器

回答

2

這聽起來有點像你想要的類似於DirectX 11中的動態着色器鏈接功能? Cg的接口功能可以讓你完成類似的事情。它可讓您重新配置着色器,以便您輕鬆乾淨地完成諸如改變照明計算方式或更改材質類型的操作。

例如,假設你想寫一個着色器,但需要能夠改變光照計算的方式。你可以定義一個Light接口,它具有可以以某種方式計算光的函數。在其他地方,您將Light界面實施爲例如CoolLight和UberLight。在運行時,您可以指定應使用Light界面的哪個實現,與您指定其他參數的方式幾乎相同。

要看看這是你想要的,我推薦看看Cg用戶手冊(http://developer.download.nvidia.com/cg/Cg_2.2/CgUsersManual.pdf)。如果您搜索「共享參數和接口」,有一個小例子。