gpt4 book ai didi

c++ - 从 DirectX11 共享资源到 Directx9

转载 作者:行者123 更新时间:2023-11-30 03:02:40 29 4
gpt4 key购买 nike

让我有两个设备,第一个是 DirectX9,第二个是 DirectX11。我正在做的是通过 D3D11 的计算着色器计算粒子并将它们的数据保存在 D3D11 纹理中,然后我想在我的 D3D9 设备中使用该 D3D11 纹理来显示它。我正在使用以下代码..

在 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:(错误):打开和创建的资源不匹配,无法打开共享资源。”

已编辑:好的,当我使用 dx9 中的 D3DFMT_A16B16G16R16F 和 dX11 中的 DXGI_FORMAT_R16G16B16A16_FLOAT 创建纹理时,它起作用了。但使用 D3DFMT_A32B32G32R32F 和 DXGI_FORMAT_R32G32B32A32_FLOAT 时,会出现上述错误。

最佳答案

您收到该错误是因为不允许使用这些纹理格式。

Textures being shared from D3D9 to D3D11 have the following restrictions:

  • Textures must be 2D
  • Only 1 mip level is allowed
  • Texture must have default usage
  • Texture must be write only
  • MSAA textures are not allowed
  • Bind flags must have SHADER_RESOURCE and RENDER_TARGET set
  • Only R10G10B10A2_UNORM, R16G16B16A16_FLOAT and R8G8B8A8_UNORM formats are allowed

来自 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

关于c++ - 从 DirectX11 共享资源到 Directx9,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9924426/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com