blob: bc901ddef0c68f4b24363a085ca6888cc1fdaea7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
## libGL
### What is libGL?
OpenGL-based programs must link with the _libGL_ library. _libGL_ implements the GLX interface as well as the main OpenGL API entrypoints. When using indirect rendering, _libGL_ creates GLX protocol messages and sends them to the X server via a socket. When using direct rendering, _libGL_ loads the appropriate 3D DRI driver then dispatches OpenGL library calls directly to that driver.
libGL also has the ability to support heterogeneous, multi-head configurations. That means one could have two or more graphics cards (of different types) in one system and libGL would allow an application program to use all of them simultaneously.
### Where does libGL reside?
The GLcore extension source code resides at [[xc/lib/GL/GL/|http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/dri/xc/xc/lib/GL/GL/]] .
[[!inline pages="libGLDriver" quick="yes" raw="yes"]]
### How do X modules and X applications communicate?
X modules are loaded like kernel modules, with symbol resolution at load time, and can thus call each other functions. For kernel modules, the communication between applications and modules is done via the _/dev/*_ files.
X applications call X libraries function which creates a packet and sends it to the server via sockets which processes it. That's all well documented in the standard X documentation.
There are 3 ways 3D clients can communicate with the server or each other:
1. Via the X protocol requests. There are DRI extensions.
1. Via the SAREA (the shared memory segment)
1. Via the kernel driver.
|