你在 linux 中使用过或见过 cairo dock 吗?我在维基百科中读到它是用 C 编写的。我只是好奇他们是如何制作一个使用 OpenGL 的无窗口、类似小部件的应用程序的。是否可以制作一个无窗口且没有背景(或透明背景)的 OpenGL 应用程序。他们是从头开始用 C 做的吗?或者他们是否使用了任何其他工具?
1 回答
“无窗”是什么意思。窗口是屏幕上的(矩形)区域,您可以通过绘图操作对其进行绘制。但是,从您的问题来看,我的印象是,您实际上是在询问创建一个没有装饰的窗口(即标题栏等)。
在 Linux,或更准确地说是 X11 中,窗口的外观由两件事控制: 窗口管理器控制下的窗口的扩展窗口管理器提示 (EMWH);窗口管理器是负责绘制装饰和边框的实际程序。还有Redirection Override标志,它控制一个窗口是否真的在一个窗口管理器的控制之下。如果您要询问“无背景”,那么我认为您的意思是透明的。首先看看我制作的这个视频:http ://www.youtube.com/watch?v= iHZfH1Qhonk 这就是你想要的吗?那么你真正想要的是一个带有Alpha 通道的窗口在其帧缓冲区配置(X11 XRender FBConfig)中,以及一个合成管理器(可以,但不需要成为窗口管理器的一部分)。该程序的源代码可以在https://github.com/datenwolf/codesamples/tree/master/samples/OpenGL/x11argb_opengl_glsl找到
或者您实际上是在询问可以渲染图片但没有出现在屏幕上的 OpenGL 上下文?这将是一个屏幕外上下文,有两种方法可以用 X11 实现它:
为上下文使用无窗口 PBuffer X11 可绘制对象
将隐藏窗口与 OpenGL 帧缓冲区对象一起使用
两种方法各有利弊。