Bagikan melalui


ID3D11Device::Metode OpenSharedResource (d3d11.h)

Berikan akses perangkat ke sumber daya bersama yang dibuat di perangkat lain.

Sintaks

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

Parameter

[in] hResource

Jenis: HANDEL

Handel sumber daya. Lihat keterangan.

[in] ReturnedInterface

Jenis: REFIID

Pengidentifikasi unik global (GUID) untuk antarmuka sumber daya. Lihat keterangan.

[out, optional] ppResource

Jenis: batal**

Alamat penunjuk ke sumber daya yang kita dapatkan aksesnya.

Mengembalikan nilai

Jenis: HRESULT

Metode ini mengembalikan salah satu Kode Pengembalian Direct3D 11 berikut.

Keterangan

REFIID, atau GUID, antarmuka ke sumber daya dapat diperoleh dengan menggunakan makro __uuidof(). Misalnya, __uuidof(ID3D11Buffer) akan mendapatkan GUID antarmuka ke sumber daya buffer.

Handel unik sumber daya diperoleh secara berbeda tergantung pada jenis perangkat yang awalnya membuat sumber daya.

Untuk berbagi sumber daya antara dua perangkat Direct3D 11, sumber daya harus dibuat dengan bendera D3D11_RESOURCE_MISC_SHARED , jika dibuat menggunakan antarmuka ID3D11Device. Jika dibuat menggunakan antarmuka perangkat DXGI, sumber daya selalu dibagikan.

REFIID, atau GUID, antarmuka ke sumber daya dapat diperoleh dengan menggunakan makro __uuidof(). Misalnya, __uuidof(ID3D11Buffer) akan mendapatkan GUID antarmuka ke sumber daya buffer.

Saat berbagi sumber daya antara dua perangkat Direct3D 10/11, handel unik sumber daya dapat diperoleh dengan mengkueri sumber daya untuk antarmuka IDXGIResource lalu memanggil GetSharedHandle.


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

Satu-satunya sumber daya yang dapat dibagikan adalah tekstur 2D non-mipmapped.

Untuk berbagi sumber daya antara perangkat Direct3D 9 dan perangkat Direct3D 11, tekstur harus dibuat menggunakan argumen pSharedHandle dari CreateTexture.
Handel Direct3D 9 bersama kemudian diteruskan ke OpenSharedResource dalam argumen hResource .

Kode berikut mengilustrasikan panggilan metode yang terlibat.


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   
      

Tekstur yang dibagikan dari D3D9 ke D3D11 memiliki batasan berikut.

  • Tekstur harus 2D
  • Hanya 1 tingkat mip yang diizinkan
  • Tekstur harus memiliki penggunaan default
  • Tekstur harus ditulis saja
  • Tekstur MSAA tidak diperbolehkan
  • Bendera ikatan harus memiliki set SHADER_RESOURCE dan RENDER_TARGET
  • Hanya format R10G10B10A2_UNORM, R16G16B16A16_FLOAT, dan R8G8B8A8_UNORM yang diizinkan
Jika tekstur bersama diperbarui pada satu perangkat ID3D11DeviceContext::Flush harus dipanggil pada perangkat tersebut.

Persyaratan

   
Target Platform Windows
Header d3d11.h
Pustaka D3D11.lib

Lihat juga

ID3D11Device