【问题标题】:Switching *pointers instead of using BitBlt() in winAPI?在 winAPI 中切换 *pointers 而不是使用 BitBlt()?
【发布时间】:2021-05-11 12:39:20
【问题描述】:

正如我所读到的,来自 winAPI 的 winGDI 的 BitBlt() 函数是将一些图像放在屏幕上的最快速度。 但是“blitting”只是将内存从一个源复制到一个目标。

所以我想知道,为什么我们不能只拥有两个位图(缓冲区),并在完成时切换指向当前缓冲区的指针。比如双缓冲。它会比内存复制更快。

在winAPI中可以吗?

【问题讨论】:

标签: c++ c winapi graphics bitmap


【解决方案1】:

GDI 中的BitBlt 方法是将后台缓冲区的内容复制到重定向表面。 directx中实现了更高效的方法。

运行时使用位块传输 (bitblt) 和翻转表示 模型在显示监视器上呈现图形内容。最大的 bitblt 和翻转演示模型之间的区别是如何 后台缓冲区内容会到达 Windows 8 DWM 进行合成。在里面 bitblt 模型,后台缓冲区的内容被复制到 每次调用 IDXGISwapChain1::Present1 时的重定向表面。 在 翻转模型,所有后台缓冲区都与桌面窗口共享 经理 (DWM)。因此,DWM 可以直接从后面的那些 缓冲区没有任何额外的复制操作。一般来说,翻转 模型更有效。翻转模型还提供了更多功能, 例如增强的当前统计数据。

如果您有使用 Windows 图形设备的旧组件 直接写入 HWND 的接口 (GDI),使用 bitblt 模型。

更多详情请参考:Comparing the DXGI flip model and the BitBlt model

这篇文章也给出了详细的解释。

【讨论】:

  • 谢谢,我明白了..我知道 DirectX 是高级替代品,但我正在编写跨平台的代码,只是想让事情尽可能简单..
猜你喜欢
  • 1970-01-01
  • 2014-03-02
  • 2011-12-22
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多