  
  public void setParent(PApplet parent)
  public void setPrimary(boolean primary)
  public void setPath(String path)
  public void setSize(int iwidth, int iheight)
  protected void allocate()
  public void dispose()

  public boolean canDraw()
  public void beginDraw()
  public void endDraw()

  protected void checkSettings()
  protected void defaultSettings()
  protected void reapplySettings()

  public void hint(int which)

  public void beginShape()
  public void beginShape(int kind)
  public void edge(boolean e)
  public void normal(float nx, float ny, float nz)
  public void textureMode(int mode)
  public void texture(PImage image)
  public void vertex(float x, float y)
  public void vertex(float x, float y, float z)
  public void vertex(float x, float y, float u, float v)
  public void vertex(float x, float y, float z, float u, float v)
  protected void vertexTexture(float u, float v);
  public void breakShape()
  public void endShape()
  public void endShape(int mode)

  protected void bezierVertexCheck();
  public void bezierVertex(float x2, float y2,
                           float x3, float y3,
                           float x4, float y4)
  public void bezierVertex(float x2, float y2, float z2,
                           float x3, float y3, float z3,
                           float x4, float y4, float z4)

  protected void curveVertexCheck();
  public void curveVertex(float x, float y)
  public void curveVertex(float x, float y, float z)
  protected void curveVertexSegment(float x1, float y1,  
                                    float x2, float y2, 
                                    float x3, float y3, 
                                    float x4, float y4)
  protected void curveVertexSegment(float x1, float y1, float z1, 
                                    float x2, float y2, float z2,
                                    float x3, float y3, float z3,
                                    float x4, float y4, float z4)

  protected void renderPoints(int start, int stop)  // P3D
  protected void rawPoints(int start, int stop)  // P3D
  
  protected void renderLines(int start, int stop)  // P3D
  protected void rawLines(int start, int stop)  // P3D
  
  protected void renderTriangles(int start, int stop)  // P3D
  protected void rawTriangles(int start, int stop)  // P3D
  
  public void flush()
  protected void render()
  proected void sort()

  public void point(float x, float y)
  public void point(float x, float y, float z)
  public void line(float x1, float y1, float x2, float y2)
  public void line(float x1, float y1, float z1,
                   float x2, float y2, float z2)
  public void triangle(float x1, float y1, 
                       float x2, float y2,
                       float x3, float y3)
  public void quad(float x1, float y1, float x2, float y2,
                   float x3, float y3, float x4, float y4)

  public void rectMode(int mode)
  public void rect(float a, float b, float c, float d)
  protected void rectImpl(float x1, float y1, float x2, float y2)

  public void ellipseMode(int mode)
  public void ellipse(float a, float b, float c, float d)
  protected void ellipseImpl(float x, float y, float w, float h)
    
  public void arc(float a, float b, float c, float d,
                  float start, float stop)
  protected void arcImpl(float x, float y, float w, float h,
                         float start, float stop)

  public void box(float size)
  public void box(float w, float h, float d)

  public void sphereDetail(int res)
  public void sphereDetail(int ures, int vres)
  public void sphere(float r)

  public float bezierPoint(float a, float b, float c, float d, float t)
  public float bezierTangent(float a, float b, float c, float d, float t)
  protected void bezierInitCheck()
  protected void bezierInit()
  public void bezierDetail(int detail)
  public void bezier(float x1, float y1,
                     float x2, float y2,
                     float x3, float y3,
                     float x4, float y4)
  public void bezier(float x1, float y1, float z1,
                     float x2, float y2, float z2,
                     float x3, float y3, float z3,
                     float x4, float y4, float z4)

  public float curvePoint(float a, float b, float c, float d, float t)
  public float curveTangent(float a, float b, float c, float d, float t)
  public void curveDetail(int detail)
  public void curveTightness(float tightness)
  protected void curveInitCheck()
  protected void curveInit()
  public void curve(float x1, float y1,
                    float x2, float y2,
                    float x3, float y3,
                    float x4, float y4)
  public void curve(float x1, float y1, float z1,
                    float x2, float y2, float z2,
                    float x3, float y3, float z3,
                    float x4, float y4, float z4)

  protected void splineForward(int segments, PMatrix3D matrix)

  public void smooth()
  public void noSmooth() 

  public void imageMode(int mode)
  public void image(PImage image, float x, float y)
  public void image(PImage image, float x, float y, float c, float d)
  public void image(PImage image,
                    float a, float b, float c, float d,
                    int u1, int v1, int u2, int v2)
  protected void imageImpl(PImage image,
                           float x1, float y1, float x2, float y2,
                           int u1, int v1, int u2, int v2)

  public void shapeMode(int mode)
  public void shape(PShape shape)
  public void shape(PShape shape, float x, float y)
  public void shape(PShape shape, float x, float y, float c, float d)

  public void textAlign(int align)
  public void textAlign(int alignX, int alignY)
  public float textAscent()
  public float textDescent()
  public void textFont(PFont which)
  public void textFont(PFont which, float size)
  public void textLeading(float leading)
  public void textMode(int mode)
  protected boolean textModeCheck(int mode)
  public void textSize(float size)
  public float textWidth(char c)
  public float textWidth(String str)
  protected float textWidthImpl(char buffer[], int start, int stop)

  public void text(char c)
  public void text(char c, float x, float y)
  public void text(char c, float x, float y, float z)
  public void text(String str)
  public void text(String str, float x, float y)
  public void text(String str, float x, float y, float z)
  public void text(String str, float x1, float y1, float x2, float y2)
  public void text(String s, float x1, float y1, float x2, float y2, float z)
  public void text(int num, float x, float y)
  public void text(int num, float x, float y, float z)
  public void text(float num, float x, float y)
  public void text(float num, float x, float y, float z)

  protected void textLineAlignImpl(char buffer[], int start, int stop,
                                   float x, float y)
  protected void textLineImpl(char buffer[], int start, int stop,
                              float x, float y)
  protected void textCharImpl(char ch, float x, float y)
  protected void textCharModelImpl(PImage glyph,
                                   float x1, float y1, //float z1,
                                   float x2, float y2, //float z2,
                                   int u2, int v2)
  protected void textCharScreenImpl(PImage glyph,
                                    int xx, int yy,
                                    int w0, int h0)

  public void pushMatrix()
  public void popMatrix()

  public void translate(float tx, float ty)
  public void translate(float tx, float ty, float tz)
  public void rotate(float angle)
  public void rotateX(float angle)
  public void rotateY(float angle)
  public void rotateZ(float angle)
  public void rotate(float angle, float vx, float vy, float vz)
  public void scale(float s)
  public void scale(float sx, float sy)
  public void scale(float x, float y, float z)

  public void resetMatrix()
  public void applyMatrix(PMatrix2D source)
  public void applyMatrix(float n00, float n01, float n02,
                          float n10, float n11, float n12)
  public void applyMatrix(PMatrix3D source)
  public void applyMatrix(float n00, float n01, float n02, float n03,
                          float n10, float n11, float n12, float n13,
                          float n20, float n21, float n22, float n23,
                          float n30, float n31, float n32, float n33)

  public getMatrix(PMatrix2D target)
  public getMatrix(PMatrix3D target)
  public void setMatrix(PMatrix2D source)
  public void setMatrix(PMatrix3D source)
  public void printMatrix()

  public void beginCamera()
  public void endCamera()
  public void camera()
  public void camera(float eyeX, float eyeY, float eyeZ,
                     float centerX, float centerY, float centerZ,
                     float upX, float upY, float upZ)
  public void printCamera()

  public void ortho()
  public void ortho(float left, float right,
                    float bottom, float top,
                    float near, float far)
  public void perspective()
  public void perspective(float fov, float aspect, float near, float far)
  public void frustum(float left, float right, 
                      float bottom, float top, 
                      float near, float far)
  public void printProjection()

  public float screenX(float x, float y)
  public float screenY(float x, float y)
  public float screenX(float x, float y, float z)
  public float screenY(float x, float y, float z)
  public float screenZ(float x, float y, float z)
  public float modelX(float x, float y, float z)
  public float modelY(float x, float y, float z)
  public float modelZ(float x, float y, float z)

  public void pushStyle()
  public void popStyle()
  public void style(PStyle) 
  public PStyle getStyle()
  public void getStyle(PStyle)

  public void strokeCap(int cap)
  public void strokeJoin(int join)
  public void strokeWeight(float weight)

  public void noStroke()
  public void stroke(int rgb)
  public void stroke(int rgb, float alpha)
  public void stroke(float gray)
  public void stroke(float gray, float alpha)
  public void stroke(float x, float y, float z)
  public void stroke(float x, float y, float z, float a)
  protected void strokeFromCalc()

  public void noTint()
  public void tint(int rgb)
  public void tint(int rgb, float alpha)
  public void tint(float gray)
  public void tint(float gray, float alpha)
  public void tint(float x, float y, float z)
  public void tint(float x, float y, float z, float a)
  protected void tintFromCalc()

  public void noFill()
  public void fill(int rgb)
  public void fill(int rgb, float alpha)
  public void fill(float gray)
  public void fill(float gray, float alpha)
  public void fill(float x, float y, float z)
  public void fill(float x, float y, float z, float a)
  protected void fillFromCalc()

  public void ambient(int rgb)
  public void ambient(float gray)
  public void ambient(float x, float y, float z)
  protected void ambientFromCalc()
  public void specular(int rgb)
  public void specular(float gray)
  public void specular(float x, float y, float z)
  protected void specularFromCalc()
  public void shininess(float shine)
  public void emissive(int rgb)
  public void emissive(float gray)
  public void emissive(float x, float y, float z )
  protected void emissiveFromCalc()

  public void lights()
  public void noLights()
  public void ambientLight(float red, float green, float blue)
  public void ambientLight(float red, float green, float blue,
                           float x, float y, float z)
  public void directionalLight(float red, float green, float blue,
                               float nx, float ny, float nz)
  public void pointLight(float red, float green, float blue,
                         float x, float y, float z)
  public void spotLight(float red, float green, float blue,
                        float x, float y, float z,
                        float nx, float ny, float nz,
                        float angle, float concentration)
  public void lightFalloff(float constant, float linear, float quadratic)
  public void lightSpecular(float x, float y, float z)
  protected void lightPosition(int num, float x, float y, float z)
  protected void lightDirection(int num, float x, float y, float z)

  public void background(int rgb)
  public void background(int rgb, float alpha)
  public void background(float gray)
  public void background(float gray, float alpha)
  public void background(float x, float y, float z)
  public void background(float x, float y, float z, float a)
  public void background(PImage image)
  protected void backgroundFromCalc()
  protected void backgroundImpl(PImage image)
  protected void backgroundImpl()

  public void colorMode(int mode)
  public void colorMode(int mode, float max)
  public void colorMode(int mode, float maxX, float maxY, float maxZ)
  public void colorMode(int mode, float maxX, float maxY, float maxZ, float maxA)

  protected void colorCalc(int rgb)
  protected void colorCalc(int rgb, float alpha)
  protected void colorCalc(float gray)
  protected void colorCalc(float gray, float alpha)
  protected void colorCalc(float x, float y, float z)
  protected void colorCalc(float x, float y, float z, float a)
  protected void colorCalcARGB(int argb, float alpha)

  public final int color(int gray)
  public final int color(int gray, int alpha)
  public final int color(int rgb, float alpha)
  public final int color(int x, int y, int z)

  public final float alpha(int what)
  public final float red(int what)
  public final float green(int what)
  public final float blue(int what)
  public final float hue(int what)
  public final float saturation(int what)
  public final float brightness(int what)

  public int lerpColor(int c1, int c2, float amt)
  static public int lerpColor(int c1, int c2, float amt, int mode)

  public void beginRaw(PGraphics rawGraphics)
  public void endRaw()

  static public void showWarning(String msg)
  static public void showException(String msg)

  public boolean displayable()
  public boolean is2D()
  public boolean is3D()

//

These are the methods found in PImage, which are inherited by PGraphics.

  public PImage(Image)
  public Image getImage()

  public void setCache(Object parent, Object storage)
  public void getCache(Object parent)
  public void removeCache(Object parent)

  public boolean isModified();
  public void setModified();
  public void setModified(boolean state);

  public void loadPixels()
  public void updatePixels()
  public void updatePixels(int x, int y, int w, int h)

  public void resize(int wide, int high)

  public int get(int x, int y)
  public PImage get(int x, int y, int w, int h)
  protected PImage getImpl(int x, int y, int w, int h)
  public PImage get()
  public void set(int x, int y, int c)
  public void set(int x, int y, PImage src)
  protected void setImpl(int dx, int dy, int sx, int sy, int sw, int sh,
                         PImage src)

  public void mask(int alpha[])
  public void mask(PImage alpha)

  public void filter(int kind)
  public void filter(int kind, float param)

  public void copy(int sx, int sy, int sw, int sh,
                   int dx, int dy, int dw, int dh)
  public void copy(PImage src,
                   int sx, int sy, int sw, int sh,
                   int dx, int dy, int dw, int dh)

  static public int blendColor(int c1, int c2, int mode)
  public void blend(int sx, int sy, int sw, int sh,
                    int dx, int dy, int dw, int dh, int mode)
  public void blend(PImage src,
                    int sx, int sy, int sw, int sh,
                    int dx, int dy, int dw, int dh, int mode)

  public void save(String path)
