Indirect rendering means that the GLX protocol will be used to transmit OpenGL commands and the X.org will do the real drawing.
Direct rendering means that application can access hardware directly without communication with X.org first via mesa.
The direct rendering is faster as it does not require change of context into X.org process.
Clarification: In both cases the rendering is done by GPU (or technically - may be done by GPU). However in indirect rendering the process looks like:
- Program calls a command(s)
- Command(s) is/are sent to X.org by GLX protocol
- X.org calls hardware (i.e. GPU) to draw
In direct rendering
- Program calls a command(s)
- Command(s) is/are sent to GPU
Please note that because OpenGL was designed in such way that may operate over network the indirect rendering is faster then would be naive implementation of architecture i.e. allows to send a buch of commands in one go. However there is some overhead in terms of CPU time spent for context switches and handling protocol.