30 FPSをアニメーション化するFPSAnimatorを要求する以下のコード(JOGL 2.0に移植されたNeheチュートリアル1の最低限のバージョン)があります。コードを実行すると、21.321962または21.413277FPSが出力されます。ご覧のとおり、FPSAnimatorを作成するときは、1秒あたり30フレームが望ましいと指定します。これは、Core i7 CPU、24GBのRAM、およびATI RadeonHD5700シリーズグラフィックスカードを搭載した最新のマシン上にあります。21.3FPSも制限ではないようです。要求されたFPSを上げたり下げたりすると、報告されたFPSは上下します(線形関係ではないようですが)。
ただし、同じマシンでコードを実行すると、30.30303FPSが得られる場合があります。どちらの場合も、マシン上で開いているWebブラウザのタブと日食は数個しかありません。これは、この単純な例だけでなく、私のJOGLベースのすべてのアプリケーションでも発生することにも注意してください。この問題を示すために、この簡単な例を提供しただけです。
この問題は、いくつかのマシンで見られました。たぶんそれは私の想像ですが、NVidia GeForceカードを搭載したマシンでは発生しないようですが、ATIカードとNVidiaQuadroFXカードを搭載したマシンで発生するのを見てきました。
この違いの原因は何でしょうか?
public static void main(String[] args) {
GLCanvas glCanvas;
FPSAnimator animator;
JFrame frame = new JFrame("JOGL HelloWorld");
GLCapabilities caps = new GLCapabilities(null);
caps.setDoubleBuffered(true);
caps.setHardwareAccelerated(true);
glCanvas = new GLCanvas(caps);
glCanvas.setSize(800, 800);
glCanvas.setIgnoreRepaint(true);
glCanvas.addGLEventListener(new GLEventListener() {
@Override
public void reshape(GLAutoDrawable gLDrawable, int x, int y,
int width, int height) {
}
@Override
public void init(GLAutoDrawable gLDrawable) {
}
@Override
public void dispose(GLAutoDrawable gLDrawable) {
}
@Override
public void display(GLAutoDrawable gLDrawable) {
FPSAnimator animator = (FPSAnimator) gLDrawable.getAnimator();
System.out.println("animator.getLastFPS(): "
+ animator.getLastFPS());
}
});
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(glCanvas, BorderLayout.CENTER);
animator = new FPSAnimator(glCanvas, 30, false);
frame.setSize(frame.getContentPane().getPreferredSize());
frame.setVisible(true);
animator.setUpdateFPSFrames(10, null);
animator.start();
}