2012-04-23 136 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