当我绘制到帧缓冲对象时,Alpha混合不能按预期工作。具体来说,调用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,我请求兼容性配置文件。
这里有什么问题?我怎样才能使用alpha混合?