let, у меня есть два устройства, в первую очередь DirectX9, а второе - DirectX11. Что я делаю, это рассчитать частицы и сохранить их данные в текстуре D3D11 с помощью Compute Shader от D3D11, а затем я хочу использовать текстуру D3D11 в своем устройстве D3D9 для ее отображения. я использую следующий код ..Share Ресурс от DirectX11 до Directx9
В D3D11 устройстве .. (m_pBuffer является ID3D11Buffer)
IDXGIResource* pTempResource(NULL);
hr = m_pBuffer->QueryInterface(__uuidof(IDXGIResource), (void**)&pTempResource);
hr = pTempResource->GetSharedHandle(&SharedHandle); //successful
Тогда в D3D9 устройства ...
hr = g_pd3dDevice->CreateTexture(width, height, 1, D3DUSAGE_RENDERTARGET,D3DFMT_A32B32G32R32F,D3DPOOL_DEFAULT,&pSharedTexture9,&SharedHandle);
Ошибка я имею " Direct3D9: (ОШИБКА): открытые и созданные ресурсы не совпадают, не удается открыть общий ресурс. "
EDITED: Хорошо, он работал, когда я создавал текстуру, используя D3DFMT_A16B16G16R16F в dx9 и DXGI_FORMAT_R16G16B16A16_FLOAT в dX11. но используя D3DFMT_A32B32G32R32F и DXGI_FORMAT_R32G32B32A32_FLOAT, он дает указанную выше ошибку.
ИЗБЕГАЙТЕ, НО даже R16G16B16A16_FLOAT не работает, я был неправ. Я считаю его нерабочим, так как большинство сообщений на других форумах говорят об этом. кто-нибудь заработал? – YAHOOOOO
Проблема заключается в том, что, хотя это допустимый формат для совместного использования, у вас не может быть 64-битного backbuffer в Direct3D9. –