У меня есть программа, в которой я использую шейдерную программу для рендеринга в текстуру, прикрепленную к FBO, затем изменяю параметры программы (изменяя значения униформ) и рендеринг во вторую текстуру после присоединения ее к FBO. Затем два визуализированных изображения используются для создания третьего изображения.
Я не уверен, что результаты, которые я получаю, верны. Я понимаю, что GPU будет свободно выбирать время, в которое нужно выполнить команду OpenGL. Но это не должно быть проблемой, если порядок выполнения соответствует последовательности, в которой команды появляются в коде. Это действительно так?
Дополнительный вопрос. Мне нужно сохранить сгенерированные кадры на диск. Я знаю, как это сделать. Но мне нужно убедиться, что графический процессор завершил рендеринг, прежде чем сделать это. Как я могу обеспечить это?
OpenGL будет выполнять команды в порядке их выдачи (или, по крайней мере, имитировать это поведение). Это означает, что нет проблем с использованием 2 разных FBO, одно за другим. Также это означает, что OpenGL позаботится о том, чтобы ваш рендеринг был завершен в тот момент, когда вы получили результат от FBO.
Ты можешь позвонить glFinish()
чтобы ваша программа ожидала, пока все ожидающие команды OpenGL не будут обработаны конвейером, но это не нужно почти во всех случаях.
Других решений пока нет …