2

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

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

我理解的是双缓冲区,但水平划分仍然存在。我怎样才能解决这个问题?

4

2 回答 2

4

BitBlt不同步到垂直空白,所以如果你BitBlt在屏幕上同时硬件正在渲染到显示器,它可能会撕裂。双缓冲BitBlt降低了撕裂的可能性,但并没有消除它。要消除它,您需要BitBlt在垂直空白期间执行您的操作。

于 2012-09-17T19:38:46.040 回答
2

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

还有其他图形 API,例如 Direct2D 和 Direct3D(以及已弃用的 DirectDraw),它们可以让您同步到垂直同步。

于 2012-09-17T19:39:32.203 回答