Clicky

Crossfire Designs
Back to mainpage
Change language
Send a mail About this site
Webdesign
Source code
Software
Art
Articles
Links
Image gallery

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]

Send a mail About this site