GLUT on fbdev driver. Sean D'Epagnier

This commit is contained in:
Brian Paul 2006-07-31 14:24:21 +00:00
parent e8947a5fa0
commit fe3242f00a
4 changed files with 9422 additions and 25 deletions

View file

@ -37,54 +37,75 @@ The GL/glfbdev.h header file defines the glFBDev interface.
The progs/fbdev/glfbdevtest.c demonstrates how to use the glFBDev interface.
</p>
<p>
For more information about fbdev, see the
<a href="http://www.tldp.org/HOWTO/Framebuffer-HOWTO.html" target="_parent">
Framebuffer Howto</a>
</p>
<p>
You will need at minimum, a framebuffer device, check /dev/fb0
</p>
<h1>2. Compilation</h1>
<p>
To compile Mesa with support for the glFBDev interface:
<pre>
XXX todo
make realclean
make linux-fbdev
</pre>
<p>
When compilation is finished look in progs/glfbdev/ for the glfbdevtest demo.
</p>
</p>
xxx todo
</p>
<h1>3. Compiling and linking glFBDev programs</h1>
<h1>3. Permissions</h1>
<p>
xxx todo
</p>
<h1>4. Running glFBDev programs</h1>
Typically /dev/fb/0 is grouped to the video group. It may be useful to add
your user to the video group so the demos will not have to be run as root.
To use fbdevglut with the prefered tty input, you should add the user to the
tty group as well
<p>
First, you need to have a working fbdev environment.
See the
<a href="http://www.tldp.org/HOWTO/Framebuffer-HOWTO.html" target="_parent">
Framebuffer Howto</a> for information.
</p>
<h1>4. Using fbdevglut</h1>
Almost all of the programs in the progs directory use glut, and they compile with fbdevglut.
Currently glBlendFunc is not working with glFBDev.
<p>
Programs must be run with root permission.
To compile the redbook sample programs:
<pre>
cd progs/redbook
make
</pre>
</p>
<p>glut features not supported:
<li>Overlays
<li>Subwindows
<li>Input devices other than Keyboard/Mouse
<li>No support for GLUT_MULTISAMPLE, GLUT_STEREO, or GLUT_LUMINANCE
<li>Cursor and Menu Support will flicker in GLUT_SINGLE mode
<p>Keyboard input is read by opening /dev/tty and reading keycodes in medium raw mode.
<p>Mouse input is read from env var MOUSE, or /dev/gpmdata and should be in ms3 format.
To forward data in this format to /dev/gpmdata, run gpm with the -Rms3 option.
<p> glutInit allows glut programs to pass parameters to the glut library, currently the
following options are supported for fbdevglut:
<p><li>-geometry widthxheight -- This will force the resolution to be widthxheight instead of autodetecting.
The modes are read from /etc/fb.modes
<p><li>-bpp -- This will force the bitdepth to the one specified
<p><li>-vt -- This allows you to specify the virtual terminal to attach keyboard input to. It is useful to specify when running inside screen.
<p><li>-mousespeed -- A floating point multiplication factor to increase mouse speed
<p><li>-nomouse -- Disable mouse support
<p><li>-nokeyboard -- Disable keyboard support (this will probably break mouse support as well)
<p><li>-stdin -- Use stdin for input instead of attaching to kbd in medium-raw mode.
This will make it impossible to detect keypresses like Shift+Tab, you will also need to specify -gpmmouse for mouse support. This option can be used with a debugger, and it is possible to single step a program with gdb and set the FRAMEBUFFER environment variable to a different framebuffer for display. The program will not be able to handle vt switching on it's own, so it will always display.
<p><li>-gpmmouse -- This will attempt to connect to the /dev/gpmctl socket using liblow
for mouse data. Gpm does not provide this data when in graphics mode, so vt switching
will briefly display text. This mode typically has no initial mouse delay.
<p><li>-- Ignore any additional arguments
<p>Notes:
<p>
1. The mouse pointer flickers in single buffering mode, as it must be rendered in software. Hopefully in the future there will be a way to access hardware cursors in fbdev devices.
</p>
</body>
</html>

78
src/glut/fbdev/Makefile Normal file
View file

@ -0,0 +1,78 @@
# subset glut
TOP = ../../..
include $(TOP)/configs/current
GLX_SHARED = $(TOP)/src/glut/glx
SHAPES = $(TOP)/src/glut/mini
GLUT_MAJOR = 3
GLUT_MINOR = 7
GLUT_TINY = 1
INCLUDES = -I$(TOP)/include -I$(GLX_SHARED)
CORE_SOURCES = \
glut_fbdev.c
GLX_SHARED_SOURCES = \
$(GLX_SHARED)/glut_8x13.c \
$(GLX_SHARED)/glut_9x15.c \
$(GLX_SHARED)/glut_bwidth.c \
$(GLX_SHARED)/glut_bitmap.c \
$(GLX_SHARED)/glut_hel10.c \
$(GLX_SHARED)/glut_hel12.c \
$(GLX_SHARED)/glut_hel18.c \
$(GLX_SHARED)/glut_tr10.c \
$(GLX_SHARED)/glut_tr24.c \
$(GLX_SHARED)/glut_mroman.c \
$(GLX_SHARED)/glut_roman.c \
$(GLX_SHARED)/glut_swidth.c \
$(GLX_SHARED)/glut_stroke.c \
$(TOP)/src/glut/mini/models.c \
$(GLX_SHARED)/glut_teapot.c
SOURCES = $(CORE_SOURCES) $(GLX_SHARED_SOURCES)
OBJECTS = $(SOURCES:.c=.o)
##### RULES #####
.c.o:
$(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@
.S.o:
$(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@
##### TARGETS #####
default: depend $(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME)
# Make the library
$(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME): depend $(OBJECTS)
$(TOP)/bin/mklib -o $(GLUT_LIB) -linker '$(CC)' \
-major $(GLUT_MAJOR) -minor $(GLUT_MINOR) -patch $(GLUT_TINY) \
$(GLUT_LIB_DEPS) -install $(TOP)/$(LIB_DIR) \
$(MKLIB_OPTIONS) $(OBJECTS)
# Run 'make -f Makefile.solo dep' to update the dependencies if you change
# what's included by any source file.
depend: $(SOURCES)
touch depend
$(MKDEP) $(MKDEP_OPTIONS) $(INCLUDES) $(SOURCES) > /dev/null
# Emacs tags
tags:
etags `find . -name \*.[ch]` `find ../include`
# Remove .o and backup files
clean: depend
-rm -f depend
-rm -f *.o *~ *.o *~ *.so libglut.so.3.7
include depend

7099
src/glut/fbdev/cursors.h Normal file

File diff suppressed because it is too large Load diff

2199
src/glut/fbdev/glut_fbdev.c Normal file

File diff suppressed because it is too large Load diff