Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在winAPI中切换*指针而不是使用BitBlt()?_C++_C_Winapi_Graphics_Bitmap - Fatal编程技术网

C++ 在winAPI中切换*指针而不是使用BitBlt()?

C++ 在winAPI中切换*指针而不是使用BitBlt()?,c++,c,winapi,graphics,bitmap,C++,C,Winapi,Graphics,Bitmap,正如我所读到的,winAPI中winGDI的BitBlt()函数是在屏幕上显示图像的最快方法。 但是“blitting”只将内存从一个源复制到一个目标 所以我想知道,为什么我们不能只拥有两个位图(缓冲区)并切换指针,如果当前缓冲区已完成,指针将指向当前缓冲区。就像双重缓冲。它将比mem copiyng更快 在winAPI中是否可能?GDI中的方法是将后缓冲区的内容复制到重定向表面。一种更有效的方法已在中实现 运行时使用位块传输(bitblt)和翻转表示 用于在显示器上显示图形内容的模型。最大的

正如我所读到的,winAPI中winGDI的BitBlt()函数是在屏幕上显示图像的最快方法。 但是“blitting”只将内存从一个源复制到一个目标

所以我想知道,为什么我们不能只拥有两个位图(缓冲区)并切换指针,如果当前缓冲区已完成,指针将指向当前缓冲区。就像双重缓冲。它将比mem copiyng更快

在winAPI中是否可能?

GDI中的方法是将后缓冲区的内容复制到重定向表面。一种更有效的方法已在中实现

运行时使用位块传输(bitblt)和翻转表示 用于在显示器上显示图形内容的模型。最大的 bitblt和flip表示模型之间的区别在于 后台缓冲区内容到达Windows8DWM进行合成。在 在bitblt模型中,后缓冲区的内容被复制到 每次调用IDXGISwapChain1::Present1时的重定向表面在 翻转模式,所有后缓冲区与桌面窗口共享 经理(DWM)。因此,DWM可以从后面直接合成 无需任何额外复制操作的缓冲区。通常,翻转 模型更有效。翻转模型还提供了更多功能, 例如增强的当前统计数据

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

有关详情,请参阅:

本文也给出了详细的说明


您当然可以交换两个位图句柄。但是,如果没有
BitBlt
,内存中位图的内容就无法神奇地出现在屏幕上。没有“指向屏幕矩形片段的指针”可交换。您需要研究硬件体系结构、Windows内部结构和当前驱动程序模型,以了解原因。您可以使用DirectX/Direct2D而不是GDI。这就是所谓的交换链:谢谢,我明白。。我知道DirectX是高级替代品,但我正在编写一些跨平台的代码,只想让事情尽可能简单。。