2012-03-29 4 views
1

두 장치가 있습니다. 첫 번째는 DirectX9이고 두 번째 장치는 DirectX11입니다. 내가하는 일은 입자를 계산하고 D3D11의 Compute Shader로 D3D11 텍스처에 데이터를 저장 한 다음 D3D9 장치에서 D3D11 텍스처를 사용하여 표시하는 것입니다. 난 다음 코드를 사용하고 .. D3D11 장치에서는리소스를 DirectX11에서 Directx9로 공유

.. (m_pBuffer가 ID3D11Buffer이다) D3D9 장치에이어서

IDXGIResource* pTempResource(NULL); 
hr = m_pBuffer->QueryInterface(__uuidof(IDXGIResource), (void**)&pTempResource); 
hr = pTempResource->GetSharedHandle(&SharedHandle); //successful 

...

hr = g_pd3dDevice->CreateTexture(width, height, 1, D3DUSAGE_RENDERTARGET,D3DFMT_A32B32G32R32F,D3DPOOL_DEFAULT,&pSharedTexture9,&SharedHandle); 

내가 데 오류가 " Direct3D9 : (ERROR) : 열린 리소스와 생성 된 리소스가 일치하지 않아 공유 리소스를 열 수 없습니다. "

EDITED : dx9에서는 D3DFMT_A16B16G16R16F를 사용하고 dX11에서는 DXGI_FORMAT_R16G16B16A16_FLOAT를 사용하여 텍스처를 만들면 좋습니다. 그러나 D3DFMT_A32B32G32R32F와 DXGI_FORMAT_R32G32B32A32_FLOAT를 사용하면 위의 오류가 발생합니다.

답변

3

해당 텍스처 형식이 허용되지 않으므로 해당 오류가 발생합니다.

텍스처 D3D11에 D3D9에서 공유되는 다음과 같은 제한 사항이

  • 텍스처해야 2D
  • 만 1 개 밉 수준은
  • 텍스처가 기본 사용을
  • 텍스처 반드시 있어야합니다 허용 쓰기 전용
  • MSAA 텍스처는 허용되지 않습니다.
  • 빈 D 플래그 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에서

을 허용 설정, 위에서 언급 한 세 가지 형식으로 제한됩니다. 또한 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

문제는 그것이 공유를위한 유효한 형식이지만 Direct3D9에서 64 비트 백 버퍼를 사용할 수 없다는 것입니다. –