1

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

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

4

3 回答 3

2

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

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

于 2013-01-17T21:59:22.410 回答
1

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

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

于 2013-01-17T20:26:39.237 回答
1

在 Windows 8.1 中,Direct2D 引入了几何实现,它允许您存储几何图形的细分版本,然后按照您的要求将其渲染回来,无论是否使用抗锯齿。强烈建议使用网格而不是使用这些。命令列表虽然方便,但没有与自己创建和存储几何实现相同的缓存能力。

于 2014-03-06T09:58:24.163 回答