Fetching contributors…
Cannot retrieve contributors at this time
783 lines (682 sloc) 36.8 KB
0179 core
X screenWidth/Height instead of screenW/H
X open up the pdf library more (philho)
X cache font information for the PDF library to improve setup time
X when using createFont("xxxx.ttf"), should use textMode(SHAPE) with PDF
X because ttf files will not be installed on the system when opening pdf
X added error messages for users
X bring back old-style textAscent()
X needs to just quickly run characters d and p
X only takes a couple ms, so no problem
X pdf library
X throw an error with the black boxes
X throw an error if loading fonts from a file, and not using mode(SHAPE)
X implement default font
X this can be done to replace the exception handler in PGraphics
o however it needs to be a legit font, so that it works w/ pdf
o or maybe pdf just has its own default?
X create characters on the fly when createFont() is used
o memory leak problem with fonts in JAVA2D
X can't get this to crash anymore
X if no draw() method, and renderer is not displayable, then exit
X static mode PDFs shouldn't just hang
big ones
_ ortho() behaving differently in P3D vs OPENGL
_ shows a blank canvas
_ (was only happening once b/c was drawing first in perspective)
_ seems to be mapping to 0, 0 - width/2, height/2
_ fix 3D > OrthoVsPerspective example once ortho works properly
_ there's a depth problem in addition to the ortho weirdness
_ modelx/y/z broken when aiming a camera
_ opengl + resize window => window content garbled
_ modify PVector to include better methods for chaining operations
_ img.get() weirdness
_ copy and blend scale when unnecessary
_ add a limit to pushStyle() to catch unmatched sets?
_ P2D transformation bug from ira
_ resize not working in revision 5707
_ camera() and perspective() were commented out in setSize()
_ chopping out triangles in OpenGL (though it's only 2D drawing)
_ make sure that get() and set() (for pixels and subsets) work w/ loaded images
_ make sure that get() and set() (for pixels and subsets) work w/ P2D
_ make sure that get() and set() (for pixels and subsets) work w/ P3D
_ consider adding skewX/Y
_ do them as shearX/Y
_ add setOutput() method across other renderers?
_ opengl applet problems
_ method of threading but queue an event to be run when safe
_ e.g. queueing items like mouse/keybd, but generic fxns
_ inconsistent anti-aliasing with OpenGL
_ modify PVector to include better methods for chaining operations
_ selectInput() fails when called from within keyPressed()
_ add (and Writer?) to imports
_ changing vertex alpha in P3D in a QUAD_STRIP is ignored
_ with smoothing, it works fine, but with PTriangle, it's not
_ smooth() not working with applets an createGraphics(JAVA2D)
_ but works fine with applications
_ get() with OPENGL is grabbing the wrong coords
_ gl power of 2 with textures
_ P3D also seems to have trouble w/ textures edges.. bad math?
_ No textures render with hint(ENABLE_ACCURATE_TEXTURES)
_ need to remove the hint from the reference
_ need to throw an error when it's used
_ deal with issue of single pixel seam at the edge of textures
_ should vertexTexture() divide by width/height or width-1/height-1?
_ key and mouse events delivered out of order
_ key/mouse events have concurrency problems with noLoop()
_ need to say "no drawing inside mouse/key events w/ noLoop"
_ redraw() doesn't work from within draw()
_ make the index lookup use numbers up to 256?
_ decide whether to keep:
_ public float textWidth(char[] chars, int start, int length)
_ textAlign(JUSTIFY) (with implementation)
_ Semitransparent rect drawn over image not rendered correctly
_ should map() actually constrain to the low and high values?
_ file chooser fails with opengl on linux
_ resizing opengl destroys context and textures
_ what's the difference with ascent on loadFont vs. createFont?
_ noCursor() doesn't work in present mode
_ in P2D, two vertex() line calls with fill() causes duplicate output
_ works fine in other renderers, has to do with tesselation
_ extra triangles being seen in P2D
_ noloop ref even says that redraw will be called on resize, make sure it is
_ public PImage(java.awt.Image) sets format to RGB (but could be ARGB)
[ features ]
_ add version of math functions that use doubles?
_ what other methods should work with doubles? all math functions?
_ seems like internal (mostly static) things, but not graphics api
_ look into replacing nanoxml
[ known problems ]
_ OPENGL sketches flicker w/ Vista when background() not used inside draw()
_ Disabling Aero scheme sometimes prevents the problem
_ Updating graphics drivers may prevent the problem
[ need problem sketch ]
_ if too many errors come through during setup, app will terminate
_ printStackTrace() throttles on osx and poops out
_ seen especially on old mac laptops (slow ppc garbage)
_ can this be confirmed properly?
_ * this may just be an OutOfMemoryError happening
[ needs verification ]
_ Frame skipping with processor intensive applets using 1.6
_ may be fixed, but not verified
_ focus not coming through, ESC no longer working(?)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
createGraphics() and load/updatePixels() mess [1.0]
_ text characters showing up as opaque rectangles in tga files
_ solution is to implement alpha compositing across all of P3D
_ text() not setting zbuffer in P3D because not fully opaque
_ alpha not set on saveFrame, so can't be used in photoshop as a layer
_ when drawing into a JAVA2D surface, have to call loadPixels()
_ to draw it later with P3D (or OPENGL prolly)
_ an offscreen JAVA2D graphics needs loadPixels() before being drawn
_ i.e. offscreen JAVA2D, then image() with OPENGL renderer as main
_ needs to be marked as its cache needs an update, but not its pixels
X begin/endPixels.. change has been made
_ on PImage, sets a flag that marks it to be updated on next render
_ for PImage, begin after an end is ignored, no pixels are re-loaded
_ the "changed" bit gets turned off when the PImage is rendered
_ for subclasses of PGraphics, the reload bit needs to be set on endFrame
_ filter() checks to see if inside begin/endPixels, if so doesn't call
o if line() is called inside beginpixels, call updatepixels?
_ when NPE on line with pixels[], suggest user includes beginPixels
_ need to test/straighten out load/update pixels
_ loadPixels() and updatePixels() only need to be used when
_ touching pixels[]. All other functions including get(), set(),
_ filter(), etc shouldn't need them.
_ image memory use.. how to handle lots of images
_ need to figure out exactly how they should/can unload
_ don't do a loadPixels unless an updatePixels has completed
_ tho this won't affect anything, since either it's an image buffer
_ or it's the PGraphics object, which does an updatePixels() immediately
_ if (modified) don't loadPixels again, just ignore it
_ make a note that updatePixels() only sets a flag in PImage
_ (but not PGraphics, which does it immediately)
o filter() doesn't need a loadPixels
o but if you want to filter *and* mess w/ pixels (avoid double load)
o then do loadPixels() /before/ filter, and updatePixels after messing
o same will go for blend()
_ make sure that filter, blend, copy, etc say that no loadPixels necessary
rework some text/font code [1.0]
_ text placement is ugly, seems like fractional metrics problem
_ text(char c) with char 0 and undefined should print nothing
_ perhaps also DEL or other nonprintables?
_ book example 25-03
_ text position is quantized in JAVA2D
_ accessors inside PFont need a lot of work
_ osx 10.5 (not 10.4) performing text width calculation differently
_ Automatically use textMode(SCREEN) with text() when possible
P2D, P3D, PPolygon [1.0]
_ smoothing
_ how to handle smoothing images in P3D even though it has no smoothing?
_ noSmooth() in opengl should switch to nearest neighbor on textures/images
_ same for P3D
_ P3D smooshes the top row of pixels when drawing text (or images)
_ textAlign(CENTER) with P3D and OPENGL produces messy result
_ probably rounding error with the images
X textures truly did get worse in P3D
_ problem is that bilinear is turned on by default starting in 0124(?)
_ when turning smoothing on, internal lines of shapes are visible
_ add an edge flag when tesselating
_ mind the opengl tesselation flags
_ need to turn off smoothing for the interior of shapes
_ Implement support for complex shapes when using P2D and P3D
_ Implement support for complex shapes when using the OpenGL renderer
_ in opengl mode, use its tesselator
_ because the vertex calls can just come right back to regular vertex calls
_ this way we can also implement breakShape() for opengl
_ smooth in P3D has zbuffer glitches
_ smoothing is slow
_ textured sphere example needs to set normals
_ also needs fix for last edge and the seam
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
threading and exiting
_ writing image file (missing a flush() call?) on exit() fails
_ lots of zero length files
_ saveFrame() at the end of a draw mode program is problematic
_ app might exit before the file has finished writing to disk
_ need to block other activity inside screenGrab until finished
_ for begin/endRecord, use a piggyback mechanism
_ that way won't have to pass a PApplet around
_ this has a big impact on the SVG library
_ in fact, this maybe should be a library that does it
_ so that the file size can be much smaller
_ STROKE_WEIGHT field in PGraphics3 is a disaster, because it's an int
_ use the SW from vertex instead.. why set stroke in triangle vars at all?
_ currently truncating to an int inside add_line_no_clip
_ need to clean all this crap up
stop() mess
_ double stop() called with noLoop()
_ stop() not getting called
_ major problem for libraries
_ and start() is supposedly called by the applet viewer
_ need to track this stuff down a bit
_ when closing a sketch via the close box, make sure stop() getting called
X found a problem for release 0133
_ test to see if it's working
_ what's up with stop() vs exit()?
_ need to get this straightened for p5 (i.e. bc has this problem)
_ make sure the main() doesn't exit until the applet has finished
_ i.e. problem with main calling itself multiple times in Alpheus
_ if exit() (or stop) is called, then System.exit() gets called,
_ even though the main() wants to keep going
_ more chatter with this
CORE / PApplet
_ PApplet.main(new String[] { "classname" }) won't pass in args
_ this means that no args are after passed to the class
_ the fix would be to use the following as the call to main()
_ PApplet.main(append(new String[] { "classname }, args));
_ figure out why 1024x768 image takes 3.5 seconds to load
_ would using a BufferedImage work better?
_ is the image actually a BufferedImage so PixelGrabber is a waste?
_ detect when using full screen
_ and if so, remove decoration and don't bother with bg present frame
_ frame.setUndecorated(true);
_ frame.setLocation(0,0);
_ size(screen.width,screen,height);
_ this will help for exported applets that don't need 'present'
_ check for what else inside PApplet should be static
_ maybe catch RuntimeExceptions in the called sub-functions
_ that way more stuff can be static w/o losing useful error handling
_ (emitting errors when closest to source.. i.e. w/ the filename)
o size() inside draw is missing a new call to cameraMode, etc
_ fix param() to use a file when run as an app
_ make this also be used in generating the html file
_ test winding polygons in different directions
_ test P3D lighting to see how it compares with native OpenGL
_ ed's thread re: fullscreen strategies
_ could add a new BApplet that uses BufferStrategy?
_ size() has memory limitations (pitaru)
_ catch OutOfMemoryError inside size() and let the user know
_ loadBytes() needs optimization
_ don't bother using a buffering stream, just handle internally. gah!
_ remove some of the bloat, how can we make things more compact?
_ i.e. if not using 3D, can leave out PGraphics3, PTriangle, PLine
E4 _ add shuffle methods for arrays
E4 _
CORE / PApplet - main()
_ refactor PApplet.main() and Runner.startInternal() to remove duplication
_ implement full screen mode.. this takes over the screen as best it can
_ size(screen.width, screen.height, OPENGL);
_ if size is screen.width and screen.height, does its best
_ needs to get the size of the main screen
_ this probably works but just needs to be tested
_ exceptions in full screen mode will quit the app completely
_ can't keep window open because things are hosed
_ default is that full screen app doesn't cover multiple displays
_ this is fine since opengl can't usually go across both
_ but include an example for how to use full in gl
_ ability to select monitor via preferences panel
_ this applies to any applet that's run externally currently (verify)
_ make it also work with anything that's run inside of p5 itself
_ this means changing the frame creation code inside Runner
_ check current present code with multiple monitors
_ hitting cmd-q when an applet is running quits p5 (on macosx)
_ but cmd-q when running externally is ok because it just quits
_ is there a way to catch cmd-q when running a sketch?
_ so that it could avoid quitting if the sketch hasn't been stopped
_ or if the sketch window is foremost
_ maybe a hack where a new menubar is added?
_ --display not working on osx
_ "Target VM failed to initialize" when using Present mode on Mac OS X
CORE / PFont and text()
_ improve font metrics
_ font encoding issues
_ java seems to force straight windows encoding.. (problem for pi fonts)
_ opentype/cff fonts don't work with live loading from the app
_ many (all?) opentype fonts won't show up or aren't supported
_ this may be only cff fonts that have trouble
_ when encoding is not the standard encoding, problematic
_ so sonata otf and sonata don't seem to have any chars at all
_ text() with a z coordinate is now using translate, very slow
X also puts up a weird error message about translate() in 2D mode
_ make screen space fonts use get/set as well?
_ too much to debug on their own
_ unfortunately tint not set with setImpl, but...
_ optimize textMode(MODEL) with textMode(SCREEN)
_ in PGraphics and PGraphics3, check to see if matrix is within epsilon
_ of one of the rotation matrices (many fewer steps)
_ if identity, or just translate, or a rotate, make OBJECT into SCREEN
_ not having kerning really blows
_ could this be pulled from the OpenType font stuff?
_ it could be placed at the end of the file
_ not having fractional widths on small fonts really blows
_ screen space text looks crappy
_ working with vector fonts?
_ need to be able to handle shapes within shapes (reverse winding)
_ ftgl: main code is in FTVectoriser
_ uses gluTessBeginContour and gluTessEndContour
_ and then does 5 step sizes for each curveto
CORE / PGraphics
_ stroke showing above fill when used with P3D
_ strokeCap() and strokeJoin() for use with P2D, P3D and OPENGL
_ y2 position of rectangles not same as y2 position of lines
_ happens when the rectangle is flipped on the x or y axis
_ probably a hack that draws the "last" point differently
_ beginShape()
_ better lockout inside beginShape() to keep other things from happening
_ don't allow you to draw stroked items unless stroke() is called
_ don't allow beginShape() if shape is already set
_ (otherwise will cause some very strange errors)
_ lines
_ z value hack for lines is causing trouble for 2D
_ rewrite line and stroke code, it's a buggy mess
_ lines become 2 pixels thick after a 3D transform
_ better handling of single-pixel special case
_ flat_line_retribution is a hack, can go away
_ fix-up the curve_init() and the rest to use matrices
_ and not have ugly names (i.e. just g.curveDetail is good)
_ ellipse scaling method isn't great
_ toxi ellipses don't adapt properly with transformations
_ weird ellipse bug with an alpha line in same image
_ scaled ellipse showing up as a hexagon
_ problem with the fill
_ z values not set properly on ellipses?
_ ellipses are just plain ugly
CORE / PGraphics2D
_ should noSmooth() disable image smoothing consistently (does for Java2D)
_ may need to bring back a hint, or use smoothMode() or smooth(IMAGES)
_ lines are conflicting with type in 2D
_ mgorbet stroke transparency problem
_ make sure line() commands don't try to have a fill
CORE / PGraphicsJava2D
_ some optimizations from zach
_ textMode(SCREEN) needs to be faster
_ need flat image implementation that takes no transforms
_ along with 90, 180 and 270 versions of it as well
_ tie to glDrawPixels.. how to clear matrix properly for that?
_ maybe just disable this for JAVA2D cuz it's silly?
_ catch
CORE / PGraphics3D
_ make thick lines draw perpendicular to the screen with P3D
_ ewjordan suggests building the quad in screen coords after perspective
_ improve hint(ENABLE_DEPTH_SORT) to use proper painter's algo
_ polygon z-order depth sorting with alpha in opengl
_ complete the implementation of hint() with proper implementation
_ gl alpha on images when flipped around backwards
_ will sorting based on depth help this? also ask simon for ideas
_ need to merge sorting/drawing of lines and triangles
_ lines will occlude tris and vice versa
_ will need to split each based on the other
_ sort issues will affect both
_ images are losing pixels at the edges
_ odd error with some pixels from images not drawing properly
_ clipping not implemented
_ things are flying into the camera and halting apps
_ NullPointerException apparently when things way offscreen
_ i.e. glyphrot with scale set to 4
_ or at least that things get ridiculously slow
_ clipping issues here.. but also something in scan converter
_ not clipping areas from offscreen
_ huge geometry slows things way down
_ Stroking a rect() leaves off the upper right pixel
_ box is not opaque
_ problem is that lines are drawn second
_ one pixel lines have no z value.. argh
_ bug re: 3d depth sorting on lines
_ translate(58, 48, 0);
_ rotateY(0.5);
_ box(40);
CORE / PImage
_ accuracy problems make alpha channel go to FE with image.copy()
_ improve blend() accuracy when using ADD
_ includes code for a slow but more accurate mode
_ for a PGraphics2D, should its image cache object be the memoryimagesource?
_ loading lots of images is a problem, describe how to unload
_ is it possible? necessary to call delay(5) or something?
_ don't grab pixels of java2d images unless asked
_ this is the difference between a lot of loadPixels() and not
_ so important to have it in before beta if that's the change
_ add ability to control jpeg compression level with save() and saveFrame()
_ or just write a better example for this one?
_ when drawing an image, sense whether drawn rotated
_ specifically, if drawn rotated 90 in either direction, or 180
_ if just rotate/translate, then can use SCREEN_SPACE for fonts
_ updatePixels() is slow to create a BufferedImage
_ therefore the incomplete rendering
_ could this be an issue fixed by a MediaTracker?
CORE / PShape
_ we can do hit testing (at least in 2D) now that we rely on java2d
_ for subclasses, make it easy to grab the structure of vertices
_ actually, just use PShape internally and this will be easier
_ for PShape, need to be able to set the origin (flash people)
_ breaking up classes / figure out how to handle fonts subclass
_ when using get(), reset the bounds for the objects
_ otherwise it's always relative to the original document
_ support for text (shouldn't be too bad, use createFont)
_ implement text spans for svg output
_ get entity tags working in xml library
_ try enabling blending modes
_ add better support for attributes buried in styles (support ai9/10/11)
_ test what happens when transparency is used with gradient fill
_ look into transformation issues... guessing this is probably wrong
_ this may be what's throwing off the radial radius transform
_ implement A and a (elliptical arcs)
_ check for any other pieces of missing path api
_ multiple sets of coordinates after a command not supported
_ i.e. M with several coords means moveto followed by many linetos
_ also curveto with multiple sets of points is ignored
_ document somehow.. svg viewer will be discontinued
_ set the application name to sketch name (not processing.core.PApplet)
_ System.setProperty("", ...)
_ -Xdock:name=<application name>
_ -Xdock:icon=<path to icon file>
_ first line of applets is missing on java 1.4+ on the mac
_ cursor() broken in applets on macosx?
_ or is it a java 1.4 versus java 1.3 problem?
_ switch to glWindowPos() instead of glRasterPos() silliness
_ implement setImpl() instead of set() inside PGraphicsOpenGL
_ use glCopyPixels() or glReadPixels() instead of copy() method
_ implement a more efficient version of blend()
_ copy() does not update the screen with OpenGL
_ set() requires updatePixels() with OpenGL
_ first few frames of OpenGL sketches on Windows run slowly
_ updatePixels wth OpenGL requires a lot of memory, need better texture update
_ with opengl optimizations via call lists..
_ watch out to make sure raw recording still works
_ (optimizations will have to be disabled to some extent)
_ look into using glu quadrics to handle shape geometries quickly
_ optimizations to opengl
_ disabling error reporting (what's taking it so long?)
_ maybe use a hint() to enable it? or a getError() function?
_ make cached display list of filled/non-filled ellipse.. rect.. etc
_ these don't work when the vertex colors change, but..
_ or maybe should be using vertex arrays?
_ maybe break out a separate timage object in textures?
_ needs tindex and tbuffer, both gl specific
_ and for tpixels and twidth/theight, could use another PImage
_ under assumption that most will just need an extra image object
_ this could also be used by people eventually to control tex themselves
_ or maybe call the object "texture"?
_ in opengl lib, need beginTexture(PImage) and endTexture()
_ this will be helpful to have access to the raw texture data
_ that way it can be re-bound by itself, and ppl can write directly to it
_ make textMode(SHAPE) faster in opengl
_ cache for type should be per-renderer
_ make the opengl textmode shape stuff get better and use PShape
_ because opengl needs vectors, but also the image cache for textures
_ opengl needs to shut itself down properly when closing applet
_ otherwise can crash the whole browser
_ get rid of some of the sillier IntBuffer stuff where it's not needed
_ use the version of the prototypes that use an offset into the array
_ need to test performance either way
_ make a note about the anti-aliasing types in the faq
_ polygon vs line etc.. may want to enable lines but disable polys
_ invocationtargetexception in gl with aioobe:
_ resolve ARGB versus RGBA versus just A issues for fonts
_ make sure that current scenario works identically on mac
_ if so, just switch the image code to expect alpha in the high bits
_ fonts probably need to be RGBA, not ALPHA style images
_ there's nothing really ALPHA about them?
_ bit shifting in opengl, get down to 2 ops by using other image modes
_ i.e. ABGR_EXT might allow for just two shifts instead of 4
_ allow access to native pixel buffer in opengl and power of 2
_ so that no need to copy/update everything
_ how to handle gluTessVertex calls
_ need to re-map through the regular "vertex" command,
_ but that makes things messy because the glu calls make calls to vertex()
_ and i don't want an additional "pathVertex()" function
_ pdf not rendering unicode with beginRecord()
_ pdf sketches exiting before writing has finished
_ people have to call exit() (so that dispose() is called in particular)
_ when using noLoop() and the PDF renderer, sketch should exit gracefully
_ because isDisplayable() returns false, there's no coming back from noLoop
LATER / Optimize
_ put a wrapper around InputStream returned by createInput
_ that actually has some notion of the length of its input
_ that way, methods could use the information when reading
_ can loadBytes() be improved by querying file size first?
_ background
_ this would require a new version of createInput(), which would query
_ the URL (or file) for an actual file size. the size is not always
_ available, so it can't be relied upon, but would help in some cases.
_ loadBytes() is used for images.. ouch
_ might be worth doing a test to see if it actually would help at all
_ before rewriting all of createInput()
_ too much object creation in java2d
_ causes inconsistency/hiccups as the gc runs?
_ work through loadPixels in PImage, how consistent do we need to be?
_ with get() and set() methods, this gets really tricky (too slow)
_ could optimize by keeping a java image around, but table for later
_ it's too significant a change, and not enough time to test
LATER (post 1.0)
_ add getSketchSize() and getSketchRenderer()
_ these could simply have the defaults at the outset
_ opengl.jar with eclipse
_ auto-extract native libs from opengl.jar
_ to remove java.library.path problems (!)
_ introduce calc()
_ semantics of this are just too tricky, especially when it's not clear
_ what's actually gained by the split--would have to do weird hacks
_ to get the accum buffer, etc. to work anyway
_ add some sort of unprojectX/Y/Z method (based on glu fxn)
_ implement method for lightweight components with processing applets
_ Use getContextClassLoader() instead of Class.forName()
_ add a timer(obj, "functionname", 45) method
_ this can be used to schedule something to happen at a specific time
_ or import the swing timer (for actionPerformed)
X look into javascript timers to see how they work
_ also add interval("functionname", 40)
_ and thread("functionname");
_ problem is that this will
_ cmyk version of tiff encoder code?
_ because 'color' isn't a real data type
_ color(0, 0, 0, 0) produces black
_ because color(0, 0, 0, 0) creates an int that is simply '0'
_ although fill(0, 0, 0, 0) does the right thing
_ also, rgb255 not getting set
_ should fill(c) instead be fillColor(c)?
_ should color(123, 4, 99) instead be createColor()?
_ gray that's greater than the colorMode() can produce strange colors
_ add stroke() to type
_ more for doing outlines-only and that sort of business
_ gradients
_ use gradients in a class for the svg lib for now
_ don't add api to main p5 stuff (though maybe setPaint/noPaint api?)
_ gradient-painted lines and fills
_ java2d will do both line and fill, illusfarter only does fills
_ gradients not supported in java2d
_ illustrator export / rendering mode
_ also postscript or pdf export?
_ update illustrator code to use core api
_ even if not actually working properly.. just in naming of things
_ sorting of polygons/lines on simple painters algorithm
_ better lighting model to show darkness at various depths
_ maybe just ultra-high res bitmaps from gl
_ bspline or nurbs (later, want to do the 3D/arch stuff correctly)
_ cairo tesselation used:
_ John Hobby, Practical Segment Intersection with Finite Precision Output.
_ Computational Geometry Theory and Application, 13(4), 1999.
_ color
_ rounding errors on color conversion
_ colorMode(RGB, 1.0); colorMode(255); println(red(color(0.5,1,1)));
_ will return 127, instead of 128.
_ curves
_ non-homogenous coloring for curve vertices
_ textMode(SHAPE) and textMode(IMAGE)?
_ textMode(SCREEN) is out of its league?
_ textMode(SHAPE) and hint(SMOOTHING) calls are really awkward
_ maybe need to add properties to the size() command?
_ or use a getXxxx() method?
_ should beginRecord inherit settings from its parent renderer?
_ textFont() is null on beginRecord
_ same would be the case for strokeWeight, background, etc.
_ repeating texture support
_ exactly how should pixel filling work with single pixel strokes?
_ Writing XML files (clean up the API)
_ consider bringing back text/image using cache/names