lassen, habe ich zwei Geräte, zuerst ist von DirectX9 und zweitens von DirectX11. was ich tue ist, Partikel zu berechnen und speichern ihre Daten in einer D3D11 Textur von D3D11 Compute Shader und dann möchte ich diese D3D11 Textur in meinem D3D9 Gerät verwenden, um es anzuzeigen. ich verwende folgenden Code ..Share Ressource von DirectX11 zu Directx9
In D3D11 Gerät .. (m_pBuffer ist ID3D11Buffer)
IDXGIResource* pTempResource(NULL);
hr = m_pBuffer->QueryInterface(__uuidof(IDXGIResource), (void**)&pTempResource);
hr = pTempResource->GetSharedHandle(&SharedHandle); //successful
Dann in D3D9 Gerät ...
hr = g_pd3dDevice->CreateTexture(width, height, 1, D3DUSAGE_RENDERTARGET,D3DFMT_A32B32G32R32F,D3DPOOL_DEFAULT,&pSharedTexture9,&SharedHandle);
Der Fehler ich habe, ist " Direct3D9: (ERROR): Geöffnete und erstellte Ressourcen stimmen nicht überein, die freigegebene Ressource kann nicht geöffnet werden. "
EDITED: Ok, es funktionierte, wenn ich Textur mit D3DFMT_A16B16G16R16F in DX9 und DXGI_FORMAT_R16G16B16A16_FLOAT in DX11 erstellen. aber mit D3DFMT_A32B32G32R32F und DXGI_FORMAT_R32G32B32A32_FLOAT gibt es den obigen Fehler.
SORRY aber sogar R16G16B16A16_FLOAT funktioniert nicht, ich war falsch.Ich denke, es ist ein nicht funktionierendes Feature wie die meisten Beiträge in anderen Foren sagt es. Hat jemand es funktioniert? – YAHOOOOO
Das Problem ist, dass, obwohl es ein gültiges Format für die Freigabe ist, Sie in Direct3D9 keinen 64-Bit-Backbuffer haben können. –