Winapi 使用Windows API渲染时的屏幕撕裂

Winapi 使用Windows API渲染时的屏幕撕裂,winapi,framebuffer,Winapi,Framebuffer,我正在尝试使用Windows API渲染动画。我的问题是屏幕的一半显示前一帧,下半部分显示当前帧。我原以为在使用双缓冲区时会解决这个问题,但我插入了 BitBlt(hdc, 0, 0, iWidth, iHeight, hdcMem, 0, 0, SRCCOPY); 据我所知,这是一个双重缓冲区,但水平分割仍然存在。如何修复此问题?BitBlt未同步到垂直空白,因此,如果在硬件渲染到显示器的同时BitBlt到屏幕,它可能会撕裂。使用BitBlt进行双缓冲可以降低撕裂的可能性,但不能消除撕裂。要

我正在尝试使用Windows API渲染动画。我的问题是屏幕的一半显示前一帧,下半部分显示当前帧。我原以为在使用双缓冲区时会解决这个问题,但我插入了

BitBlt(hdc, 0, 0, iWidth, iHeight, hdcMem, 0, 0, SRCCOPY);

据我所知,这是一个双重缓冲区,但水平分割仍然存在。如何修复此问题?

BitBlt
未同步到垂直空白,因此,如果在硬件渲染到显示器的同时
BitBlt
到屏幕,它可能会撕裂。使用
BitBlt
进行双缓冲可以降低撕裂的可能性,但不能消除撕裂。要消除它,您需要在垂直空白期间执行
BitBlt

GDI BitBlt不是为快速、连续的动画而设计的。您是否被撕裂可能取决于您的硬件和驱动程序


还有其他图形API,如Direct2D和Direct3D(以及不推荐使用的DirectDraw),可以让您同步到垂直同步。

正如Adrian在下面指出的,各种直接接口允许您访问垂直空白。GDI渲染不需要。