在2线程应用程序上共享图像

时间:2014-04-17 16:27:51

标签: java

我正在使用处理工具,一个面向图形用户的图书馆。 www.processing.org。 在处理中制作2个窗口并不常见。 我做到了,当我在两个帧上使用1个图像时,1个绘制真的很慢。 但是frameRate仍然很快(你可以看到仍然快速的蓝色椭圆)。

我制作了一个视频来展示:

https://www.youtube.com/watch?v=XDf-Rzo4RhU&feature=youtu.be

有人可以解释导致这种情况的原因以及如何摆脱它吗?

import processing.core.*;

public class MyProcessingSketch  extends PApplet  {

    int id;

    Data d;

    public static void main(String args[]) {

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

    }

    public void init() {
        super.init();

        id = parseInt(args[args.length - 1]);
        PApplet.println("init:"+id);

        d = Data.getInstance();

        delay(1000);


    }


    public void setup() {

        size(800, 600);
        if (id == 0) {
            d.createGraphics(this);
        }
        smooth();
    }

    public void draw() {


        background(0, 255, 0);

        if (id == 0) {
            d.createGraphics(this);
            image(d.pg, 0, 0);
        }

        else {

            image(d.pg, 0, 0);
            fill(0, 0, 200, 50);
            for(int i = 0; i < 100; i++) {

                ellipse(random(width), random(height), random(10, 50), random(10, 50));
            }

        }

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

    }
}

Daja.java

import processing.core.PApplet;
import processing.core.PGraphics;

public enum Data {

    INSTANCE;

    PGraphics pg;

    public static Data getInstance() {
        return INSTANCE;
    }


    void createGraphics(PApplet p) {
        if (pg == null) {

            pg = p.createGraphics(p.width, p.height);
            pg.smooth();
        }

        pg.beginDraw();
        pg.background(255, 0, 0);
        pg.line(0, 0, p.width, p.height);
        for(int i = 0; i < 100; i++) {
            pg.ellipse(p.random(p.width), p.random(p.height), p.random(10, 50), p.random(10, 50));
        }
        pg.endDraw();


    }


}

0 个答案:

没有答案