2012-03-29 2 views
1

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, он дает указанную выше ошибку.

ответ

3

Вы получаете эту ошибку, потому что эти форматы текстур не допускаются.

текстуры, разделяемая от D3D9 до D3D11 имеет следующие ограничения:

  • Текстуры должна быть 2D
  • только один MIP уровня допускается
  • текстуры должна Usage по умолчанию
  • Texture сусло только для записи
  • Текстуры MSAA не допускаются
  • Bin г флаги должны быть SHADER_RESOURCE и RENDER_TARGET установить
  • Только R10G10B10A2_UNORM, R16G16B16A16_FLOAT и R8G8B8A8_UNORM форматы допускаются

От http://msdn.microsoft.com/en-us/library/windows/desktop/ff476531%28v=vs.85%29.aspx

Таким образом, для совместного использования текстур, вы ограничены из трех форматов, указанных выше. Кроме того, если вы намерены использовать текстуру в качестве backbuffer в Direct3D9, вы также ограничены R8G8B8A8_UNORM и R10G10B10A2_UNORM. Источник: http://msdn.microsoft.com/en-us/library/windows/desktop/bb172558%28v=vs.85%29.aspx#BackBuffer_or_Display_Formats

+1

ИЗБЕГАЙТЕ, НО даже R16G16B16A16_FLOAT не работает, я был неправ. Я считаю его нерабочим, так как большинство сообщений на других форумах говорят об этом. кто-нибудь заработал? – YAHOOOOO

+1

Проблема заключается в том, что, хотя это допустимый формат для совместного использования, у вас не может быть 64-битного backbuffer в Direct3D9. –

Смежные вопросы