有没有办法在 GPU 上的 Direct2D 中存储“场景”?
我正在寻找类似的东西ID2D1Mesh
(即以矢量格式存储资源,而不是作为位图),但我可以在其中配置是否应该使用抗锯齿渲染网格/场景/资源。
有没有办法在 GPU 上的 Direct2D 中存储“场景”?
我正在寻找类似的东西ID2D1Mesh
(即以矢量格式存储资源,而不是作为位图),但我可以在其中配置是否应该使用抗锯齿渲染网格/场景/资源。
Rick 是正确的,因为您可以在两个不同级别应用抗锯齿。通过 Direct2D 或通过 Direct3D。你可以两者都做,但这是没有意义的,只会浪费资源并导致糟糕的结果。如果您想要每个基元几何感知抗锯齿,则 Direct2D 抗锯齿是合适的。如果您想在某些情况下牺牲一些质量以获得更好的整体性能,Direct3D 抗锯齿非常有用。
Direct2D 1.1 命令列表实际上存储/记录了可以针对不同目标回放的绘图命令列表。这可能是您所追求的,因为它没有被光栅化。从概念上讲,它就像在设备内存中存储矢量图。命令列表有一定的限制,因为命令列表一旦创建就无法修改,并且绘制的资源也可能不会更改,但它仍然非常方便。
有一种方法可以使用 进行抗锯齿ID2D1Mesh
,但这并不重要。您必须自己创建 Direct3D 设备,然后使用ID2D1Factory::CreateDxgiSurfaceRenderTarget()
. 这允许您直接配置 D3D 设备的多重采样/抗锯齿设置,然后网格就可以正常播放(实际上我认为您总是告诉 Direct2D 使用锯齿渲染)。我自己没有这样做,但是有一个 MSDN 示例显示了如何执行此操作。这不适合胆小的人……为了进行软件渲染,您必须初始化 WARP 设备。但是,它确实有效。
此外,在 Direct2D 1.1(Windows 8 或 Windows 7 + 平台更新)中,您可以使用该ID2D1CommandList
界面进行录制/播放内容。我不确定这是作为“编译到 GPU”(ala 网格)实现的,还是只是宏(命令的记录/回放)。
在 Windows 8.1 中,Direct2D 引入了几何实现,它允许您存储几何图形的细分版本,然后按照您的要求将其渲染回来,无论是否使用抗锯齿。强烈建议使用网格而不是使用这些。命令列表虽然方便,但没有与自己创建和存储几何实现相同的缓存能力。