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

时间:2012-09-17 16:19:49

标签: winapi framebuffer

我正在尝试使用Windows API渲染动画。我的问题是屏幕的一半显示前一帧,下半部分显示当前帧。我认为这在使用双缓冲区时会被修复,但我已插入

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

我理解的是双缓冲区,但水平分区仍然存在。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

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