svga-target
- Needs to be run as root. root privs are given up in
ggiOpen()
.
- Uses SIGUSR1 and SIGUSR2.
- Any functions that was registered with
atexit()
or on_exit()
before ggiOpen()
will
never be called.
- Currently virtual size must equal visual size.
X-target
- In SYNC mode the X-target will
fork()
a
child process which periodically sends SIGPROF
to the
parent.
Whenever this happens the whole framebuffer will be copied to the
X-server. If you are not running a local X-session this will be
sloooow.
The child is sent a SIGKILL
when ASYNC mode is entered.
- X must run in the same depth as the requested visual.
Xlib-target
- Currently does not work in SYNC mode, and in ASYNC mode
it does just the same thing as the X-target but with more
overhead.
dga-target
- Needs to be run as root. root privs are given up in
ggiOpen()
.
- X must run in the same depth as the requested visual.
- Virtual size must equal the current X resolution.
How does this concern the application writer?
If you want your app to run in all possible GGI environments
you should consider the following:
- You are strongly suggested to use ASYNC mode only!
This will improve performance a great deal on most targets, notably
KGI and X.
- Try to support as many depths as possible and be flexible
about the size of the display.
- On the svga and dga target everything your app does before
ggiOpen()
is done as root. If your app is not well
written this may hurt securetty severely.
- If you want your app to run on the svga-target you should:
- Not use SIGUSR1 or SIGUSR2.
- Only call
atexit()
and on_exit()
after ggiOpen()
.