Freigeben über


ID3D10Device::OpenSharedResource-Methode (d3d10.h)

Gewähren Sie einem Gerät Zugriff auf eine freigegebene Ressource, die auf einem anderen Direct3d-Gerät erstellt wurde.

Syntax

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

Parameter

[in] hResource

Typ: HANDLE

Ein Ressourcenhandle. Siehe Bemerkungen.

[in] ReturnedInterface

Typ: REFIID

Der globally unique Identifier (GUID) für die Ressourcenschnittstelle. Siehe Bemerkungen.

[out] ppResource

Typ: void**

Adresse eines Zeigers auf die Ressource, auf die wir Zugriff erhalten.

Rückgabewert

Typ: HRESULT

Diese Methode gibt einen der folgenden Direct3D 10-Rückgabecodes zurück.

Hinweise

Um eine Ressource zwischen zwei Direct3D 10-Geräten zu teilen, muss die Ressource mit dem flag D3D10_RESOURCE_MISC_SHARED erstellt worden sein, wenn sie mithilfe der ID3D10Device-Schnittstelle erstellt wurde. Wenn sie mithilfe der IDXGIDevice-Schnittstelle erstellt wurde, wird die Ressource immer freigegeben.

Die REFIID oder GUID der Schnittstelle zur Ressource kann mithilfe des Makros __uuidof() abgerufen werden. Beispielsweise ruft __uuidof(ID3D10Buffer) die GUID der Schnittstelle zu einer Pufferressource ab.

Beim Freigeben einer Ressource zwischen zwei Direct3D 10-Geräten kann das eindeutige Handle der Ressource abgerufen werden, indem Die Ressource nach der IDXGIResource-Schnittstelle abgefragt und dann GetSharedHandle aufgerufen wird.


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

Die einzigen Ressourcen, die freigegeben werden können, sind 2D-Texturen ohne Mipmappen.

Um eine Ressource zwischen einem Direct3D 9-Gerät und einem Direct3D 10-Gerät freizugeben, muss die Textur mit dem pSharedHandle-Argument von CreateTexture erstellt worden sein.
Das freigegebene Direct3D 9-Handle wird dann im Argument hResource an OpenSharedResource übergeben.

Der folgende Code veranschaulicht die beteiligten Methodenaufrufe.


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   
      

Texturen, die von D3D9 bis D3D10 freigegeben werden, weisen die folgenden Einschränkungen auf.

  • Texturen müssen 2D sein
  • Nur 1 mip-Ebene ist zulässig.
  • Textur muss standardmäßig verwendet werden
  • Textur darf nur schreibbar sein
  • MSAA-Texturen sind nicht zulässig
  • Bindungsflags müssen SHADER_RESOURCE und RENDER_TARGET festgelegt haben
  • Nur R10G10B10A2_UNORM-, R16G16B16A16_FLOAT- und R8G8B8A8_UNORM-Formate sind zulässig.
Wenn eine freigegebene Textur auf einem Gerät aktualisiert wird , muss DIE ID3D10Device::Flush auf diesem Gerät aufgerufen werden.

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile d3d10.h

Weitere Informationen

ID3D10Geräteschnittstelle