【问题标题】:How to enable VSync synchronization in processing 2.x?如何在处理 2.x 中启用 VSync 同步?
【发布时间】:2013-12-12 18:22:01
【问题描述】:

之前,在处理 1.x 时,我使用以下代码来启用 VSync 同步:

void enableVSync()
{
    frameRate(-1);
    GL pgl = (PGraphicsOpenGL)g;
    gl = pgl.beginGL();
    gl.setSwapInterval(1);
    pgl.endGL();
}

这在处理 2.x 中不起作用,我似乎无法找出它应该如何或什至在处理 2.x 中起作用。

编辑:

通过从size(500, 500); 切换到size(500, 500, P2D);,它似乎有所帮助。现在看起来,处理过程在后台缓冲区中完成所有绘图,并在 VSync 处将其切换到前台缓冲区。

但是,draw() 函数仍然与 vsync 异步,即使我不再看到任何撕裂,但只要一帧被跳过或绘制两次,仍然会出现运动卡顿。

【问题讨论】:

    标签: java opengl processing


    【解决方案1】:

    事实证明,PJOGL 中的 frameRate() 实际上运行 setSwapInterval(),尽管对于值集 (github) 有一些奇怪的逻辑。解决方法是:

    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:

    对于 Processing 3.2,以下似乎可行:

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

    【讨论】:

    • 在处理 3.0.2 时出现以下错误:“无法对非静态字段 PGraphicsOpenGL.pgl 进行静态引用”。
    • 我添加了关于处理/PJOGL 的最新版本的编辑
    猜你喜欢
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多