Поделиться через


Метод 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 форматы
Если общая текстура обновляется на одном устройстве ID3D10Device::Flush должен быть вызван на этом устройстве.

Требования

Требование Значение
Целевая платформа Windows
Header d3d10.h

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

Интерфейс ID3D10Device