ユーザーが拡大縮小してパンできる世界地図を実装しようとしています。プログラムのメモリが不足するという問題が発生しています。
これが私の状況です:
0)C#とOpenGLでプログラムを書いています
1)19メガサイズの世界の詳細画像であるJPG画像をWebからダウンロードしました。各ピクセルの長さは24ビットです。
2)プログラムの初期化時に、実行時にこのイメージをタイルに切り刻みます。glGenTexture、glBindTexture、およびglTexImage2dを使用して、各タイルをOpenGLにフィードします。
3)描画ルーチンでは、タイルを1つずつ描画し、画面に表示されているかどうかに関係なく、すべてのタイルを描画しようとします(これは別の問題です)。
小さな画像の場合、すべてが正常に機能します。ただし、大きな画像の場合、JPGをビットマップにデコードして切り刻むと、プログラムのメモリフットプリントが1ギガバイト以上に爆発します。私はJPGが圧縮されており、.NET JpegBitmapDecoderオブジェクトが巨大な画像を解凍する仕事をしていることを知っています。これは、おそらく私を困らせる原因です。
私の質問は、このような状況で正確に何ができるかということです。C#デコードコードはメモリを爆破する最初の責任者であるため、タイルを作成してOpenGLにフィードする別の方法はありますか?代わりに(ビットマップを除いて)追求する必要がありますか?