Рассмотрим следующего случаяМинимального видоизменения данных под ссылкой после OpenGL вызова
glDeleteBuffers(1, &buffer);
// buffer = 0;
...
if(buffer == 0) {
// Should not pass but does.
}
, конечно, когда glDeleteBuffers выполняется, буфер установлен в 0, но, учитывая задержку между выдачей удаления и фактически выполняются, я могу столкнуться отличное от нуля.
Условие выше продолжает проходить наугад, что нежелательно.
Мой вопрос: могу ли я назначить нуль в буфер без влияния на команду в очереди? Я понимаю, что при передаче ценности ничего плохого не может произойти, но я не нашел упоминания в документации, как обрабатываются ссылки. Записывает ли OpenGL данные из ссылок на некоторый неизменяемый временный буфер до того, как он «будет потреблен»?
Пробовал присваивать -1, надеясь, что это приведет к ошибке, но из-за случайного поведения проблемы я действительно не хочу полагаться на «не произошло, не произойдет».
Почему вы думаете, что 'glDeleteBuffers' изменяет значение буфера? Второй параметр - это 'const GLuint * ', что означает, что он не может быть изменен функцией. – BDL
Теперь это довольно странно, поскольку условие не всегда проходит. –
Неопределенное поведение, потому что вы используете 'buffer' после того, как вы сказали GL, чтобы удалить его. – lfgtm