Share via


ID3D11Device::OpenSharedResource 메서드(d3d11.h)

디바이스에 다른 디바이스에서 만든 공유 리소스에 대한 액세스 권한을 부여합니다.

구문

HRESULT OpenSharedResource(
  [in]            HANDLE hResource,
  [in]            REFIID ReturnedInterface,
  [out, optional] void   **ppResource
);

매개 변수

[in] hResource

형식: HANDLE

리소스 핸들입니다. 설명을 참조하세요.

[in] ReturnedInterface

형식: REFIID

리소스 인터페이스에 대한 GUID(Globally Unique Identifier)입니다. 설명을 참조하세요.

[out, optional] ppResource

형식: void**

액세스 권한을 얻고 있는 리소스에 대한 포인터의 주소입니다.

반환 값

형식: HRESULT

이 메서드는 다음 Direct3D 11 반환 코드 중 하나를 반환합니다.

설명

리소스에 대한 인터페이스의 REFIID 또는 GUID는 __uuidof() 매크로를 사용하여 가져올 수 있습니다. 예를 들어 __uuidof(ID3D11Buffer)는 인터페이스의 GUID를 버퍼 리소스에 가져옵니다.

리소스의 고유 핸들은 원래 리소스를 만든 디바이스의 유형에 따라 다르게 가져옵니다.

두 Direct3D 11 디바이스 간에 리소스를 공유하려면 ID3D11Device 인터페이스를 사용하여 리소스를 만든 경우 D3D11_RESOURCE_MISC_SHARED 플래그를 사용하여 리소스를 만들어야 합니다. DXGI 디바이스 인터페이스를 사용하여 만든 경우 리소스는 항상 공유됩니다.

리소스에 대한 인터페이스의 REFIID 또는 GUID는 __uuidof() 매크로를 사용하여 가져올 수 있습니다. 예를 들어 __uuidof(ID3D11Buffer)는 인터페이스의 GUID를 버퍼 리소스에 가져옵니다.

두 Direct3D 10/11 디바이스 간에 리소스를 공유하는 경우 IDXGIResource 인터페이스에 대한 리소스를 쿼리한 다음 GetSharedHandle을 호출하여 리소스의 고유 핸들을 가져올 수 있습니다.


IDXGIResource* pOtherResource(NULL);
hr = pOtherDeviceResource->QueryInterface( __uuidof(IDXGIResource), (void**)&pOtherResource );
HANDLE sharedHandle;
pOtherResource->GetSharedHandle(&sharedHandle);
      

공유할 수 있는 유일한 리소스는 2D 비 mipmapped 텍스처입니다.

Direct3D 9 디바이스와 Direct3D 11 디바이스 간에 리소스를 공유하려면 CreateTexturepSharedHandle 인수를 사용하여 텍스처를 만들어야 합니다.
그런 다음 공유 Direct3D 9 핸들이 hResource 인수의 OpenSharedResource에 전달됩니다.

다음 코드에서는 관련된 메서드 호출을 보여 줍니다.


sharedHandle = NULL; // must be set to NULL to create, can use a valid handle here to open in D3D9 
pDevice9->CreateTexture(..., pTex2D_9, &sharedHandle); 
... 
pDevice11->OpenSharedResource(sharedHandle, __uuidof(ID3D11Resource), (void**)(&tempResource11)); 
tempResource11->QueryInterface(__uuidof(ID3D11Texture2D), (void**)(&pTex2D_11)); 
tempResource11->Release(); 
// now use pTex2D_11 with pDevice11   
      

D3D9에서 D3D11로 공유되는 텍스처에는 다음과 같은 제한이 있습니다.

  • 텍스처는 2D여야 합니다.
  • 밉 수준은 1단계만 허용됩니다.
  • 텍스처에는 기본 사용법이 있어야 합니다.
  • 텍스처는 쓰기 전용이어야 합니다.
  • MSAA 텍스처는 허용되지 않습니다.
  • 바인딩 플래그에는 SHADER_RESOURCE 및 RENDER_TARGET 설정해야 합니다.
  • R10G10B10A2_UNORM, R16G16B16A16_FLOAT 및 R8G8B8A8_UNORM 형식만 허용됩니다.
공유 텍스처가 하나의 디바이스 ID3D11DeviceContext::Flush 에서 업데이트되는 경우 해당 디바이스에서 호출해야 합니다.

요구 사항

   
대상 플랫폼 Windows
헤더 d3d11.h
라이브러리 D3D11.lib

추가 정보

ID3D11Device