12 graphics dirtyrectangle framebuffer bounding-box
哪里可以找到关于实现用于计算"脏矩形"的算法的参考,以最小化帧缓冲器更新?一种显示模型,允许任意编辑并计算更新显示所需的最小"位blit"操作集.
要构建包含所有需要重新绘制的区域的最小矩形:
对于添加的每个脏区域:
Windows 至少维护了一个更新区域,其中包含已通知的更改以及由于窗口被遮挡和显示而需要完成的任何重新绘制。区域是由许多可能不连续的矩形、多边形和椭圆形组成的对象。您可以通过调用 InvalidateRect 告诉 Windows 屏幕的一部分需要重新绘制 - 对于更复杂的区域还有一个 InvalidateRgn 函数。如果您选择在下一个 WM_PAINT 消息到达之前进行一些绘制,并且希望将其从脏区域中排除,可以使用 ValidateRect 和 ValidateRgn 函数。
当您开始使用 BeginPaint 进行绘画时,您需要提供一个 PAINTSTRUCT,Windows 会用该 PAINTSTRUCT 填充有关需要绘画的内容的信息。其中成员之一是包含无效区域的最小矩形。如果您想在存在多个小的无效区域时最小化绘制,您可以使用 GetUpdateRgn 获取区域本身(您必须在 BeginPaint 之前调用它,因为 BeginPaint 将整个窗口标记为有效)。
我认为,由于在最初编写这些环境时最小化绘图在 Mac 和 X 上非常重要,因此存在用于维护更新区域的等效机制。