2011-01-03 19 views
3

私はOpen GLの初心者です。GLテクスチャ圧縮を開く

実行時にテクスチャ圧縮を行う必要はありますか?

確かに、大きなテクスチャファイルはビルド時に圧縮されています。実行時には、サーフェスに適用するために、必要に応じて圧縮テクスチャファイルの一部を展開します。

テクスチャデータを展開して実行時に圧縮する必要がある(信頼できる)状況はありますか?

ありがとうございます!

答えて

5

圧縮された画像形式(JPEGや画像を含むzipファイルなど)や圧縮されたテクスチャ形式(DXT1など)についてお話ししていますか?圧縮テクスチャ(DXTなど)を実行時に解凍する必要がない場合、グラフィックスカードはテクスチャをサンプリングする際にその場で実行できます。

ゲームの場合、事前にすべてのアセットをプリコンパイルすることができますが、DXT圧縮のようなものを(アセット)ビルド時に適用すると、一般にテクスチャ圧縮の利点がすべて得られますメモリ帯域幅の使用など)を実行時に実際に実行するコストはかかりません。つまり、圧縮テクスチャでレンダリングしたい場合でも、事前に使用している画像にアクセスすることはできません(多分、ユーザーが自分のマシンや画像などから画像ファイルを選択させるようにします)実行時に圧縮を行う以外の方法はありません。

EDIT:

あなたは「形式」パラメータのためにあなたが持っている元画像(GL_RGBA、など)の実際の形式を指定して、glTexImage2Dを呼び出すことであろう、実行時にDXT圧縮を行うような方法および圧縮形式あなたのカードがgl_ext_texture_compression_s3tc拡張をサポートしていると仮定して、DXT1のGL_COMPRESSED_RGBA_S3TC_DXT1_EXTのような 'internal format'パラメータのために。

テクスチャデータがあらかじめ圧縮されている場合は、glCompressedTexImage2Dで直接読み込むことができます。

+0

私は、圧縮されたテクスチャの形式について、jpgやpngのような圧縮された画像の形式については言及していません。役立つ答えをありがとう - 実行時に圧縮を行う必要がある最も一般的な(唯一の)場所は、実行時にテクスチャを選択するときです。グラフィックスドライバがこれをサポートするので、明示的に解凍する必要はありません。 –

+0

これは、テクスチャを圧縮する比較的高価な操作を、あらかじめ、オフラインで、または実行時に、目立った一時停止を引き起こす場合としない場合のどちらで実行するのが常識的な問題です。何らかの理由で事前にテクスチャにアクセスできない場合は、明らかにオフラインで圧縮するという贅沢はありません。 – eodabash

+0

最終的なコメントは、圧縮されたテクスチャをアプリケーションに取り込む最も簡単な方法は、おそらく圧縮されたDXT画像データを含むことができるDDSファイルを使用することです。多くの画像編集アプリケーション(Paint.NETなど)は、あなたのためにDDSファイルをエクスポートできます。実行時にファイルをロードし、圧縮データをglCompressedTexImage2Dに直接渡します。 – eodabash

関連する問題