Java 如何在processing 2.x中启用VSync同步?
之前,在processing 1.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)切
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最新版本的编辑