glBlendFunc和framebuffer对象

时间:2014-02-20 22:46:03

标签: opengl alphablending fbo glblendfunc

当我绘制到帧缓冲对象时,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混合?

0 个答案:

没有答案