VisualC++6.0とDirectX7.0を使って、RPGを作っています。
 マップチップ等のグラフィックデータを、実行時にビットマップファイルから読み込んでいるんですが、ここで疑問がわきました。
 プライマリサーフェスのビット深度は16(HighColor相当)に設定しているんですが、ビットマップファイル中のデータはビット深度8(256色)で作成しています。
 元データのデータ量を小さくするためにそうしているんですが、これってプログラムを走らせたときのメモリ使用量や実行速度に影響があるんでしょうか。
 ちなみにビットマップファイルからオフスクリーンサーフェスへの読み込みには、API(GetDC)を使ってDCを取得した後、同じ大きさで作ったオフスクリーンサーフェスにブリット転送する方法をとっています(一般的な方法だと思うんですが...)。

A 回答 (1件)

OpenGLユーザですが僭越ながら。



ご質問の内容は、「ファイルからCPUメモリにビットマップデータを
読み込んで、ビデオメモリに転送する。そのときに、ファイルとCPU
メモリでは8BitPerPixelだけど、ビデオメモリは16bppである。メモリ
使用量と処理速度への影響は?」ということですよね。

つまらない回答ですが、コードと環境に依存する、としか言えないような
気がしますが…。

明らかにCPUメモリからビデオメモリに転送する際にデータ形式が異なって
(8bppと16bpp)いれば、変換作業が必要になり、原理的に速度は低下します
よね。(手もとのOpenGLハンドブックでピクセル転送を最適化する方法の
一つに、データ変換が無いようにするというのがあります)

しかし、当然データ量が増えればCPUメモリからビデオメモリへの転送に
時間がかかり、また、ファイルからCPUメモリへの読み込みにも時間が
かかります。当たり前ですが。その辺の速度とデータサイズ、読み込み・転送の
発生頻度を勘案して、適当な方法を考える、としか言えないと思います。

私は、毎秒20フレームくらいの頻度でレンダリングを行い、800x1000程度
の大きさの24bppのレンダリング領域を同じフレームレートででCPUメモリに
取りこみ、レンダリングを行なっていないときを見計らってディスクに書きこむ、
その後、書きこんだファイルを読み込みながら、20フレーム/秒の
レンダリングの過程をそのまま再生するという、CPUとグラフィックボードに
頼りきりの力業のプログラムを先日書きましたが、そのときは、

・ファイルへの書きこみはレンダリングが暇なときに行なうので、
 ある程度時間が掛かっても良いだろう = ファイルサイズが大きくても良い
・ビデオメモリからCPUメモリへの転送は、レンダリング終了
 直後に行なうので、できるだけ速い方が良い

という理由から、24bppをそのままCPUメモリへ転送し、ファイルへ書き出す
という方法を取りました。しかし、それが本当に良かったのかは分りません。
取り敢えずは動いたため、他のデータ形式をためさなかったんで。
    • good
    • 0
この回答へのお礼

丁寧な解説ありがとうございます。
やっぱり基本的には
 元データが小さい→メモリ使用量が減る
 データ変換が必要ない→転送速度が上がる
という均衡関係にある、ということなんですね。

お礼日時:2001/06/08 00:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ