protected void backgroundImpl() {
      Arrays.fill(pixels, backgroundColor);
    }



    /*
    public void ambient(int rgb) {
      showDepthError("ambient");
    }

    public void ambient(float gray) {
      showDepthError("ambient");
    }

    public void ambient(float x, float y, float z) {
      // This doesn't take
      if ((x != PMaterial.DEFAULT_AMBIENT) ||
          (y != PMaterial.DEFAULT_AMBIENT) ||
          (z != PMaterial.DEFAULT_AMBIENT)) {
        showDepthError("ambient");
      }
    }

    public void specular(int rgb) {
      showDepthError("specular");
    }

    public void specular(float gray) {
      showDepthError("specular");
    }

    public void specular(float x, float y, float z) {
      showDepthError("specular");
    }

    public void shininess(float shine) {
      showDepthError("shininess");
    }


    public void emissive(int rgb) {
      showDepthError("emissive");
    }

    public void emissive(float gray) {
      showDepthError("emissive");
    }

    public void emissive(float x, float y, float z ) {
      showDepthError("emissive");
    }
    */



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

    // INTERNAL SCHIZZLE


    // TODO make this more efficient, or move into PMatrix2D
//    private boolean untransformed() {
//      return ((ctm.m00 == 1) && (ctm.m01 == 0) && (ctm.m02 == 0) &&
//              (ctm.m10 == 0) && (ctm.m11 == 1) && (ctm.m12 == 0));
//    }
//
//
//    // TODO make this more efficient, or move into PMatrix2D
//    private boolean unwarped() {
//      return ((ctm.m00 == 1) && (ctm.m01 == 0) &&
//              (ctm.m10 == 0) && (ctm.m11 == 1));
//    }