フレームバッファ オブジェクトに描画すると、アルファ ブレンディングが期待どおりに機能しません。具体的には、glBlendFunc を呼び出しても、フレーム バッファー内のピクセルには影響しません。を使って描画前後のフレームバッファの内容を確認していglReadPixels
ます。次の呼び出しglBlendFunc*
で同じ結果が得られます。
glBlendFunc(GL_ONE, GL_ZERO);
glBlendFunc(GL_ZERO, GL_ONE);
glBlendFunci(myFramebuffer, GL_ONE, GL_ZERO);
glBlendFunci(myFramebuffer, GL_ZERO, GL_ONE);
ここに私の描画コードがあります:
glEnable(GL_BLEND);
glEnablei(GL_BLEND, myFramebuffer); // Obviously I don't need both
// Use this blend function ...
glBlendFunc(GL_ZERO, GL_ONE);
glBlendFunci(myFramebuffer, GL_ZERO, GL_ONE);
// ... or this:
//glBlendFunc(GL_ONE, GL_ZERO);
//glBlendFunci(myFramebuffer, GL_ONE, GL_ZERO);
glColor4f(0.7f, 0.0f, 0.5f, 0.3f);
GLubyte s[4] = {0, 0, 0, 0};
glReadPixels(x, y, 1, 1, GL_BGRA, GL_UNSIGNED_BYTE, &s);
MsgUtil::TraceWin("%d %d %d %d\n", s[0], s[1], s[2], s[3]);
glBegin(GL_QUADS);
...
glEnd();
GLubyte t[4] = {0, 0, 0, 0};
glReadPixels(x, y, 1, 1, GL_BGRA, GL_UNSIGNED_BYTE, &t);
MsgUtil::TraceWin("%d %d %d %d\n",t[0], t[1], t[2], t[3]);
出力 (GL_ZERO、GL_ONE の両方のオーダーの場合):
255 255 255 255
127 0 178 76
私は明らかに古いGLコードを使用しています。以前は、コンテキストの作成によってバージョンが 1.1 に制限されていました。現在、バージョンは 4.4 で、互換性プロファイルをリクエストしています。
ここで何が問題なのですか?アルファ ブレンディングを使用するにはどうすればよいですか?