共用方式為


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 裝置之間共用資源,紋理必須使用 CreateTexturepSharedHandle 自變數來建立。
然後,共用的 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格式
如果在一個裝置 標識碼 3D10Device::Flush 上更新共用紋理,則必須在該裝置上呼叫。

規格需求

需求
目標平台 Windows
標頭 d3d10.h

另請參閱

ID3D10Device 介面