2016-08-11 82 views
0

我试图在DirectX 12上渲染多个模型,只使用一个图形上下文,但结果非常奇怪,我不知道是什么原因。 enter image description here从外部渲染sponza模型的结果,右边的是正确的结果,左边的有问题。在DirectX 12上渲染多个模型错误

enter image description here从内侧呈现左侧sponza(有问题)的结果。

即使加载的两个网格是相同的,每个模型都有自己的顶点缓冲区,索引缓冲区和SRV。在创建图形上下文的过程中,只有一个图形上下文,并与每个模型的索引和顶点缓冲区一起设置,然后我调用drawIndexed()函数来渲染它。在创建图形上下文之后,我们每帧执行一次图形上下文。但是,如果我们为每个模型创建一个独立的图形上下文并在每个帧中执行所有图形上下文,则渲染效果不错,但帧速率下降很多。

对于您提供任何有关奇怪结果的原因的提示或提供更好的解决方案会非常有帮助。先进的非常感谢。

+0

什么是ÿ ou调用图形上下文? d3d12中没有这样的事情,你是在谈论命令列表吗? – galop1n

+0

是的。图形上下文是DirectX 12样本的迷你引擎中定义的结构。 –

+0

Direct3D 12增加了许多额外的方法来渲染Direct3D 11,所以在尝试使用DX12之前,先调试图形问题非常重要。您需要一次更换一件东西,直到您将问题隔离出来为止,并且请记住,使用DX12时,您可能需要额外的屏蔽,渲染障碍或其他更改以控制重新使用资源时的情况。您还应该尝试使用WARP来确保它不是一些与驱动程序相关的问题。 –

回答

-1

首先,我建议你远离dx12并坚持dx11,除非你已经是dx11专家,并且你是最高1%的应用案例,比如三A游戏或者非常特殊的高要求控制gpu内存。

没有太多细节上的问题,在这里,我只能给你一些基本的建议:

  1. 运行与调试层,并期待在控制台日志与D3D12GetDebugInterface(需要安装可选功能命名图形工具)来自Nvidia
  2. 使用帧捕获工具,如VSGD在Visual Studio或nsight并逐步检查你的框架步
  3. 使用DX11,真的