2017-05-04 8 views
0

私たちのプログラムではメモリの使用量を最適化しようとしていますが、RGBAとして格納されているときにRGB値がすべて同じであるように、テクスチャの一部をアルファ値付きのグレースケールとして格納できることに気付きました。openGLES 2 - 32ビットRGBAに拡張せずに、8ビットのグレースケールと8ビットのアルファでテクスチャをロードするにはどうすればよいですか?

グレースケールとアルファ両方の8ビットを格納するだけで、ディスク容量とメモリを節約したいと考えています。したがって、32ビットRGBAでディスクとメモリの両方を50%節約できます。

しかし、我々が打ち破ったハードルは、この情報をOpenGLに与える方法を考えることができないということです。イメージは、2つの8ビットチャネルを持つ1つのイメージ、または1つの8ビットチャネルを持つ2つのイメージとしてディスクに保存できます。私はOpenGLがこれをグレースケール画像として見る方法を見つけることができないので、RedとGreenのような特定の色では見ないとメモリ内にこれらの2つのチャンネルしかない - GL_RG8が正しい番号を持つ右のビット深度ではチャンネルの数が不正ですが、色が間違っています。

これはOpenGLES 2でも可能ですか? OpenGLに2つのチャンネルを与えて、それらが赤と緑ではなくグレーとアルファであることを伝えることはできますか?

私はこの質問を見ました:Can I use a grayscale image with the OpenGL glTexImage2D function?これはかなり古いですし、GL_LUMINANCEは現在廃止されています。

答えて

0

GL_RG8は、OpenGL ES 3.x以降にのみ存在します。 OpenGL ES 2.xの一部ではありません。 ES 2.xではGL_LUMINANCE_ALPHAを使用できます。廃止されましたが、削除されていないので、うまく動作するはずです。

あなたが本当にGL_RG8を使用したい場合、あなたは、あなたがそれらを使用するか、またはあなたがglTexParameteri()を使用してTEXTURE_SWIZZLE_[R|G|B|A]を設定することにより、サンプラーにスウィズルすることができたときにチャンネルの順序を変更するシェーダコードでスウィズルを使用して、いずれかの「間違った色を」修正することができます。

関連する問題