direct3d12 - 如何将 D3D11On12 渲染目标映射到内存?
问题描述
我正在尝试将屏幕外 D2D 渲染目标映射到内存。
- 渲染目标被创建为
ID3D12Resource
withD3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET
- 然后通过
ID3D11On12Device::CreateWrappedResource()
- 然后做成一个
ID2D1Bitmap1
withID2D1DeviceContext2::CreateBitmapFromDxgiSurface
该应用程序使用 D2D 对其进行绘制,然后将其用作 D3D12 着色器中的像素着色器资源,我可以通过这种方式验证纹理的内容是否正确。
但是,如果我通过 将它复制到D3D12_HEAP_TYPE_READBACK
资源CopyTextureRegion
,它会返回完全设置为 0。我使用的代码适用于其他纹理。我在D3D11DeviceContext
刷新后尝试过,并且在完成屏幕呈现后也尝试过。
我也尝试在 D2D 领域中复制和映射它,但我得到了相同的结果。我觉得这个资源在某种程度上很特别,我错过了一些东西。
解决方案
我解决了这个问题。问题是我输出到没有 alpha 支持的位图,并结合了错误的 BlendDesc 参数。我确认 D3D11On12 屏幕外渲染目标在复制到回读资源时与任何其他资源的工作方式相同。
推荐阅读
- c# - WPF C# Ninject 与 mainViewModel 和多个 viewmodel 问题
- c# - 尝试从第三方 api 同步数据
- elasticsearch - 如何为多值属性添加动态范围过滤器?
- ssh - 通过 SSH 在两个远程节点之间复制文件而不通过控制器
- reactjs - React Native - FlatList 的应用程序性能问题?
- java - SimpleJdbc,请求的转换无效
- bash - 修改几个特定文件中的某些内容,例如 txt (bash)
- python - Gunicorn 双向 SSL 错误“SSL_ERROR_UNKNOWN_CA_ALERT”
- php - 使用 PHP 的 shell_exec 调用 Go 正在改变 GOPATH
- python - 如何对流生成器进行单元测试