2013-02-08 7 views
6

正確なと同じ状態とデータで後で復元できるように、任意のOpenGLテクスチャオブジェクトをシリアル化する必要があります。OpenGLで生の(変換されていない)テクスチャデータを取得するには?

私はテクスチャ画像データを取得する方法を探しています。これまでに私が見つけたものは次のとおりです。

  • そこにはglGetTexImageがあります。

    せフォーマット及びタイプは1をマッピングしていないそれはテクスチャ画像を取得することができ、それはそれが変換を実行するために()GL_RGB、  GL_HALF_FLOAT(のような指定されたフォーマット/タイプのペアを必要とする。

    :1から画像フォーマットに変換することができますが、GL_R3_G3_B2のような不明瞭なフォーマットは追加変換なしでは使用できません。

    また、内部標準フォーマットのCタイプ(正確にはGL_RGBなど)は、 。

  • ARB_internalformat_query2は、GL_GET_TEXTURE_IMAGE_FORMATGL_GET_TEXTURE_IMAGE_TYPEを指定して、与えられたテクスチャに対してglGetTexImageの最良の選択肢を表します。

    ニースですが、glGetTexImageと同じ制限があり、広く入手できません。

  • 圧縮されたテクスチャのデータをそのまま返しますが、圧縮されていないイメージやそれに対応するものはありません。

非圧縮テクスチャの生データを取得または設定することはできません。方法はありますか?

答えて

2

おもしろいのは、フォーマットと一致するものを見つけて正しいデータレイアウトを得ることです。しかし画像フォーマットに1、および追加の変換せずGL_R3_G3_B2のようなより多くの無名のフォーマットを取得することはできません。

許可されている形式とタイプは1をマッピングしていません。 GL_RGB、GL_UNSIGNED_BYTE_3_3_2

はまた正常(無サイズのGL_RGB等)ベース内部フォーマットのC型を決定することになる

は、いくつかの非自明な労力を伴います。

はいです。 *サングラスに置く*それを扱う! ;)

内部形式については、私はここにrefer you to

glGetTexLevelParameter(GL_TEXTURE_…, …, GL_TEXTURE_INTERNAL_FORMAT,…); 
glGetTexLevelParameter(GL_TEXTURE_…, …, GL_TEXTURE_{RED,GREEN,BLUE,ALPHA,DEPTH}_TYPE, …); 
glGetTexLevelParameter(GL_TEXTURE_…, …, GL_TEXTURE_{RED,GREEN,BLUE,ALPHA,DEPTH}_SIZE, …); 
+0

Dankeschön!今私は私が扱っていることを知っている。私は[これを*一緒にする努力をしてきました](https://gist.github.com/Kos/4739337)、私はそれをテストすることを楽しみにしています。そして、RGB10やRGBA2のようなフォーマットでは完璧なマッチを見つけることができませんでした。私は 'ARB_internalformat_query2'を使ってすべてのことを簡単に確認できることを願っています... – Kos

関連する問題