Thread.yield();
    public void display(GLDrawable drawable) {      //      printThreadName("display for Listener");      if (initFailed) {        return;      }      if (!firstRender) {        if (++frameCount == 30) {          timer.stop();          System.err.println("Frames per second: " + (30.0f / timer.getDurationAsSeconds()));          timer.reset();          timer.start();          frameCount = 0;        }      } else {        firstRender = false;        timer.start();      }      time.update();      GL gl = drawable.getGL();      GLU glu = drawable.getGLU();      // OK, ready to go      if (b[' ']) {        viewer.rotateAboutFocalPoint(new Rotf(Vec3f.Y_AXIS, (float) (time.deltaT() * animRate)));      }      pbuffer.display();      // blur pass      if (b['g']) {        // shrink image        blur2Pass = BLUR2_SHRINK_PASS;        blur2_pbuffer.display();      }      // horizontal blur      blur_pbuffer.display();      // vertical blur      blur2Pass = BLUR2_VERT_BLUR_PASS;      blur2_pbuffer.display();      // tone mapping pass      tonemap_pbuffer.display();      // display in window      gl.glEnable(GL.GL_TEXTURE_RECTANGLE_NV);      gl.glActiveTextureARB(GL.GL_TEXTURE0_ARB);      gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_NV, tonemap_pbuffer_tex);      if (b['n']) {        gl.glTexParameteri( GL.GL_TEXTURE_RECTANGLE_NV, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR);      } else {        gl.glTexParameteri( GL.GL_TEXTURE_RECTANGLE_NV, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST);      }      drawQuadRect4(gl, win_w, win_h, pbuffer_w, pbuffer_h);      gl.glDisable(GL.GL_TEXTURE_RECTANGLE_NV);    }