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格式
如果在一台设备上更新了共享纹理,则必须在该设备上调用 ID3D10Device::Flush

要求

要求
目标平台 Windows
标头 d3d10.h

另请参阅

ID3D10Device 接口