Метод 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, ресурс всегда является общим.
REFIID или GUID интерфейса для ресурса можно получить с помощью макроса __uuidof(). Например, __uuidof(ID3D10Buffer) получит GUID интерфейса к ресурсу буфера.
При совместном использовании ресурса между двумя устройствами Direct3D 10 уникальный дескриптор ресурса можно получить, запросив к ресурсу интерфейс IDXGIResource , а затем вызвав GetSharedHandle.
IDXGIResource* pOtherResource(NULL);
hr = pOtherDeviceResource->QueryInterface( __uuidof(IDXGIResource), (void**)&pOtherResource );
HANDLE sharedHandle;
pOtherResource->GetSharedHandle(&sharedHandle);
Единственными ресурсами, которые можно совместно использовать, являются двухd-текстуры без mipmapped.
Чтобы совместно использовать ресурс между устройствами Direct3D 9 и Direct3D 10, текстура должна быть создана с помощью аргумента pSharedHandleэлемента CreateTexture.
Затем общий дескриптор Direct3D 9 передается в OpenSharedResource в аргументе hResource .
В следующем коде показаны задействованные вызовы методов.
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, имеют следующие ограничения.
- Текстуры должны быть двухd
- Допускается только 1 уровень MIP
- Текстура должна использоваться по умолчанию
- Текстура должна быть только для записи
- Текстуры MSAA не разрешены
- Флаги привязки должны иметь SHADER_RESOURCE и RENDER_TARGET
- Допускаются только R10G10B10A2_UNORM, R16G16B16A16_FLOAT и R8G8B8A8_UNORM форматы
Требования
Требование | Значение |
---|---|
Целевая платформа | Windows |
Header | d3d10.h |