ID3D11Device::CreateGeometryShader 方法 (d3d11.h)

建立幾何著色器。

語法

HRESULT CreateGeometryShader(
  [in]            const void           *pShaderBytecode,
  [in]            SIZE_T               BytecodeLength,
  [in, optional]  ID3D11ClassLinkage   *pClassLinkage,
  [out, optional] ID3D11GeometryShader **ppGeometryShader
);

參數

[in] pShaderBytecode

類型: const void*

已編譯著色器的指標。

[in] BytecodeLength

類型: SIZE_T

已編譯幾何著色器的大小。

[in, optional] pClassLinkage

類型: ID3D11ClassLinkage*

類別連結介面的指標 (請參閱 ID3D11ClassLinkage) ;此值可以是 Null

[out, optional] ppGeometryShader

類型: ID3D11GeometryShader**

ID3D11GeometryShader介面指標的位址。 如果這是 Null,則會驗證所有其他參數,而且所有參數都會通過驗證,則此 API 將會傳回S_FALSE,而不是S_OK。

傳回值

類型: HRESULT

此方法會傳回下列其中一個 Direct3D 11 傳回碼

備註

建立著色器之後,可以呼叫 ID3D11DeviceCoNtext::GSSetShader來設定為裝置。

從 Windows 8 開始提供的 Direct3D 11.1 執行時間提供下列 CreateGeometryShader新功能。

下列著色器模型 5.0 指令僅適用于 Direct3D 11.0 執行時間中的圖元著色器和計算著色器。 針對 Direct3D 11.1 執行時間,因為 UAV) (未排序的存取檢視可在所有著色器階段使用,因此您可以在所有著色器階段使用這些指示。

因此,如果您在幾何著色器中使用下列著色器模型 5.0 指令,則可以成功將編譯的幾何著色器傳遞至 pShaderBytecode。 也就是說, CreateGeometryShader 的呼叫會成功。

如果您將編譯的著色器傳遞至 pShaderBytecode ,該程式碼會在每一個著色器階段使用下列任何指示的裝置上, (包括未實作的現有驅動程式,以支援每個著色器階段) 的 UAV, CreateGeometryShader 就會失敗。 如果著色器嘗試使用 UAV 位置超出硬體支援的一組 UAV 插槽,CreateGeometryShader也會失敗。

範例

使用範例


ID3D11GeometryShader*       g_pGeometryShader11 = NULL;
ID3DBlob* pGeometryShaderBuffer = NULL;
ID3DBlob * errorbuffer = NULL;

D3DX11CompileFromFile( str, NULL, NULL, "GS", "gs_4_0", dwShaderFlags, 0, NULL,
                                         &pGeometryShaderBuffer, &errorbuffer, NULL );

pd3dDevice->CreateGeometryShader( pGeometryShaderBuffer->GetBufferPointer(),
               pGeometryShaderBuffer->GetBufferSize(), NULL, &g_pGeometryShader11 );
     
          

規格需求

   
目標平台 Windows
標頭 d3d11.h
程式庫 D3D11.lib

另請參閱

ID3D11Device