0179 core
X screenWidth/Height instead of screenW/H
X open up the pdf library more (philho)
X   http://dev.processing.org/bugs/show_bug.cgi?id=1343
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
o   http://dev.processing.org/bugs/show_bug.cgi?id=1252

earlier
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
_   http://dev.processing.org/bugs/show_bug.cgi?id=100
_   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
_   http://dev.processing.org/bugs/show_bug.cgi?id=1074
_ opengl + resize window => window content garbled
_   http://dev.processing.org/bugs/show_bug.cgi?id=1360
_ modify PVector to include better methods for chaining operations
_   http://dev.processing.org/bugs/show_bug.cgi?id=1415

quickies
_ img.get() weirdness
_   http://dev.processing.org/bugs/show_bug.cgi?id=1198
_ copy and blend scale when unnecessary
_   http://dev.processing.org/bugs/show_bug.cgi?id=1482
_ add a limit to pushStyle() to catch unmatched sets?
_   http://dev.processing.org/bugs/show_bug.cgi?id=1368
_ P2D transformation bug from ira
_   http://dev.processing.org/bugs/show_bug.cgi?id=1175
_ resize not working in revision 5707
_   camera() and perspective() were commented out in setSize()
_   http://dev.processing.org/bugs/show_bug.cgi?id=1391
_ chopping out triangles in OpenGL (though it's only 2D drawing)
_   http://dev.processing.org/bugs/show_bug.cgi?id=1359
_ 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
_   http://dev.processing.org/bugs/show_bug.cgi?id=1448

_ add setOutput() method across other renderers?

_ opengl applet problems
_   http://dev.processing.org/bugs/show_bug.cgi?id=1364

_ 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
_   http://dev.processing.org/bugs/show_bug.cgi?id=1413
_ modify PVector to include better methods for chaining operations
_   http://dev.processing.org/bugs/show_bug.cgi?id=1415

_ selectInput() fails when called from within keyPressed()
_   http://dev.processing.org/bugs/show_bug.cgi?id=1220

_ add java.io.Reader (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
_   http://dev.processing.org/bugs/show_bug.cgi?id=1349

_ 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)
_   http://dev.processing.org/bugs/show_bug.cgi?id=985
_   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
_   http://dev.processing.org/bugs/show_bug.cgi?id=602
_   should vertexTexture() divide by width/height or width-1/height-1?

looping/events
_ key and mouse events delivered out of order
_   http://dev.processing.org/bugs/show_bug.cgi?id=638
_ key/mouse events have concurrency problems with noLoop()
_   http://dev.processing.org/bugs/show_bug.cgi?id=1323
_   need to say "no drawing inside mouse/key events w/ noLoop"
_ redraw() doesn't work from within draw()
_   http://dev.processing.org/bugs/show_bug.cgi?id=1363

_ 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)
_   http://dev.processing.org/bugs/show_bug.cgi?id=1309

_ Semitransparent rect drawn over image not rendered correctly
_   http://dev.processing.org/bugs/show_bug.cgi?id=1280

_ should map() actually constrain to the low and high values?

_ file chooser fails with opengl on linux
_   http://dev.processing.org/bugs/show_bug.cgi?id=1221

_ resizing opengl destroys context and textures
_   http://dev.processing.org/bugs/show_bug.cgi?id=1176
_ what's the difference with ascent on loadFont vs. createFont?
_ noCursor() doesn't work in present mode
_   http://dev.processing.org/bugs/show_bug.cgi?id=1177
_ in P2D, two vertex() line calls with fill() causes duplicate output
_   works fine in other renderers, has to do with tesselation
_   http://dev.processing.org/bugs/show_bug.cgi?id=1191
_ extra triangles being seen in P2D
_   http://dev.processing.org/bugs/show_bug.cgi?id=1192
_ 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
_   http://www.exampledepot.com/egs/javax.xml.parsers/pkg.html


[ known problems ]

_ OPENGL sketches flicker w/ Vista when background() not used inside draw()
_   http://dev.processing.org/bugs/show_bug.cgi?id=930
_   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
_   http://dev.processing.org/bugs/show_bug.cgi?id=766
_   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
_   http://dev.processing.org/bugs/show_bug.cgi?id=641
_   solution is to implement alpha compositing across all of P3D 
_   http://en.wikipedia.org/wiki/Alpha_compositing
_ text() not setting zbuffer in P3D because not fully opaque
_   http://dev.processing.org/bugs/show_bug.cgi?id=696
_ alpha not set on saveFrame, so can't be used in photoshop as a layer
_   http://processing.org/discourse/yabb/YaBB.cgi?board=general;action=display;num=1078441623
_ when drawing into a JAVA2D surface, have to call loadPixels()
_   to draw it later with P3D (or OPENGL prolly)
_   http://processing.org/discourse/yabb_beta/YaBB.cgi?board=Syntax;action=display;num=1171574044
_ 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
_   http://dev.processing.org/bugs/show_bug.cgi?id=866
_ 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
_   http://dev.processing.org/bugs/show_bug.cgi?id=806
_ accessors inside PFont need a lot of work
_ osx 10.5 (not 10.4) performing text width calculation differently
_   http://dev.processing.org/bugs/show_bug.cgi?id=972
_ Automatically use textMode(SCREEN) with text() when possible
_   http://dev.processing.org/bugs/show_bug.cgi?id=1020


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)
_   http://dev.processing.org/bugs/show_bug.cgi?id=466
_ textAlign(CENTER) with P3D and OPENGL produces messy result
_   probably rounding error with the images
_   http://dev.processing.org/bugs/show_bug.cgi?id=475
X textures truly did get worse in P3D
_   problem is that bilinear is turned on by default starting in 0124(?)
X   http://processing.org/discourse/yabb_beta/YaBB.cgi?board=Programs;action=display;num=1205171649
_ 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
_   http://dev.processing.org/bugs/show_bug.cgi?id=200
_ Implement support for complex shapes when using P2D and P3D
_   http://dev.processing.org/bugs/show_bug.cgi?id=1053
_ Implement support for complex shapes when using the OpenGL renderer 
_   http://dev.processing.org/bugs/show_bug.cgi?id=947
_   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
_   http://dev.processing.org/bugs/show_bug.cgi?id=1000
_ smoothing is slow
_   http://dev.processing.org/bugs/show_bug.cgi?id=1001
_ 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
_   http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1081706752

_ 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()
_   http://dev.processing.org/bugs/show_bug.cgi?id=1270
_ stop() not getting called
_   http://dev.processing.org/bugs/show_bug.cgi?id=183
_   major problem for libraries
_   and start() is supposedly called by the applet viewer
_   http://java.sun.com/j2se/1.4.2/docs/api/java/applet/Applet.html#start()
_   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
_   http://dev.processing.org/bugs/show_bug.cgi?id=131



////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////


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 sketch.properties 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?
_   http://processing.org/discourse/yabb/YaBB.cgi?board=Programs;action=display;num=1081335361;start=15
_ size() has memory limitations (pitaru)
_   catch OutOfMemoryError inside size() and let the user know
_   http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1038847001
_ 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
_   http://dev.processing.org/bugs/show_bug.cgi?id=127
E4 _ add shuffle methods for arrays
E4 _   http://dev.processing.org/bugs/show_bug.cgi?id=1462


CORE / PApplet - main()

_ refactor PApplet.main() and Runner.startInternal() to remove duplication
_   http://dev.processing.org/bugs/show_bug.cgi?id=245
_ 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
_   http://dev.processing.org/bugs/show_bug.cgi?id=531
_ "Target VM failed to initialize" when using Present mode on Mac OS X
_   http://dev.processing.org/bugs/show_bug.cgi?id=1257

CORE / PFont and text()

_ improve font metrics
_   http://java.sun.com/products/java-media/2D/reference/faqs/index.html#Q_How_do_I_obtain_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
_   http://dev.processing.org/bugs/show_bug.cgi?id=1032
_ strokeCap() and strokeJoin() for use with P2D, P3D and OPENGL
_   http://dev.processing.org/bugs/show_bug.cgi?id=955
_ 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
_   http://dev.processing.org/bugs/show_bug.cgi?id=1022
_   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
_     http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1089737928;start=0
_   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
_   http://dev.processing.org/bugs/show_bug.cgi?id=695
_   weird ellipse bug with an alpha line in same image
_     http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1083221401;start=0
_   scaled ellipse showing up as a hexagon
_     http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1083674213
_     http://processing.org/discourse/yabb/YaBB.cgi?board=Syntax;action=display;num=1084652597;start=0
_   problem with the fill
_     http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1077834735
_   z values not set properly on ellipses?
_     http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1068752615
_   ellipses are just plain ugly
_     http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1073409011;start=0


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
_   http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1094174791;start=0
_ mgorbet stroke transparency problem
_   http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1076383048;start=0
_ make sure line() commands don't try to have a fill


CORE / PGraphicsJava2D

_ some optimizations from zach
_   http://processing.org/discourse/yabb_beta/YaBB.cgi?board=os_core_pde;action=display;num=1121670787
_ 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 sun.dc.pr.PRException?
_   http://dev.processing.org/bugs/show_bug.cgi?id=104


CORE / PGraphics3D

_ make thick lines draw perpendicular to the screen with P3D
_   http://dev.processing.org/bugs/show_bug.cgi?id=956
_   ewjordan suggests building the quad in screen coords after perspective
_ improve hint(ENABLE_DEPTH_SORT) to use proper painter's algo
_   http://dev.processing.org/bugs/show_bug.cgi?id=176
_   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
_   http://dev.processing.org/bugs/show_bug.cgi?id=102
_ odd error with some pixels from images not drawing properly
_   http://processing.org/discourse/yabb_beta/YaBB.cgi?board=SoftwareBugs;action=display;num=1115681453
_ clipping not implemented
_   http://dev.processing.org/bugs/show_bug.cgi?id=1393
_   http://processing.org/discourse/yabb_beta/YaBB.cgi?board=SoftwareBugs;action=display;num=1114184516
_   http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1058491568;start=0
_   http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1052313604;start=0
_   http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_Software;action=display;num=1095170607;start=0
_   things are flying into the camera and halting apps
_   http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1042699742
_   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
_   http://dev.processing.org/bugs/show_bug.cgi?id=501
_ 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
_   http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1043894019;start=0
_   http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1042004618
_   translate(58, 48, 0); 
_   rotateY(0.5);
_   box(40);


CORE / PImage

_ accuracy problems make alpha channel go to FE with image.copy()
_   http://dev.processing.org/bugs/show_bug.cgi?id=1420
_ improve blend() accuracy when using ADD
_   http://dev.processing.org/bugs/show_bug.cgi?id=1008
_   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
_   http://dev.processing.org/bugs/show_bug.cgi?id=356
_ add ability to control jpeg compression level with save() and saveFrame()
_   or just write a better example for this one?
_   http://dev.processing.org/bugs/show_bug.cgi?id=342
_ 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)


CORE / PShapeSVG

_ 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)
_   http://dev.processing.org/bugs/show_bug.cgi?id=996
_ 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
_   http://www.adobe.com/svg/eol.html


CORE / Mac OS X

_ set the application name to sketch name (not processing.core.PApplet)
_   System.setProperty("com.apple.mrj.application.apple.menu.about.name", ...)
_   -Xdock:name=<application name>
_   -Xdock:icon=<path to icon file>
_ first line of applets is missing on java 1.4+ on the mac
_   http://dev.processing.org/bugs/show_bug.cgi?id=283
_ cursor() broken in applets on macosx?
_   or is it a java 1.4 versus java 1.3 problem?
_   http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1081645955



////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////



LIBRARIES / PGraphicsOpenGL

_ switch to glWindowPos() instead of glRasterPos() silliness
_ implement setImpl() instead of set() inside PGraphicsOpenGL
_   http://dev.processing.org/bugs/show_bug.cgi?id=943
_ use glCopyPixels() or glReadPixels() instead of copy() method
_   http://dev.processing.org/bugs/show_bug.cgi?id=941
_ implement a more efficient version of blend()
_   http://dev.processing.org/bugs/show_bug.cgi?id=942
_ copy() does not update the screen with OpenGL
_   http://dev.processing.org/bugs/show_bug.cgi?id=933
_ set() requires updatePixels() with OpenGL
_   http://dev.processing.org/bugs/show_bug.cgi?id=705
_ first few frames of OpenGL sketches on Windows run slowly
_   http://dev.processing.org/bugs/show_bug.cgi?id=874
_ updatePixels wth OpenGL requires a lot of memory, need better texture update
_   http://dev.processing.org/bugs/show_bug.cgi?id=610
_ 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..
_   http://dev.processing.org/bugs/show_bug.cgi?id=657
_   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:
_   http://processing.org/discourse/yabb_beta/YaBB.cgi?board=SoftwareBugs;action=display;num=1115185737
_ 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


LIBRARIES / PGraphicsPDF

_ pdf not rendering unicode with beginRecord()
_   http://dev.processing.org/bugs/show_bug.cgi?id=727
_ 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)
_   http://processing.org/discourse/yabb_beta/YaBB.cgi?board=OpenGL;action=display;num=1176483247
_ implement method for lightweight components with processing applets
_   http://dev.processing.org/bugs/show_bug.cgi?id=686
_ Use getContextClassLoader() instead of Class.forName()
_   http://dev.processing.org/bugs/show_bug.cgi?id=514
_ 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
_     http://dev.processing.org/bugs/show_bug.cgi?id=382
_   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
_     http://dev.processing.org/bugs/show_bug.cgi?id=432
_   http://processing.org/discourse/yabb/YaBB.cgi?board=Syntax;action=display;num=1083650609
_   http://processing.org/discourse/yabb/YaBB.cgi?board=Syntax;action=display;num=1082481891
_ 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
_     http://dev.processing.org/bugs/show_bug.cgi?id=371
_ 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.
_   http://citeseer.ist.psu.edu/hobby93practical.html
_ 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.
_   http://dev.processing.org/bugs/show_bug.cgi?id=346
_ repeating texture support
_ exactly how should pixel filling work with single pixel strokes?
_   http://dev.processing.org/bugs/show_bug.cgi?id=1025
_ Writing XML files (clean up the API)
_   http://dev.processing.org/bugs/show_bug.cgi?id=964
_ consider bringing back text/image using cache/names
