-PR-
解決済み

オフスクリーンサーフェスへのデータの読み込みについて

  • 暇なときにでも
  • 質問No.86168
  • 閲覧数157
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 57% (4/7)

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

質問者が選んだベストアンサー

  • 回答No.1
レベル9

ベストアンサー率 71% (59/82)

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

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

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

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

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

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

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

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

お礼率 57% (4/7)

丁寧な解説ありがとうございます。
やっぱり基本的には
 元データが小さい→メモリ使用量が減る
 データ変換が必要ない→転送速度が上がる
という均衡関係にある、ということなんですね。
投稿日時 - 2001-06-08 00:10:08
-PR-
-PR-
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ