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也會失敗。
- dcl_uav_typed
- dcl_uav_raw
- dcl_uav_structured
- ld_raw
- ld_structured
- ld_uav_typed
- store_raw
- store_structured
- store_uav_typed
- sync_uglobal
- 例如 ,atomic_and 和 imm_atomic_and) 等所有不可 (部分完成專案和立即不可部分完成專案
範例
使用範例
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 |