C++ 在winAPI中切换*指针而不是使用BitBlt()?
正如我所读到的,winAPI中winGDI的BitBlt()函数是在屏幕上显示图像的最快方法。 但是“blitting”只将内存从一个源复制到一个目标 所以我想知道,为什么我们不能只拥有两个位图(缓冲区)并切换指针,如果当前缓冲区已完成,指针将指向当前缓冲区。就像双重缓冲。它将比mem copiyng更快 在winAPI中是否可能?GDI中的方法是将后缓冲区的内容复制到重定向表面。一种更有效的方法已在中实现 运行时使用位块传输(bitblt)和翻转表示 用于在显示器上显示图形内容的模型。最大的 bitblt和flip表示模型之间的区别在于 后台缓冲区内容到达Windows8DWM进行合成。在 在bitblt模型中,后缓冲区的内容被复制到 每次调用IDXGISwapChain1::Present1时的重定向表面在 翻转模式,所有后缓冲区与桌面窗口共享 经理(DWM)。因此,DWM可以从后面直接合成 无需任何额外复制操作的缓冲区。通常,翻转 模型更有效。翻转模型还提供了更多功能, 例如增强的当前统计数据 如果您有使用Windows图形设备的旧组件 接口(GDI)要直接写入HWND,请使用bitblt模型 有关详情,请参阅: 本文也给出了详细的说明C++ 在winAPI中切换*指针而不是使用BitBlt()?,c++,c,winapi,graphics,bitmap,C++,C,Winapi,Graphics,Bitmap,正如我所读到的,winAPI中winGDI的BitBlt()函数是在屏幕上显示图像的最快方法。 但是“blitting”只将内存从一个源复制到一个目标 所以我想知道,为什么我们不能只拥有两个位图(缓冲区)并切换指针,如果当前缓冲区已完成,指针将指向当前缓冲区。就像双重缓冲。它将比mem copiyng更快 在winAPI中是否可能?GDI中的方法是将后缓冲区的内容复制到重定向表面。一种更有效的方法已在中实现 运行时使用位块传输(bitblt)和翻转表示 用于在显示器上显示图形内容的模型。最大的
BitBlt
,内存中位图的内容就无法神奇地出现在屏幕上。没有“指向屏幕矩形片段的指针”可交换。您需要研究硬件体系结构、Windows内部结构和当前驱动程序模型,以了解原因。您可以使用DirectX/Direct2D而不是GDI。这就是所谓的交换链:谢谢,我明白。。我知道DirectX是高级替代品,但我正在编写一些跨平台的代码,只想让事情尽可能简单。。