2012-02-16 21 views
0

私のプログラムでは、別のアプリケーション(OpenGLで何かを描画する)を実行して描画する必要があります。OpenGLで別のアプリケーションウィンドウに描画

WindowsやQtでどうすればいいですか?

解決策は、hereです。

+0

具体的にするか、サンプルコードをお知らせください。 「私のプログラムで別のアプリケーションを実行する必要がある」とはどういう意味ですか?あなたのプログラムから新しいプロセスを開始しますか? – tr9sh

+0

今のところコードはありません。あなたのプログラムから新しいプロセスを始めるのですか?はい、そう思います。私は実行するプログラム(exeファイル)を選択し、このプログラムによって描画されたイメージをOpenGLで取得し、テクスチャとして使用し、変換して元のイメージを再作成します。 – Jeka

+0

@Jeka:あなたはもう少し詳しく説明できますか?また、これを行うためのソリューション(すでに回答しているフックのような)が、アンチウイルス/アンチ・チート・プログラムのようなものを引き起こす可能性があることも知っておくべきです。 – KillianDS

答えて

0

別のアプリケーション(OpenGlでsmthを描画する)を実行して描画します。

このプログラムによって描画された画像を(openglによって)取得し、それをテクスチャとして使用し、変換を行い、元の画像を再現します。

これは2つの異なるものです。あなたが明らかにしたいことをもっと明確にしたいと思うようにするためには、最も簡単でクリーンな方法は、wglSwapLayerBuffersです(のようになります)何をSwapBufferswglSwapBuffersと呼びますか、それを確認するか、3つすべてをフックする必要があります)。

次に、有効なコンテキストハンドルを持っていて、バッファがスワップされた時点で、フレームバッファの内容が有効で一貫性があり、半分の描画されたプリミティブが存在しないことが確実です(必ず!)。したがって、フロントバッファーまたはバックバッファー(またはその両方)を読み取って、その上にいくつかのカーネルを実行し、アプリケーションに制御を戻す前に書き戻すことを妨げるものはありません。

コンテキスト・ハンドルは、確実に問題なく、いくつか本当に厄介なハックなしで動作する唯一の方法(これよりも厄介なすでにあるが)ずっとこのようなツールのように、偽のopengl32.dllを挿入することにより、プロセスに対してのみ有効ですので、 GLInterceptと同じように。
おそらく、ミニデバッガからハンドルを "盗む"こともできますが、それはあなたのプロセスには有効ではないので使いません。

しかし、... datenwolfのように言った:ちょうどそれをしないでください。

+0

オハイオ州、見て本当に厄介です。だから、同じように働いているFPS(プログラム上のFPSを示す)のようなプログラム? – Jeka

+0

おそらく。実際のFPS _display_は自明ですが、これはGDIだけを使用して階層化されたウィンドウで行うことができます。しかし、FPSはバッファがいつ切り替わるかを知っているので、おそらくAPIフックを行う必要があります。唯一の選択肢は、一部のIHV固有のパフォーマンスカウンタを読むことですが、それだけでも問題はありませんし、移植性が劣ります... – Damon

+0

私のアプリで処理する画像は、少なくとも取得できますか?これを最新に保つためにフックを使うべきですか? – Jeka

0

Windowsでは、非常に不明瞭で汚いハッキングしか使用していません。私はそれをお勧めしません。 Qtは単なるフレームワークであり、下位のOSに依存します。 Windowsでは、Windowsのすべての制約が適用されます。

X11上であなたは2つのモードでのOpenGLコンテキストを作成することができます:直接的または間接的(glXCreateContextとglXCreateNewContextの直接パラメータを参照してください)。 Xサーバにはプロセスやクライアントが存在しないため、間接的なコンテキストをXクライアント間で共有することができます。 XIDだけが存在し、その中にOpenGLコンテキストがあります。これにより、同じXディスプレイに接続されたプロセス間で間接OpenGLコンテキストのXIDを渡すことができます。直接的なコンテキストはGLXプロトコルをバイパスするため、共有することはできません。

+0

「Windowsでは非常に不明瞭で汚いハッキングしか使用していません」と私は理解していますが、本当に必要です。Qtは私のプロジェクトの別の部分が書かれたフレームワークなので、私はこのアプリで使っていきます。 X11の説明をお寄せいただきありがとうございますが、興味深いものではありません。 – Jeka

+0

@Jeka:かつてWin2kで動作していたハックが依然として機能するかどうかはわかりません。効果的には、あなた自身のプログラムをデバッガであるかのように他のプログラムに接続し、他のプログラムのコンテキストからOS関数を呼び出すことになります。これは本当に信頼性が低く、仕事に就きやすいものです。何がうまくいくかは、OpenGL関数へのRPCインタフェースを提供することです。 – datenwolf

関連する問題