• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:オフスクリーンサーフェスへのデータの読み込みについて)

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

このQ&Aのポイント
  • VisualC++6.0とDirectX7.0を使って、RPGを作っています。
  • ビットマップファイルから読み込むグラフィックデータはビット深度8で作成されていますが、プライマリサーフェスは16ビット深度です。
  • このデータの読み込み方法は、API(GetDC)を使用してDCを取得し、オフスクリーンサーフェスにブリット転送する方法です。

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

  • ベストアンサー
  • Fooky
  • ベストアンサー率71% (59/82)
回答No.1

OpenGLユーザですが僭越ながら。 ご質問の内容は、「ファイルからCPUメモリにビットマップデータを 読み込んで、ビデオメモリに転送する。そのときに、ファイルとCPU メモリでは8BitPerPixelだけど、ビデオメモリは16bppである。メモリ 使用量と処理速度への影響は?」ということですよね。 つまらない回答ですが、コードと環境に依存する、としか言えないような 気がしますが…。 明らかにCPUメモリからビデオメモリに転送する際にデータ形式が異なって (8bppと16bpp)いれば、変換作業が必要になり、原理的に速度は低下します よね。(手もとのOpenGLハンドブックでピクセル転送を最適化する方法の 一つに、データ変換が無いようにするというのがあります) しかし、当然データ量が増えればCPUメモリからビデオメモリへの転送に 時間がかかり、また、ファイルからCPUメモリへの読み込みにも時間が かかります。当たり前ですが。その辺の速度とデータサイズ、読み込み・転送の 発生頻度を勘案して、適当な方法を考える、としか言えないと思います。 私は、毎秒20フレームくらいの頻度でレンダリングを行い、800x1000程度 の大きさの24bppのレンダリング領域を同じフレームレートででCPUメモリに 取りこみ、レンダリングを行なっていないときを見計らってディスクに書きこむ、 その後、書きこんだファイルを読み込みながら、20フレーム/秒の レンダリングの過程をそのまま再生するという、CPUとグラフィックボードに 頼りきりの力業のプログラムを先日書きましたが、そのときは、 ・ファイルへの書きこみはレンダリングが暇なときに行なうので、  ある程度時間が掛かっても良いだろう = ファイルサイズが大きくても良い ・ビデオメモリからCPUメモリへの転送は、レンダリング終了  直後に行なうので、できるだけ速い方が良い という理由から、24bppをそのままCPUメモリへ転送し、ファイルへ書き出す という方法を取りました。しかし、それが本当に良かったのかは分りません。 取り敢えずは動いたため、他のデータ形式をためさなかったんで。

UnaBee
質問者

お礼

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

関連するQ&A