sourcecode/gx2.txt | |
Üßßß Û Û ÜÜÜßÛßß GX2
Û Û Üß Û Û The ultimative graphic unit for
Û ÜÜ ÜßÜ Û Û Borland Pascal 7
ßÜÜÜÛÜ Üß ßÜ ÜÜÛÜÛÜc
(c) 1998-2002 by Stefan Goehler
Comments Rev 0.6
Split up:
1. Contacting the author
2. Release notes
3. Sys requirements, incompatibility warnings
4. Features of GX2
5. Copyright
6. Plans for the future
7. Frequently answered questions
8. Hints and tricks
9. Information about the author, greetinx and thanx
1. Contacting the author
I'm reachable via Email at this address: stefan dot goehler at gmx dot de
My homepage Crossfire Designs is accessable at this URL:
http://www.crossfire-designs.de
Please link my page only with this URL!
2. Release notes
This is probably the last GX2 release. Sorry folks, DOS is dead. I'm
sorry to say that, it's not easy for me to give up, either.
Probably there'll be some new releases for Windows from me. I don't
know, time will tell...
3. Sys requirements, Incompatibility warnings
System requirements:
Minimum:
386, 2 Megs RAM, Vesa 1.2 card with at least 1 Meg mem
Recommended:
MMX machine (150 Mhz for fast and good FX), 16 Megs RAM, Vesa 2.0 or
supported card with >= 2 Meg mem
For the usage of GX2, BP7 is required. TP7 isn't supported as it doesn't
support Protected Mode.
Incompatibility warnings:
-WINDOWS 2000 & XP
GX2 does only partially work under these systems. Any larger images will
cause a system crash. This is due to an incompability in the DOS
emulation, which doesn't work with the GX2 memory management
-Vesa 1.0/1.1
On most Vesa Bioses below version 1.2, GX 2 doesn't work. This is
because most of them won't give out all required information about the
resolution. GX2 may support these old versions when it's in final
state, for now please install UniVBE/SDD or similar
-Some Matrox cards may have problems with LFB modes. I wasn't able to
encounter the bug yet, but I suppose (not only me) some of those cards
have a lousy Vesa2 BIOS extension
-Voodoo Banshee cards
The Vesa-BIOS of a heap of Banshee cards is the last crap you could ever
imagine! If you have a problem with such a card, try to retrieve and
load the newest Card-BIOS you can get for this card on the producer's
homepage
-EMM386
On most configurations under DOS with EMM386, GX2 won't run. This is
due to the 32-Bits memory tweaking which is used by the unit Newfrontier,
which is BTW freely available to everyone.
On my machine, this configuration works:
DEVICE=C:\WINDOWS\EMM386.EXE 4096 D=64 A=64 /verbose
Of course no warranty for that. If also this doesn't help, please work
directly under Win9x or under DOS without EMM
4. Features of GX2
Here a list of the current features GX2 provides:
. Full 32 bit capabilities, LFB/Vesa2+ support, NO 64K LIMIT!!
. handles even very large images - largest tested one was a
4200x2966 JPEG loaded at 32 bpp (47.5 Megs memory size!!)
. Flexible object oriented interface, allows virtual screens
at every supported BPP and every size (memory is the limit)
. Object oriented mouse unit, supports also virtual screens
as output
. Supports EVERY resolution supported by your card
. Source independent file reading/writing (load/save your images, fonts etc.
from/to disk/memory/libraries - whatever you want!!)
. Extended image drawing (converts color resolutions by fly,
addition, subtraction, alphamapping, xor/and/or, sprites)
. Switchable color dithering in 24/32 -> 15/16 conversion, allows
high quality image putting even in low color resolutions
. In alot of situations definitely faster than GrafX 1.x
. New font format - unlimited (memory-limited) amount of loadable fonts
. 63 included XFN-fonts! 26 of them are converted SMFonts by Remco de Korte,
10 of them are converted Borland CHR-fonts, rest are bitmap fonts
. supports Windows TTF font files
. Transparency effects (add/sub images, filled shapes and text)
. Better error checking for critical functions - 'built in' stability
. MMX capabilities - especially 24 and 32 bit modes are accelerated
this way, also some other things with 8/15/16 bpp work with MMX,
64 Bit memory moving/filling - get all out of your AGP-card!
. Damn fast color resolution converters (partially MMX)
. 70% of the ASM-code is end-optimized and delivers an excellent performance
. Antialiased line-, vectorfont-, circle- and ellipse-drawing
. Various FAST effects (rotation, blurring, fading, alphablending, upscaling)
. Full clipping of ALL functions
. printing on HP and Epson printers (free for non-commercial use)
. mouse hardware support, more than one mouse supported
. animation support
GX2 is able to load AND SAVE the following file formats:
. BMP (all uncompressed files)
. GX2 (GX2 internal uncompressed format, flexible, supports animation)
. JPG (all kinds, optimized loader - 2x faster than original)
. PCX (8,24 bit - extremely fast decompression)
. PNG (all kinds below and equal to 32 bpp, improved speed)
. GIF
These formats are only loadable:
. FLI/FLC (FLIC animation files, 8 bit, soon maybe 15/16/24)
5. Copyright for GX2
Copyright agreement, changes reserved
All these statements apply, if not explicitely stated different, on ANY
unit delivered with this package.
1st
You can use my units entired in your own programs. Ripping any code off
or using parts (unimportant if modified or original) of this package
somewhere else, e.g. in other packages, is not allowed without my
permission.
Exceptions:
þ If you wrote any code for the package yourself (meaning not modified
code), you are allowed to use this special kind of code yourself and
without my permission (just because it's your work, not mine)
þ You can get a license for parts of this package or the whole package,
the respective author(s) of such a part will get a donation from you
2nd
This package is Freeware, as long as the product which uses it, is Freeware.
You can use it freely in any kind of software which uses this and any of
the other delivered units with these restrictions:
þ You need to state the name of the package and also the names of the
authors who did their hard work in this product on an often seen place
of your product (intro/extro etc.).
þ THE COMMERCIAL USE IS NOT FREE. You have to contact me if you use this
package in any kind of commercial software, you need to get a license
for it
3rd
You are allowed to do modifications on my units. If they are useful, please
let me know what you've done and give me the modifications.
Modifications concerning the existence and/or modification of any
copyright/author/name statements are generally not allowed.
You are not allowed to publish modified units, you may only use them in
your own productions (where these sources aren't published).
Version publications are restricted to my person (Stefan Goehler).
Additionally, you aren't allowed to charge any money for the units or any
derivates of them, except you put them on some kind of
shareware/freeware/sourcecode collection media.
4th
If not different stated, you aren't allowed use or spread any of the
delivered units single, you have to spread the package with all files.
Spreading units single is only allowed if I gave you my permission or
the unit is yours and is not special licensed (see chapter 1).
If you don't agree with these statements, please erase this sofware.
If you don't understand a part, feel free to contact me.
6. Plans for the future
I cannot imagine anything better than GX2, so there will be nothing
more.... just kidding ;)
The main aim will be the conversion of GX2 to other platforms, like
FPC. Also, the main interface of GX2 has to be improved. It's not the
way OOP should work...
7. Frequently answered questions
Here a list of questions already asked alot or which I assume to be asked
alot:
Q: I can't compile GX2, I don't have the winapi.tpu! Can you please
send me that file?
A: This file isn't available as tpu, it's only available as tpp. This
means: if you have BP7, switch the compiler target to protected mode.
If you have TP7, forget it - you can't get it working! Don't blame me
then, it's already stated on my web-page that it's only for BP7.
BTW, BP7 itself contains this file in the tpp.tpl, so don't try to
find it ;)
Q: GX2 doesn't run. What can I do?
A: Please read part 3, incompatibility warnings. If there is nothing which
helps you, please contact me.
Q: I see, GX2 is damn fast, but sometimes I can really see that it's
drawing. Especially when I use alpha blending, filling with subtraction/
addition and antialiasing. Also circle and ellipse are fucking slow
without VESA 2.0 (only 1% of vesa 2 speed!!!). And my machine is really
fast.
A: That's a thing which almost every card has got a problem. Reading from
video memory has got in most cases only 10% of the writing speed.
GX2 already tries to get the maximum speed by accessing the video
memory with 32 respective 64 (MMX) bits - there's normally no way to
gain more speed on screen.
Try to do such slow things partially in memory. There reading is as
fast as writing.
To circle and ellipse: The algorithm, which is used when
drawing circles calculates only 1/8 of the circle (which is enough,
like you may see). This means for each calculated point we need to
set eight points. When no linear framebuffer is being used, we need to
switch very often the bank (via int 10h!!), so it's damn slow.
Q: How do I install the help file?
A: Start BP, click in the menu on '?', then on 'Install files' and then
select the grafx2.tph and click on 'OK'. After the next start you
can reach every help topic by the usual way.
Q: What is the best way to install GX2 into BP?
A: Make a sub-directory in you BP\BIN-directory, e.g. named with 'GX2'.
1st way, if you want to work in another directory (preferable):
Copy GX2 without its subdirectories into the created directory,
copy the subdirectories in the BP\BIN-directory.
Start BP, click on 'Options', then on 'Directories'. Write down the
name of the GX2-directory (e.g. 'C:\BP\BIN\GX2\) into your
units-path and your obj-path. Done.
2nd way, if you always wanna change into that directory:
Copy the whole GX2 with its sub-directories into that directory.
Q: How do I recompile all GX2-units?
A: I guess, your path of BP is C:\BP. If this isn't the case, type your
own path.
Type C:\BP\BIN\BPC /M/L /UC:C:\BP\UNITS -$G+ -$L- -CP GRAFX2.PAS
However, I recommend to install GX2 into a directory where you
keep it, like described above. BP will automatically recompile the
unit in this case, if required.
Q: What about W2k?
A: GX2 is able to run under W2k, but only in banked mode. Also, some
features of GX2 may hang the system. If you wanna make your program
W2k compatible, then use it as programming platform all the time to
find and avoid problems. If you got some experiences, please mail
them to me!
Q: Will GX2 support 3D functions?
A: There are some projects concerning about 3D-Support in GX2. I think
it will be supported soon.
Q: There are so much files for GX2. Is there no simple solution?
A: No, since GX2 is not dedicated to experimenting only, but also really
professional software and games, and no one-day-projects, I don't see
any reason to push all into one file. It's necessary to hold the
overview about all things. I cannot do that when all is in one crappy
file. If you don't know about these benefits, then maybe GX2 is
nothing for you.
8. Hints and tricks
Before anyone starts to ask such questions about the speed, I'd prefer to
write the answers once in this file.
. Use preferably 16 bpp
If you need more colors, but don't really need 32 bits per pixel, use
16. Because it's only the half of the data, some things may be partially
twice as fast.
If you want to use Hicolor, but don't know which of 15 or 16 bits per
pixel would be good, use 16 bpp. You get 1st the double amount of green
shades and 2nd most conversion routines with 16 bpp are slightly faster
because it needs one or even two cpu commands less per pixel.
. Use 32 instead of 24 bpp
Addressing the memory and putting out something is much slower in 24 bpp,
because we cannot use 32 bit commands, but we need to use one 16 bit
command and one 8 bit command. Also, 32 bpp are widely MMX-accelerated.
The implemented MMX-functions gain 50% more speed, in most cases even
more. There are alot of other facilities why to prefer 32 bpp. Everybody
who tried to program 24 bpp knows why.
. Use no screen paging, but memory buffers, when buffering needed
If you make use of alpha blending,subtraction or addition or you often
need to read from screen, use memory buffers (1 or 2) to gain more
speed (in some cases more than 10 times faster!)
. Use Bitblit for moving
If you need to move a rectangle on screen, use bitblit for it, if
hardware acceleration is available. This is really damn fast!
Also the software blitter is faster than a simple get/draw.
. Use images with the equal color depth where you draw them to. This
means if you have a screen color depth of 16 bpp, load images from
disk at this depth. This makes the image putting 2..4 times faster
(depending on CPU and GFX-card). For more details see gxmanual.txt,
chapter 2 (Handling images).
. Save PNG images with Paint Shop Pro
If you have the choice between PSP and Photoshop for saving PNG images,
choose PSP. It has got a more intelligent compressor which can compress
>= 24 bit PNG and greyscale images alot better than that one of
Photoshop. If you only have Photoshop, choose the PAETH-FILTER for
saving. This makes the files at least smaller than with the non-filter
option, but won't reach the results of PSP. The smaller the resulting
file, the faster the decompression!
9. Information about the inventor, history, greetinx and thanx
The inventor...
Yea, well, there was something...
My name is Stefan Goehler, I'm 21 years old and live near Rostock,
north-east Germany. I started programming with Turbo Pascal some years ago,
I think 6..7 years. Now, I'd say, I know almost everything about it, and
as you may see, I try to get the best out of it.
GX2...
The real first GrafX was simply called 'Graphics', and was an additional
unit for the BGI. It began somewhere in summer 1996 - I had a program for
a competition, but I disliked the speed of scrolling a text in graphical
mode, besides that it flickered damnly. So I began trying to work with
VESA. The first thing was a 4 times faster putimage, next toppers followed.
When I began with Tetris, I had some conflicts with the bankswitching of
the BGI and my unit, so I finally did the last important thing for my unit:
the vector font output. After some optimizations, it was around three times
faster than the outtextxy of the BGI.
In summer 1997, I had a (internet-)chat with a girl, which I already knew
for some time. She encouraged me to do my own homepage, and after 3 weeks
with alot of tries, I finally uploaded on August the 8th 1997, my first
homepage. Now, after more than one year, we still mail each other, just
chatting is almost impossible, because I have alot longer school a day
than in that time.
GrafX grew and grew, became better with the time. Some day, I became a mail
from a guy who used my unit in his graphical interface. This was more or
less the breakthrough of GrafX - with his GUI, really almost EVERY bug got
discovered. It was version 1.3, which was the result of this time. It was
the most bugfree and most stable version of GrafX1.x ever had! After that
GrafX 1.4 followed, but it got not finished - I worked parallel on GrafX
1.4 and GX2. Now I got the intention about making GX2 full Freeware,
everybody who wants to, can help making it better. I think it was the right
idea, persons which I told this idea, responded only positive.
Thanx...
I'm sure this isn't the complete list, but there's still time to enlarge it
before the final version ;)
Thanx fly to...
þ All testers and helpers,
þ Martin Beck for writing the PNG-saver and spending his time to find bugs,
þ Sandra Below, my ex-girlfriend and also her twin sister Doreen,
þ Johannes Bialek for introducing me into deeper OOP programming,
þ Hristo Chilingirov for giving me some ideas about the driver model,
þ Arno Fleck for writing this TP-helpfile for GX2,
þ Remco de Korte for letting me include his SMFonts into GX2,
þ Thomas Schatzl for lending me his cpu-unit to be part of timebase,
þ Alexander Smirnov for giving me his CHR-unit to write a CHR to XFN-
converter,
þ ArsŠne von Wyss for giving me some hints and ideas,
þ Maarten van der Zwaart for writing the gif-loader,
þ S3 for sending me manuals on their chips (there are alot of producers
which simply ignore people like me!)
| | [Back] |