winapi - 在 WM_PAINT 上重用先前的后台缓冲区

标签 winapi opengl

如果在接收 WM_PAINT 时最后一帧的内容没有更改,是否可以简单地指示操作系统使用旧的后台缓冲区重绘窗口,而不是将整个场景再次重绘到新的后台缓冲区并交换是吗?

最佳答案

没有。不存在这样的“后备缓冲区”。当绘图发生时,您不知道哪些区域可能被其他窗口覆盖。剪切区域并不是一个真正好的指标。

您唯一知道的是这些区域需要重新绘制。每个窗口都关心自己的客户区。如果你想缓冲某些东西,你必须自己做。

原因很简单:想象一下您有数百个窗口。当只有顶部的 View 可见时,为每个窗口保存一个缓冲区是低效的。因此 Windows 制造商决定不存储任何 Windows 内容,而只是通知顶部的窗口自行重绘。

好的。自从我们有了 DWM(动态窗口管理器)以来,事情发生了很大变化。但原则仍然是:你负责画画。如果你想缓冲某些东西,你必须自己做。

关于winapi - 在 WM_PAINT 上重用先前的后台缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26352480/

相关文章:

c - 是否可以在一个 getche() 函数中收集多个输入?

opengl - 使用 OpenGL/GLSL 实现法线贴图

opengl - 在几秒钟而不是几小时内旋转数百个 JPEG

c++ - Premake OpenGL SDK 无法从教程构建项目

c++ - 如何使用 C++/OpenGL 在球体上映射多个图像?

C# - 如何将对象转换为 IntPtr 并返回?

c++ - 如何在单击静态控件时显示工具提示并在使用特定 win32 c++ api 在其他地方单击时隐藏工具提示

c - 链接期间 WINAPI 出现奇怪的错误

c - Windows错误参数类型c编程

c++ - openGL 中的对象有限制吗?