表示されなくなった原因
確か、マルチスレッド対応をやったころからだと思う。
突然表示されなくなり、いろいろ試したがダメでその当時は諦めた。
PIX自体もバージョンアップが頻繁にあり出来なくなったのかなと思ってた。
今描画エンジンを作り直してるんだけど、改めて調べなおしてみた。
原因はPIXのバージョンアップでも、機能がなくなったわけでもなく、当然自分のプログラムが原因だった。
マルチスレッド対応
わかってしまえば当然で簡単なことだったけど、なかなか気づけなかった。
マルチスレッド対応を行った際、コマンドリストを発行する処理をすべて別スレッド側に持っていき、パラメータを蓄積する仕組みを用意した。
PIXの関数を呼ぶタイミングは、このコマンドを蓄積するときに呼んでも早すぎで実際にコマンドリストに入れるタイミングで呼び出さないといけない。
それに気づいてコマンド蓄積にPIXのイベントも追加した。
このコマンドを実行するときにPIXBeginEvent / PIXEndEventを呼び出すようにしたところ、以前のようにPIX上でイベントの区切りが作れるようになった。
PIXBeginEvent( L"描画" ) ; // この場で呼び出しても意味がない
{
tDXCommand oC ;
oC->Draw() ;
AddCommand( oC ) ;
}
PIXEndEvent() ;
PIXのイベント関数を、コマンド蓄積してるときに呼び出しても意味がない
{
tDXCommand oC ;
oC->PIXBeginEvent( L"描画" ) ; // 他のコマンドと同様に蓄積出来るようにして、リスト追加時に呼び出すようにする
oC->Draw() ;
oC->PIXEndEvent() ;
AddCommand( oC ) ;
}
PIXのイベント関数自体も、コマンド蓄積出来るようにして、実際にコマンドリストに追加する場面でPIXのイベント関数を呼び出すように修正
漢字も使えて、範囲に含まれたコマンドを折りたたんで表示ができる。
上図はすべて展開した状態。
グラフの方もイベント範囲がわかりやすく表示される。


0 件のコメント:
コメントを投稿