在GPU上将资源存储在Direct2D中

时间:2013-01-14 15:18:23

标签: direct2d

有没有办法在GPU上的Direct2D中存储“场景”?

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

3 个答案:

答案 0 :(得分:2)

Rick是正确的,你可以在两个不同的级别应用抗锯齿。通过Direct2D或通过Direct3D。你可以做到这两点,但这没有意义,只会浪费资源并导致糟糕的结果。如果您需要每个基元几何感知抗锯齿,Direct2D抗锯齿是合适的。如果您想在某些情况下牺牲一点质量以获得更好的整体性能,Direct3D抗锯齿非常有用。

Direct2D 1.1命令列表按字面存储/记录可以针对不同目标回放的绘图命令列表。这可能是你所追求的,因为它没有被栅格化。从概念上讲,它就像将矢量图像存储在设备存储器中一样。命令列表有一些限制,因为一旦创建了命令列表就无法修改,并且绘制的资源也可能不会被更改,但它仍然非常方便。

答案 1 :(得分:1)

有一种方法可以使用ID2D1Mesh来获得抗锯齿效果,但这并非易事。您必须自己创建Direct3D设备,然后使用ID2D1Factory::CreateDxgiSurfaceRenderTarget()。这允许您直接配置D3D设备的多重采样/抗锯齿设置,然后网格播放就好了(事实上我认为你总是告诉Direct2D使用别名渲染)。我自己没有这样做,但是有一个MSDN示例显示了如何执行此操作。它不适合胆小的人......为了进行软件渲染,你必须初始化一个WARP设备。但它确实有效。

此外,在Direct2D 1.1(Windows 8或Windows 7 +平台更新)中,您可以使用ID2D1CommandList界面进行录制/播放。我不确定它是否实现为“编译到GPU”(ala网格),或者它只是宏(记录/回放命令)。

答案 2 :(得分:1)

在Windows 8.1中,Direct2D引入了geometry realizations,它允许您存储几何体的细分版本,然后在有或没有消除锯齿的情况下将其渲染回来,就像您提出的那样。强烈建议使用网格。命令列表虽然方便,但与自己创建和存储几何实现没有相同的缓存能力。