上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
エフェクトエディター制作中~

今まで何度かエディターを作ったことはあったのですが、エディットボックスやリストボックスをずらっと並べただけの使いづらいものだったので
今回はdirectxで複数のウインドウに描画した使いやすいGUIに挑戦しています


//複数のウインドウへのレンダリング方法
描画する箇所分d3dデバイスを生成するといいらしいんだけど
シソフレームワークはデバイスをグローバルで宣言しちゃってるので出来ればデバイスの数を増やしたくない・・・
そこで、デバイス1つで複数のウインドウに描画する方法を考えたので紹介します
普段スルーされているIDirect3DDevice9::Presentが大活躍

bool 描画関数
{
//メインウインドウの描画
g_pD3DDev->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(64, 64, 64), 1.0f, 0);
if(SUCCEEDED(g_pD3DDev->BeginScene()))
{
//色々描画
g_pD3DDev->EndScene();
}
g_pD3DDev->Present(NULL, NULL, NULL, NULL);
//ダイアログのピクチャコントロールに描画
g_pD3DDev->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(64, 64, 64), 1.0f, 0);
if(SUCCEEDED(g_pD3DDev->BeginScene()))
{
//色々描画
g_pD3DDev->EndScene();
}
HWND hItem = GetDlgItem(ダイアログハンドル, IDC_PICTURE);
RECT rect;
rect.left = rect.top = 0;
rect.right = ピクチャコントロールの幅;
rect.bottom = ピクチャコントロールの高さ;
g_pD3DDev->Present(&rect, NULL, hItem, NULL);
}

presentを2回呼んでますね
1回目がいつものメインウインドウへの描画で
2回目がダイアログのピクチャコントロールへの描画です

注意点はデバイスのPresentationInterval設定がD3DPRESENT_INTERVAL_DEFAULTだと
presentを呼んだときのモニターの同期待ちも2回行われるのでFPSがガクッっと下がります
ですのでPresentationIntervalはD3DPRESENT_INTERVAL_IMMEDIATEを指定しましょう
しかし、D3DPRESENT_INTERVAL_IMMEDIATEはモニターと同期を行わないので画面にちらつきが出る欠点があります、
気になる方はウインドウごとに別のデバイスを使ってください(試してないから出来るかわからんけど)

あと描画矩形を指定する場合、SwapEffectはD3DSWAPEFFECT_COPYを指定しないといけないみたいです、詳しくはmsdn


see20120229.jpg

グラフィカル!!!
コメント
この記事へのコメント
ツールと聞いて
ゲームにシナリオとかもやるんだったら、シナリオのフローエディタみたいなの作ると作成および編集が楽に済むかもね。
これから、このサイトちょくちょく見ていくわ
よろしくノシ
2012/03/08(木) 01:43 | URL | 宇治蟲野郎 #-[ 編集]
オッスオッス!
2012/03/08(木) 20:29 | URL | しそ #eZiHFhC6[ 編集]
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://perillasoft.blog75.fc2.com/tb.php/8-81c3d424
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。