Мне сложно различить практическую разницу между вызовом glFlush()
и glFinish()
.
В документации говорится, что glFlush()
и glFinish()
все буферизованные операции будут отправлены в OpenGL, чтобы можно было быть уверенным, что все они будут выполнены, с той лишь разницей, что glFlush()
сразу же возвращается, где как glFinish()
блоки, до тех пор, пока все операции не будут завершены.
Прочитав определения, я подумал, что если бы я использовал glFlush()
это, я, вероятно, столкнулся бы с проблемой отправки большего количества операций в OpenGL, чем он мог бы выполнить. Итак, просто чтобы попробовать, я поменял свой glFinish()
на a, glFlush()
и вот, моя программа запустилась (насколько я мог судить) точно так же; частота кадров, использование ресурсов, все было так же.
Так что мне интересно, есть ли большая разница между двумя вызовами или мой код заставляет их работать одинаково. Или где следует использовать один по сравнению с другим. Я также подумал, что у OpenGL будет какой-то вызов, например, glIsDone()
чтобы проверить, все ли буферизованные команды для a glFlush()
завершены или нет (поэтому никто не отправляет операции в OpenGL быстрее, чем они могут быть выполнены), но я не нашел такой функции .
Мой код представляет собой типичный игровой цикл:
while (running) {
process_stuff();
render_stuff();
}