如何将D3D11On12渲染目标映射到内存



我正在尝试将屏幕外D2D渲染目标映射到内存。

  • 渲染目标创建为具有D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGETID3D12Resource
  • 然后通过ID3D11On12Device::CreateWrappedResource()
  • 然后用ID2D1DeviceContext2::CreateBitmapFromDxgiSurface制成ID2D1Bitmap1

应用程序使用D2D绘制它,然后它被用作D3D12着色器中的像素着色器资源,我可以通过这种方式验证纹理的内容是否正确。

但是,如果我通过CopyTextureRegion将它复制到D3D12_HEAP_TYPE_READBACK资源,它会返回为完全设置为0。我使用的代码适用于其他纹理。我在刷新D3D11DeviceContext之后以及在完成"显示到"屏幕之后进行了尝试。

我也尝试在D2D领域中复制和映射它,但我得到了相同的结果。我觉得这个资源在某种程度上很特别,我错过了一些东西。

我解决了这个问题。问题是,我输出到一个没有alpha支持的位图,再加上糟糕的BlendDesc参数。我确认,在复制到读回资源时,D3D11On12屏幕外渲染目标的工作方式与任何其他资源相同。

最新更新