VGL 2.0 VGA Graphics Library (VGA mode 13h) Created by Mark Morley morley@camosun.bc.ca May 1993 What is VGL? ============ VGL is a graphics library for VGA mode 13h. Perhaps a `collection of graphics routines' is a better description than `library'. The core of the package is an assembly language module. This module exists in both a 286 and 386 version and contains the basic "core" routines. All the other routines are written in C and are contained in seperate modules. Full source is included. The library includes routines for drawing on virtual screens (or virtual page flipping if you like), drawing sprites, doing fast blits, manipulating the palette (including fading and cycling), drawing bitmapped fonts, loading GIF images, drawing lines, trapping key presses, handling the mouse, etc. What does it cost? ================== Nothing. VGL is free. What's the catch? ================= The one thing I ask is that you don't try and sell VGL itself or make it a part of another programming library. VGL is FREE and anyone who wants it should be allowed to have it WITHOUT CHARGE. If you write a program and use my routines, you can sell YOUR PROGRAM without having to give away the source. You don't even have to give me any credit for my work, although it would be a nice gesture. If you do write something with my stuff, I'd love to see it. Whether it's a demo or a full blown game, I'd just like to see that someone is actually using this stuff. Finally, if you find this library useful or informative, I'd love to get a note from you saying so. This is all the encouragement I need to keep developing it. Oh yeah, my wife says she wants a post card from your home town, so if you're so inclined you can send one to: M. Morley 3889 Mildred Street Victoria, B.C. V8Z 7G1 Canada What's new in 2.0? ================== * vglHLine Draw a horizontal line. To be used later in polygon fills (version 3.0?) * vglUpdateW, vglUpdateLW, vglCopyW Work just like the routines without a 'W' on the end, except these ones will wait for vertical retrace before copying to the screen. * vglBlack Sets the palette to all black. * vglFadeIn, vglFadeOut, vglFadePartIn, vglFadePartOut Routines to smoothly fade in all or part of a palette. * vglCyclePartL, vglCyclePartR Routines to rotate a part of the palette to the left or right. * vglSetPartPal Set a partial palette. * vglSetPal (modified) Now waits for vertical retrace (avoids *some* flicker). * vglTrapKeys, vglReleaseKeys Allows you to test for multiple keys being held down. * vglLoadFont, vglPutc, vglPuts, vglBoldOn, vglBoldOff, vglItalicsOn, vglItalicsOff, vglUnderlineOff, vglUnderlineOff, vglShadowOn, vglShadowOff, vglTextColor, vglUnderlineColor, vglShadowColor Routines to display bitmapped fonts. 22 fonts are included. I'm really happy with this module, even though it isn't the cleanest code. It could be faster, though. * vglMousePresent, vglInitMouse, vglShowMouse, vglHideMouse, vglHideMouseIf, vglGetMouseInfo Simplistic mouse routines. Just enough to get you started. I'll add support for the rest of the mouse functions when I have more time. * vglPlayFLI C routine to play a .FLI file. Sorry, I haven't added support for .FLC files. This is fairly slow, but possibly still useable for title screens, etc. Where do I get it? ================== VGL's official home is on suncad.camosun.bc.ca in the /pub/morley directory. Look for a file called vgl20.zip. The demos in the archive assume that font files will be in a subdirectory called FONTS, so be sure and unzip it with the -d option! NOTE: VGL20.ZIP is zipped with PKZIP 2.04G If you have demos or games to send me, you can upload them to the same computer into the /incoming directory. Send me an note letting me know you've uploaded something, I don't remember to check it that often. Please help make VGL available to more people by uploading it to BBS's and other FTP sites. Thanks. How do I use it? ================ For details on how each routine works, you'll have to read the source files. The VGL library exists in the following modules: VGL.H The header file for all VGL routines. VGL286.ASM The 286 ASM routines for blitting, sprites, etc. VGL386.ASM The 386 ASM routines for blitting, sprites, etc. VGLPAL.C C routines for fading and cycling palette entries. VGLGIF.C C routine to load a GIF image from disk. VGLLINE.C C routine to draw a line using Bresenham's. VGLFONTS.C C routines to load and use bitmapped fonts. VGLKEY.C C routines to trap key presses and releases. VGLMOUSE.C C routines to use the mouse. VGLFLI.C C routine to play a .FLI file. To make use of the routines in a particular module, simply add the module to your makefile or project and link it in. Note that you don't *have* to include all the modules. If you don't need fonts, then don't link in VGLFONTS.C If you don't need to trap keystrokes, then don't link in VGLKEY.C You get the idea. NOTE: Some modules require others. Example: VGLFONTS.C uses routines in VGLx86.ASM and VGLLINE.C There are also a few demo programs (with source) to show you how to use the library. I apologise for the lack of decent documentation. I'm more than happy to try and answer any questions you may have, though. Special thanks to: ================== * Mike Asbury, who pointed out a way to speed up the inner loop of several of my ASM routines. The speedup isn't noticeable on my 486's, but it apparently makes a big difference on 386's. Thanks Mike! * Many others who sent me ideas and suggestions. I'm sorry I couldn't implement them all for this release. Maybe next time.