|
NAMEvgagl - a fast framebuffer-level graphics library based on svgalibTABLE OF CONTENTS0. Introduction1. How to use vgagl 2. Description of vgagl functions 3. Macros defined in vgagl.h 0. INTRODUCTIONThis is a fast framebuffer-level graphics library for linear 1, 2, 3 and 4 byte-per-pixel modes (256-color, hicolor, truecolor). It uses a limited number of functions from svgalib (libvga) for low-level hardware communication (the library is included in the svgalib shared image).In particular, svgalib(7) maps the 64K VGA frame buffer window, and this library directly addresses the buffer. For SVGA modes that use more than 64K of screen memory, SVGA paging is required when writing to the physical screen; this is done automatically for most functions (at a certain cost). Alternatively, any number of virtual screens of any type in system memory can be used, which can then be copied to the physical screen. There is also support for 4 bytes per pixel framebuffers (and copying them to a 3 bytes per pixel context), and limited planar 256 color mode support (copyscreen, aligned putbox). The planar 256 color modes (available on all VGA cards) can now be used with a virtual screen, which is copied to the physical screen (with optional page-flipping). Bitmaps are raw, with one (or more) bytes per pixel (like pixmaps in X), stored in row-major order. They are usually manipulated with the getbox and putbox functions. vgagl does also make use of the graphic cards accelerator (if it is supported) in some situations. A graphics context is just a structure that holds the size of the associated graphics screen, how it is organized, clipping status etc. You can define a custom virtual (system memory) graphics context of any size with the setcontextvirtual function. All operations work on the current context. Any questions, bug-reports, additions, suggestions etc. are welcome. 1. HOW TO USE VGAGLPrograms that use vgagl must #include <vgagl.h>. Linking must be done with -lvgagl -lvga.Functions in the vgagl library have the prefix gl_*. To initialize vgagl, the graphics context must be set. Example: vga_setmode(G320x200x256);
gl_setcontextvga(G320x200x256); In this example, the context is set to the physical screen. The context can be saved (only the screen type, not the contents) into a variable, e.g. GraphicsContext physicalscreen;
gl_getcontext(&physicalscreen). To define a virtual screen in system memory, use gl_setcontextvgavirtual(3): gl_setcontextvgavirtual(G320x200x256)
which allocates space for a screen identical to 320x200x256 graphics mode, and makes this virtual screen the current graphics context. The virtual screen can now be copied to the physical screen as follows: gl_copyscreen(&physicalscreen);
Note that with a virtual screen in system memory, it is possible to add fast X-Window support to a program, using MITSHM to copy the framebuffer to the screen window. 2. DESCRIPTION OF VGAGL FUNCTIONSContext management
Drawing primitives
Copying of screen buffers and page flipping
Clipping
Text drawing primitives
Pix- and Bitmap drawing
Palette handling
Triangle primitives from threeDkit
3. MACROS DEFINED IN VGAGL.H:
BUGSFor three bytes per pixel (true color) modes, it is possible that pixels cross a SVGA segment boundary. This should be correctly handled by most functions, but you never know. It can be avoided by using a logical scanline length that is a divisor of 65536 (a power of 2), like 1024 (as opposed to 960) for 320x200 and 2048 (1920) for 640x480. For 800x600, this is impractical (4096 as opposed to 2400 doesn't fit in 2MB). Alternatively, avoid those functions by using a virtual screen.SEE ALSOsvgalib(7), libvga.config(5), testgl(6), threedkit(7), currentcontext(3), gl_allocatecontext(3), gl_circle(3), gl_clearscreen(3), gl_colorfont(3), gl_compileboxmask(3), gl_compiledboxmasksize(3), gl_copybox(3), gl_copyboxfromcontext(3), gl_copyboxtocontext(3), gl_copyscreen(3), gl_disableclipping(3), gl_enableclipping(3), gl_enablepageflipping(3), gl_expandfont(3), gl_fillbox(3), gl_font8x8(3), gl_freecontext(3), gl_getbox(3), gl_getcontext(3), gl_getpalette(3), gl_getpalettecolor(3), gl_getpalettecolors(3), gl_getpixel(3), gl_getpixelrgb(3), gl_hline(3), gl_line(3), gl_putbox(3), gl_putboxmask(3), gl_putboxmaskcompiled(3), gl_putboxpart(3), gl_rgbcolor(3), gl_scalebox(3), gl_setclippingwindow(3), gl_setcontext(3), gl_setcontextheight(3), gl_setcontextvga(3), gl_setcontextvgavirtual(3), gl_setcontextvirtual(3), gl_setcontextwidth(3), gl_setdisplaystart(3), gl_setfont(3), gl_setfontcolors(3), gl_setpalette(3), gl_setpalettecolor(3), gl_setpalettecolors(3), gl_setpixel(3), gl_setpixelrgb(3), gl_setrgbpalette(3), gl_setscreenoffset(3), gl_setwritemode(3), gl_striangle(3), gl_swtriangle(3), gl_triangle(3), gl_trigetcolorlookup(3), gl_trisetcolorlookup(3), gl_trisetdrawpoint(3), gl_write(3), gl_writen(3), gl_wtriangle(3).AUTHORThere are many authors of svgalib. This page was edited by Michael Weller <eowmob@exp-math.uni-essen.de>. The original documentation and most of vgagl was done by Harm Hanemaayer <H.Hanemaayer@inter.nl.net> though.
Visit the GSP FreeBSD Man Page Interface. |