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.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Windows |
Kopfzeile | d3d10.h |