Должен ли OpenGL устанавливать GL_BLEND в false при вызове glClear()?

#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() . Как вы думаете, это должно произойти?