The only GL commands that are allowed within any Begin / End pairs are the commands for specifying vertex coordinates, vertex color, normal coordinates, and texture coordinates ( Vertex , Color , Index , Normal , TexCoord ), the ArrayElement command (see section 2.8), the EvalCoord and EvalPoint commands (see section 5.1), commands for specifying lighting material parameters ( Material commands; see section 2.13.2), display list invocation commands ( CallList and CallLists ; see section 5.4), and the EdgeFlag command. Executing any other GL command between the execution of Begin and the corresponding execution of End results in the error INVALID_OPERATION. Executing Begin after Begin has already been executed but before an End is executed generates the INVALID_OPERATION error, as does executing End without a previous corresponding Begin .
Execution of the commands EnableClientState , DisableClientState , PushClientAttrib , PopClientAttrib , EdgeFlagPointer , TexCoordPointer , ColorPointer , IndexPointer , NormalPointer , VertexPointer , InterleavedArrays , and PixelStore , is not allowed within any Begin / End pair, but an error may or may not be generated if such execution occurs. If an error is not generated, GL operation is undefined. (These commands are described in sections 2.8, 3.6.1, and Chapter 6.)