ID3D11Device1::OpenSharedResourceByName 方法 (d3d11_1.h)

向设备授予对按名称引用且在不同设备上创建的共享资源的访问权限。 之前必须已将资源创建为共享资源,并指定它使用 NT 句柄 (即) 设置 D3D11_RESOURCE_MISC_SHARED_NTHANDLE 标志。

语法

HRESULT OpenSharedResourceByName(
  [in]  LPCWSTR lpName,
  [in]  DWORD   dwDesiredAccess,
  [in]  REFIID  returnedInterface,
  [out] void    **ppResource
);

参数

[in] lpName

要打开的资源的名称。 此参数不能为 NULL

[in] dwDesiredAccess

请求的资源访问权限。 除了 通用访问权限之外,DXGI 还定义了以下值:

  • DXGI_SHARED_RESOURCE_READ ( 0x80000000L ) - 指定对资源的读取访问权限。
  • DXGI_SHARED_RESOURCE_WRITE ( 1 ) - 指定对资源的写入访问权限。
可以使用按位 OR 运算组合值。

[in] returnedInterface

资源接口的全局唯一标识符 (GUID) 。 有关详细信息,请参阅备注。

[out] ppResource

指向变量的指针,该变量接收指向要访问的共享资源对象的接口的指针。

返回值

此方法返回 Direct3D 11 返回代码之一。 如果访问资源的权限无效,此方法还会返回E_ACCESSDENIED。

适用于 Windows 7 的平台更新: 在安装了 Windows 7 平台更新的 Windows 7 或 Windows Server 2008 R2 上, OpenSharedResourceByName 因使用 NTHANDLES 而失败并E_NOTIMPL。 有关适用于 Windows 7 的平台更新的详细信息,请参阅 适用于 Windows 7 的平台更新

注解

OpenSharedResourceByName 的行为类似于 ID3D11Device1::OpenSharedResource1 方法的行为;每次调用 OpenSharedResourceByName 来访问资源都会创建新的资源对象。 换句话说,如果两次调用 OpenSharedResourceByName 并将相同的资源名称传递给 lpName,则会收到两个具有不同 IUnknown 指针的资源对象。

在两台设备之间共享资源

  1. 将资源创建为共享资源,并通过设置 D3D11_RESOURCE_MISC_SHARED_NTHANDLE 标志指定它使用 NT 句柄。
  2. 使用 __uuidof () 宏获取资源接口的 REFIID 或 GUID。 例如,__uuidof (ID3D11Texture2D) 检索 2D 纹理接口的 GUID。
  3. 查询 IDXGIResource1 接口的资源。
  4. 调用 IDXGIResource1::CreateSharedHandle 方法以获取资源的唯一句柄。 在此 IDXGIResource1::CreateSharedHandle 调用中,如果要随后调用 OpenSharedResourceByName 以按名称访问资源,则必须传递资源的名称。

示例

ID3D11Device1* pDevice;
ID3D11Texture2D* pTexture2D;

pDevice->OpenSharedResourceByName(
          "MySurface", 
          DXGI_SHARED_RESOURCE_READ, 
          __uuidof(ID3D11Texture2D), 
         (void**)&pTexture2D);

要求

要求
最低受支持的客户端 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |UWP 应用]
最低受支持的服务器 适用于 Windows Server 2008 R2 的Windows Server 2012和平台更新 [桌面应用 |UWP 应用]
目标平台 Windows
标头 d3d11_1.h
Library D3D11.lib

另请参阅

ID3D11Device1