2013-01-14 45 views
0

是否有某种方法在GPU上的Direct2D中存储“场景”?在GPU上的Direct2D中存储资源

我正在寻找类似于ID2D1Mesh(即以矢量格式存储资源,而不是作为位图)的东西,但我可以在其中配置网格/场景/资源是否应使用抗锯齿进行渲染。

回答

1

有一种方法可以通过ID2D1Mesh来获得抗锯齿功能,但它不是微不足道的。您必须自己创建Direct3D设备,然后使用ID2D1Factory::CreateDxgiSurfaceRenderTarget()。这允许您直接配置D3D设备的多重采样/抗混叠设置,然后网格一切正常(实际上,我认为您总是告诉Direct2D使用别名渲染)。我自己并没有这样做,但是有一个MSDN示例演示了如何执行此操作。它不适用于心灵的懦弱......为了进行软件渲染,你必须初始化一个WARP设备。它确实有效,但是。此外,在Direct2D 1.1(Windows 8或Windows 7 +平台更新)中,您可以使用ID2D1CommandList接口进行录制/播放。我不确定这是否实现为“编译到GPU”(ala mesh),或者它只是宏(记录/回放命令)。

+1

'ID2D1CommandList'原来是非常快速且易于使用的。 – finnsson

1

里克是正确的,你可以在两个不同的级别应用抗锯齿。通过Direct2D或Direct3D。你可以做到这两点,但这是毫无意义的,只会浪费资源,导致效果不佳。如果您想要基于原始几何的抗锯齿功能,则Direct2D抗锯齿功能非常适合。如果您想在某些场景中牺牲一点质量以获得更好的整体性能,Direct3D抗锯齿功能非常有用。

Direct2D 1.1命令列表逐字地存储/记录可以针对不同目标回放的绘图命令列表。这可能是因为它没有栅格化后的结果。从概念上讲,就像将矢量图像存储在设备内存中一样。命令列表在某种程度上受到限制,因为一旦创建命令列表就不能修改命令列表,并且绘制的资源也可能无法更改,但它仍然非常方便。

0

在Windows 8.1中,Direct2D引入了geometry realizations,它允许您存储曲面细分版本的几何图形,然后使用或不使用抗锯齿将其渲染回来,就像您问的一样。这些强烈建议使用网格。命令列表虽然方便,却没有像自己创建和存储几何实现那样的缓存功能。