glBlendFunc и объект кадрового буфера

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

Что здесь не так? Как я могу использовать альфа-смешивание?


person Little Endian    schedule 20.02.2014    source источник
comment
Есть как минимум одна ошибка, glEnablei требует в качестве второго аргумента индекс цветового буфера, см. opengl. org/wiki/GLAPI/glEnable в конце   -  person elect    schedule 04.12.2014
comment
Спасибо. Вероятно, это было проблемой.   -  person Little Endian    schedule 04.12.2014
comment
В любом случае, смешивание всегда было моей ахиллесовой пятой, если это также и ваш случай, я уверен, что вы также найдете эту ссылку полезной andersriggelsen.dk/glblendfunc.php   -  person elect    schedule 08.12.2014