Если вы не видели никакой разницы в производительности, значит, вы что-то делаете не так. Как уже упоминали некоторые другие, вам не нужно звонить, но если вы вызываете glFinish, то вы автоматически теряете параллелизм, которого могут достичь GPU и CPU. Позвольте мне погрузиться глубже:
На практике вся работа, которую вы отправляете драйверу, пакетируется и потенциально отправляется на аппаратное обеспечение позже (например, во время SwapBuffer).
Итак, если вы вызываете glFinish, вы, по сути, заставляете драйвер выдавать команды на графический процессор (который он пакетировал до тех пор и никогда не просил графический процессор работать), и останавливать процессор до команд толкаемые полностью выполнены. Таким образом, в течение всего времени работы графического процессора не работает процессор (по крайней мере, в этом потоке). И все время, когда процессор выполняет свою работу (в основном, пакетные команды), графический процессор ничего не делает. Так что да, glFinish должен повредить вашей производительности. (Это приблизительное значение, поскольку драйверы могут начать работу графического процессора с некоторыми командами, если многие из них уже были упакованы. Однако это не типично, поскольку буферы команд имеют тенденцию быть достаточно большими, чтобы содержать довольно много команд).
Теперь, зачем вам вообще тогда вызывать glFinish? Единственный раз, когда я использовал его, были ошибки водителя. В самом деле, если одна из команд, которые вы отправляете на аппаратное обеспечение, приводит к сбою графического процессора, тогда для простейшего определения, какая команда является виновной, является вызов glFinish после каждой отрисовки. Таким образом, вы можете сузить, что именно вызывает сбой
В качестве примечания, такие API, как Direct3D, вообще не поддерживают концепцию Finish.