什么是类似于 OpenGL 的 SwapBuffers 的 Direct2d 命令?我在 Delphi 和 CPP Builder 等 VCL 环境中使用它。谢谢
2 回答
有几种方法可以在 Direct2D 中进行等效操作。最简单的方法是创建一个 ID2D1HwndRenderTarget。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/dd371275(v=vs.85).aspx。您将对 D2D1_HWND_RENDER_TARGET_PROPERTIES 参数感兴趣。这有一个 D2D1_PRESENT_OPTIONS 字段,可以根据您想要的行为将其设置为不同的值。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/dd368144(v=vs.85).aspx。有了这个,SwapBuffers 的粗略等价物是 ID2D1RenderTarget::EndDraw。
另一种选择是使用 Direct3D 互操作。在这种情况下,您将创建一个 DXGI 表面渲染目标。(我会发布一个文档链接,但我没有足够的 StackOverflow 声誉来发布两个以上的超链接。Google "ID2D1Factory::CreateDxgiSurfaceRenderTarget" 用于文档)。这允许您使用 Direct2D 向表面发出 2D 渲染命令,然后使用 Direct3D/DXGI 呈现。这更复杂,但给你更多的灵活性。
d3ddev->Present(NULL, NULL, NULL, NULL);