3D cube console
~~~~~~~~~~~~~~~

.. manpage:: 1 cube3d

Synopsis
--------

::

  cube3d

Description
-----------


`cube3d` is a LibGGI "middleend", that allows to run up to 6 LibGGI
applications on one screen, mapped to the six sides of a cube.


The programs program1 to program6 are invoked and mapped to the cube
sides after the 3d program itself has started. You can interleave the
program names with size parameters of the form -xxx,yyy that will ask
the programs that come later on the commandline to start up in that
size.  The default size is half that of the visual 3d is running on.


You can add more programs while 3d is running by setting some
environment variables and starting them::

    GGI_DISPLAY=display-memory:-input:keyfile:1048576:[0-5]:/dev/null


The [0-5] selects on which face of the cube you want the
application to run.


You should as well set `GGI_DEFMODE` to a mode with the same color
organization like the one 3d itself is running on, and the mode, 3d
believes it should run in, as specified with a size parameter.


Once `cube3d` is invoked, the program will display the cube with the
six other applications mapped to it. But you will probably only see
application number 1 (and maybe 3 from behind), as this is the way the
cube is oriented. The keyboard is redirected to the application that
has the blinking border.


Function Keys
-------------


`#` is the "escape" key. After pressing it, the blinking border should
turn red. All further input now goes to the 3d program and is used to
manipulate the appearance and behaviour of the cube:

`#`
    A double-escape is used to send the escape-char '#' itself.

`Enter`
    or any unknown keypress will end the escape mode. The border will
    turn white again and input will go to the bordered application.

`Left`, `Right`, `Up`, `Down`, `Home`,  `End` 
    will make the cube turn along the respective axis.

`PageUp`, `PageDown` 
    will make the cube enlarge/shrink.

`s`, `S` 
    will stop any cube motion.

`c`, `C` 
    will center the currently active face (the one with the border) in
    a smooth motion and when this is finished, it will stop all
    motion.  This is a toggle, that gets turned off automatically when
    the final position is reached. That is, you can disable it on its
    way, which will leave the cube spinning in the current direction.

`b`, `B` 
    will toggle backface culling. In that case, the three *back* sides
    of the cube are not drawn. Looks much less nice, but is
    faster. Use on slow systems.

`a`, `A` 
    will toggle autoactivation. If this is on, the blinking frame will
    automatically move to the face, that is facing the viewer most
    directly, i.e. the *front* face. This can be quite irritating,
    especially, if the cube is moving fast. But it's cool at times ...

`t`, `T` 
    will toggle transparency. The pixelvalue of 0x00000000 is treated
    as "transparent" usually. This not only looks better, but often
    even improves performance, as there is less to draw. However
    things like shells (nixterm) might be hard to read on a colorful
    background, so you might want to turn it off at times.

`0`-`5` 
    select the active console that will get input, when you leave the
    escaped mode. The blinking rectangle will move there. Together
    with 'c', this is used to get a particular console to the front.

`q`, `Q` 
    quit 3d. This also tries to kill the apps started from
    it. Externally started apps are _not_ killed. They will continue
    to run and might interfere with future runs of 3d, as they still
    hog the shared memory used to communicate between 3d and the apps.

`f`, `F` 
    display framerate. (undocumented, may disappear)

`d`,  `D` 
    display debugging info. Not very useful. (undocumented, may disappear)


Bugs
----

Too numerous to count.
