我正在尝试使用Windows API渲染动画。我的问题是屏幕的一半显示前一帧,下半部分显示当前帧。我认为这在使用双缓冲区时会被修复,但我已插入
BitBlt(hdc, 0, 0, iWidth, iHeight, hdcMem, 0, 0, SRCCOPY);
我理解的是双缓冲区,但水平分区仍然存在。我该如何解决这个问题?
答案 0 :(得分:4)
BitBlt
未与垂直空白同步,因此如果您在屏幕上BitBlt
同时将硬件渲染到显示屏,则可能会撕裂。使用BitBlt
进行双缓冲可降低撕裂的可能性,但不会消除它。要消除它,您需要在垂直空白期间执行BitBlt
。
答案 1 :(得分:2)
GDI BitBlt不是为快速连续动画而设计的。是否撕裂可能取决于您的硬件和驱动程序。
还有其他图形API,如Direct2D和Direct3D(以及不推荐使用的DirectDraw),可让您同步到垂直同步。