Android で OpenGL テクスチャからアルファ チャネルを読み取る際に問題が発生しています。私はこのように呼びますglReadPixels
:
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
テストとして、次のようなフラグメント シェーダーを作成しました。
gl_FragColor = vec4(0.5, 0.5, 0.5, 0.5);
ピクセルごとに、{ 64, 64, 64, -1 } が返されます。
各レンダリングの前にこれを含め、アルファがRGB値と同じ方法で返されない理由を解決するために、あらゆる種類のことを試しました。
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
//Tried various blend functions
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
しかし、何をしても -1 が返ってきます。
これは Android の制限ですか、それとも何が欠けていますか?
注記として、違いがある場合はオフスクリーン FBO を使用しています。
編集:私がこれを行う場合:
int[] bits= new int[4];
glGetIntegerv(GL_RED_BITS, bits, 0);
glGetIntegerv(GL_GREEN_BITS, bits, 1);
glGetIntegerv(GL_BLUE_BITS, bits, 2);
glGetIntegerv(GL_ALPHA_BITS, bits, 3);
{ 8, 8, 8, 0 } を返します。