Re: マルチスレッド化の注意点 ( No.1 ) |
- 名前:管理人 日時:2010/03/29 06:45
DXライブラリを使用したマルチスレッドのプログラムを作成する際に注意すべきことは
・サウンド・画像・モデルの読み込み関数や描画や描画の設定を行う関数を複数のスレッドから同時に呼ばないこと
・入力関係の関数を複数のスレッドから同時に呼ばないこと
・サウンド関係の関数を複数のスレッドから同時に呼ばないこと
です、
モデルに関して言えば MV1LoadModel、MV1DrawModel、MV1DrawMesh、MV1DrawFrame は、複数のスレッドから
呼ぶのは避ける必要があります( つまり描画を行うスレッドは一つにする必要があります )
MV1SetPosition や MV1SetAttachAnimTime や当たり判定などの描画を行わない関数は複数の
スレッドから同時に呼んでも問題ありません
スレッドの作成は CreateThread で良いと思います
ところで、フレーム落ちの原因はCPUである、ということは確定しているのでしょうか?
もし描画しているモデルが複雑でポリゴン数も多い、ということになりますとGPUが原因で
フレーム落ちしているかもしれません、その場合はマルチスレッドにしてCPUの負荷を下げても
フレーム落ちは改善されません
|
Re: マルチスレッド化の注意点 ( No.2 ) |
- 名前:wisteria 日時:2010/03/31 16:02
主に、読み込み中...みたいなのを表示しておいて、
スレッドで読み込む、ということおよび
Zバッファにより描く順番を気にしなくてよいため、
地面と建物を同時に描いていくということに
使おうと考えていたのですが、後者は不可能なのですね。
また、モデルは使わず、
すべてDrawPolygonIndexed3Dを用いています。
処理落ちに関しては、GPUはあくまで描画処理の補助をする存在だと
思っていたので、マザーボードに乗っているようなものなら
ほとんど役に立たず描画処理はCPUがやっているものと思っていました。
|
Re: マルチスレッド化の注意点 ( No.3 ) |
- 名前:管理人 日時:2010/04/05 01:51
マザーボードに載っているような非力なGPUでも、GPUが非力だからといって代わりに
CPU が処理しているというわけではありませんので、GPUが担当する処理が原因で
フレーム落ちが発生してしまっている場合はCPU側の負荷を幾ら下げてもGPUの負担は減らず
フレーム落ちを防ぐことはできません
|
Re: マルチスレッド化の注意点 ( No.4 ) |
- 名前:wisteria(解決) 日時:2010/04/05 09:38
ありがとうございました。
GPUもアクセラレータという補助的なものなのではなく、描画処理を主体的に(?)行っているのですね。
|