In IRIS GL, rendering into an X window using core X rendering after IRIS GL was bound to the window is undefined. This precluded mixing core X rendering with GL rendering in the same window. OpenGL allows its rendering to be mixed with core X rendering into the same window. You should be careful doing so since X and OpenGL rendering requests are logically issued in two distinct streams. If you want to ensure proper rendering, you must synchronize the streams. Calling glXWaitGL will make sure all OpenGL rendering has finished before subsequent X rendering takes place. Calling glXWaitX will make sure all core X rendering has finished before subsequent OpenGL rendering takes place. These requests do not require a protocol round trip to the X server.
The core OpenGL API also includes glFinish and glFlush commands useful for rendering synchronization. glFinish ensures all rendering has appeared on the screen when the routine returns (similar to XSync). glFlush only ensures the queued commands will eventually be executed (similar to XFlush).
Realize that mixing OpenGL and X is not normally necessary. Many OpenGL programs will use a toolkit like Motif for their 2D user interface component and use a distinct X window for OpenGL rendering. This requires no synchronization since OpenGL and core X rendering go to distinct X windows. Only when OpenGL and core X rendering are directed at the same window is synchronization of rendering necessary.
Also OpenGL can be used for extremely fast 2D as well as 3D. When you feel a need to mix core X and OpenGL rendering into the same window, consider rendering what you would do in core X using OpenGL. Not only do you avoid the synchronization overhead, but you can potentially achieve faster 2D using direct rendered OpenGL compared to core X rendering.