3

OpenGLとDirectXを混在させることは推奨されないことは知っていますが、別々のグラフィックAPIを使用する2つの異なるアプリケーション間のブリッジを構築しようとしています。データ、特にテクスチャを共有するための手法があることを望んでいます。

次のようにDirect3Dで作成されたテクスチャがあります。

d3_device-> CreateTexture(width, height,
  1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT,
  &texture, NULL);

システムメモリを往復せずにOpenGLからこのテクスチャを使用できる方法はありますか?

4

5 に答える 5

9

はい。以前に投稿されたように(以下を参照)、少なくとも1つの解決策が存在する必要があります。私は2つの可能な解決策を見つけました:

  1. nvidiaカードでは、新しい拡張機能が256ダイバーに統合されました。http://developer.download.nvidia.com/opengl/specs/WGL_NV_DX_interop.txtを参照してください

  2. DXGIは、VistaとWindows7のすべてのウィンドウを合成する原動力です。msdn.microsoft.com/en-us / library/ee913554.aspxを参照してください。

私はまだどちらのソリューションも経験していませんが、そのうちの1つをテストする時間があればいいのですが。しかし、私にとっては、最初のものの方が簡単なようです。


[それは可能だと思います。最近のWindowsバージョン(Vistaおよび7)では、タスクバー(GDI、Direct3D、またはOpenGL)に任意のウィンドウコンテンツのプレビューを表示できます。私の知る限り、OpenGLプレビューは以前のWindowsバージョンではサポートされていませんでした。したがって、少なくとも新しいバージョンでは、異なるプロセス間でもレンダリングコンテキストを結合または共有できる可能性があります...これは、システム全体でレンダリングコンテキストを共有して異なるレンダリング効果を作成する他の最新のプラットフォームにも当てはまります。]

于 2010-11-10T11:05:56.760 に答える
0

それは不可能だと思います。どちらもテクスチャのモデルが異なるため。

directXまたはopenGLがないと、テクスチャメモリに直接アクセスできません。

逆:可能であれば、テクスチャアドレス、そのピッチ、幅、およびその他の(ハードウェアに依存する)メモリレイアウト情報を取得し、他のシステムでダミーテクスチャを作成し、取得したデータを作成したばかりのテクスチャオブジェクトにプッシュできるはずです。 。これは不可能です

明らかに、これはどの子孫ハードウェアでも機能しません。その場合、移植性はあまり高くありません。

于 2009-10-21T14:34:06.197 に答える
0

データをホストメモリにダウンロードして、デバイスメモリに再アップロードしないと不可能だと思います。

于 2010-02-25T16:50:07.770 に答える
0

今は可能です。

ネイティブOpenGLの代わりにANGLEOpenGLAPIを使用してください。

direct3dテクスチャをEGL_ANGLE_d3d_texture_client_buffere拡張機能と共有できます。 https://github.com/microsoft/angle/wiki/Interop-with-other-DirectX-code#demo

于 2020-12-23T02:18:37.410 に答える
-3

いいえ。

Photoshopや別の画像ビューアで画像を共有するようなものだと考えてください。これら2つのアプリケーションが共有するメモリ管理ライブラリが必要になります。

于 2009-10-21T19:20:44.927 に答える