0

フレームバッファ オブジェクトに描画すると、アルファ ブレンディングが期待どおりに機能しません。具体的には、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 で、互換性プロファイルをリクエストしています。

ここで何が問題なのですか?アルファ ブレンディングを使用するにはどうすればよいですか?

4

0 に答える 0