No estoy seguro si su pregunta es sobre cuándo puede llamar a glGetError si está dentro de glBegin/End o si se trata de una pregunta más general sobre el uso de glGetError en general. Entonces responderé a ambos.
Lo que puedes hacer entre glBegin y glEnd es muy limitado. Esto es a propósito, ya que pones el GL en un modo muy específico: en el medio de un Draw. Como tal, cualquier cosa que no se relacione directamente con los atributos por vértice es simplemente inválida. Incluso un glGetError no es válido en ese contexto. Pruebe y piense en glBegin + todas las llamadas de GL entre + glEnd como una sola llamada de Draw al GL, que ayuda a acercarse más a lo que realmente hace el GL de todos modos.
Ahora, usted debe nunca haber provocado un error de GL, mientras que en el interior del Begin/par Fin si se adhieren a la regla simple a métodos atributo sólo de llamadas (glNormal, glTexCoord, glColor, glSecondaryColor, glIndex, glMultiTexCoord, glVertexAttrib, glVertex y un par de otros). Cualquier otra cosa provocará un error. (err ... bueno, glMaterial es un poco una excepción. Funciona, pero se desaconseja su uso)
Si su pregunta es cuándo puede llamar a glGetError cuando se activó el error dentro de un par Begin/End, ChrisF respondió en un comentario: después de la llamada glEND.
Ahora, en un sentido más amplio, use glGetError solo como una herramienta de depuración. Mi preferencia personal es doble:
- cheque glGetError una vez por cuadro para asegurarse de que no haya error
- envoltura más GL llama con una macro que puede comprobar el código de error GL, y sólo encenderlo cuando el per la verificación del marco falla
Por supuesto, ya que los métodos de atributos pueden ser llamados fuera un Begin/par final, es un poco difícil de hacerlo bien. Pero en la práctica, esos métodos nunca fallan de todos modos, así que no me molesto en hacer una macrocomprobación.
Un tidbit de trivia: el GL API fue diseñado originalmente para que la implementación del cliente no supiera si había un error en el sitio de la llamada. P.ej. si el GL se implementó realmente en una máquina remota (como en los días SGI), una llamada a, digamos, glTexEnv con un objetivo no GL_TEXTURE_ENV podría simplemente agregarse al búfer de comando, y no se registraría ningún error en ese punto.
Si luego llamó a glGetError, el lado del cliente tendría que vaciar el búfer de comando al servidor GL, esperar a que se procesen los comandos que están en búfer, recuperar el código de error y devolver el código de error correspondiente a la aplicación.
Si esto suena pesado, es porque así fue. Esta fue la razón principal por la cual no cada llamada devolvía un código de error, por cierto, y por qué llamar a glGetError solo se consideraba correcto para la depuración. En la actualidad, la mayoría de las implementaciones GL están manejando toda la administración estatal en el mismo proceso, así que como dije, es realmente trivial para la mayoría de los usuarios.
Por último, cada vez que estoy hablando de Begin/End, siento que necesito decir que probablemente debería considerar no usarlo en absoluto. Es la peor forma de dibujar con GL.
Nota: 'glBegin' y' glEnd' [están en desuso] (http://gamedev.stackexchange.com/questions/34108/opengl-vbo-or-glbegin-glend). –