From: bwilliam@iat.holonet.net (Bill Williams)
Subject: Re: Curves in QuickDraw GX
Organization: HoloNet National Internet Access BBS: 510-704-1058/modem
 
 
Date: Wed, 23 Dec 1992 06:12:38 GMT

From the center of my handwritten notes regarding Quickdraw GX as presented
at Apples May 92 WWDC....
 
"The spline routines are used with inset and an outset values to create 
"fat" splines, the two outer edges are different splines (derivitive 
curves) that approach cubic order complexity, but are not, and can be
 converted back to the original very quickly (Rob Johnson, a math prof
 from UCLA invented fast transformation algorithms for all QD GX spline
 calculations, and is now an apple QD GX contributor)"
 
 
For those interested heres a bunch of my other observations as recorded that
week intact and without changes......
 
 
 
Beyond QuickDraw : the next generation in imaging
Given by Cary Clark - graphics team leader and author of color fonts, and
old 3D quickdraw.
 
The introduction of several discussions of Apples COMPLETE REPLACEMENT of
QuickDraw with a near clone of Adobe DisplayPostscript called QuickDraw
GX. Its code name was Skia ("Skee-ah"). It is a geometry (object) based
graphics model.
 
It is nearly finished and will be available three different ways (end user
$$, distributable license, and eventually free inclusion in a future
system release).
 
Wow, wow, wow. It is definitely NOT as fast as display postscript, but in
many ways it seemed faster. Work started in 1988 before DisplayPostscript
was shown publicly. It is of course completely device independent, and its
output files when printing, even after customization for a specific device
at spool initiation ARE DEVICE INDEPENDENT AT ALL TIMES. Final printed
output devices may be raster devices, vector devices (plotter) or
Postscript devices.
 
No words or tokens are used in the imaging model, there is no server
level, instead it appears as good-old-fashioned quickdraw to a normal
programmer except that all geometries are based on 32 bit values and
sometimes 64 bit values. (A fixed point is assumed when some values are used)
 
Unlike DisplayPostscript floating point values and computations are NOT
used. This is a negative trait. 
 
Also unlike postscript, YOU MAY NOT SEND CODE OF ANYKIND TO THE OUTPUT
SPOOLED IMAGE. Thus the author of "Jag" was told that his anti-aliasing
product has no value because the effects of his product EXCEPT AS DEVICE
DEPENDENT BITMAPS cannot be sent through the spooler and therefore should
not be integrated into QD GX. The reason: THE GOAL OF QD GX IS TO MATCH
THE SCREEN TO THE PRINTED OUTPUT. No code encapsulation is permitted. This
is a good intention, but not providing spoolable code (as with PostScript)
is a negative trait. 
 
Like DisplayPostscript, QD GX is a single pixel color model, and
anti-aliasing and ramping is not supported. This is not to be confused
with the pleasing types of blending fills that it does support.
 
 
You may mix Quickdraw commands interspersed with QuickDraw GX without too
much effort. Unfortunately, if you do, you must be careful to use a CASE
SENSITIVE LANGUAGE such as Modula-2, C, C++ because there is a RPointS and
a RpointS as well as QuickDraws RRectS and the new QuickDraw GXUs RrectS.
Though on one slide I saw the word RrectangleS instead of rect, so I
assume in Pascal they have a RgxPointS and a RrectangleS redefinition.
 
It does everything that display postscript does and a few extra things
(such as placing pictures at joins of two lines).
 
It has the AMAZING benefit of using the highly optimizable quadratic
spline for all curve and path operations. Though it cannot draw a circle.
(I am not joking, strictly speaking, MANY of QuickDraw GX primitives are
actually "libraries" outside of the lower lever QuickDraw GX.) I think
drawcircle is a library routine. The spline routines are used with inset
and an outset values to create "fat" splines, the two outer edges are
different splines (derivitive curves) that approach cubic order
complexity, but are not, and can be converted back to the original very
quickly (Rob Johnson, a math prof from UCLA invented fast transformation
algorithms for all QD GX spline calculations, and is now an apple QD GX
contributor)
 
I got the feeling that "shapes", not paths or spline derived curves, were
used for all of the very fast animated demos presented  (50 demos). I
believe that "shapes" do NOT possess splines but rather are decomposed
curves defined solely of small straight line segments. This is for speed
speed speed. The programmer gets to define the segmentation parameters used.
 
Shapes are defined by fixed point, to prevent degradation after any series
of permanent transformations.
 
The system supports a three-D transformation matrix with many library
routines to help set the matrix parameters. Two values in the Matrix are
unconventionally used for storage of variables meant for perspective
distortion. (QD GX has no three dimensional routines, and the
unconventional usage does not affect the non-existent "z" data)
It has tons of layered transformation matrices at many layers before the
final image is drawn and seems at most times to be a full blown 3D imaging
model... but it isn't.
 
The matrix routines support fast skew, distort, and rotation (including
bitmaps)
 
Patterns are now two parts, pattern data and "color shade" are separate
identities.
 
There are still no pixel locations in QuickDraw, points have always been
an abstraction and still are.... but programmers must be cautious to shift
all position info to convert all points into fixed point math to avoid
unwanted locations.
 
The new more accurate pixel locations allow much more exact vector line
rotation even on 72 point monitors. The effect needs to be dynamic to
discern the enhancement though.
 
It supports compressed "infinite-precision" BitMap regions, very nice
results were obtained in the demos.
 
TrueType and Adobe type 1 fonts (under ATM) are EXACTLY EQUAL in usage in
QD GX, neither has any preferential treatment in ANY WAY.
 
Font families have meaning now in the menu interface (like Adobe's Type
Reunion already does)
 
The new font support is almost as complete as postscripts with some
amazing differences. Primarily the ability to use different fancy fonts
based on the characters adjacent to the font. Some astoundingly beautiful
effects were shown with a slightly altered Zapf Chancery. Letters on the
ends of words had bold sweeping flourishes, and capital letters at the
beginning of words had long sweeping tails under the adjacent characters.
WOW. Apple said they are commissioning a company to create a special "Old
English" font for them.
 
A new Adobe Illustrator (version NIA 3.2) was shown that swapped back and
forth between QD and QD GX. It had a GODDAMN STUPID PREVIEW MODE as it
always has on systems that do not have built in display postscript,
because of the nature of the program. The absolute horrifying restriction
was only observed by me and other people that may have seen the
"No-preview-mode-crap" NeXT version of Adobe Illustrator. Man, what an
application not to show as a demo!
 
QD GX is a large set of different new technologies, especially for
printing. A kinder gentler series of major changes in printer interfaces
would make most people very happy. It is MUCH less cluttered, and far more
restricted without probing. A control panel much like system 6's "general"
is used to access third party extensions. In fact it is so simple a new
menu item is defined by apple called "Print One Copy". Note the lack of
"ellipses" (...). That's right it does what it says no questions asked.
The audience clapped.
 
A printer "Finder" was created to manage spooling. It has as many features
as the real finder in several ways. Plus it appears to be part of the
Finder. WOW.
 
Plotters are supported.
 
Hit detection for mouse clicks as well as animated object collision is a
major part of QD GX. Including accurate hit detection after all those
layers of skewing, distorting, rotating, etcetera.... WOW. This is even
better than the NeXT (one of the NeXT's few limitations from what I recall
is a "lighter" hit detection system.
 
Multiple color spaces are supported (even within one image!!!!!!!!!)
 
It supports all the cool stuff color Postscript (2) does for dithering,
screen rotation (arbitrary angles), etc. 
 
It supports viewports in a VERY ABSTRACT MANNER. a port can be a three-d
is view any where in a space and can be displayed in a arbitrary shaped
region anywhere on a device including MULTIPLE VIEWS OR THE SAME SCENE AT
THE SAME TIME. The multiple views can all have different color depths and
pixel resolutions, and dithering, and screening, and be somewhere on the
same device!
 
Unlike postscript it supports RTL LTR and vertical languages, unlike
Postscript it can be used to support indic and arabic languages where the
characters change dramatically based on there position and neighboring
glyphs. Arabic, Chinese and others where shown.
 
Like Postscript, the fonts can be filled, set on paths, stretched, etc.
etc. etc. Including bizarre text effects as seen with many Postscript
programs.
 
Users can specify weights directly in their applications (make it 10%
bolder, etc.)!
 
Oliver Steele wrote some AMAZING high speed graphics demos that showcased
QD GX and two of them,  "deflection angle" and "velocity lines" are
definite collector items.
 
Like postscript, a path drawing a line cannot be truly "dashed". Like
postscript the beginning and the ending of a path can have special
endcaps. Endcaps are allowed to be "negative" (erasing)
 
QD GX supports multiple monitors. Apple acknowledged that Radius invented
multiple monitor drawing first, not them or anyone else in the industry.
 
You cannot crash QDGX when its many many debugging options are enabled. 
 
QD GX uses ZERO BYTES OF APPLICATION HEAP and stores all its structures in
its own very special heap structures. It uses almost no Macintosh
routines. It does not ever use the memory manager. It cannot run out of
memory if disk space is available.
 
Disk is used as memory FOR ANY AND ALL OPERATIONS! QDGX can work on
immense bitmaps, far larger than supportable in RAM. Sadly, Cary Clark
calls this "backing store" instead of "virtual memory" because he likes
anal retentive 1967 IBM mainframe buzzwords.
 
QD GX has a special debugger, BUT THEY WERE NOT ALLOWED TO SHOW IT. Odd.
very odd.
 
No recalculations are made in QD GX, it has lots of optimization
strategies of all kinds (as does display postscript) but unlike its
competitor, it can warn the user if wasteful code is being generated. Plus
it never calculates any intermediate variable that is not eventually
actually needed! If true I am impressed! It would be almost psychic-ware.
 
It runs (theoretically) in system 6, but needs 7.0 for printing of any kind.
 
The famous QD pattern scrolling bug (user preference?) is now selectable
by programmer, patterns can be fixed or positional.
 
No assembly (very little) is used. Because they are greedy opportunistic
pigs that are thinking of saving time porting it again and again
naturally, but I feel that when 250,000 Motorola boxes from Apple ship per
month they can afford to hire a few real programmers. GEEZ! Never in my
life have I heard someone brag that almost none of their GRAPHICS ROUTINES
are written in assembly.
 
 
MAJOR LIMITATION: all views and bitmaps based on pixels can have more than
32K pixels per square side. EVER. But amazingly, QD GX will "butt-end"
giant bitmaps through the system and accurately align and join them (even
through translation, and distortion) so that you can extract and
manipulate portions of them. In effect an INFINITE SIZED bitmap can be
processed. (A satellite imaging company in the audience asked the question
because all their photos have more than 32,000 pixels per side!)
 
Source code was handed out. An unprecedented amount of libraries and
source code will be available before and after QD GX's debut.
 
============================================================
 
 
Whew! I have countless other pages of opinions and rambling drivel
covering many other sessions at the WWDC written in the same manner if
anyone is interested in my remarks on other Apple technologies.

Bill Williams (NOT familiar with QuickDraw GX yet)