Альфа-смешивание не работает должным образом, когда я рисую объект кадрового буфера. В частности, вызов 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 и прошу профиль совместимости.
Что здесь не так? Как я могу использовать альфа-смешивание?