共用方式為


packoffset

選擇性著色器常數封裝關鍵字,其使用下列語法:

:packoffset ( c[Subcomponent][.component] )

參數

項目 描述
packoffset
必要關鍵字。
C
封裝僅適用于 c) 常數暫存器 (。
[子元件][.component]
選擇性子元件和元件。 子元件是一個暫存器編號,也就是整數。 元件的格式為 [.xyzw]。

備註

宣告 變數類型時,使用此關鍵字手動封裝著色器常數。

封裝常數時,您無法混合常數類型。

編譯器對於全域常數和統一常數的行為稍有不同:

  • 全域常數。 全域變數會新增為編譯器 所$Global cbuffer 的全域常數。 自動封裝元素 (宣告而沒有 packoffset 的元素) 會出現在最後一個手動封裝的變數之後。 封裝全域常數時,您可以混合類型。
  • 統一常數。 當著色器在效果架構外部編譯時,函式參數清單中的統一參數將會新增至 編譯器$Param 常數緩衝區。 在效果架構內編譯時,統一常數必須解析為全域範圍中定義的統一變數。 統一常數不能手動位移;其建議用途僅適用于將著色器別名傳回全域的特製化,而不是將應用程式資料傳遞至著色器的方法。

以下是一些額外的範例: 使用著色器模型 4 封裝常數

範例

以下是手動封裝著色器常數的數個範例。

封裝向量和純量的子元件,其大小足以防止跨越暫存器界限。 例如,這些全都是有效的:

cbuffer MyBuffer
{
    float4 Element1 : packoffset(c0);
    float1 Element2 : packoffset(c1);
    float1 Element3 : packoffset(c1.y);
}

另請參閱

語法變數

DirectX HLSL) (變數