ID3D10Device::OpenSharedResource 方法 (d3d10.h)
讓裝置能夠存取在不同 Direct3d 裝置上建立的共享資源。
語法
HRESULT OpenSharedResource(
[in] HANDLE hResource,
[in] REFIID ReturnedInterface,
[out] void **ppResource
);
參數
[in] hResource
類型: HANDLE
資源句柄。 請參閱<備註>。
[in] ReturnedInterface
類型: REFIID
資源介面的全域唯一標識碼 (GUID) 。 請參閱<備註>。
[out] ppResource
類型: void**
我們取得存取權之資源的指標位址。
傳回值
類型: HRESULT
此方法會傳回下列其中一個 Direct3D 10 傳回碼。
備註
若要在兩個 Direct3D 10 裝置之間共用資源,則必須使用 D3D10_RESOURCE_MISC_SHARED 旗標建立資源,如果使用 ID3D10Device 介面建立資源。 如果使用IDXGIDevice介面建立,則資源一律會共用。
您可以使用 __uuidof () 宏來取得資源的介面 REFIID 或 GUID。 例如,__uuidof (ID3D10Buffer) 會取得緩衝區資源的介面 GUID。
在兩個 Direct3D 10 裝置之間共用資源時,可以藉由查詢 IDXGIResource 介面的資源,然後呼叫 GetSharedHandle 來取得資源的唯一句柄。
IDXGIResource* pOtherResource(NULL);
hr = pOtherDeviceResource->QueryInterface( __uuidof(IDXGIResource), (void**)&pOtherResource );
HANDLE sharedHandle;
pOtherResource->GetSharedHandle(&sharedHandle);
唯一可以共享的資源是 2D 非誤用紋理。
若要在 Direct3D 9 裝置與 Direct3D 10 裝置之間共用資源,紋理必須使用 CreateTexture 的 pSharedHandle 自變數來建立。
然後,共用的 Direct3D 9 句柄會傳遞至 hResource 自變數中的 OpenSharedResource。
下列程式代碼說明涉及的方法呼叫。
sharedHandle = NULL; // must be set to NULL to create, can use a valid handle here to open in D3D9
pDevice9->CreateTexture(..., pTex2D_9, &sharedHandle);
...
pDevice10->OpenSharedResource(sharedHandle, __uuidof(ID3D10Resource), (void**)(&tempResource10));
tempResource10->QueryInterface(__uuidof(ID3D10Texture2D), (void**)(&pTex2D_10));
tempResource10->Release();
// now use pTex2D_10 with pDevice10
從 D3D9 到 D3D10 共用的紋理有下列限制。
- 紋理必須是 2D
- 只允許1個 mip 層級
- 紋理必須有預設的使用方式
- 紋理只能寫入
- 不允許 MSAA 紋理
- 系結旗標必須設定SHADER_RESOURCE和RENDER_TARGET
- 只允許R10G10B10A2_UNORM、R16G16B16A16_FLOAT和R8G8B8A8_UNORM格式
規格需求
需求 | 值 |
---|---|
目標平台 | Windows |
標頭 | d3d10.h |