
VisualC++6.0とDirectX7.0を使って、RPGを作っています。
マップチップ等のグラフィックデータを、実行時にビットマップファイルから読み込んでいるんですが、ここで疑問がわきました。
プライマリサーフェスのビット深度は16(HighColor相当)に設定しているんですが、ビットマップファイル中のデータはビット深度8(256色)で作成しています。
元データのデータ量を小さくするためにそうしているんですが、これってプログラムを走らせたときのメモリ使用量や実行速度に影響があるんでしょうか。
ちなみにビットマップファイルからオフスクリーンサーフェスへの読み込みには、API(GetDC)を使ってDCを取得した後、同じ大きさで作ったオフスクリーンサーフェスにブリット転送する方法をとっています(一般的な方法だと思うんですが...)。
No.1ベストアンサー
- 回答日時:
OpenGLユーザですが僭越ながら。
ご質問の内容は、「ファイルからCPUメモリにビットマップデータを
読み込んで、ビデオメモリに転送する。そのときに、ファイルとCPU
メモリでは8BitPerPixelだけど、ビデオメモリは16bppである。メモリ
使用量と処理速度への影響は?」ということですよね。
つまらない回答ですが、コードと環境に依存する、としか言えないような
気がしますが…。
明らかにCPUメモリからビデオメモリに転送する際にデータ形式が異なって
(8bppと16bpp)いれば、変換作業が必要になり、原理的に速度は低下します
よね。(手もとのOpenGLハンドブックでピクセル転送を最適化する方法の
一つに、データ変換が無いようにするというのがあります)
しかし、当然データ量が増えればCPUメモリからビデオメモリへの転送に
時間がかかり、また、ファイルからCPUメモリへの読み込みにも時間が
かかります。当たり前ですが。その辺の速度とデータサイズ、読み込み・転送の
発生頻度を勘案して、適当な方法を考える、としか言えないと思います。
私は、毎秒20フレームくらいの頻度でレンダリングを行い、800x1000程度
の大きさの24bppのレンダリング領域を同じフレームレートででCPUメモリに
取りこみ、レンダリングを行なっていないときを見計らってディスクに書きこむ、
その後、書きこんだファイルを読み込みながら、20フレーム/秒の
レンダリングの過程をそのまま再生するという、CPUとグラフィックボードに
頼りきりの力業のプログラムを先日書きましたが、そのときは、
・ファイルへの書きこみはレンダリングが暇なときに行なうので、
ある程度時間が掛かっても良いだろう = ファイルサイズが大きくても良い
・ビデオメモリからCPUメモリへの転送は、レンダリング終了
直後に行なうので、できるだけ速い方が良い
という理由から、24bppをそのままCPUメモリへ転送し、ファイルへ書き出す
という方法を取りました。しかし、それが本当に良かったのかは分りません。
取り敢えずは動いたため、他のデータ形式をためさなかったんで。
丁寧な解説ありがとうございます。
やっぱり基本的には
元データが小さい→メモリ使用量が減る
データ変換が必要ない→転送速度が上がる
という均衡関係にある、ということなんですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルマッピング関数で失敗
-
移動可能メモリ
-
AIXでのプロセス使用メモリの最...
-
ちなみに、for (i = 0; str[i] ...
-
マクロのスピードがダウンする??
-
メモリが不足しています(VBA)
-
C言語で、メモリを解放しないで...
-
ReadEventLogについて
-
シェル(perl)が使用するメモリ...
-
「ヒープサイズの設定」て何?
-
Connection、ResultSet、、Stat...
-
「memcpy」と「strcpy」について
-
メモリ不足
-
VBAの配列サイズとメモリに関して
-
Macターミナルで実行中のプログ...
-
powershell を使いカレントディ...
-
TCP/IP通信時のサーバーからの受信
-
Windows上で、シグナル(SIGTERM...
-
プロセスIDの取得方法について
-
Excel(VBA)でSetTimer関数を使...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メモリが不足しています(VBA)
-
VBAの配列サイズとメモリに関して
-
C言語で、メモリを解放しないで...
-
エクセルVBA 大容量CSVファイル...
-
メモリのセグメント違反の解決...
-
エクセルのメモリ使用状況/Appl...
-
「ヒープサイズの設定」て何?
-
【C言語】再帰が時間がかかる...
-
バッチファイルでの実行EXEのメ...
-
ReadEventLogについて
-
メモリを解放しないとどうなる?
-
LoadLibraryしたらFreeLibrary
-
C言語における再帰呼び出しの...
-
EXCEL-VBAにてADOのレコードセ...
-
メモリ不足
-
クリスタルレポートでメモリ不...
-
Bitmapを重ね合わせる方法
-
これて逆じゃないですか?
-
ルネサスマイコン(R8C) ビルド...
-
closeとメモリの開放について
おすすめ情報