2014-01-23 35 views
1

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

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

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

+0

欢迎来到SO!请编辑您的帖子以包含您的代码无效,这将使我们能够更好地帮助您。 – Derek

+0

你解决了你的问题吗? – tweellt

回答

2

这会派上用场,你的情况:

int maxsamples = Device.MultisampleCountMaximum; 

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

如果解析度返回0,那么不支持此采样计数。

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

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

您不允许使用多重采样。

另一个非常有用的技术,以发现问题为这些错误:

与DeviceCreationFlags.Debug

创建设备

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

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

+0

嗨,当我使用'Device.MultisampleCountMaximum'时,我得到了一个值32.但无论'format'和'samplecount'我传递给'CheckMultisampleQualityLevels',它总是返回1.但是,当我然后尝试使用'new SampleDescription(samplecount,1)'它会抛出一个异常,说这个组合不被支持。我究竟做错了什么? –

+1

新的SampleDescription(samplecount,0),因为你可以上升到maxlevels - 1 – catflier

0

我有同样的问题,不能让Multisampling工作,直到我启用调试,并得到了一个很好的提示(真的希望我已经做了几个小时前,并保存了很多测试!)。

最初我在某处读到DepthStencilBuffer与Render纹理具有相同的SampleDescription - 但我不太确定,因为它没有像刚刚显示的快速测试那样工作。

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

0

当你正在进行多重采样时,只需要指出一点。

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

因此,为了渲染到已用MSAA定义的后台缓冲区,您需要创建一个具有相同MSAA级别的深度缓冲区。但是,如果您有一个rendertarget,它将被反馈回管道中,您可以定义一个非MSAA纹理和一个非MSAA深度缓冲区,这很方便,因为您可以使用纹理(你不能使用MSAA资源纹理的普通采样器)。

这一信息大部分可能不适合你。