2014-04-08 27 views
1

我使用的处理,一个伟大的Java方言与图形工作放缓。 如果我让多个草图(看到该项目的多重副本能够在同一时间运行它们)用下面的代码并运行它:OpenGL中对利用3帧

void setup() { 
    size(600, 400, OPENGL); 
    smooth(); 
} 

void draw() { 
    background(0, 255, 0); 

    pushMatrix(); 
    translate(width/2, height/2); 
    rotateX(radians(45)); 
    rotateY(radians(45)); 
    rotateZ(radians(45)); 

    box(100); 

    popMatrix(); 

    fill(255, 0, 0); 
    text(frameRate, 20, 40); 
} 

然后我的帧率保持近60每草图。 multiple sketches, framerate stays high

我需要的是多窗口从一个草图开始。 我这样做如下:

import processing.core.*; 

public class MyProcessingSketch extends PApplet { 



    public static void main(String args[]) { 

     PApplet.main(new String[] { "MyProcessingSketch", "0" }); 
     PApplet.main(new String[] { "MyProcessingSketch", "1" }); 
     PApplet.main(new String[] { "MyProcessingSketch", "2" }); 
    } 


    public void setup() { 

     size(800,600, OPENGL); 
    } 

    public void draw() { 
     background(0, 255, 0); 

     pushMatrix(); 
     translate(width/2, height/2); 
     rotateX(radians(45)); 
     rotateY(radians(45)); 
     rotateZ(radians(45)); 

     box(100); 

     popMatrix(); 

     fill(255, 0, 0); 
     text(frameRate, 20, 40); 
    } 
} 

但是现在我的帧率是变得非常低: sloooow

有没有人有什么原因造成这个的想法。 我尝试将线程优先级设置为最大值,但没有帮助。

下面是一些信息,这可能有助于: 至于其他,问,如果你需要知道的东西,我会考虑它。

每个PApplet.main()实例化一个新PApplet并将其存储在本地变量的小程序: https://github.com/processing/processing/blob/master/core/src/processing/core/PApplet.java#L10628

还实例化一个新的JFrame @#L10614:

Frame frame = new JFrame(displayDevice.getDefaultConfiguration()); 

而且将其分配给字段框@#L10684 - > applet.frame = frame;

方法Init()被调用@#L10757 - > applet.init();

在它的结束@#L965,创建一个新的线程&开始:

thread = new Thread(this, "Animation Thread"); 
thread.start(); 

从这一刻起,它是一个活的&自我维持PApplet对象。


编辑:

我奔弗莱,2个创始人加工之一的答案。

这不是一个错误......它超出了我们支持 处理的范围。多线程,多窗口OpenGL是一个非常复杂的 的事业,您应该直接使用OpenGL来工作 类似的东西,控制缓冲交换等

这将是很好,如果有人可以描述详细说明究竟要做什么。

+0

这可能是由于在GPU驱动程序中启用了“Wait for VBlank”,并且在程序中对SwapBuffers进行了一些不幸处理(可能是由内部处理本身,但我对此不太了解)。这可能会导致它将等待每个窗口的VBlank,将帧速率限制为2个窗口的显示器刷新速率的一半,并且将三个帧等待3个等等。 – derhass

+0

感谢您的回答,我确定他们有朝一日会查看它:) – clankill3r

回答