В настоящее время у меня есть код, который выполняет следующее:
- до следующего кадра
glClear(GL_COLOR_BUFFER_BIT | GL_DPETH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- выполняет все рисование для кадра
- очистить и отобразить рисунок на экране
- спать до следующего кадра (снова)
Мой вопрос: следует ли перемещать clear (2) после шага 4?
Этот порядок удобен тем, что проще подготовить буфер рендеринга для концептуального рендеринга, например, положить праймер на холст, а не чистить буфер рендеринга впоследствии.Но я боюсь, что GPU может застрять на каждой очистке и отсрочить команды рисования сразу после него, а это значит, что его следует использовать, когда GPU еще ничего не нужно делать, например, прямо перед ожиданием начала следующего кадра.
В лучшем случае: этот порядок в порядке, и я параноик, glClear()
не задерживает другие команды рисования opengl каким-либо значимым образом.
Сценарий наихудшего случая: glClear()
лучше всего вызывать после рендеринга кадра, где есть время простоя для его работы, так как другие команды opengl еще не поставлены в очередь.