トップページ > 過去ログ > 記事閲覧
バックバッファのポインタを得たい(要望)
名前:みょも 日時: 2012/11/17 20:15

雑談の板の方に投稿しようとしたのですが、 語句制限にかかりましたのでこちらに書かせていただきます。 こんばんは。 DXライブラリのPMDモデル表示が非常に良く出来ていてありがたく活用させていただいております、みょもです。 管理人さまへ、ひとつ要望を出させてください。 バックバッファのポインタを(.NETで)取得できるようにしていただけないでしょうか。 現在WPFアプリケーションでDXライブラリを利用して3D画面を出力しようとしています。 トップレベルウィンドウや、WindowsFormsHostコントロール内に配置した Windowsフォームコントロール類のウィンドウハンドルを、 SetUserWindow や SetUserChildWindow に投げ、とりあえずWPF上に画面出力することができました。 しかしこの方法だとWPFの制約で、WPFで配置したGUIの上に常にDirectXの表示が上書きされてしまい、 DirectXの表示の上に WPFのGUIを乗せることができません。 SlimDXなどを使っていたときは、WPFのD3DImageクラスを使用して解決していたのですが、 これを利用するにはバックバッファのポインタを取得する必要があるのです。 『D3DImage』 msdn.microsoft.com/ja-jp/library/system.windows.interop.d3dimage(v=vs.90).aspx 『D3DImage::SetBackBuffer メソッド』 msdn.microsoft.com/ja-jp/library/cc663104(v=vs.90).aspx ちなみにD3Dimageを利用するには、デバイス作成時に D3DCREATE_MULTITHREADED と D3DCREATE_FPU_PRESERVE の フラグが必要なようです。 『Direct3D9 および WPF の相互運用性のパフォーマンスに関する考慮事項』 msdn.microsoft.com/ja-jp/library/cc656910(v=vs.90).aspx ご検討のほどよろしくお願い致します。

Page: 1 |

Re: バックバッファのポインタを得たい(要望) ( No.1 )
名前:管理人 日時:2012/11/18 15:57

バックバッファの Direct3DSurface9 のポインタが IntPtr として取得できれば良いでしょうか? とりあえず以下のような関数を追加してみましたので、よろしければお試しください( 定義は C++ のものです ) // 使用中のバックバッファのDirect3DSurface9オブジェクトを取得する DX_DIRECT3DSURFACE9* GetUseDirect3D9BackBufferSurface( void ) ; http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 あと、D3DCREATE_MULTITHREADED を使用する場合はこちらの関数を DxLib_Init を呼ぶ前に TRUE を渡して呼んで下さい // DirectDraw や Direct3D の協調レベルをマルチスレッド対応にするかどうかをセットする int SetMultiThreadFlag( int Flag ) ; D3DCREATE_FPU_PRESERVE を使用する場合はこちらの関数を DxLib_Init を呼ぶ前に TRUE を渡して呼んで下さい // FPUの精度を落とさない設定を使用するかどうかを設定する // TRUE:使用する(精度が落ちない) FALSE:使用しない(精度を落とす(デフォルト) int SetUseFPUPreserveFlag( int Flag )
Re: バックバッファのポインタを得たい(要望) ( No.2 )
名前:みょも 日時:2012/11/19 01:58

早速の対応ありがとうございます。 無事D3DImageに画面出力することができました。 いろいろ試したのですが、D3DImageを使う以外の方法がない状態でしたので、大変助かりました。
Re: バックバッファのポインタを得たい(要望) ( No.3 )
名前:みょも(解決済み) 日時:2012/11/26 01:26

解決済みとさせていただきます。

Page: 1 |