儲存要共用著色器的變數和類型

類別連結化物件是多個著色器可以共用之變數和類型的命名空間。 當您在呼叫中傳遞類別連結化物件以建立著色器時,執行時間會收集可在著色器中實作每個介面的變數和類型清單,並將這些變數和類型的名稱儲存在類別連結化物件中。

因此,當您呼叫 ID3D11ClassLinkage::GetClassInstance 方法以從類別連結化物件產生類別實例時,執行時間可以擷取對應至每個著色器中提供之名稱的變數或類型, (如果該名稱對指定的著色器有效) ,並使用指定的類別連結化物件建立。

例如,假設您有實作Color介面的Light類別,而且您會在頂點著色器和圖元著色器中使用這個類別。 例如,當您建立著色器 (時,藉由呼叫 ID3D11Device::CreatePixelShader) ,執行時間會判斷 Light 類別類型可在頂點和圖元著色器中使用,並將 Light 類別類型新增至類別連結化物件。 接著,您可以在您想要的位置建立 Light 實例、系結這兩個著色器的資源,並在將著色器設定為裝置時,將此實例傳遞給裝置 (例如,呼叫 ID3D11DeviceCoNtext::P SSetShader) 。 執行時間接著會執行下列順序:

  1. 確認已使用相同的類別連結化物件建立實例。
  2. 確認頂點和圖元著色器都可使用 Light 類別類型。
  3. 選取正確的函式資料表,這些資料表可能會與頂點和圖元著色器不同。
  4. 將 實例提供的位移向下傳送。

類別連結化物件最終是類型和變數名稱的存放庫。 每個專案 (類型和變數) 可用的名稱數目上限為 64K。 類型和變數名稱越長,儲存體需求就越高,是針對每個著色器所儲存的介面中繼資料。 這是因為執行時間必須為每個著色器儲存這些名稱的對應。

動態連結

動態連結