【问题标题】:Multisampling in SharpDXSharpDX 中的多重采样
【发布时间】:2016-11-24 05:59:04
【问题描述】:

所以我最近开始使用 SharpDX,并且偶然发现了一个问题。我不知道如何让 SharpDX 进行多重采样。我发现有两件事相关;您可以在创建 SwapChainDescription 时指定 SampleDescription,但 (1, 0) 以外的任何输入都会引发 Wrong Parameter 异常。

我发现的另一件事是 SamplerState,我把它放在我的像素着色器上,没有做任何事情。我玩了很多参数,但没有任何明显的变化。

我确定我遗漏了一些东西,但是没有任何以前的 directX 知识,我真的不知道到底要寻找什么。

【问题讨论】:

  • 欢迎来到 SO!请编辑您的帖子以包含您的无效代码,这将使我们能够更好地帮助您。
  • 你的问题解决了吗?

标签: sharpdx


【解决方案1】:

这在你的情况下会派上用场:

int maxsamples = Device.MultisampleCountMaximum;

int res = device.CheckMultisampleQualityLevels(SharpDX.DXGI.Format.R8G8B8A8_UNorm, samplecount);

如果 res 返回 0,则不支持此样本计数。

另外请注意,有些选项不兼容,所以如果你创建你的 SwapChain:

sd.Usage = (other usages) | Usage.UnorderedAccess;

您不能使用多重采样。

发现这些错误问题的另一种非常有用的技术:

使用 DeviceCreationFlags.Debug 创建您的设备

在您的启动项目属性(调试部分)中,勾选“启用本机代码调试”。

任何失败的 API 调用都会在调试输出窗口中为您提供错误描述。

【讨论】:

  • 嗨,当我使用 Device.MultisampleCountMaximum 时,我得到的值为 32。但是无论 formatsamplecount 传递给 CheckMultisampleQualityLevels,它总是返回 1。但是,当我然后尝试使用new SampleDescription(samplecount, 1) 它会抛出一个异常,说不支持这种组合。我做错了什么?
  • new SampleDescription(samplecount, 0) ,因为你可以达到 maxlevels - 1
【解决方案2】:

我遇到了同样的问题,在我启用调试并得到一个好的提示之前无法让多重采样工作(真希望我在几个小时前就完成了这个并节省了很多测试!)。

最初我在某处读到 DepthStencilBuffer 与 Render 纹理具有相同的 SampleDescription - 但我不太确定,因为没有这个,它似乎可以正常工作,就像刚刚显示的快速测试一样。

对我来说,事情是使用具有“Dimension = DepthStencilViewDimension.Texture2DMultisampled”的 DepthStencilViewDescription 创建 DepthStencilView。

【讨论】:

    【解决方案3】:

    在进行多重采样时请注意。

    设置渲染目标时,如果传递渲染目标和深度模板,则需要确保它们具有相同的多重采样级别。

    因此,为了渲染到您使用 MSAA 定义的后备缓冲区,您需要创建一个具有相同 MSAA 级别的深度缓冲区。

    但是,如果您有一个将作为纹理反馈到管道中的渲染目标,您可以定义一个非 MSAA 纹理和一个非 MSAA 深度缓冲区,这很方便,因为您可以在纹理上使用采样器(您不能对 MSAA 资源纹理使用普通采样器)。

    大部分信息对您来说可能并不新鲜。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多