Метод 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 Server 2008 R2 с установленным обновлением платформы для Windows 7openSharedResourceByName завершается сбоем с E_NOTIMPL, так как используются NTHANDLES. Дополнительные сведения об Обновлении платформы для Windows 7 см. в разделе Обновление платформы для Windows 7.

Комментарии

Поведение OpenSharedResourceByName аналогично поведению метода ID3D11Device1::OpenSharedResource1 ; Каждый вызов OpenSharedResourceByName для доступа к ресурсу создает новый объект ресурса. Иными словами, если вызвать OpenSharedResourceByName дважды и передать одно и то же имя ресурса в lpName, вы получите два объекта ресурсов с разными указателями IUnknown .

Совместное использование ресурса между двумя устройствами

  1. Создайте ресурс как общий и укажите, что он использует дескрипторы NT, установив флаг D3D11_RESOURCE_MISC_SHARED_NTHANDLE .
  2. Получите ИДЕНТИФИКАТОР REFIID или GUID интерфейса к ресурсу с помощью макроса __uuidof(). Например, __uuidof(ID3D11Texture2D) извлекает GUID интерфейса в двухd-текстуру.
  3. Запросите ресурс для интерфейса IDXGIResource1 .
  4. Вызовите метод IDXGIResource1::CreateSharedHandle , чтобы получить уникальный дескриптор ресурса. В этом вызове IDXGIResource1::CreateSharedHandle необходимо передать имя ресурса, если вы хотите впоследствии вызвать OpenSharedResourceByName для доступа к ресурсу по имени.

Примеры

ID3D11Device1* pDevice;
ID3D11Texture2D* pTexture2D;

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

Требования

Требование Значение
Минимальная версия клиента Windows 8 и обновление платформы для Windows 7 [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2012 и обновление платформы для Windows Server 2008 R2 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header d3d11_1.h
Библиотека D3D11.lib

См. также раздел

ID3D11Device1