ѓјјј ђ ђ ѓѓѓјђјј GX2
ђ ђ ѓј ђ ђ The ultimative graphic unit for
ђ ѓѓ ѓјѓ ђ ђ Borland Pascal 7 (and soon FPC ;)
јѓѓѓђѓ ѓј јѓ ѓѓђѓђѓ b2
(c) 1998-2000 by Stefan Goehler
Comments Rev 0.55
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.goehler@gmx.de
My homepage SourceNET is accessable at this URL:
http://sourcenet.home.pages.de/
Please link my page only with this URL!
2. Release notes
The long awaited beta 2 release is finally here! With more features and
more stability!
GrafX2 is now named 'GX2' to avoid confusion with other, similar named
libraries.
GX2 allows now to load and use Windows TTF Font files, printing on
HP/Epson compatible printers is also no problem anymore.
Even more FX and speed!
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:
-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
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 (well, soon...)
These formats are only loadable:
. FLI/FLC (FLIC animation files, 8 bit, soon maybe 15/16/24)
5. Copyright for GX2
New copyright agreement, changes reserved
All these statements apply, if not explicitely stated different, on ANY
unit delivered with the GX2 package.
1st
You can use my units entired in your own programs. Ripping any code off
or using parts of the GX2-package somewhere else without GX2 is not
allowed without my permission. Exceptions:
.If you made any code for GX2, you are allowed to use this special kind
of code without GX2 and without my permission (just because it's your
work, not mine).
.You can get a license for parts of GX2, the respective author of such
a part will get a donation from you
2nd
GX2 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 GrafX 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.).
.You have to inform me if you use GX2 in any kind of commercial
software and every helping author of GX2 needs to get a free copy of
your product if he/she wishes to have one
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 GrafX-units or any derivates of them, except you put them
on some kind of shareware/freeware/sourcecode collection media and the
(sell price of collection medium)/(number of stored titles) is <= 0.5 US$.
4th
If not different stated, you aren't allowed use or spread any of the
delivered units single, you have to spread GrafX 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 GX2. If you
don't understand a part, feel free to contact me.
Please note that parts of this copyright agreement don't apply to the
printer unit gx_print. That unit needs to be licenced for commercial use.
Please have a look at the file's header or contact me for more details.
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.
One next thing may be also a gaming platform, called "Project 2" or
similar. It will contain a lot of needed things. Sound mixing, joystick
interface, data library access. But not for the nearer future as I can
really see the effort GX2 needs for its development.
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.
GrafX 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 GrafX 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 GrafX 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 20 years old and live near Rostock,
north-east Germany. I started programming with Turbo Pascal some years ago,
I think 5..6 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.
GrafX...
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!)
|