Я не уверен, что ваш вопрос касается того, когда вы можете вызвать glGetError, если он находится внутри glBegin / End, или это более общий вопрос об использовании glGetError в целом. Поэтому я отвечу на оба вопроса.
То, что вы можете сделать между glBegin и glEnd, очень ограничено. Это сделано специально, поскольку вы ставите GL в очень специфический режим - в середине ничьей. Таким образом, все, что не связано непосредственно с атрибутами для каждой вершины, просто недопустимо. Даже glGetError в этом контексте недопустим. Попробуйте и подумайте о glBegin + все вызовы GL между + glEnd как об одном вызове Draw для GL, который в любом случае помогает приблизиться к тому, что GL в действительности делает.
Теперь у вас никогда не должно быть ошибки GL, возникающей внутри пары Begin / End, если вы придерживаетесь простого правила только для вызова методов атрибута (glNormal, glTexCoord, glColor, glSecondaryColor, glIndex, glMultiTexCoord, glVertexAttrib, glVertex и пара других). Все остальное вызовет ошибку. (э-э ... ну, glMaterial - это немного исключение. Он работает, но его использование не рекомендуется)
Если ваш вопрос заключается в том, когда вы можете вызвать glGetError, когда ошибка возникла в паре Начало / Конец, ChrisF ответил в комментарии: после вызова glEnd.
Теперь, в более широком смысле, используйте glGetError только в качестве инструмента отладки. Мой личный уклон в два раза:
- проверьте glGetError один раз за кадр, чтобы убедиться, что ошибки нет
- обернуть большинство вызовов GL макросом, который может проверять код ошибки GL, и включать его только в случае неудачной проверки каждого кадра.
Конечно, поскольку методы атрибута можно вызывать за пределами пары Начало / Конец, немного сложно понять их правильно. Но на практике эти методы в любом случае никогда не заканчиваются, поэтому я не пытаюсь их проверять на макроуровне.
Трюк с мелочами: GL API был изначально спроектирован так, чтобы клиентская реализация могла фактически не знать, была ли ошибка на сайте вызова. Например. если GL был фактически реализован на удаленной машине (как в дни SGI), вызов, скажем, glTexEnv с целью, не равной GL_TEXTURE_ENV, мог быть просто добавлен в буфер команд, и в этот момент не было бы зарегистрировано никакой ошибки.
Если вы затем вызвали glGetError, клиентская сторона должна была бы сбросить буфер команд на GL-сервер, дождаться обработки буферизованных команд, вернуть код ошибки и вернуть соответствующий код ошибки применение.
Если это звучит тяжело, это потому, что это было. Это была основная причина, почему не каждый вызов возвращал код ошибки, кстати, и почему вызов glGetError считался нормальным только для целей отладки. В настоящее время большинство реализаций GL обрабатывают все управление состоянием в одном и том же процессе, поэтому, как я уже сказал, для большинства пользователей это действительно пустяки.
В заключение, всякий раз, когда я говорю о Begin / End, я чувствую, что должен сказать, что вам, вероятно, следует обратить внимание на то, что он вообще не используется. Это худший способ рисовать с GL.