【问题标题】:Screen Tearing when rendering using Windows API使用 Windows API 渲染时出现屏幕撕裂
【发布时间】:2012-09-09 21:47:54
【问题描述】:

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

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

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

【问题讨论】:

    标签: winapi framebuffer


    【解决方案1】:

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

    【讨论】:

    • 正如 Adrian 在下面指出的,各种 Direct 接口使您可以访问垂直空白。 GDI 渲染不会。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 2012-10-27
      相关资源
      最近更新 更多