Resizing problem with Java 1.5, OpenGL and bufferStrategy

Hi,

I’m developping an application that uses bufferStrategy to display its content using double-buffering in a window. But there is indeed a problem I cannot solve when using an 1.5 JVM with the opengl pipeline.

A short example to explain where the problem is. I first took the sample code given in:
http://www.java-gaming.org/forums/index.php?topic=117.0

Then, I changed the content of render() so that it displays a 40x40 image of Duke:


   private void render()
   {
      // If we've lost our video memory, don't bother drawing anything

      if( !bufferStrategy.contentsLost() )
      {
         Graphics2D g = (Graphics2D)(bufferStrategy.getDrawGraphics());
         // Clear the drawing buffer to white
         g.setColor( Color.white );
         g.fillRect( 0, 0, mainFrame.getWidth(), mainFrame.getHeight() );

         // Say hello
         g.translate(0,27);
         g.scale((float)mainFrame.getWidth()/40.0,(float)(mainFrame.getHeight()-27)/40.0);
         g.fillRect( 0, 0, mainFrame.getWidth(), mainFrame.getHeight() );
         g.drawImage(img,0,0,null);
         // We'll stop after 400 frames.
         i++;
         if( i > 400 )
            Running = false;

         bufferStrategy.show();
         g.dispose();
      }
   }

I make a vertical translation of 27 because that’s the thickness of my window title - so my Duke isn’t partially masked by it. Then I rescale so that the picture will take the whole window space, and finally, I fill the background with white, and finish by drawing the picture.

Under Mustang, that works perfectly:

http://www.ailesse.be/duke_jdk6.png

Same under 1.5 with the “software” rendering pipeline. But now, with the opengl pipeline, that’s what I get when resizing the window:

http://www.ailesse.be/duke_jdk5.png

What exactly am I doing wrong ? Is there a solution to this ?

You’re not doing anything wrong. It was one of many bugs in JDK 5’s OGL pipeline that was fixed in JDK 6:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4902507

The solution is to use JDK 6…

Chris