【发布时间】:2012-09-09 21:47:54
【问题描述】:
我正在尝试使用 Windows API 渲染动画。我的问题是屏幕的一半显示前一帧,下半部分显示当前帧。我以为使用双缓冲区时会解决这个问题,但我已经插入了
BitBlt(hdc, 0, 0, iWidth, iHeight, hdcMem, 0, 0, SRCCOPY);
我理解的是双缓冲,但水平分割仍然存在。我该如何解决这个问题?
【问题讨论】:
标签: winapi framebuffer
我正在尝试使用 Windows API 渲染动画。我的问题是屏幕的一半显示前一帧,下半部分显示当前帧。我以为使用双缓冲区时会解决这个问题,但我已经插入了
BitBlt(hdc, 0, 0, iWidth, iHeight, hdcMem, 0, 0, SRCCOPY);
我理解的是双缓冲,但水平分割仍然存在。我该如何解决这个问题?
【问题讨论】:
标签: winapi framebuffer
BitBlt 不同步到垂直空白,所以如果你BitBlt 到屏幕的同时硬件正在渲染到显示器,它可能会撕裂。使用BitBlt 进行双缓冲可降低撕裂的可能性,但并不能消除撕裂的可能性。要消除它,您需要在垂直空白期间执行BitBlt。
【讨论】:
GDI BitBlt 不是为快速、连续的动画而设计的。是否撕裂可能取决于您的硬件和驱动程序。
还有其他图形 API,例如 Direct2D 和 Direct3D(以及已弃用的 DirectDraw),它们可以让您同步到垂直同步。
【讨论】: