トップページ > 過去ログ > 記事閲覧
使用画像データの限界(?)について質問
名前:SweetBlack 日時: 2006/12/03 11:39

いつもお世話になっております。 今回、ちょっと私では手に負えない事があり、 お知恵を貸していただければ幸いです。 まず現象ですが、私の作ったプログラムを 知人に試してもらったところ、 「画像がおかしい」と連絡を貰いました。 状況を聞いたり、画像を貰ったりして、 色々突き詰めてみますと、どうやら 「MakeGraph」と「GetDrawScreenGraph」で 取り込んだ画像を表示しようとしても、 表示されないようになっているようでした。 (あるいは、取り込めていない、とか) ちなみに、MakeGraph等の返り値も調べましたが、 エラー値は返ってませんでした。 私の環境では発生しない現象ですし、 知人の環境でも以前は発生してなかったものですから、 「環境に関わり、しかも新たに追加した画像関係が  原因だとしたら、画像データが多すぎたのかも?」 という仮説から、画像データの軽減をはかった (必要な画像以外ロードしない、不要なデータは即消す。また、処理の順番も見直す等) ところ、おかしな現象はおさまったようです。 ただし、今のところ発生していないというだけでして絶対に発生しないという確信はありません。 今後も画像データは増えていきますし、 原因がはっきりしない以上、再発しないとは言い切れない状況です。 以上は所詮、私の推論に基づく対応に過ぎませんが、 「どこまで画像データを扱う事ができるのか?」 という疑問が残りました。 私の疑問をまとめますと以下のとおりです。 1)画像データを多くロードしすぎた事が原因で、   GetDrawScreenGraphが正常に行われないという事がありうるのか?   (私の推論は正しいのか?) 2)画像データをどこまで扱う事ができるか、を知る方法はあるのか? 我ながら大雑把な質問だとは思いますが、 何かご意見をいただけるとありがたいです。

Page: 1 |

Re: 使用画像データの限界(?)について質問 ( No.1 )
名前:管理人 日時:2006/12/05 13:15

 SweetBlack さんどうも、DXライブラリの管理人です。 > 1)画像データを多くロードしすぎた事が原因で、 >   GetDrawScreenGraphが正常に行われないという事がありうるのか? >   (私の推論は正しいのか?)  100%とはいえませんが、ありうると思います。  グラフィックチップ側の画像データを格納する為のメモリ(VRAM)が足りなく なった場合、溢れたデータをシステムメモリ側に退避して、VRAM を「今使っている画像」のみ を格納するというような使い回しをする機能が DirectX にはあるのですが、VRAM に入らない 画像データが多くなると正常に動作しなかったりすることがある(不安定になる)という話を 何回か耳にしたことがあります。 (システムメモリも足りなくなるとOSが自動的に ディスクを仮想的にメモリに見立てて「メモリが足りない」という状況を回避しますが、 システムメモリが足りている場合に比べて動作が不安定になることと似ています)  なので、VRAMが少ないグラフィックチップを搭載したPCでは、より不具合が 発生し易いと思います。 > 2)画像データをどこまで扱う事ができるか、を知る方法はあるのか?  1のご返答で申し上げたような機能が DirectX には在るので、DirectX 的にどこまで 画像データを扱うことが出来るか、という限界点は曖昧だと思いますが、DXライブラリ はグラフィックハンドルは 32768 個以上作れないという制限がありますので、DXライブラリ を使用している以上は扱える画像データの数の限界は 32768 個ということになります。  DirectX 側は、とりあえず画像データの総量が VRAM のサイズを超えないようにするのが 動作を安定させる一番の方法だと思います。  例えば、VRAM が 32MB のグラフィックチップの場合ですと 640x480 の画像なら16bitカラー画面の場合は1ドットが2バイトなので   640x480x2 = 614400バイト   614400 / 1024 = 600キロバイト 一枚600キロバイトということになりVRAMが32MB搭載されている グラフィックデバイスの場合は   32メガバイト * 1024 = 32768キロバイト   32768キロバイト / 600キロバイト = 54.61333... 枚 およそ54枚格納できるということになります。 ただ、実際にはフレームバッファ(表画面、裏画面)の分に フルスクリーンの場合は画面モードのサイズ×2個分、 ウインドウモードの場合はデスクトップのサイズ+画面モードのサイズ分 の VRAM 領域の確保がありますので、フルスクリーンの場合で凡そ 52枚、 ウインドウモードの場合は50枚程格納できると言うことになります。 今のはVRAMが32MB搭載されている場合で計算しましたが、 DXライブラリが正常に動作しないというPCに搭載されている グラフィックチップは古いチップである可能性が高いので、その場合は VRAMの容量は 4MB や 8MB、多くて 16MB となり、格納できる枚数は 凡そ 6, 12, 24枚となります。  また、32bitカラー画面で起動した場合は(ウインドウモードの場合は デスクトップが 32bitカラーになっていると強制的に 32bitカラー画面での 起動となります)この半分になりますので、32MB 搭載してある場合で 26枚、 4MB, 8MB, 16MB の場合はそれぞれ 3, 6, 12 枚となります。  ゲーム中で使用する画像をすべて最初に読み込む作りにすると簡単に VRAM 容量を超えてしまいますので、VRAM 容量を超えないようにするには なるべくそのシーンで使用する画像だけを読み込んで、シーンが終わったら その都度 DeleteGraph で画像を削除する、という作りにする必要があります。
Re: 使用画像データの限界(?)について質問 ( No.2 )
名前:SweetBlack 日時:2006/12/06 21:35

つかぬ事をお伺いしたにも関わらず、 丁寧なご説明を頂き、ありがとうございます。 改めて知人に聞いてみたところ、 知人のPCのグラボも普通にいいものですし、 VRAMも充分あるものでした。 私のプログラムも、確かに無駄に画像を使っていたとはいえ、 50画面分も使っていたとは思えず、 結局原因に確信は持てなかったのですが、 これからは気をつけながら製作を続けていこうと 思います。 ありがとうございました。

Page: 1 |