Name: gm110360 Date: 12/18/2001
java version "1.4.0-beta3"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-beta3-b84)
Java HotSpot(TM) Client VM (build 1.4.0-beta3-b84, mixed mode)
java version "1.4.0-beta3"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-beta3-b84)
Java HotSpot(TM) Client VM (build 1.4.0-beta3-b84, mixed mode)
I want to develop smooth (and fast) scrolling for my game, which uses a
VolatileImage as backbuffer for double buffering.
To do this i wanted to use copyArea(x,y,width,height,dx,dy) on this
VolatileImage,but the problem is that copyArea
works very!!!! slow with 0<dx<10 & dy=0 and slow with 0<dy<10. In all other
cases it works great .
(This Bug is very similar to id 4392912)
I have wrote a small testprogramm (which copies an 800*600 Image 100 times)
with these results ( AMD Duron 800 mHz ,Geforce2 mx):
dx=1 , dy=0:
VolatileImage: 6369 ms
dx=-1 , dy=0:
VolatileImage: 0 ms
dx=0 , dy=1:
VolatileImage: 431 ms
dx=0 , dy=-1:
VolatileImage: 0 ms
dx=1 , dy=1:
VolatileImage: 431 ms
dx=-1 , dy=-1:
VolatileImage: 0 ms
dx=1 , dy=-1:
VolatileImage: 10 ms
dx=-1 , dy=1:
VolatileImage: 431 ms
-----------------------------------
dx=5 , dy=0:
VolatileImage: 1272 ms
dx=-5 , dy=0:
VolatileImage: 0 ms
dx=0 , dy=5:
VolatileImage: 240 ms
dx=0 , dy=-5:
VolatileImage: 0 ms
dx=5 , dy=5:
VolatileImage: 280 ms
dx=-5 , dy=-5:
VolatileImage: 0 ms
dx=5 , dy=-5:
VolatileImage: 0 ms
dx=-5 , dy=5:
VolatileImage: 280 ms
The TestProgramm:
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.geom.*;
public class CopyAreaTest extends JFrame
{
BufferedImage offScr1;
Graphics2D offScrG_1;
VolatileImage offScr2;
Graphics2D offScrG_2;
int width=800;
int height=600;
public CopyAreaTest()
{
this.setSize(width,height);
this.setVisible(true);
offScr1=new BufferedImage(this.getWidth(),this.getHeight
(),BufferedImage.TYPE_INT_RGB);
offScrG_1=offScr1.createGraphics();
offScr2=createVolatileImage(getWidth(),getHeight());
offScrG_2=offScr2.createGraphics();
}
public void performeTest(int dx,int dy)
{
System.out.println("dx="+dx+ " , dy="+dy+":");
long t=System.currentTimeMillis();
for (int i=0;i<100;i++)
{
offScrG_1.copyArea(0,0,width,height,dx,dy);
}
System.out.println("BufferedImage: "+(System.currentTimeMillis()-t )+ "
ms");
t=System.currentTimeMillis();
for (int i=0;i<100;i++)
{
offScrG_2.copyArea(0,0,width,height,dx,dy);
}
System.out.println("VolatileImage: "+(System.currentTimeMillis()-t )+ "
ms");
System.out.println();
}
public static void main(String args[])
{
CopyAreaTest test=new CopyAreaTest();
test.performeTest(1,0);
test.performeTest(-1,0);
test.performeTest(0,1);
test.performeTest(0,-1);
test.performeTest(1,1);
test.performeTest(-1,-1);
test.performeTest(1,-1);
test.performeTest(-1,1);
System.out.println("-----------------------------------");
System.out.println();
test.performeTest(5,0);
test.performeTest(-5,0);
test.performeTest(0,5);
test.performeTest(0,-5);
test.performeTest(5,5);
test.performeTest(-5,-5);
test.performeTest(5,-5);
test.performeTest(-5,5);
test.dispose();
}
}
(Review ID: 136927)
======================================================================
|