Program: 11320
Project: 11320
Buggy source:
@Override protected void drawOffscreen(GLContext glContext){
  super.drawOffscreen(glContext);
  if (texture == null) {
    init(glContext);
    int width=offscreenCanvas.getTargetBounds().getWidth();
    int height=offscreenCanvas.getTargetBounds().getHeight();
    int texHandle=offscreenCanvas.getTextureUnit();
    texture=new ExternalTextureProjected2D(texHandle,width,height,false){
      @Override protected void putVertexCoords(      int texIndex,      double texFracX,      double texFracY,      float[] temp){
        super.putVertexCoords(texIndex,(float)texFracX * scaleX,(float)texFracY * scaleY,temp);
      }
      @Override protected void putVertexTexCoords(      int texIndex,      double texFracX,      double texFracY){
        super.putVertexTexCoords(texIndex,(float)texFracX * scaleX,(float)texFracY * scaleY);
      }
      @Override protected void prepare_glState(      GL gl){
        gl.glEnable(GL2.GL_TEXTURE_2D);
        gl.glDisable(GL2.GL_BLEND);
      }
    }
;
    texturePainter.removeAllDrawableTextures();
    texturePainter.addDrawableTexture(texture);
    if (reproject != null) {
      texture.setProjection(reproject);
    }
  }
  if (didAxesChange(axes)) {
    updateProjection(currentWidth,currentHeight);
  }
  OGLStackHandler stack=new OGLStackHandler();
  GL2 gl=glContext.getGL().getGL2();
  stack.pushAttrib(gl,GL2.GL_ALL_ATTRIB_BITS);
  stack.pushClientAttrib(gl,(int)GL2.GL_ALL_CLIENT_ATTRIB_BITS);
  stack.pushTexture(gl);
  gl.glLoadIdentity();
  stack.pushModelview(gl);
  stack.pushProjection(gl);
  GLContext c=offscreenCanvas.getGLContext();
  if (c != null) {
    c.makeCurrent();
    try {
      reprojectCanvas.paint();
    }
 catch (    Exception e) {
      logWarning(logger,"String_Node_Str",e);
    }
 finally {
      glContext.makeCurrent();
      stack.pop(gl);
    }
  }
}

Fixed version (ground truth):
@Override protected void drawOffscreen(GLContext glContext){
  super.drawOffscreen(glContext);
  if (texture == null) {
    init(glContext);
    int width=offscreenCanvas.getTargetBounds().getWidth();
    int height=offscreenCanvas.getTargetBounds().getHeight();
    int texHandle=offscreenCanvas.getTextureName();
    texture=new ExternalTextureProjected2D(texHandle,width,height,false){
      @Override protected void putVertexCoords(      int texIndex,      double texFracX,      double texFracY,      float[] temp){
        super.putVertexCoords(texIndex,(float)texFracX * scaleX,(float)texFracY * scaleY,temp);
      }
      @Override protected void putVertexTexCoords(      int texIndex,      double texFracX,      double texFracY){
        super.putVertexTexCoords(texIndex,(float)texFracX * scaleX,(float)texFracY * scaleY);
      }
      @Override protected void prepare_glState(      GL gl){
        gl.glEnable(GL2.GL_TEXTURE_2D);
        gl.glDisable(GL2.GL_BLEND);
      }
    }
;
    texturePainter.removeAllDrawableTextures();
    texturePainter.addDrawableTexture(texture);
    if (reproject != null) {
      texture.setProjection(reproject);
    }
  }
  if (didAxesChange(axes)) {
    updateProjection(currentWidth,currentHeight);
  }
  OGLStackHandler stack=new OGLStackHandler();
  GL2 gl=glContext.getGL().getGL2();
  stack.pushAttrib(gl,GL2.GL_ALL_ATTRIB_BITS);
  stack.pushClientAttrib(gl,(int)GL2.GL_ALL_CLIENT_ATTRIB_BITS);
  stack.pushTexture(gl);
  gl.glLoadIdentity();
  stack.pushModelview(gl);
  stack.pushProjection(gl);
  GLContext c=offscreenCanvas.getGLContext();
  if (c != null) {
    c.makeCurrent();
    try {
      reprojectCanvas.paint();
    }
 catch (    Exception e) {
      logWarning(logger,"String_Node_Str",e);
    }
 finally {
      glContext.makeCurrent();
      stack.pop(gl);
    }
  }
}