2012-04-23 131 views
3

我想创建一个窗口,使其没有“黑色背景”区域,而是透过其他任何打开的窗口等。带透明背景的LWJGL窗口?

即,渲染场景并仅渲染场景,没有框架,也没有背景区域。我已经阅读了一个涉及渲染到一个隐藏的OpenGL窗口并将其缓存在内存中的方法,创建一个透明的分层窗口,并从内存复制到透明窗口。

很明显,这是非常CPU /内存密集型,所以我想知道是否有更好的方法来做到这一点,在Java和LWJGL?

回答

2

这是只能用平台特定的代码来完成的事情。

This thread在这个问题上提供了一个有趣的讨论。 This post shares C在Windows上完成这个效果的代码,以及在Linux上的this post

+0

是的,我发现通过谷歌的评论说,这种方式是非常密集的cpu。这可能是在Windows上完成此操作的唯一方法吗? – nighthawk454 2012-04-23 15:06:51

+0

是的,不幸的是,在GPU中处理的每个帧都必须复制到RAM中,然后在屏幕上绘制以提供透明窗口效果。这是这类事情的瓶颈。如果你仔细想想,没有太多的商业应用正在做这件事,因为它不能以快速的方式完成。 – karlphillip 2012-04-23 16:18:55

+0

好的,这就是我所害怕的。似乎操作系统的作家应该在此之前,是吧?感谢您的澄清! – nighthawk454 2012-04-25 19:34:27

2

这是操作系统特定的,因为“OS /窗口管理器/非你部门”拥有其他窗口。

在Windows上,OpenGL不能参与这种合成。其他操作系统可能会允许。

+0

请为此提供链接。不知何故表面需要被集成到桌面合成中。 Windows上的OpenGL应用程序绕过'DWM'并使用较低的系统层?或者[DWM仅适用于WPF应用程序](http://blogs.msdn.com/b/greg_schechter/archive/2006/06/09/623566.aspx)? – 2012-04-23 07:35:23