#opengl
#opengl
Вопрос:
Я потратил много времени, пытаясь выяснить, почему состояние GL_BLEND (альфа-смешивание) менялось в моей программе, и я обнаружил, что OpenGL устанавливает для состояния GL_BLEND значение false после вызова glClear для очистки буфера рендеринга.
GLboolean boolValue;
glEnable(GL_BLEND);
glGetBooleanv(GL_BLEND, amp;boolValue);
assert(boolValue == true); // PASSES
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glGetBooleanv(GL_BLEND, amp;boolValue);
assert(boolValue == true); // FAILS
Мне интересно, должно ли это произойти и упоминается ли это в какой-либо документации. Мне бы не хотелось узнавать, какие другие состояния изменяет OpenGL, не зная об этом и тратя годы на попытки отследить, почему моя программа терпит неудачу.
Редактировать: я только что узнал, что он делает это только при первом вызове glClear() . Кто-нибудь может проверить, что это правильное поведение?
Комментарии:
1. Нет.
glClear
не изменяет никакого состояния. Это просто изменяет содержимое указанных буферов.2. @Rabbid76 Так что это, должно быть, ошибка с моей стороны, в драйверах или что-то в этом роде?
3. Я не знаю. Смотрите Спецификацию 17.4.3 Очистка буферов . Вы получаете ошибку OpenGL?
4. Нет, у меня настроен обратный вызов ошибки, и я также вызываю glGetError и не получаю ошибок. Это так странно. Дело в том, что я даже не могу проверить, делает ли это OpenGL, потому что, если сохранить bool, говорящий, что альфа-смешивание отключено, а glClear отключает альфа-смешивание, у меня не будет никакого способа узнать, сделал ли это OpenGL, потому что они будут сравниваться одинаково.
5. @Rabbid76 Я только что узнал, что он делает это только при первом вызове glClear() . Как вы думаете, это должно произойти?