У меня неправильное понимание использования функции glClientWaitSync.
Признайтесь, я использую что-то вроде этого:
glDraw(...);
sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
glDraw(...);
glClientWaitSync(sync, GL_SYNC_FLUSH_COMMANDS_BIT, 1000000000);
glDeleteSync(sync);
Если я хорошо понимаю OpenGL Wiki, у нас есть два случая
Первый случай: OpenGL 4.5: В этом случае после glClientWaitSync мы уверены, что выполняется только первая отрисовка, потому что в вики написано:
В OpenGL 4.5 этот сброс сделан специальным. Если вы ожидаете этого конкретного объекта синхронизации впервые и ожидание происходит в том же контексте, в котором был создан объект синхронизации, сброс будет вести себя так, как если бы вы инициировали его сразу после объекта синхронизации. Поэтому, если вы ввели другие команды OpenGL после создания объекта синхронизации, они не будут сброшены.
Второй случай: OpenGL 4.4 или ниже: мы уверены, что оба отрисовки выполняются, потому что эта функция имеет «глобально» то же поведение, что и функция glFlush? Идя таким образом, как на самом деле использовать постоянное отображение с использованием циклического перебора с OpenGL 4.4, если весь командный буфер сброшен?