OpenGL ES - Получить текущий blendFunc - PullRequest
3 голосов
/ 07 декабря 2009

Я хочу сделать что-то вроде этого:

currentBlendFunc = glGetCurrentBlendFunc();
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

// [...] do stuff

glBlendFunc(currentBlendFunc.src, currentBlendFunc.dest);

Есть ли способ получить текущую функцию смешивания?

Ответы [ 3 ]

4 голосов
/ 02 августа 2013

Я просто столкнулся с точно такой же ситуацией. Вот мой подход к сохранению предыдущего состояния наложения и восстановлению после его завершения.

// save off current state of blend enabled
GLboolean blendEnabled;
glGetBooleanv(GL_BLEND, &blendEnabled);

// save off current state of src / dst blend functions
GLint blendSrc;
GLint blendDst;
glGetIntegerv(GL_BLEND_SRC_ALPHA, &blendSrc);
glGetIntegerv(GL_BLEND_DST_ALPHA, &blendDst);

//
// change blend state... do other stuff 
//

// restore saved state of blend enabled and blend functions
if (blendEnabled) {
    glEnable(GL_BLEND);
}
else {
    glDisable(GL_BLEND);
}

glBlendFunc(blendSrc, blendDst);
2 голосов
/ 13 октября 2016

Спустя годы я столкнулся с той же проблемой, документы до сих пор неясны или прослушаны.

Решение

@ don в неполном / глючном состоянии, вам также необходимо восстановить значения _RGB:

GLint last_blend_src_rgb; glGetIntegerv(GL_BLEND_SRC_RGB, &last_blend_src_rgb);
GLint last_blend_dst_rgb; glGetIntegerv(GL_BLEND_DST_RGB, &last_blend_dst_rgb);
GLint last_blend_src_alpha; glGetIntegerv(GL_BLEND_SRC_ALPHA, &last_blend_src_alpha);
GLint last_blend_dst_alpha; glGetIntegerv(GL_BLEND_DST_ALPHA, &last_blend_dst_alpha);

...

glBlendFuncSeparate(last_blend_src_rgb, last_blend_dst_rgb, last_blend_src_alpha, last_blend_dst_alpha);
2 голосов
/ 07 декабря 2009

Согласно документации функция, которую вы ищете, это glGet с аргументами GL_BLEND_SRC, GL_BLEND_DST. Это одна из неприятностей OpenGL в том, что get и set не совпадают (среди прочего).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...