Java 如何在processing 2.x中启用VSync同步?

Java 如何在processing 2.x中启用VSync同步?,java,opengl,processing,Java,Opengl,Processing,之前,在processing 1.x中,我使用了以下代码来启用VSync同步: void enableVSync() { frameRate(-1); GL pgl = (PGraphicsOpenGL)g; gl = pgl.beginGL(); gl.setSwapInterval(1); pgl.endGL(); } 这在处理2.x时不起作用,我似乎无法找到它在处理2.x时是如何起作用的,甚至是它是否应该起作用 编辑: 通过从大小(500500)切

之前,在processing 1.x中,我使用了以下代码来启用VSync同步:

void enableVSync()
{
    frameRate(-1);
    GL pgl = (PGraphicsOpenGL)g;
    gl = pgl.beginGL();
    gl.setSwapInterval(1);
    pgl.endGL();
}
这在处理2.x时不起作用,我似乎无法找到它在处理2.x时是如何起作用的,甚至是它是否应该起作用

编辑:

通过从
大小(500500)切换到<代码>大小(500500,P2D),似乎有帮助。现在看来,processing在后台缓冲区中处理所有图形,并在VSync中将其切换到前台缓冲区

然而,
draw()
函数与vsync仍然是异步的,即使我再也看不到任何撕裂,当一帧被跳过或绘制两次时,仍然会有运动口吃。

结果是,
PJOGL
中的
frameRate()
实际上运行的是
setwapinterval()
但是关于值集()有一些奇怪的逻辑。这方面的解决办法是:

void setup()
{
    setup(500, 500, P2D);
    frameRate(-1);                                      // set unlimited frame rate
    ((PJOGL)PGraphicsOpenGL.pgl).gl.setSwapInterval(1); // enable waiting for vsync
                                                        // before swapping back/front buffers
}
编辑:

对于处理3,我使用以下方法:

import java.awt.*;
import javax.media.opengl.glu.GLU;

void setup()
{
    frameRate(-1);
    beginPGL();
    GLU.getCurrentGL().getGL2().setSwapInterval(1);
    endPGL();
}
编辑2:

对于处理3.2,以下内容似乎有效:

void setup()
{
  fullScreen(P3D);
  frameRate(1000);
  PJOGL pgl = (PJOGL)beginPGL();
  pgl.gl.setSwapInterval(1);
  endPGL();
}

在processing 3.0.2中,我遇到了以下错误:“无法对非静态字段PGraphicsOpenGL.pgl进行静态引用”。我添加了一个关于processing/PJOGL最新版本的编辑