我有下面的代码(移植到 JOGL 2.0 的 Nehe 教程 1 的基本版本),它请求一个 FPSAnimator 动画 30 FPS。当我运行代码时,它会打印 21.321962 或 21.413277 FPS。如您所见,在创建 FPSAnimator 时,我指定需要每秒 30 帧。这是在配备 Core i7 CPU、24GB RAM 和 ATI Radeon HD 5700 系列显卡的现代机器上。21.3 FPS 似乎也不是限制。当我提高或降低请求的 FPS 时,报告的 FPS 确实会上升和下降(尽管它似乎不是线性关系)。
但是,有时当我在同一台机器上运行代码时,我会得到 30.30303 FPS。在这两种情况下,我只有几个 Web 浏览器选项卡,并且在机器上打开了 Eclipse。还值得注意的是,这不仅发生在这个简单的示例中,而且发生在我所有基于 JOGL 的应用程序中。我只是提供了这个简单的例子来演示这个问题。
我在几台机器上看到过这个问题。也许这只是我的想象,但它似乎不会发生在配备 NVidia GeForce 卡的机器上,但我已经看到它发生在配备 ATI 卡和 NVidia Quadro FX 卡的机器上。
什么可能导致这种差异?
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();
}