我想设计一个简单的窗口管理器,能够合成来自多个进程的输出。我的第一个想法是只对独立应用程序使用不同的线程,所以我只使用一个上下文并在应用程序和管理器主线程之间共享它,但再想想这听起来不是一个好主意,因为任何线程崩溃将终止一切。
所以我决定它必须真正支持应用程序的专用进程,但这让我想到了一个问题,即我如何以高性能的方式将来自不同进程的输出准确地拼接在一起。将数据从 GPU 复制到 CPU 以共享系统内存根本不是一种选择。从 OpenGL 并行常见问题解答中可以清楚地看出,不可能使用来自多个进程的一个上下文,除非它是间接导致性能非常低的。
那么,现有的窗口管理器是如何做到的呢?当然,我不希望有任何低层次的细节,只是一般的概念概述。