2013-12-12 47 views
2

此前,在處理1.x中,我用下面的代碼來啓用垂直同步同步:如何在處理2.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異步,即使我沒有看到任何撕裂,每當一幀被跳過或繪製兩次時,仍然存在運動口吃。

回答

2

原來,frameRate()PJOGL實際上運行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:

用於處理3.2,以下似乎工作:

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

在處理3.0.2中出現以下錯誤:「無法對非靜態字段PGraphicsOpenGL.pgl進行靜態引用」。 – Tarik

+0

我已經添加了關於更新版本的處理/ PJOGL的編輯 – anorm