2011-10-16 23 views
8

私はglTexSubImage2Dを呼び出しています。ピクセル形式がGL_RGBAの場合、ピクセルタイプはGL_UNSIGNED_BYTEGL_UNSIGNED_INT_8_8_8_8は完全に同等ですか?OpenGLテクスチャのアップロード:UNSIGNED_BYTEとUNSIGNED_INT_8_8_8_8

また、これらの2つのペアは同等ですか?

  • Format = GL_RGBA, Type = GL_UNSIGNED_INT_8_8_8_8
  • Format = GL_BGRA, Type = GL_UNSIGNED_INT_8_8_8_8_REV

私は、OpenGLの仕様とGL_EXT_packed_pixels仕様を読んで試してみたが、正直なところ、私は彼らの頭や尾をすることはできません。

答えて

16

答えはいいえ、いいえです。コンピュータのバイトオーダーについて考える必要があります。 GL_RGBAGL_UNSIGNED_INT_8_8_8_8の場合は、ピクセルは32ビット整数で格納され、色はそのような整数の論理順序RGBAになります。赤は上位バイトにあり、アルファは下位バイトにあります。しかし、マシンがリトルエンディアン(Intel CPUの場合)の場合、メモリ内の実際の順序はABGRになります。一方、GL_RGBAGL_UNSIGNED_BYTEは、コンピュータがリトルエンディアンであるかビッグエンディアンであるかにかかわらず、RGBA順にバイトを格納します。

GL_BGRAGL_UNSIGNED_INT_8_8_8_8_REVは、論理的な順序ARGBで色を保存しますが、リトルエンディアンのマシンでは、メモリ内でBGRAの順序を取得します。

+3

この例の 'GL_UNSIGNED_BYTE'と' GL_UNSIGNED_INT _... 'はピクセル転送型であることを指摘しておきましょう。彼らは、GLが色をどのように格納するかについては何も言わず、色データがGLに送られたときにGLによってどのように「パックされた」色がどのように解釈されるかについては言及しない。通常、これらのよりエキゾチックなフォーマットの目標は、GLがデータ変換を実行する必要がなく、単純なブロック転送を行うことができるように、クライアント(CPU)とサーバ(GPU)のフォーマットに一致させることです。 –