2012-04-23 27 views
3

「黒い背景」領域がないようにウィンドウを作成したいのですが、開いている他のウィンドウに透けて見えるようにしたいと考えています。透明な背景を持つLWJGLウィンドウ?

つまり、フレームは残さず、背景領域は残さない。

私は、隠されたOpenGLウィンドウにレンダリングし、メモリにバッファリングし、透明なレイヤードウィンドウを作成し、メモリから透明ウィンドウにコピーする方法について読んだことがあります。

これは明らかにCPU /メモリを大量に消費するので、JavaとLWJGLの中で、これを行うにはより良い方法があるのだろうか?

答えて

2

これは、プラットフォーム固有のコードでのみ達成できるものです。

This threadは、このテーマについて興味深い議論を提供します。 This postシェアWindowsではこの効果を達成するコード、Linuxではthis postです。

+0

ええ、私はGoogleを介して、その方法は非常にCPU集約的であると言います。それは窓でこれを達成する唯一の方法かもしれませんか? – nighthawk454

+0

はい、残念ながら、GPUで処理されるすべてのフレームをRAMにコピーしてから、透明なウィンドウ効果を与えるために画面に描画する必要があります。そして、これはこのタイプのもののボトルネックです。あなたがそれについて考えるなら、これを高速で行うことができないため、これを行う商用アプリケーションはそれほど多くありません。 – karlphillip

+0

ああ、それは私が恐れていたことです。 OS作家のような存在になっているようですね。解明してくれてありがとう! – nighthawk454

2

「OS /ウィンドウマネージャー/ノーユーユー部門」が他のウィンドウを所有しているため、これはOS固有です。

Windowsでは、OpenGLはこの種の合成に参加できません。他のOSでも可能です。

+0

このリンクを入力してください。何らかの形で表面をデスクトップ合成に統合する必要があります。 Windows上のOpenGLアプリケーションは何とか 'DWM'をバイパスし、下位システム層を使用しますか?または[DWM for WPF apps](http://blogs.msdn.com/b/greg_schechter/archive/2006/06/09/623566.aspx)ですか? –

関連する問題