Внутренний конечный автомат OpenGL позаботится обо всем этом. Все команды OpenGL ставятся в очередь в очереди команд и выполняются по порядку. Вызов glViewport
- и любая другая команда OpenGL в этом отношении - влияет только на результат команд, следующих за ним, и ничего, что предшествует.
Нет необходимости реализовывать пользовательскую циклическую буферизацию.
Это даже охватывает такие вещи, как текстуры и буферные объекты (с заметными исключениями буферных объектов, которые постоянно отображаются). Т.е. если вы выполните следующую последовательность операций
glDrawElements(…); // (1)
glTexSubImage2D(GL_TEXTURE_2D, …);
glDrawElements(…); // (2)
Модель рендеринга OpenGL обязывает , что glDrawElements
(1) использует данные текстуры связанного объекта текстуры, как это было до позвоните glTexSubImage2D
и , чтобы glDrawElements
(2) использовал данные, которые были загружены между (1) и (2).
Да, это включает отслеживание содержимого, неявные копии данных и много других неприятных вещей. Да, это также может означать, что вы идете медленным путем.