Метод 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 ) — указывает доступ на запись к ресурсу.
[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 .
Совместное использование ресурса между двумя устройствами
- Создайте ресурс как общий и укажите, что он использует дескрипторы NT, установив флаг D3D11_RESOURCE_MISC_SHARED_NTHANDLE .
- Получите ИДЕНТИФИКАТОР REFIID или GUID интерфейса к ресурсу с помощью макроса __uuidof(). Например, __uuidof(ID3D11Texture2D) извлекает GUID интерфейса в двухd-текстуру.
- Запросите ресурс для интерфейса IDXGIResource1 .
- Вызовите метод 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 |