7

後でまったく同じ状態とデータで復元できるように、任意のOpenGLテクスチャオブジェクトをシリアル化する必要があります。

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

  • ありglGetTexImageます。

    テクスチャ画像を取得することはできますが、変換を実行するための指定されたフォーマット/タイプのペア((GL_RGB、  )など)が必要です。GL_HALF_FLOAT

    ただし、許可されている形式とタイプは1:1で画像形式にマッピングされておらGL_R3_G3_B2ず、追加の変換なしのように、よりあいまいな形式を取得することはできません。

    また、基本内部フォーマット(サイズなしなど)のCタイプを正しく決定するには、GL_RGB重要な労力が必要です。

  • ARB_internalformat_query2求めることができ、特定のテクスチャの最良の選択を表すものがありGL_GET_TEXTURE_IMAGE_FORMATます。GL_GET_TEXTURE_IMAGE_TYPEglGetTexImage

    素晴らしいですが、同じ制限がglGetTexImageあり、広く利用可能ではありません。

  • 圧縮されたテクスチャのデータをそのままエレガントに返すという素晴らしい機能がありglGetCompressedTexImageますが、非圧縮の画像では機能せず、対応するものもありません。

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

4

1 に答える 1

2

秘訣は、フォーマットの一致を見つけて、正しいデータレイアウトを生成するように入力することです。

ただし、許可されている形式とタイプは1:1で画像形式にマッピングされておらず、追加の変換なしでGL_R3_G3_B2などのよりあいまいな形式を取得することはできません。

それはGL_RGB、GL_UNSIGNED_BYTE_3_3_2になります

また、基本内部フォーマット(サイズのないGL_RGBなど)のCタイプを正しく決定するには、簡単な作業が必要です。

はい、そうです。*サングラスをかけます*それに対処してください!;)

内部フォーマットも。私はここにあなたを紹介します

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, …);
于 2013-02-08T13:10:00.970 に答える