【问题标题】:C++/DirectX 'level editor'C++/DirectX '关卡编辑器'
【发布时间】:2015-12-10 14:53:42
【问题描述】:

我正在尝试构建一个关卡编辑器(或者通常是一些用于创建诸如材质之类的资产的工具),并且我已经将场景渲染到一个窗口。

我的想法是为每种编辑选项设置一个不同的窗口,即关卡的主窗口、材质窗口、模型/动画查看窗口等。

我的问题是,我是否应该为每个窗口创建一个新的 swapChain/renderTargetView/depthBuffer/stencilView 以便我可以为每个窗口渲染本质上不同的场景? (我使用每个窗口的句柄来完成所有这些操作)

我目前正在尝试这样做,但必须不断切换渲染目标/视口/深度缓冲区似乎很奇怪,我不确定这是否是正确的方法。

【问题讨论】:

    标签: c++ directx-11


    【解决方案1】:

    如果它们实际上是独立的窗口,那么它们中的每一个都需要一个交换链等,否则你无法渲染到它们中。

    【讨论】:

    • 哦,太好了,如果它们不是单独的窗口,我将不得不使用多个渲染目标作为后缓冲区的不同部分?此外,在更改渲染目标和为每帧的许多不同场景调用 swapchain->present 时是否有任何沉重的性能成本?我问这个是因为当我使用 XNA 时,我发现许多 spritebatch 开始/结束调用确实会影响性能。
    • @DomW 不是多窗口专家,所以不能肯定。在 XNA 中,spritebatches 的成本相当高,因为它们切换纹理、坐标缓冲区、告诉底层系统渲染等。我会假设多个交换链不会有这种问题,但是唯一确定的方法就是测试。
    • 您可以使用多个交换链等,也可以使用视口细分单个交换链。多个交换链可能会使您的代码更简单,所以更喜欢这样。至于性能,对于少数几个窗口应该没有任何区别。如果您有数千个窗口,每个窗口都有自己的交换链,那么您可能会遇到问题,因为这将是非常不典型的驱动程序使用。
    猜你喜欢
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    相关资源
    最近更新 更多