2011-07-16 9 views
4

私はQImageを使用してイメージをロードし、その後OpenGLでテクスチャとして使用しています。 問題は、QImageとOpenGLで色成分の順序が異なることです。 現在、私はOpenGLでGL_RGBAフォーマットを使用しており、QtではQImage::Format_ARGB32を使用しています。 そのため、OpenGLでテクスチャを作成する前に、ロードしたイメージの各ピクセルごとに手動でバイトをスワップする必要があります。さらに、バイトを正しくスワップするには、マシンのエンディアンを知る必要があります。OpenGLでサポートされているフォーマットにQImageフォーマットを変換する方法

誰かがこれに対してより良い解決策を知っていますか?少なくとも、この変換をエンディアンに依存しないようにする方法はありますか?

ありがとうございました。

答えて

5

glTex(Sub)Imageの最後の3つのパラメータは、pixel transfer to OpenGLがどのように行われるかを定義します。あなたは4、8ビットの値を持っている場合は、順次、ARGBの順で、私は次のことをお勧めします:

glTexImage2D(..., GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, *); 

glPixelStoreパラメータを使用して、エンディアン変換の問題に対処するため。具体的には、GL_UNPACK_SWAP_BYTES。上記はリトルエンディアンマシン用に設計されているため、ビッグエンディアンマシンの場合は、この関数を呼び出す前にglPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE);に電話してから、GL_FALSEに戻してください。


注:OpenGL ESのは OpenGLのではないことを覚えて、私はあなたがそれを言及しなかったが、知っている場合には、あなたがモバイルプラットフォームを検討しています。デスクトップOpenGLでは、転送操作でさまざまなピクセル配置を処理できる実装が必要です。 GL ESは、ほぼ反対の立場をとっています。ピクセル転送フォーマットは、正確にはがテクスチャの内部フォーマットと一致する必要があります。したがって、GL ES開発を行っていた場合は、自分でバイトスワップを行う必要があります。

関連する問題