The following code ``` java PGraphics pP2D; PGraphics pDefault; void setup() { size(600, 200, P2D); pP2D = createGraphics(200, 200, P2D); pP2D.beginDraw(); pP2D.background(0); pP2D.strokeWeight(40); pP2D.stroke(255, 204); pP2D.line(0, 0, 200, height); pP2D.line(200, 0, 0, height); pP2D.endDraw(); pDefault = createGraphics(200, 200); pDefault.beginDraw(); pDefault.background(0); pDefault.strokeWeight(40); pDefault.stroke(255, 204); pDefault.line(0, 0, 200, height); pDefault.line(200, 0, 0, height); pDefault.endDraw(); noLoop(); } void draw() { background(0); strokeWeight(40); stroke(255, 204); line(0, 0, 200, height); line(200, 0, 0, height); image(pP2D, 200, 0); image(pDefault, 400, 0); saveFrame(); } ``` shows different results for the blending of the P2D and JAVA2D offscreen PGraphics objects onto the main surface, as it can be seen in the following image:  What happens is that the image() call blends the P2D surface onto the main surface using the alpha from the strokes, which results in the lighter output.The JAVA2D surface appears to be blended as it all its pixels are 100% opaque. One workaround in this particular case could be to disable blending when drawing the pP2D surface: blendMode(REPLACE); image(pP2D, 200, 0); blendMode(BLEND); In general, it cannot be expected to have identical output from JAVA2D and OpenGL rendering operations (see https://github.com/processing/processing/issues/1224 for a possibly related issue). This should be noted in the updated OpenGL wiki entry (https://github.com/processing/processing/issues/866).