SharpDX中的多重采样

时间:2014-01-23 22:05:34

标签: sharpdx

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

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

我确信我错过了一些东西,但是没有任何先前的directX knowlegde我真的不知道究竟要找什么。

3 个答案:

答案 0 :(得分:3)

这将在您的情况下派上用场:

int maxsamples = Device.MultisampleCountMaximum;

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

如果res返回0,则不支持此Sample count。

另请注意,某些选项不兼容,因此如果您创建SwapChain:

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

您不能使用多重采样。

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

使用DeviceCreationFlags.Debug

创建您的设备

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

任何失败的API调用都会在调试输出窗口中显示错误说明。

答案 1 :(得分:0)

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

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

对我来说,最重要的是使用DepthStencilViewDescription创建DepthStencilView,其中“Dimension = DepthStencilViewDimension.Texture2DMultisampled”。

答案 2 :(得分:0)

当您进行多重采样时,请注意。

设置rendertarget时,如果传递rendertarget和depthstencil,则需要确保它们都具有相同的多重采样级别。

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

但是,如果你有一个rendertarget,它将是一个反馈到管道的纹理,你可以定义一个非MSAA纹理和一个NON MSAA深度缓冲区,这很方便,因为你可以在纹理上使用一个采样器(你不能使用普通的采样器来获得MSAA资源纹理。)

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