我正在学习“使用 DirectX 12 进行 3D 游戏编程简介”。在初始化 d3d(第 4 章)中运行示例代码,当我想使用 4xmsaa 时,发生了错误,如下图所示,请帮助我。 错误的数字
为了与 DirectX 12“无神奇运行时行为”的设计理念保持一致,您不允许将后缓冲区创建为 MSAA。这是因为视频输出硬件实际上无法呈现 MSAA 后缓冲区,因此必须在管道中的某个点将它们解析为每个像素。在 DirectX 11 中,这是在创建 MSAA 后缓冲区时在“幕后”完成的。在 DirectX 12 中,您负责自己创建 MSAA 渲染目标纹理,然后执行对后备缓冲区的解析,或者运行一些其他后处理来执行解析。设置完全相同,只是更加详细和明确,并且受应用程序控制,而不是“神奇”。
请参阅SimpleMSAA12示例。
使用 DirectX 12,您也不允许创建 sRGB 格式后缓冲区。您可以创建 sRGB 渲染目标视图,该视图将在写入后备缓冲区时执行伽玛。在将 sRGB MSAA 渲染目标直接解析为非 sRGB 后缓冲区时,旧的调试层和 Windows 10 运行时中存在一些错误。上面的示例中也注明了这些。
请注意,UWP 应用程序与 Win32 桌面应用程序的 DirectX 12 具有完全相同的行为。这是因为 UWP 应用和 DirectX 12 都需要使用
DXGI_SWAP_EFFECT_FLIP_*交换效果而不是旧的DXGI_SWAP_EFFECT_*交换模式。
顺便说一句,如果您启用了 DXGI 调试,当您尝试创建 4x MSAA 后缓冲区时,您将获得一些特定的调试诊断输出:
DXGI ERROR: IDXGIFactory::CreateSwapChain: Flip model swapchains (
DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL
and DXGI_SWAP_EFFECT_FLIP_DISCARD) do not support multisampling.
[ MISCELLANEOUS ERROR #102: ]
Run Code Online (Sandbox Code Playgroud)
请查看此博客文章,了解有关在项目中启用 DXGI 调试的详细信息,或者查看DeviceResources的实现。
| 归档时间: |
|
| 查看次数: |
546 次 |
| 最近记录: |