スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

「どんどん描画が遅くなる欠陥」が判明した。 (DirectXプログラミング)

つい最近ですが、描画オブジェクトを増やすにつれて、
描画がどんどん遅くなる欠陥があることが判明しました。
自分が作ったDirectX描画システムの問題。

遅くなる理由は、単純にLock関数、Unlock関数 を連発する状態になるからです。


プログラムの構造は大体以下のようになってました。
※一部ポインタがNULLだった場合のエラー処理などは省いています。
【参考画像】
explain.png


テクスチャを管理してるクラスがあって、以下のような関数を呼ぶと、
Draw(int t_Handle, int t_PosX, int t_PosY);
Draw(int t_Handle, int t_PosX, int t_PosY, int t_Width, int t_Height);


内部でハンドルに対応するTexture情報を引っ張ってきて、
こんな手順で描画します。
----------------------------------------------------------------
バッファをLock → 座標・サイズ更新 → Unlock
Textureセット → バッファセット → FVFセット → 描画

----------------------------------------------------------------

見てもわかりますが、
for(int i = 0; i < MAP_HEIGHT; i++)
{
for(int j = 0; j < MAP_WIDTH; j++)
{
Draw( m_Handle, (j<<5), (i<<5));
}
}
※MAP_HEIGHT ・・・ 10
 MAP_WIDTH ・・・ 10 とする。

↑こんな事をしようものなら、lock関数、Unlock関数が100回呼ばれます。

自分の買った6年前ぐらいのノートPCでは、
この段階で、動作がスローモーションになってしまいました。

で、思いました。
lock関数、Unlock関数の呼び出し回数を
減らさなければならない
、と。

なので今回、大幅に描画システムを変更いたしました。
どう変更したのかは別記事(プログラミングTIPS)にして記載しようと思います。

ヒント:DrawIndexedPrimitive関数
スポンサーサイト

テーマ : ゲーム - ジャンル : ゲーム

コメント
コメントの投稿
管理者にだけ表示を許可する



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。