java - 如何在处理2.x中启用VSync同步?

标签 java opengl processing

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

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

这在处理 2.x 中不起作用,我似乎无法找出它如何在处理 2.x 中工作,甚至不知道它是否应该在处理 2.x 中工作。

编辑:

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

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

最佳答案

结果,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();
}

关于java - 如何在处理2.x中启用VSync同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20551224/

相关文章:

c++ - 在源代码中,调用函数时不使用 ()。文档给出了 1 个必需参数

javascript - 处理编程平均图像

java - 如何开始然后停止运动

java - 如果可以在构造函数中完成相同的操作,为什么还要使用 init-method 属性呢?

java - 我可以在旧 iText 版本中使用 BaseColor 类吗?

java - 拆分您使用扫描仪输入的字符串

c# - 如何从 3D 图像生成 2D 平面

java - 运行 Android 项目时发生错误 - 不支持的 major.minor 版本

c++ - 如何确定更新图形驱动程序后缺少 OpenGL 入口点的原因

java - 处理:当从 Eclipse 设置内部调用时,createShape 返回 null