窗口系统如何组合最终屏幕?

时间:2016-07-27 22:49:43

标签: opengl graphics directx

如何在MacOS上合成像Quartz这样的窗口系统?

单个应用程序可以创建图形上下文并将它们与GPU上的帧缓冲区相关联。我假设窗口系统也必须这样做。但是窗口系统如何访问所有应用程序帧缓冲区并将它们合成到自己的缓冲区中呢?

当应用程序没有“拥有”屏幕时屏幕是否会出现问题?可能发生“撕裂”的唯一点是窗口系统正在读取应用程序的帧缓冲区(或其他东西)。

1 个答案:

答案 0 :(得分:0)

实际执行此操作有几种不同的方法。但最常用的方法是,窗口系统本身负责创建窗口框架缓冲区和OpenGL上下文。如果排序是一个窗口,应用程序不会孤立地创建OpenGL上下文和帧缓冲区!

  

但是窗口系统如何访问所有应用程序帧缓冲区并将它们合成到它自己的?

嗯,窗口系统首先是窗口框架缓冲区的实际所有者。应用程序只是租用它们。

  

当应用程序没有"拥有"时,屏幕会出现问题。屏幕?唯一的一点是"撕裂"当窗口系统正在读取应用程序的帧缓冲区(或其他东西)时,可能会发生这种情况。

这是双缓冲的目的。缓冲交换在合成重绘和应用程序呈现到后台缓冲区之间发生延迟,而后台缓冲区无法通过合成访问。合成只从前缓冲区读取。